Improved check for duplicates. Improvements with reshared Diaspora items.
This commit is contained in:
parent
0c752a2190
commit
7e401ca199
2 changed files with 35 additions and 13 deletions
|
@ -785,12 +785,21 @@ function diaspora_is_redmatrix($url) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function diaspora_plink($addr, $guid) {
|
function diaspora_plink($addr, $guid) {
|
||||||
$r = q("SELECT `url`, `nick` FROM `fcontact` WHERE `addr`='%s' LIMIT 1", $addr);
|
$r = q("SELECT `url`, `nick`, `network` FROM `fcontact` WHERE `addr`='%s' LIMIT 1", $addr);
|
||||||
|
|
||||||
// Fallback
|
// Fallback
|
||||||
if (!$r)
|
if (!$r)
|
||||||
return 'https://'.substr($addr,strpos($addr,'@')+1).'/posts/'.$guid;
|
return 'https://'.substr($addr,strpos($addr,'@')+1).'/posts/'.$guid;
|
||||||
|
|
||||||
|
// Friendica contacts are often detected as Diaspora contacts in the "fcontact" table
|
||||||
|
// So we try another way as well.
|
||||||
|
$s = q("SELECT `network` FROM `gcontact` WHERE `nurl`='%s' LIMIT 1", dbesc(normalise_link($r[0]["url"])));
|
||||||
|
if ($s)
|
||||||
|
$r[0]["network"] = $s[0]["network"];
|
||||||
|
|
||||||
|
if ($r[0]["network"] == NETWORK_DFRN)
|
||||||
|
return(str_replace("/profile/".$r[0]["nick"]."/", "/display/".$guid, $r[0]["url"]."/"));
|
||||||
|
|
||||||
if (diaspora_is_redmatrix($r[0]["url"]))
|
if (diaspora_is_redmatrix($r[0]["url"]))
|
||||||
return $r[0]["url"]."/?f=&mid=".$guid;
|
return $r[0]["url"]."/?f=&mid=".$guid;
|
||||||
|
|
||||||
|
@ -1105,16 +1114,17 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
|
|
||||||
$orig_author = notags(unxmlify($xml->root_diaspora_id));
|
$orig_author = notags(unxmlify($xml->root_diaspora_id));
|
||||||
$orig_guid = notags(unxmlify($xml->root_guid));
|
$orig_guid = notags(unxmlify($xml->root_guid));
|
||||||
|
$orig_url = $a->get_baseurl()."/display/".$orig_guid;
|
||||||
|
|
||||||
$create_original_post = false;
|
$create_original_post = false;
|
||||||
|
|
||||||
// Do we already have this item?
|
// Do we already have this item?
|
||||||
$r = q("SELECT `body`, `tag`, `app`, `created`, `author-link`, `plink` FROM `item` WHERE `guid` = '%s' AND `visible` AND NOT `deleted` AND `body` != '' LIMIT 1",
|
$r = q("SELECT `body`, `tag`, `app`, `created`, `plink`, `object`, `object-type`, `uri` FROM `item` WHERE `guid` = '%s' AND `visible` AND NOT `deleted` AND `body` != '' LIMIT 1",
|
||||||
dbesc($orig_guid),
|
dbesc($orig_guid),
|
||||||
dbesc(NETWORK_DIASPORA)
|
dbesc(NETWORK_DIASPORA)
|
||||||
);
|
);
|
||||||
if(count($r)) {
|
if(count($r)) {
|
||||||
logger('reshared message '.$orig_guid." reshared by ".$guid.' already exists on system: '.$orig_url);
|
logger('reshared message '.$orig_guid." reshared by ".$guid.' already exists on system.');
|
||||||
|
|
||||||
// Maybe it is already a reshared item?
|
// Maybe it is already a reshared item?
|
||||||
// Then refetch the content, since there can be many side effects with reshared posts from other networks or reshares from reshares
|
// Then refetch the content, since there can be many side effects with reshared posts from other networks or reshares from reshares
|
||||||
|
@ -1126,9 +1136,9 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
$str_tags = $r[0]["tag"];
|
$str_tags = $r[0]["tag"];
|
||||||
$app = $r[0]["app"];
|
$app = $r[0]["app"];
|
||||||
$orig_created = $r[0]["created"];
|
$orig_created = $r[0]["created"];
|
||||||
$orig_author = $r[0]["author-link"];
|
$orig_plink = $r[0]["plink"];
|
||||||
|
$orig_uri = $r[0]["uri"];
|
||||||
$create_original_post = ($body != "");
|
$create_original_post = ($body != "");
|
||||||
$orig_url = $a->get_baseurl()."/display/".$orig_guid;
|
|
||||||
$object = $r[0]["object"];
|
$object = $r[0]["object"];
|
||||||
$objecttype = $r[0]["object-type"];
|
$objecttype = $r[0]["object-type"];
|
||||||
}
|
}
|
||||||
|
@ -1139,8 +1149,6 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
$str_tags = "";
|
$str_tags = "";
|
||||||
$app = "";
|
$app = "";
|
||||||
|
|
||||||
$orig_url = 'https://'.substr($orig_author,strpos($orig_author,'@')+1).'/posts/'.$orig_guid;
|
|
||||||
|
|
||||||
$server = 'https://'.substr($orig_author,strpos($orig_author,'@')+1);
|
$server = 'https://'.substr($orig_author,strpos($orig_author,'@')+1);
|
||||||
logger('1st try: reshared message '.$orig_guid." reshared by ".$guid.' will be fetched from original server: '.$server);
|
logger('1st try: reshared message '.$orig_guid." reshared by ".$guid.' will be fetched from original server: '.$server);
|
||||||
$item = diaspora_fetch_message($orig_guid, $server);
|
$item = diaspora_fetch_message($orig_guid, $server);
|
||||||
|
@ -1168,13 +1176,16 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
$orig_created = $item["created"];
|
$orig_created = $item["created"];
|
||||||
$orig_author = $item["author"];
|
$orig_author = $item["author"];
|
||||||
$orig_guid = $item["guid"];
|
$orig_guid = $item["guid"];
|
||||||
|
$orig_plink = diaspora_plink($orig_author, $orig_guid);
|
||||||
|
$orig_uri = $orig_author.':'.$orig_guid;
|
||||||
$create_original_post = ($body != "");
|
$create_original_post = ($body != "");
|
||||||
$orig_url = $a->get_baseurl()."/display/".$orig_guid;
|
|
||||||
$object = $item["object"];
|
$object = $item["object"];
|
||||||
$objecttype = $item["object-type"];
|
$objecttype = $item["object-type"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$plink = diaspora_plink($diaspora_handle, $guid);
|
||||||
|
|
||||||
$person = find_diaspora_person_by_handle($orig_author);
|
$person = find_diaspora_person_by_handle($orig_author);
|
||||||
|
|
||||||
$created = unxmlify($xml->created_at);
|
$created = unxmlify($xml->created_at);
|
||||||
|
@ -1182,8 +1193,6 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
|
|
||||||
$datarray = array();
|
$datarray = array();
|
||||||
|
|
||||||
$plink = diaspora_plink($diaspora_handle, $guid);
|
|
||||||
|
|
||||||
$datarray['uid'] = $importer['uid'];
|
$datarray['uid'] = $importer['uid'];
|
||||||
$datarray['contact-id'] = $contact['id'];
|
$datarray['contact-id'] = $contact['id'];
|
||||||
$datarray['wall'] = 0;
|
$datarray['wall'] = 0;
|
||||||
|
@ -1230,9 +1239,9 @@ function diaspora_reshare($importer,$xml,$msg) {
|
||||||
$datarray2['uid'] = 0;
|
$datarray2['uid'] = 0;
|
||||||
$datarray2['contact-id'] = get_contact($person['url'], 0);
|
$datarray2['contact-id'] = get_contact($person['url'], 0);
|
||||||
$datarray2['guid'] = $orig_guid;
|
$datarray2['guid'] = $orig_guid;
|
||||||
$datarray2['uri'] = $datarray2['parent-uri'] = $orig_author.':'.$orig_guid;
|
$datarray2['uri'] = $orig_uri;
|
||||||
$datarray2['changed'] = $datarray2['created'] = $datarray2['edited'] = $datarray2['commented'] = $datarray2['received'] = datetime_convert('UTC','UTC',$orig_created);
|
$datarray2['changed'] = $datarray2['created'] = $datarray2['edited'] = $datarray2['commented'] = $datarray2['received'] = datetime_convert('UTC','UTC',$orig_created);
|
||||||
$datarray2['plink'] = diaspora_plink($orig_author, $orig_guid);
|
$datarray2['plink'] = $orig_plink;
|
||||||
|
|
||||||
$datarray2['author-name'] = $person['name'];
|
$datarray2['author-name'] = $person['name'];
|
||||||
$datarray2['author-link'] = $person['url'];
|
$datarray2['author-link'] = $person['url'];
|
||||||
|
|
|
@ -1351,9 +1351,22 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
|
||||||
dbesc($arr['uri']),
|
dbesc($arr['uri']),
|
||||||
intval($arr['uid'])
|
intval($arr['uid'])
|
||||||
);
|
);
|
||||||
|
|
||||||
if($r && count($r)) {
|
if($r && count($r)) {
|
||||||
logger('item-store: duplicate item ignored. ' . print_r($arr,true));
|
logger('duplicated item with the same uri found. ' . print_r($arr,true));
|
||||||
return 0;
|
return 0;
|
||||||
|
} else {
|
||||||
|
// Check for an existing post with the same content. There seems to be a problem with OStatus.
|
||||||
|
$r = q("SELECT `id` FROM `item` WHERE `body` = '%s' AND `created` = '%s' AND `contact-id` = %d AND `uid` = %d LIMIT 1",
|
||||||
|
dbesc($arr['body']),
|
||||||
|
dbesc($arr['created']),
|
||||||
|
intval($arr['contact-id']),
|
||||||
|
intval($arr['uid'])
|
||||||
|
);
|
||||||
|
if($r && count($r)) {
|
||||||
|
logger('duplicated item with the same body found. ' . print_r($arr,true));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is this item available in the global items (with uid=0)?
|
// Is this item available in the global items (with uid=0)?
|
||||||
|
|
Loading…
Reference in a new issue