]> git.mxchange.org Git - friendica.git/commitdiff
starting the big delivery shakeup
authorFriendika <info@friendika.com>
Thu, 22 Sep 2011 11:11:39 +0000 (04:11 -0700)
committerFriendika <info@friendika.com>
Thu, 22 Sep 2011 11:11:39 +0000 (04:11 -0700)
boot.php
database.sql
include/delivery.php
include/diaspora.php
include/items.php
include/notifier.php
include/poller.php
include/queue.php
update.php

index d068122eda9d4f8f0faf0e0aa01a40c6abdfe099..26b540118508ceff79edaec3d45165c60c2f002d 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -9,7 +9,7 @@ require_once("include/pgettext.php");
 
 define ( 'FRIENDIKA_VERSION',      '2.3.1111' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.21'    );
-define ( 'DB_UPDATE_VERSION',      1091      );
+define ( 'DB_UPDATE_VERSION',      1092      );
 
 define ( 'EOL',                    "<br />\r\n"     );
 define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
index cb73f732b8de756eaf0016e1208310e9a769780b..08d02d67e68f10eb1b6cbf6bd5964b1ac44773a2 100644 (file)
@@ -469,7 +469,8 @@ CREATE TABLE IF NOT EXISTS `queue` (
 `network` CHAR( 32 ) NOT NULL,
 `created` DATETIME NOT NULL ,
 `last` DATETIME NOT NULL ,
-`content` MEDIUMTEXT NOT NULL
+`content` MEDIUMTEXT NOT NULL,
+`batch` TINYINT( 1 ) NOT NULL DEFAULT '0'
 ) ENGINE = MyISAM DEFAULT CHARSET=utf8;
 
 CREATE TABLE IF NOT EXISTS `pconfig` (
@@ -534,6 +535,7 @@ CREATE TABLE IF NOT EXISTS `fcontact` (
 `request` CHAR( 255 ) NOT NULL,
 `nick` CHAR( 255 ) NOT NULL ,
 `addr` CHAR( 255 ) NOT NULL ,
+`batch` CHAR( 255) NOT NULL,
 `notify` CHAR( 255 ) NOT NULL ,
 `poll` CHAR( 255 ) NOT NULL ,
 `confirm` CHAR( 255 ) NOT NULL ,
index 18ef09a3121a8ee0f4d72bc2f686d07828e68a44..706c07b3b861fa2762e2d8604324b89a9e6b6808 100644 (file)
@@ -31,7 +31,7 @@ function delivery_run($argv, $argc){
 
        $a->set_baseurl(get_config('system','url'));
 
-       logger('delivery: invoked: ' . print_r($argv,true));
+       logger('delivery: invoked: ' . print_r($argv,true), LOGGER_DEBUG);
 
        $cmd        = $argv[1];
        $item_id    = intval($argv[2]);
@@ -145,6 +145,7 @@ function delivery_run($argv, $argc){
        $public_message = true;
 
        // fill this in with a single salmon slap if applicable
+
        $slap = '';
 
        require_once('include/group.php');
@@ -195,8 +196,6 @@ function delivery_run($argv, $argc){
                $public_message = false; // private recipients, not public
        }
 
-       $conversant_str = intval($contact_id);
-
        $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `blocked` = 0 AND `pending` = 0",
                intval($contact_id)
        );
@@ -204,62 +203,10 @@ function delivery_run($argv, $argc){
        if(count($r))
                $contact = $r[0];
        
-
-       $feed_template = get_markup_template('atom_feed.tpl');
-       $mail_template = get_markup_template('atom_mail.tpl');
-
-       $atom = '';
-       $slaps = array();
-
        $hubxml = feed_hublinks();
 
-       $birthday = feed_birthday($owner['uid'],$owner['timezone']);
-
-       if(strlen($birthday))
-               $birthday = '<dfrn:birthday>' . xmlify($birthday) . '</dfrn:birthday>';
-
-       $atom .= replace_macros($feed_template, array(
-                       '$version'      => xmlify(FRIENDIKA_VERSION),
-                       '$feed_id'      => xmlify($a->get_baseurl() . '/profile/' . $owner['nickname'] ),
-                       '$feed_title'   => xmlify($owner['name']),
-                       '$feed_updated' => xmlify(datetime_convert('UTC', 'UTC', $updated . '+00:00' , ATOM_TIME)) ,
-                       '$hub'          => $hubxml,
-                       '$salmon'       => '',  // private feed, we don't use salmon here
-                       '$name'         => xmlify($owner['name']),
-                       '$profile_page' => xmlify($owner['url']),
-                       '$photo'        => xmlify($owner['photo']),
-                       '$thumb'        => xmlify($owner['thumb']),
-                       '$picdate'      => xmlify(datetime_convert('UTC','UTC',$owner['avatar-date'] . '+00:00' , ATOM_TIME)) ,
-                       '$uridate'      => xmlify(datetime_convert('UTC','UTC',$owner['uri-date']    . '+00:00' , ATOM_TIME)) ,
-                       '$namdate'      => xmlify(datetime_convert('UTC','UTC',$owner['name-date']   . '+00:00' , ATOM_TIME)) ,
-                       '$birthday'     => $birthday
-       ));
-
-       foreach($items as $item) {
-               if(! $item['parent'])
-                       continue;
-
-               // private emails may be in included in public conversations. Filter them.
-               if(($public_message) && $item['private'])
-                       continue;
-
-               $item_contact = get_item_contact($item,$icontacts);
-               if(! $item_contact)
-                       continue;
-
-               $atom .= atom_entry($item,'text',$item_contact,$owner,true);
-
-               if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire)) 
-                       $slaps[] = atom_entry($item,'html',$item_contact,$owner,true);
-       }
-
-       $atom .= '</feed>' . "\r\n";
-
-       logger('notifier: ' . $atom, LOGGER_DATA);
-
        logger('notifier: slaps: ' . print_r($slaps,true), LOGGER_DATA);
 
-
        require_once('include/salmon.php');
 
        if($contact['self'])
@@ -271,6 +218,55 @@ function delivery_run($argv, $argc){
 
                case NETWORK_DFRN :
                        logger('notifier: dfrndelivery: ' . $contact['name']);
+
+                       $feed_template = get_markup_template('atom_feed.tpl');
+                       $mail_template = get_markup_template('atom_mail.tpl');
+
+                       $atom = '';
+
+
+                       $birthday = feed_birthday($owner['uid'],$owner['timezone']);
+
+                       if(strlen($birthday))
+                               $birthday = '<dfrn:birthday>' . xmlify($birthday) . '</dfrn:birthday>';
+
+                       $atom .= replace_macros($feed_template, array(
+                                       '$version'      => xmlify(FRIENDIKA_VERSION),
+                                       '$feed_id'      => xmlify($a->get_baseurl() . '/profile/' . $owner['nickname'] ),
+                                       '$feed_title'   => xmlify($owner['name']),
+                                       '$feed_updated' => xmlify(datetime_convert('UTC', 'UTC', $updated . '+00:00' , ATOM_TIME)) ,
+                                       '$hub'          => $hubxml,
+                                       '$salmon'       => '',  // private feed, we don't use salmon here
+                                       '$name'         => xmlify($owner['name']),
+                                       '$profile_page' => xmlify($owner['url']),
+                                       '$photo'        => xmlify($owner['photo']),
+                                       '$thumb'        => xmlify($owner['thumb']),
+                                       '$picdate'      => xmlify(datetime_convert('UTC','UTC',$owner['avatar-date'] . '+00:00' , ATOM_TIME)) ,
+                                       '$uridate'      => xmlify(datetime_convert('UTC','UTC',$owner['uri-date']    . '+00:00' , ATOM_TIME)) ,
+                                       '$namdate'      => xmlify(datetime_convert('UTC','UTC',$owner['name-date']   . '+00:00' , ATOM_TIME)) ,
+                                       '$birthday'     => $birthday
+                       ));
+
+                       foreach($items as $item) {
+                               if(! $item['parent'])
+                                       continue;
+
+                               // private emails may be in included in public conversations. Filter them.
+                               if(($public_message) && $item['private'])
+                                       continue;
+
+                               $item_contact = get_item_contact($item,$icontacts);
+                               if(! $item_contact)
+                                       continue;
+
+                               $atom .= atom_entry($item,'text',$item_contact,$owner,true);
+
+                       }
+
+                       $atom .= '</feed>' . "\r\n";
+
+                       logger('notifier: ' . $atom, LOGGER_DATA);
+
                        $deliver_status = dfrn_deliver($owner,$contact,$atom);
 
                        logger('notifier: dfrn_delivery returns ' . $deliver_status);
@@ -299,7 +295,25 @@ function delivery_run($argv, $argc){
                        // only send salmon if public - e.g. if it's ok to notify
                        // a public hub, it's ok to send a salmon
 
-                       if((count($slaps)) && ($public_message) && (! $expire)) {
+                       if(($public_message) && (! $expire)) {
+                               $slaps = array();
+
+                               foreach($items as $item) {
+                                       if(! $item['parent'])
+                                               continue;
+
+                                       // private emails may be in included in public conversations. Filter them.
+                                       if(($public_message) && $item['private'])
+                                               continue;
+
+                                       $item_contact = get_item_contact($item,$icontacts);
+                                       if(! $item_contact)
+                                               continue;
+
+                                       if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire)) 
+                                               $slaps[] = atom_entry($item,'html',$item_contact,$owner,true);
+                               }
+
                                logger('notifier: slapdelivery: ' . $contact['name']);
                                foreach($slaps as $slappy) {
                                        if($contact['notify']) {
@@ -393,12 +407,17 @@ function delivery_run($argv, $argc){
                        break;
 
                case NETWORK_DIASPORA :
-                       logger('delivery: diaspora deliver: ' . $contact['name']);
+                       if($public_message)
+                               $loc = 'public batch ' . $contact['batch'];
+                       else 
+                               $loc = $contact['name'];
+
+                       logger('delivery: diaspora batch deliver: ' . $loc);
 
                        if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode))
                                break;
 
-                       if(! $contact['pubkey'])
+                       if((! $contact['pubkey']) && (! $public_message))
                                break;
                                        
                        if($target_item['verb'] === ACTIVITY_DISLIKE) {
@@ -406,23 +425,23 @@ function delivery_run($argv, $argc){
                                break;
                        }
                        elseif(($target_item['deleted']) && ($target_item['verb'] !== ACTIVITY_LIKE)) {
-                       logger('delivery: diaspora retract: ' . $contact['name']);
+                       logger('delivery: diaspora retract: ' . $loc);
                                // diaspora delete, 
-                               diaspora_send_retraction($target_item,$owner,$contact);
+                               diaspora_send_retraction($target_item,$owner,$contact,$public_message);
                                break;
                        }
                        elseif($target_item['parent'] != $target_item['id']) {
 
-                       logger('delivery: diaspora relay: ' . $contact['name']);
+                       logger('delivery: diaspora relay: ' . $loc);
 
                                // we are the relay - send comments, likes and unlikes to our conversants
-                               diaspora_send_relay($target_item,$owner,$contact);
+                               diaspora_send_relay($target_item,$owner,$contact,$public_message);
                                break;
                        }               
                        elseif(($top_level) && (! $walltowall)) {
                                // currently no workable solution for sending walltowall
-                               logger('delivery: diaspora status: ' . $contact['name']);
-                               diaspora_send_status($target_item,$owner,$contact);
+                               logger('delivery: diaspora status: ' . $loc);
+                               diaspora_send_status($target_item,$owner,$contact,$public_message);
                                break;
                        }
 
index 94c4e3098816b6ace99088c4f8dcff566643b4a0..80fbff8d61bffa64259d8edc26d9e6586588df96 100644 (file)
@@ -108,8 +108,10 @@ function diaspora_pubmsg_build($msg,$user,$contact,$prvkey,$pubkey) {
        
        $handle = $user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
 
-       $b64_data = base64_encode($msg);
-       $b64url_data = base64url_encode($b64_data);
+//     $b64_data = base64_encode($msg);
+//     $b64url_data = base64url_encode($b64_data);
+
+       $b64url_data = base64url_encode($msg);
 
        $data = str_replace(array("\n","\r"," ","\t"),array('','','',''),$b64url_data);
 
@@ -125,7 +127,7 @@ function diaspora_pubmsg_build($msg,$user,$contact,$prvkey,$pubkey) {
 
 $magic_env = <<< EOT
 <?xml version='1.0' encoding='UTF-8'?>
-<diaspora xmlns="https://joindiaspora.org/protocol" xmlns:me="http://salmon-protocol.org/ns/magic-env" >
+<diaspora xmlns="https://joindiaspora.com/protocol" xmlns:me="http://salmon-protocol.org/ns/magic-env" >
   <header>
     <author_id>$handle</author_id>
   </header>
@@ -146,9 +148,12 @@ EOT;
 
 
 
-function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey) {
+function diaspora_msg_build($msg,$user,$contact,$prvkey,$pubkey,$public = false) {
        $a = get_app();
 
+       if($public)
+               return diaspora_pubmsg_build($msg,$user,$contact,$prvkey,$pubkey);
+
        logger('diaspora_msg_build: ' . $msg, LOGGER_DATA);
 
        $inner_aes_key = random_string(32);
@@ -211,7 +216,7 @@ EOT;
 
 $magic_env = <<< EOT
 <?xml version='1.0' encoding='UTF-8'?>
-<diaspora xmlns="https://joindiaspora.org/protocol" xmlns:me="http://salmon-protocol.org/ns/magic-env" >
+<diaspora xmlns="https://joindiaspora.com/protocol" xmlns:me="http://salmon-protocol.org/ns/magic-env" >
   $encrypted_header
   <me:env>
     <me:encoding>base64url</me:encoding>
@@ -289,7 +294,7 @@ function diaspora_decode($importer,$xml) {
 
 ***** CURRENT
 
-                *     <author_id>acct:galaxor@diaspora.priateship.org</author_id>
+                *     <author_id>galaxor@diaspora.priateship.org</author_id>
 
 ***** END DIFFS
 
@@ -424,13 +429,16 @@ function diaspora_request($importer,$xml) {
                return;
        }
 
-       $r = q("INSERT INTO `contact` (`uid`, `network`,`addr`,`created`,`url`,`name`,`nick`,`photo`,`pubkey`,`notify`,`poll`,`blocked`,`priority`)
-               VALUES ( %d, '%s', '%s', '%s','%s','%s','%s','%s','%s','%s','%s',%d,%d) ",
+       $batch = (($ret['batch']) ? $ret['batch'] : implode('/', array_slice(explode('/',$ret['url']),0,3)) . '/receive/public');
+
+       $r = q("INSERT INTO `contact` (`uid`, `network`,`addr`,`created`,`url`,`batch`,`name`,`nick`,`photo`,`pubkey`,`notify`,`poll`,`blocked`,`priority`)
+               VALUES ( %d, '%s', '%s', '%s','%s','%s','%s','%s','%s','%s','%s','%s',%d,%d) ",
                intval($importer['uid']),
                dbesc($ret['network']),
                dbesc($ret['addr']),
                datetime_convert(),
                dbesc($ret['url']),
+               dbesc($batch),
                dbesc($ret['name']),
                dbesc($ret['nick']),
                dbesc($ret['photo']),
@@ -980,7 +988,7 @@ function diaspora_unshare($me,$contact) {
 
 
 
-function diaspora_send_status($item,$owner,$contact) {
+function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
 
        $a = get_app();
        $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
@@ -1022,19 +1030,19 @@ function diaspora_send_status($item,$owner,$contact) {
 
        logger('diaspora_send_status: ' . $owner['username'] . ' -> ' . $contact['name'] . ' base message: ' . $msg, LOGGER_DATA);
 
-       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
+       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
 
-       $return_code = diaspora_transmit($owner,$contact,$slap);
+       $return_code = diaspora_transmit($owner,$contact,$slap,$public_batch);
 
        if(count($images)) {
-               diaspora_send_images($item,$owner,$contact,$images);
+               diaspora_send_images($item,$owner,$contact,$images,$public_batch);
        }
 
        return $return_code;
 }
 
 
-function diaspora_send_images($item,$owner,$contact,$images) {
+function diaspora_send_images($item,$owner,$contact,$images,$public_batch = false) {
        $a = get_app();
        if(! count($images))
                return;
@@ -1066,14 +1074,14 @@ function diaspora_send_images($item,$owner,$contact,$images) {
 
 
                logger('diaspora_send_photo: base message: ' . $msg, LOGGER_DATA);
-               $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
+               $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
 
-               diaspora_transmit($owner,$contact,$slap);
+               diaspora_transmit($owner,$contact,$slap,$public_batch);
        }
 
 }
 
-function diaspora_send_followup($item,$owner,$contact) {
+function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
 
        $a = get_app();
        $myaddr = $owner['nickname'] . '@' .  substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
@@ -1121,13 +1129,13 @@ function diaspora_send_followup($item,$owner,$contact) {
 
        logger('diaspora_followup: base message: ' . $msg, LOGGER_DATA);
 
-       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
+       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
 
-       return(diaspora_transmit($owner,$contact,$slap));
+       return(diaspora_transmit($owner,$contact,$slap,$public_batch));
 }
 
 
-function diaspora_send_relay($item,$owner,$contact) {
+function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
 
 
        $a = get_app();
@@ -1223,15 +1231,15 @@ function diaspora_send_relay($item,$owner,$contact) {
 
        logger('diaspora_relay_comment: base message: ' . $msg, LOGGER_DATA);
 
-       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
+       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
 
-       return(diaspora_transmit($owner,$contact,$slap));
+       return(diaspora_transmit($owner,$contact,$slap,$public_batch));
 
 }
 
 
 
-function diaspora_send_retraction($item,$owner,$contact) {
+function diaspora_send_retraction($item,$owner,$contact,$public_batch = false) {
 
        $a = get_app();
        $myaddr = $owner['nickname'] . '@' .  substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
@@ -1243,30 +1251,32 @@ function diaspora_send_retraction($item,$owner,$contact) {
                '$handle' => $myaddr
        ));
 
-       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'])));
+       $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
 
-       return(diaspora_transmit($owner,$contact,$slap));
+       return(diaspora_transmit($owner,$contact,$slap,$public_batch));
 }
 
 
 
-function diaspora_transmit($owner,$contact,$slap) {
+function diaspora_transmit($owner,$contact,$slap,$public_batch) {
 
        $a = get_app();
-
-       post_url($contact['notify'] . '/',$slap);
+       $logid = random_string(4);
+       logger('diaspora_transmit: ' . $logid . ' ' . (($public_batch) ? $contact['batch'] : $contact['notify']));
+       post_url((($public_batch) ? $contact['batch'] : $contact['notify']) . '/',$slap);
        $return_code = $a->get_curl_code();
-       logger('diaspora_transmit: returns: ' . $return_code);
+       logger('diaspora_transmit: ' . $logid . ' returns: ' . $return_code);
 
        if(! $return_code) {
                logger('diaspora_transmit: queue message');
                // queue message for redelivery
-               q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`)
+               q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`,`batch`)
                        VALUES ( %d, '%s', '%s', '%s') ",
                        intval($contact['id']),
                        dbesc(datetime_convert()),
                        dbesc(datetime_convert()),
-                       dbesc($slap)
+                       dbesc($slap),
+                       intval($public_batch)
                );
        }
 
index b433381a74c50faa895b87238765463e1b5a6172..da5a18cad8bf1ce057735a27d7989b4a509e09b2 100644 (file)
@@ -1615,13 +1615,18 @@ function lose_follower($importer,$contact,$datarray,$item) {
 }
 
 
-function subscribe_to_hub($url,$importer,$contact) {
+function subscribe_to_hub($url,$importer,$contact,$submode = 'subscribe') {
 
        if(is_array($importer)) {
                $r = q("SELECT `nickname` FROM `user` WHERE `uid` = %d LIMIT 1",
                        intval($importer['uid'])
                );
        }
+
+       // Diaspora has different message-ids in feeds than they do 
+       // through the direct Diaspora protocol. If we try and use
+       // the feed, we'll get duplicates. So don't.
+
        if((! count($r)) || $contact['network'] === NETWORK_DIASPORA)
                return;
 
@@ -1631,7 +1636,7 @@ function subscribe_to_hub($url,$importer,$contact) {
 
        $verify_token = ((strlen($contact['hub-verify'])) ? $contact['hub-verify'] : random_string());
 
-       $params= 'hub.mode=subscribe&hub.callback=' . urlencode($push_url) . '&hub.topic=' . urlencode($contact['poll']) . '&hub.verify=async&hub.verify_token=' . $verify_token;
+       $params= 'hub.mode=' . $hubmode . '&hub.callback=' . urlencode($push_url) . '&hub.topic=' . urlencode($contact['poll']) . '&hub.verify=async&hub.verify_token=' . $verify_token;
 
        logger('subscribe_to_hub: subscribing ' . $contact['name'] . ' to hub ' . $url . ' with verifier ' . $verify_token);
 
index 6ac882c1992cf96511901f3c6f54033444aaffc2..748d15743ad219bf7e9226198ecdcdf4166abfed 100644 (file)
@@ -409,6 +409,8 @@ function notifier_run($argv, $argc){
 
                foreach($r as $contact) {
                        if((! $mail) && (! $fsuggest) && (! $followup) && (! $contact['self'])) {
+                               if(($contact['network'] === NETWORK_DIASPORA) && ($public_message))
+                                       continue;
                                q("insert into deliverq ( `cmd`,`item`,`contact` ) values ('%s', %d, %d )",
                                        dbesc($cmd),
                                        intval($item_id),
@@ -583,9 +585,19 @@ function notifier_run($argv, $argc){
                                        break;
                                case NETWORK_DIASPORA:
                                        require_once('include/diaspora.php');
+
                                        if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode))
                                                break;
 
+                                       // special handling for followup to public post
+                                       // all other public posts processed as public batches further below
+
+                                       if($public_message) {
+                                               if($followup)
+                                                       diaspora_send_followup($target_item,$owner,$contact, true);
+                                               break;
+                                       }
+
                                        if(! $contact['pubkey'])
                                                break;
                                        
@@ -643,17 +655,25 @@ function notifier_run($argv, $argc){
 
        if($public_message) {
 
-               $r = q("SELECT `id`, `name` FROM `contact` 
-                       WHERE `network` in ('%s','%s') AND `uid` = %d AND `blocked` = 0 AND `pending` = 0
+               $r1 = q("SELECT DISTINCT(`batch`), `id`, `name`,`network` FROM `contact` WHERE `network` = '%s' 
+                       AND `uid` = %d AND `rel` != %d ORDER BY rand() ",
+                       dbesc(NETWORK_DIASPORA),
+                       intval($owner['uid']),
+                       intval(CONTACT_IS_SHARING)
+               );
+                       
+               $r2 = q("SELECT `id`, `name`,`network` FROM `contact` 
+                       WHERE `network` = '%s' AND `uid` = %d AND `blocked` = 0 AND `pending` = 0
                        AND `rel` != %d order by rand() ",
                        dbesc(NETWORK_DFRN),
-                       dbesc(NETWORK_DIASPORA),
                        intval($owner['uid']),
                        intval(CONTACT_IS_SHARING)
                );
 
+               $r = array_merge($r2,$r1);
+
                if(count($r)) {
-                       logger('pubdeliver: ' . print_r($r,true));
+                       logger('pubdeliver: ' . print_r($r,true), LOGGER_DEBUG);
 
                        // throw everything into the queue in case we get killed
 
@@ -669,9 +689,10 @@ function notifier_run($argv, $argc){
 
                        foreach($r as $rr) {
 
-                               /* Don't deliver to folks who have already been delivered to */
+                               // except for Diaspora batch jobs
+                               // Don't deliver to folks who have already been delivered to
 
-                               if(in_array($rr['id'],$conversants)) {
+                               if(($rr['network'] !== NETWORK_DIASPORA) && (in_array($rr['id'],$conversants))) {
                                        logger('notifier: already delivered id=' . $rr['id']);
                                        continue;
                                }
index dbae1deec9713a80af16a19a2877b988a00fcfd4..fd2a0af8f9cd8531a93eef1b7b53e41dd93b243a 100644 (file)
@@ -138,6 +138,8 @@ function poller_run($argv, $argc){
                                        if((datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day")) || $force)
                                                        $hub_update = true;
                                }
+                               else
+                                       $hub_update = false;
 
                                /**
                                 * Based on $contact['priority'], should we poll this site now? Or later?
@@ -473,21 +475,25 @@ function poller_run($argv, $argc){
        
                                consume_feed($xml,$importer,$contact,$hub,1);
 
+                               $hubmode = 'subscribe';
+                               if($contact['network'] === NETWORK_DFRN || $contact['blocked'] || $contact['readonly'])
+                                       $hubmode = 'unsubscribe';
 
-                               if((strlen($hub)) && ($hub_update) && (($contact['rel'] == CONTACT_IS_FRIEND) || (($contact['network'] === NETWORK_OSTATUS) && (! $contact['readonly'])))) {
-                                       logger('poller: subscribing to hub(s) : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
+                               if((strlen($hub)) && ($hub_update) && ($contact['rel'] != CONTACT_IS_FOLLOWER)) {
+                                       logger('poller: hub ' . $hubmode . ' : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
                                        $hubs = explode(',', $hub);
                                        if(count($hubs)) {
                                                foreach($hubs as $h) {
                                                        $h = trim($h);
                                                        if(! strlen($h))
                                                                continue;
-                                                       subscribe_to_hub($h,$importer,$contact);
+                                                       subscribe_to_hub($h,$importer,$contact,$hubmode);
                                                }
                                        }
                                }
                        }
 
+
                        $updated = datetime_convert();
 
                        $r = q("UPDATE `contact` SET `last-update` = '%s', `success_update` = '%s' WHERE `id` = %d LIMIT 1",
index 5119a65d8cebaee58cbb8cd007d734541180203a..d312b50f5a99fe778feee4563f4252098ca813cc 100644 (file)
@@ -123,6 +123,7 @@ function queue_run($argv, $argc){
                }
 
                $data      = $qi[0]['content'];
+               $public    = $qi[0]['batch'];
                $contact   = $c[0];
                $owner     = $u[0];
 
@@ -155,7 +156,7 @@ function queue_run($argv, $argc){
                        case NETWORK_DIASPORA:
                                if($contact['notify']) {
                                        logger('queue: diaspora_delivery: item ' . $q_item['id'] . ' for ' . $contact['name']);
-                                       $deliver_status = diaspora_transmit($owner,$contact,$data);
+                                       $deliver_status = diaspora_transmit($owner,$contact,$data,$public);
 
                                        if($deliver_status == (-1))
                                                update_queue_time($q_item['id']);
index c5752e4e7253fe96431f66d40dff362dada5ec9c..2f9277dae652311e96423470b03b2d966dae3052 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-define( 'UPDATE_VERSION' , 1091 );
+define( 'UPDATE_VERSION' , 1092 );
 
 /**
  *
@@ -761,3 +761,12 @@ function update_1090() {
 
 }
 
+function update_1091() {
+
+       // catch a few stragglers that may have crept in before we added this on remote connects
+       q("UPDATE `contact` SET `batch` = concat(substring_index(`url`,'/',3),'/receive/public') WHERE `network` = 'dspr' AND `batch` = '' ");
+       q("ALTER TABLE `queue` ADD `batch` TINYINT( 1 ) NOT NULL DEFAULT '0' ");
+       q("ALTER TABLE `fcontact` ADD `batch` char(255) NOT NULL AFTER `addr` ");
+
+}
+