]> git.mxchange.org Git - friendica.git/commitdiff
deliver up to 150 contacts per person using dfrn - in case hub is whacked
authorFriendika <info@friendika.com>
Mon, 31 Jan 2011 22:01:38 +0000 (14:01 -0800)
committerFriendika <info@friendika.com>
Mon, 31 Jan 2011 22:01:38 +0000 (14:01 -0800)
include/notifier.php

index 59e29d7d1f968e81fa182faaaa99ed21fa74c5a6..87095e814f609122f9877b571ceae7af7532951e 100644 (file)
@@ -255,7 +255,7 @@ function notifier_run($argv, $argc){
                $recip_str = implode(', ', $recipients);
 
 
-       $r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) AND `blocked` = 0 ",
+       $r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) AND `blocked` = 0 AND `pending` = 0 ",
                dbesc($recip_str)
        );
        if(! count($r)){
@@ -370,6 +370,54 @@ function notifier_run($argv, $argc){
                }
        }
 
+       if($notify_hub) {
+
+               /**
+                *
+                * If you have less than 150 dfrn friends and it's a public message,
+                * we'll just go ahead and push them out securely with dfrn/rino.
+                * If you've got more than that, you'll have to rely on PuSH delivery.
+                *
+                */
+
+               $max_allowed = ((get_config('system','maxpubdeliver') === false) ? 150 : intval(get_config('system','maxdeliver')));
+                               
+
+               /**
+                *
+                * Only get the bare essentials and go back for the full record. 
+                * If you've got a lot of friends and we grab all the details at once it could exhaust memory. 
+                *
+                */
+
+               $r = q("SELECT `id`, `name` FROM `contact` 
+                       WHERE `network` = 'dfrn' AND `uid` = %d AND `blocked` = 0 AND `pending` = 0
+                       AND `rel` != %d ",
+                       intval($owner['uid']),
+                       intval(REL_FAN)
+               );
+
+               if((count($r)) && ($max_allowed < count($r))) {
+                       foreach($r as $rr) {
+
+                               /* Don't deliver to folks who have already been delivered to */
+
+                               if(! in_array($rr['id'], $conversants)) {
+                                       $n = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
+                                                       intval($rr['id'])
+                                       );
+                                       if(count($n)) {
+                                       
+                                               logger('notifier: dfrnpubdelivery: ' . $n[0]['name']);
+                                               $deliver_status = dfrn_deliver($owner,$n[0],$atom);
+                                       }
+                               }
+                               else
+                                       logger('notifier: dfrnpubdelivery: ignoring ' . $rr['name']);
+                       }
+               }
+       }
+
        return;
 }