require_once('include/queue_fn.php');
require_once('include/html2plain.php');
require_once("include/Scrape.php");
+require_once('include/diaspora.php');
/*
* This file was at one time responsible for doing all deliveries, but this caused
$parent = $items[0];
+ $thr_parent = q("SELECT `network` FROM `item` WHERE `uri` = '%s' AND `uid` = %d",
+ dbesc($target_item["thr-parent"]), intval($target_item["uid"]));
+
+ logger('Parent is '.$parent['network'].'. Thread parent is '.$thr_parent[0]['network'], LOGGER_DEBUG);
+
// This is IMPORTANT!!!!
// We will only send a "notify owner to relay" or followup message if the referenced post
$relay_to_owner = false;
if($relay_to_owner) {
- logger('notifier: followup', LOGGER_DEBUG);
+ logger('notifier: followup '.$target_item["guid"], LOGGER_DEBUG);
// local followup to remote post
$followup = true;
$public_message = false; // not public
$target_item['deny_cid'].$target_item['deny_gid']) == 0))
$push_notify = true;
- if ($parent['network'] == NETWORK_OSTATUS) {
- logger('Parent is OStatus', LOGGER_DEBUG);
+ // We notify Friendica users in the thread when it is an OStatus thread.
+ // Hopefully this transfers the messages to the other Friendica servers. (Untested)
+ if (($thr_parent AND ($thr_parent[0]['network'] == NETWORK_OSTATUS)) OR ($parent['network'] == NETWORK_OSTATUS)) {
$push_notify = true;
- // Send a salmon notification to every person we mentioned in the post
- // To-Do: Send a Salmon to every Friendica user in that thread
- $arr = explode(',',$target_item['tag']);
- foreach($arr as $x) {
- logger('Checking tag '.$x, LOGGER_DEBUG);
- $matches = null;
- if(preg_match('/@\[url=([^\]]*)\]/',$x,$matches)) {
- $probed_contact = probe_url($matches[1]);
- if ($probed_contact["notify"] != "") {
- logger('scrape data for slapper: '.print_r($probed_contact, true));
+ if ($parent["network"] == NETWORK_OSTATUS) {
+ $r = q("SELECT `author-link` FROM `item` WHERE `parent` = %d AND `author-link` != '%s'",
+ intval($target_item["parent"]), dbesc($owner['url']));
+ foreach($r as $parent_item) {
+ $probed_contact = probe_url($parent_item["author-link"]);
+ if (($probed_contact["notify"] != "") AND ($probed_contact["network"] == NETWORK_DFRN)) {
+ logger('Notify Friendica user '.$probed_contact["url"].': '.$probed_contact["notify"]);
$url_recipients[$probed_contact["notify"]] = $probed_contact["notify"];
}
}
}
-/*
- // Check if the recipient isn't in your contact list, try to slap it
- // Not sure if it is working or not.
- $r = q("SELECT `url` FROM `contact` WHERE `id` = %d", $parent['contact-id']);
- if (count($r)) {
-
- $thrparent = q("SELECT `author-link` FROM `item` WHERE `uri` = '%s'", dbesc($target_item["thr-parent"]));
- if (count($thrparent) AND (normalise_link($r[0]["url"]) != normalise_link($thrparent[0]["author-link"]))) {
- $probed_contact = probe_url($thrparent[0]["author-link"]);
- if ($probed_contact["notify"] != "") {
- logger('scrape data for slapper: '.print_r($probed_contact, true));
- $url_recipients[$probed_contact["notify"]] = $probed_contact["notify"];
- }
- }
- }
-*/
if (count($url_recipients))
logger("url_recipients ".print_r($url_recipients,true));
}
} else {
$followup = false;
+ logger('Distributing directly '.$target_item["guid"], LOGGER_DEBUG);
+
// don't send deletions onward for other people's stuff
if($target_item['deleted'] && (! intval($target_item['wall']))) {
}
if (count($url_recipients))
- logger('notifier: url_recipients ' . print_r($url_recipients,true));
+ logger('notifier: '.$target_item["guid"].' url_recipients ' . print_r($url_recipients,true));
$conversants = array_unique($conversants);
$conversant_str = dbesc(implode(', ',$conversants));
}
- $r = q("SELECT * FROM `contact` WHERE `id` IN ( $conversant_str ) AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0");
+ // If the thread parent is OStatus then do some magic to distribute the messages.
+ // We have not only to look at the parent, since it could be a Friendica thread.
+ if (($thr_parent AND ($thr_parent[0]['network'] == NETWORK_OSTATUS)) OR ($parent['network'] == NETWORK_OSTATUS)) {
+
+ logger('Some parent is OStatus for '.$target_item["guid"], LOGGER_DEBUG);
+
+ // Send a salmon notification to every person we mentioned in the post
+ $arr = explode(',',$target_item['tag']);
+ foreach($arr as $x) {
+ //logger('Checking tag '.$x, LOGGER_DEBUG);
+ $matches = null;
+ if(preg_match('/@\[url=([^\]]*)\]/',$x,$matches)) {
+ $probed_contact = probe_url($matches[1]);
+ if ($probed_contact["notify"] != "") {
+ logger('Notify mentioned user '.$probed_contact["url"].': '.$probed_contact["notify"]);
+ $url_recipients[$probed_contact["notify"]] = $probed_contact["notify"];
+ }
+ }
+ }
+
+ // It only makes sense to distribute answers to OStatus messages to Friendica and OStatus - but not Diaspora
+ $sql_extra = " AND `network` IN ('".NETWORK_OSTATUS."', '".NETWORK_DFRN."')";
+ } else
+ $sql_extra = "";
+
+ $r = q("SELECT * FROM `contact` WHERE `id` IN ($conversant_str) AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0".$sql_extra);
if(count($r))
$contacts = $r;
$recipients_relocate = q("SELECT * FROM contact WHERE uid = %d AND self = 0 AND network = '%s'" , intval($uid), NETWORK_DFRN);
unset($photos);
} else {
+
+ $slap = atom_entry($target_item,'html',null,$owner,false);
+
if($followup) {
foreach($items as $item) { // there is only one item
if(! $item['parent'])
continue;
if($item['id'] == $item_id) {
logger('notifier: followup: item: ' . print_r($item,true), LOGGER_DATA);
- $slap = atom_entry($item,'html',null,$owner,false);
+ //$slap = atom_entry($item,'html',null,$owner,false);
$atom .= atom_entry($item,'text',null,$owner,false);
}
}
$interval = ((get_config('system','delivery_interval') === false) ? 2 : intval(get_config('system','delivery_interval')));
+ // If we are using the worker we don't need a delivery interval
+ if (get_config("system", "worker"))
+ $interval = false;
+
// delivery loop
if(count($r)) {
// This controls the number of deliveries to execute with each separate delivery process.
// By default we'll perform one delivery per process. Assuming a hostile shared hosting
- // provider, this provides the greatest chance of deliveries if processes start getting
+ // provider, this provides the greatest chance of deliveries if processes start getting
// killed. We can also space them out with the delivery_interval to also help avoid them
// getting whacked.
// together into a single process. This will reduce the overall number of processes
// spawned for each delivery, but they will run longer.
+ // When using the workerqueue, we don't need this functionality.
+
$deliveries_per_process = intval(get_config('system','delivery_batch_count'));
- if($deliveries_per_process <= 0)
+ if (($deliveries_per_process <= 0) OR get_config("system", "worker"))
$deliveries_per_process = 1;
$this_batch = array();
if($contact['self'])
continue;
- logger("Deliver to ".$contact['url'], LOGGER_DEBUG);
+ logger("Deliver ".$target_item["guid"]." to ".$contact['url'], LOGGER_DEBUG);
// potentially more than one recipient. Start a new process and space them out a bit.
// we will deliver single recipient types of message and email recipients here.
}
break;
case NETWORK_DIASPORA:
- require_once('include/diaspora.php');
-
if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')))
break;
if(! $contact['pubkey'])
break;
- if($target_item['verb'] === ACTIVITY_DISLIKE) {
- // unsupported
- break;
+ $unsupported_activities = array(ACTIVITY_DISLIKE, ACTIVITY_ATTEND, ACTIVITY_ATTENDNO, ACTIVITY_ATTENDMAYBE);
+
+ //don't transmit activities which are not supported by diaspora
+ foreach($unsupported_activities as $act) {
+ if(activity_match($target_item['verb'],$act)) {
+ break 2;
+ }
}
- elseif(($target_item['deleted']) && (($target_item['uri'] === $target_item['parent-uri']) || $followup)) {
+
+ if(($target_item['deleted']) && (($target_item['uri'] === $target_item['parent-uri']) || $followup)) {
// send both top-level retractions and relayable retractions for owner to relay
diaspora_send_retraction($target_item,$owner,$contact);
break;
// send additional slaps to mentioned remote tags (@foo@example.com)
- if($slap && count($url_recipients) && ($followup || $top_level) && ($public_message || $push_notify) && (! $expire)) {
+ //if($slap && count($url_recipients) && ($followup || $top_level) && ($public_message || $push_notify) && (! $expire)) {
+ if($slap && count($url_recipients) && ($public_message || $push_notify) && (!$expire)) {
if(! get_config('system','dfrn_only')) {
foreach($url_recipients as $url) {
if($url) {
if($public_message) {
+ if (!$followup)
+ $r0 = diaspora_fetch_relay();
+ else
+ $r0 = array();
+
$r1 = q("SELECT DISTINCT(`batch`), `id`, `name`,`network` FROM `contact` WHERE `network` = '%s'
AND `uid` = %d AND `rel` != %d group by `batch` ORDER BY rand() ",
dbesc(NETWORK_DIASPORA),
intval(CONTACT_IS_SHARING)
);
- $r = array_merge($r2,$r1);
+ $r = array_merge($r2,$r1,$r0);
if(count($r)) {
logger('pubdeliver: ' . print_r($r,true), LOGGER_DEBUG);