deliver up to 150 contacts per person using dfrn - in case hub is whacked

This commit is contained in:
Friendika 2011-01-31 14:01:38 -08:00
parent d8877b88d6
commit 1908c7ad82
1 changed files with 49 additions and 1 deletions

View File

@ -255,7 +255,7 @@ function notifier_run($argv, $argc){
$recip_str = implode(', ', $recipients); $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) dbesc($recip_str)
); );
if(! count($r)){ 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; return;
} }