From 9d257df700dcea74566255494758f0548ccd2034 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sat, 9 May 2015 19:39:47 +0200 Subject: [PATCH] Fetch missing Diaspora posts --- include/Contact.php | 3 +- include/diaspora.php | 102 +++++++++++++++++++++++++++++++------------ 2 files changed, 76 insertions(+), 29 deletions(-) diff --git a/include/Contact.php b/include/Contact.php index 6339360256..103dbe9add 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -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); diff --git a/include/diaspora.php b/include/diaspora.php index 7c6a88064e..c8674e985d 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -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)); } - -