Merge pull request #1549 from annando/1505-diaspora-fetch-missing
Fetch missing Diaspora posts
This commit is contained in:
commit
a138d5d8c0
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue