Merge pull request #7414 from annando/fetch-diaspora

Fetch Diaspora posts by url
This commit is contained in:
Hypolite Petovan 2019-07-22 07:01:42 -04:00 committed by GitHub
commit 1d8b809227
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 9 deletions

View file

@ -20,6 +20,7 @@ use Friendica\Core\Renderer;
use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\Protocol\ActivityPub;
use Friendica\Protocol\Diaspora;
use Friendica\Protocol\OStatus;
use Friendica\Util\DateTimeFormat;
@ -29,7 +30,6 @@ use Friendica\Util\Security;
use Friendica\Util\Strings;
use Friendica\Util\XML;
use Friendica\Worker\Delivery;
use Friendica\Protocol\ActivityPub;
use Text_LanguageDetect;
class Item extends BaseObject
@ -3628,11 +3628,12 @@ class Item extends BaseObject
return $item_id;
}
ActivityPub\Processor::fetchMissingActivity($uri);
if (ActivityPub\Processor::fetchMissingActivity($uri)) {
$item_id = self::searchByLink($uri, $uid);
} else {
$item_id = Diaspora::fetchByURL($uri);
}
/// @todo add Diaspora as well
$item_id = self::searchByLink($uri, $uid);
if (!empty($item_id)) {
return $item_id;
}

View file

@ -534,8 +534,9 @@ class Processor
/**
* Fetches missing posts
*
* @param $url
* @param $child
* @param string $url message URL
* @param array $child activity array with the child of this message
* @return boolean success
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function fetchMissingActivity($url, $child = [])
@ -549,12 +550,12 @@ class Processor
$object = ActivityPub::fetchContent($url, $uid);
if (empty($object)) {
Logger::log('Activity ' . $url . ' was not fetchable, aborting.');
return;
return false;
}
if (empty($object['id'])) {
Logger::log('Activity ' . $url . ' has got not id, aborting. ' . json_encode($object));
return;
return false;
}
if (!empty($child['author'])) {
@ -593,6 +594,8 @@ class Processor
ActivityPub\Receiver::processActivity($ldactivity);
Logger::log('Activity ' . $url . ' had been fetched and processed.');
return true;
}
/**

View file

@ -1414,6 +1414,39 @@ class Diaspora
return $msg;
}
/**
* @brief Fetches an item with a given URL
*
* @param string $url the message url
*
* @return int the message id of the stored message or false
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function fetchByURL($url, $uid = 0)
{
// Check for Diaspora (and Friendica) typical paths
if (!preg_match("=(https?://.+)/(?:posts|display)/([a-zA-Z0-9-_@.:%]+[a-zA-Z0-9])=i", $url, $matches)) {
return false;
}
$guid = urldecode($matches[2]);
$item = Item::selectFirst(['id'], ['guid' => $guid, 'uid' => $uid]);
if (DBA::isResult($item)) {
return $item['id'];
}
self::storeByGuid($guid, $matches[1], $uid);
$item = Item::selectFirst(['id'], ['guid' => $guid, 'uid' => $uid]);
if (DBA::isResult($item)) {
return $item['id'];
} else {
return false;
}
}
/**
* @brief Fetches the item record of a given guid
*