Merge pull request #1549 from annando/1505-diaspora-fetch-missing

Fetch missing Diaspora posts
This commit is contained in:
Tobias Diekershoff 2015-05-12 07:14:16 +02:00
commit a138d5d8c0
3 changed files with 88 additions and 29 deletions

View File

@ -330,7 +330,8 @@ function get_contact($url, $uid = 0) {
if (!$update_photo)
return($contactid);
}
} elseif ($uid != 0)
return 0;
if (!count($data))
$data = probe_url($url);

View File

@ -894,26 +894,25 @@ function DiasporaFetchGuid($item) {
function DiasporaFetchGuidSub($match, $item) {
$a = get_app();
$author = parse_url($item["author-link"]);
$authorserver = $author["scheme"]."://".$author["host"];
$owner = parse_url($item["owner-link"]);
$ownerserver = $owner["scheme"]."://".$owner["host"];
if (!diaspora_store_by_guid($match[1], $authorserver))
diaspora_store_by_guid($match[1], $ownerserver);
if (!diaspora_store_by_guid($match[1], $item["author-link"]))
diaspora_store_by_guid($match[1], $item["owner-link"]);
}
function diaspora_store_by_guid($guid, $server) {
function diaspora_store_by_guid($guid, $server, $uid = 0) {
require_once("include/Contact.php");
logger("fetching item ".$guid." from ".$server, LOGGER_DEBUG);
$serverparts = parse_url($server);
$server = $serverparts["scheme"]."://".$serverparts["host"];
logger("Trying to fetch item ".$guid." from ".$server, LOGGER_DEBUG);
$item = diaspora_fetch_message($guid, $server);
if (!$item)
return false;
logger("Successfully fetched item ".$guid." from ".$server, LOGGER_DEBUG);
$body = $item["body"];
$str_tags = $item["tag"];
$app = $item["app"];
@ -923,7 +922,8 @@ function diaspora_store_by_guid($guid, $server) {
$private = $item["private"];
$message_id = $author.':'.$guid;
$r = q("SELECT `id` FROM `item` WHERE `uid` = 0 AND `uri` = '%s' AND `guid` = '%s' LIMIT 1",
$r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `guid` = '%s' LIMIT 1",
intval($uid),
dbesc($message_id),
dbesc($guid)
);
@ -933,8 +933,8 @@ function diaspora_store_by_guid($guid, $server) {
$person = find_diaspora_person_by_handle($author);
$datarray = array();
$datarray['uid'] = 0;
$datarray['contact-id'] = get_contact($person['url'], 0);
$datarray['uid'] = $uid;
$datarray['contact-id'] = get_contact($person['url'], $uid);
$datarray['wall'] = 0;
$datarray['network'] = NETWORK_DIASPORA;
$datarray['guid'] = $guid;
@ -954,6 +954,9 @@ function diaspora_store_by_guid($guid, $server) {
$datarray['app'] = $app;
$datarray['visible'] = ((strlen($body)) ? 1 : 0);
if ($datarray['contact-id'] == 0)
return false;
DiasporaFetchGuid($datarray);
$message_id = item_store($datarray);
@ -1349,6 +1352,25 @@ function diaspora_comment($importer,$xml,$msg) {
intval($importer['uid']),
dbesc($parent_guid)
);
if(!count($r)) {
$result = diaspora_store_by_guid($parent_guid, $contact['url'], $importer['uid']);
if (!$result) {
$person = find_diaspora_person_by_handle($diaspora_handle);
$result = diaspora_store_by_guid($parent_guid, $person['url'], $importer['uid']);
}
if ($result) {
logger("Fetched missing item ".$parent_guid." - result: ".$result, LOGGER_DEBUG);
$r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
intval($importer['uid']),
dbesc($parent_guid)
);
}
}
if(! count($r)) {
logger('diaspora_comment: parent item not found: parent: ' . $parent_guid . ' item: ' . $guid);
return;
@ -1823,6 +1845,26 @@ function diaspora_photo($importer,$xml,$msg,$attempt=1) {
intval($importer['uid']),
dbesc($status_message_guid)
);
/* deactivated by now since it can lead to multiplicated pictures in posts.
if(!count($r)) {
$result = diaspora_store_by_guid($status_message_guid, $contact['url'], $importer['uid']);
if (!$result) {
$person = find_diaspora_person_by_handle($diaspora_handle);
$result = diaspora_store_by_guid($status_message_guid, $person['url'], $importer['uid']);
}
if ($result) {
logger("Fetched missing item ".$status_message_guid." - result: ".$result, LOGGER_DEBUG);
$r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
intval($importer['uid']),
dbesc($status_message_guid)
);
}
}
*/
if(!count($r)) {
if($attempt <= 3) {
q("INSERT INTO dsprphotoq (uid, msg, attempt) VALUES (%d, '%s', %d)",
@ -1832,19 +1874,6 @@ function diaspora_photo($importer,$xml,$msg,$attempt=1) {
);
}
$r = q("SELECT `id` FROM `item` WHERE `uid` = 0 AND `guid` = '%s' LIMIT 1", dbesc($status_message_guid));
if(!count($r)) {
// Fetching the missing item as a public shadow
// To-Do: Doing it for every post that is missing
$item = array();
$item["author-link"] = $contact['url'];
$item["owner-link"] = $contact['url'];
DiasporaFetchGuidSub($status_message_guid, $item);
logger("Storing missing item ".$status_message_guid." as public shadow", LOGGER_DEBUG);
}
logger('diaspora_photo: attempt = ' . $attempt . '; status message not found: ' . $status_message_guid . ' for photo: ' . $guid);
return;
}
@ -1903,6 +1932,25 @@ function diaspora_like($importer,$xml,$msg) {
intval($importer['uid']),
dbesc($parent_guid)
);
if(!count($r)) {
$result = diaspora_store_by_guid($parent_guid, $contact['url'], $importer['uid']);
if (!$result) {
$person = find_diaspora_person_by_handle($diaspora_handle);
$result = diaspora_store_by_guid($parent_guid, $person['url'], $importer['uid']);
}
if ($result) {
logger("Fetched missing item ".$parent_guid." - result: ".$result, LOGGER_DEBUG);
$r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
intval($importer['uid']),
dbesc($parent_guid)
);
}
}
if(! count($r)) {
logger('diaspora_like: parent item not found: ' . $guid);
return;
@ -2965,5 +3013,3 @@ function diaspora_transmit($owner,$contact,$slap,$public_batch,$queue_run=false)
return(($return_code) ? $return_code : (-1));
}

View File

@ -1237,6 +1237,18 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
logger("item_store: Set network to ".$arr["network"]." for ".$arr["uri"], LOGGER_DEBUG);
}
if ($arr['guid'] != "") {
// Checking if there is already an item with the same guid
logger('checking for an item for user '.$arr['uid'].' on network '.$arr['network'].' with the guid '.$arr['guid'], LOGGER_DEBUG);
$r = q("SELECT `guid` FROM `item` WHERE `guid` = '%s' AND `network` = '%s' AND `uid` = '%d' LIMIT 1",
dbesc($arr['guid']), dbesc($arr['network']), intval($arr['uid']));
if(count($r)) {
logger('found item with guid '.$arr['guid'].' for user '.$arr['uid'].' on network '.$arr['network'], LOGGER_DEBUG);
return 0;
}
}
// Check for hashtags in the body and repair or add hashtag links
item_body_set_hashtags($arr);