use Friendica\Protocol\Diaspora;
use Friendica\Protocol\Email;
use Friendica\Protocol\Activity;
-use Friendica\Util\Strings;
use Friendica\Util\Network;
use Friendica\Core\Worker;
-use Friendica\Model\Conversation;
use Friendica\Model\FContact;
use Friendica\Model\Item;
-use Friendica\Model\Post;
use Friendica\Protocol\Relay;
class Delivery
// Also transmit via Diaspora if this is a direct answer to a Diaspora comment.
// This is done since the uri wouldn't match (Diaspora doesn't transmit it)
// Also transmit relayed posts from Diaspora contacts via Diaspora.
- if (!empty($parent) && !empty($thr_parent) && in_array(Protocol::DIASPORA, [$parent['network'], $thr_parent['network'], $target_item['network']])) {
+ if (($contact['network'] != Protocol::DIASPORA) && in_array(Protocol::DIASPORA, [$parent['network'] ?? '', $thr_parent['network'] ?? '', $target_item['network']])) {
+ Logger::info('Enforcing the Diaspora protocol', ['id' => $contact['id'], 'network' => $contact['network'], 'parent' => $parent['network'], 'thread-parent' => $thr_parent['network'], 'post' => $target_item['network']]);
$contact['network'] = Protocol::DIASPORA;
}
- // Ensure that local contacts are delivered locally
- if (Model\Contact::isLocal($contact['url'])) {
- $contact['network'] = Protocol::DFRN;
- }
-
Logger::notice('Delivering', ['cmd' => $cmd, 'uri-id' => $post_uriid, 'followup' => $followup, 'network' => $contact['network']]);
switch ($contact['network']) {
Logger::debug('Notifier entry: ' . $contact["url"] . ' ' . (($target_item['guid'] ?? '') ?: $target_item['id']) . ' entry: ' . $atom);
- // perform local delivery if we are on the same site
- if (Model\Contact::isLocal($contact['url'])) {
- $condition = ['nurl' => Strings::normaliseLink($contact['url']), 'self' => true];
- $target_self = DBA::selectFirst('contact', ['uid'], $condition);
- if (!DBA::isResult($target_self)) {
- return;
- }
- $target_uid = $target_self['uid'];
-
- // Check if the user has got this contact
- $cid = Model\Contact::getIdForURL($owner['url'], $target_uid);
- if (!$cid) {
- // Otherwise there should be a public contact
- $cid = Model\Contact::getIdForURL($owner['url']);
- if (!$cid) {
- return;
- }
- }
-
- $target_importer = DFRN::getImporter($cid, $target_uid);
- if (empty($target_importer)) {
- // This should never happen
- return;
- }
-
- DFRN::import($atom, $target_importer, Conversation::PARCEL_LOCAL_DFRN, Conversation::PUSH);
-
- if (in_array($cmd, [Delivery::POST, Delivery::POKE])) {
- Model\Post\DeliveryData::incrementQueueDone($target_item['uri-id'], Model\Post\DeliveryData::DFRN);
- }
-
- return;
- }
-
$protocol = Model\Post\DeliveryData::DFRN;
// We don't have a relationship with contacts on a public post.
self::deliverDiaspora($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup);
return;
}
- } elseif ($cmd != self::RELOCATION) {
+ } else {
// DFRN payload over Diaspora transport layer
$deliver_status = DFRN::transmit($owner, $contact, $atom);
- if (($deliver_status < 200) && (empty($server_protocol) || ($server_protocol == Model\Post\DeliveryData::LEGACY_DFRN))) {
- // Legacy DFRN
- $deliver_status = DFRN::deliver($owner, $contact, $atom);
- $protocol = Model\Post\DeliveryData::LEGACY_DFRN;
- }
- } else {
- $deliver_status = DFRN::deliver($owner, $contact, $atom);
- $protocol = Model\Post\DeliveryData::LEGACY_DFRN;
}
Logger::info('DFRN Delivery', ['cmd' => $cmd, 'url' => $contact['url'], 'guid' => ($target_item['guid'] ?? '') ?: $target_item['id'], 'return' => $deliver_status]);
Logger::notice('Deliver via Diaspora', ['target' => $target_item['id'], 'guid' => $target_item['guid'], 'to' => $loc]);
- if (DI::config()->get('system', 'dfrn_only') || !DI::config()->get('system', 'diaspora_enabled')) {
+ if (!DI::config()->get('system', 'diaspora_enabled')) {
return;
}
*/
private static function deliverMail($cmd, $contact, $owner, $target_item, $thr_parent)
{
- if (DI::config()->get('system','dfrn_only')) {
+ if (DI::config()->get('system','imap_disabled')) {
return;
}