Avoid duplicates with feeds and "remote self"

This commit is contained in:
Michael 2017-04-08 08:12:14 +00:00
parent 07f93b9636
commit 8786bcdf0a
2 changed files with 13 additions and 6 deletions

View file

@ -200,7 +200,6 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) {
if ($item["plink"] == "") { if ($item["plink"] == "") {
$item["plink"] = $xpath->evaluate('rss:link/text()', $entry)->item(0)->nodeValue; $item["plink"] = $xpath->evaluate('rss:link/text()', $entry)->item(0)->nodeValue;
} }
$item["plink"] = original_url($item["plink"]);
$item["uri"] = $xpath->evaluate('atom:id/text()', $entry)->item(0)->nodeValue; $item["uri"] = $xpath->evaluate('atom:id/text()', $entry)->item(0)->nodeValue;
@ -210,12 +209,17 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) {
if ($item["uri"] == "") { if ($item["uri"] == "") {
$item["uri"] = $item["plink"]; $item["uri"] = $item["plink"];
} }
$orig_plink = $item["plink"];
$item["plink"] = original_url($item["plink"]);
$item["parent-uri"] = $item["uri"]; $item["parent-uri"] = $item["uri"];
if (!$simulate) { if (!$simulate) {
$r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s', '%s')", $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `network` IN ('%s', '%s')",
intval($importer["uid"]), dbesc($item["uri"]), dbesc(NETWORK_FEED), dbesc(NETWORK_DFRN)); intval($importer["uid"]), dbesc($item["uri"]), dbesc(NETWORK_FEED), dbesc(NETWORK_DFRN));
if ($r) { if (dbm::is_result($r)) {
logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$r[0]["id"], LOGGER_DEBUG); logger("Item with uri ".$item["uri"]." for user ".$importer["uid"]." already existed under id ".$r[0]["id"], LOGGER_DEBUG);
continue; continue;
} }
@ -340,6 +344,7 @@ function feed_import($xml,$importer,&$contact, &$hub, $simulate = false) {
// Distributed items should have a well formatted URI. // Distributed items should have a well formatted URI.
// Additionally we have to avoid conflicts with identical URI between imported feeds and these items. // Additionally we have to avoid conflicts with identical URI between imported feeds and these items.
if ($notify) { if ($notify) {
$item['guid'] = uri_to_guid($orig_plink, $a->get_hostname());
unset($item['uri']); unset($item['uri']);
unset($item['parent-uri']); unset($item['parent-uri']);
} }

View file

@ -407,12 +407,14 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
// We have to avoid duplicates. So we create the GUID in form of a hash of the plink or uri. // We have to avoid duplicates. So we create the GUID in form of a hash of the plink or uri.
// In difference to the call to "uri_to_guid" several lines below we add the hash of our own host. // In difference to the call to "uri_to_guid" several lines below we add the hash of our own host.
// This is done because our host is the original creator of the post. // This is done because our host is the original creator of the post.
if (!isset($arr['guid'])) {
if (isset($arr['plink'])) { if (isset($arr['plink'])) {
$arr['guid'] = uri_to_guid($arr['plink'], $a->get_hostname()); $arr['guid'] = uri_to_guid($arr['plink'], $a->get_hostname());
} elseif (isset($arr['uri'])) { } elseif (isset($arr['uri'])) {
$arr['guid'] = uri_to_guid($arr['uri'], $a->get_hostname()); $arr['guid'] = uri_to_guid($arr['uri'], $a->get_hostname());
} }
} }
}
// If a Diaspora signature structure was passed in, pull it out of the // If a Diaspora signature structure was passed in, pull it out of the
// item array and set it aside for later storage. // item array and set it aside for later storage.