Fetch Diaspora posts by url

This commit is contained in:
Michael 2019-07-21 07:37:50 +00:00
parent c6131c057b
commit 53ffe5a2e1
3 changed files with 48 additions and 9 deletions

View file

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

View file

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

View file

@ -1414,6 +1414,41 @@ class Diaspora
return $msg; 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)
{
if (!preg_match("=([http|https].*)/(.*)/(.*)=ism", $url, $matches)) {
return false;
}
// Check for Diaspora (and Friendica) typical path components
if (!in_array($matches[2], ['posts', 'display'])) {
return false;
}
$item = Item::selectFirst(['id'], ['guid' => $matches[3], 'uid' => $uid]);
if (DBA::isResult($item)) {
return $item['id'];
}
self::storeByGuid($matches[3], $matches[1], $uid);
$item = Item::selectFirst(['id'], ['guid' => $matches[3], 'uid' => $uid]);
if (DBA::isResult($item)) {
return $item['id'];
} else {
return false;
}
}
/** /**
* @brief Fetches the item record of a given guid * @brief Fetches the item record of a given guid
* *