]> git.mxchange.org Git - friendica.git/blobdiff - include/poller.php
work in progress js_uploader plugin, turn java uploader into plugin - not done yet
[friendica.git] / include / poller.php
index 3d19d003b1939fbbdbb8613f7a8723dd070d94d3..024b9fbcd38c0c6144c8a4751224e7e0f286f003 100644 (file)
 
        $a->set_baseurl(get_config('system','url'));
 
+       logger('poller: start');
+
+       // run queue delivery process in the background
+
+       $php_path = ((x($a->config,'php_path') && strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+       proc_close(proc_open("\"$php_path\" \"include/queue.php\" &", array(), $foo));
+
+
+       $hub_update = false;
        $force = false;
+
        if(($argc > 1) && ($argv[1] == 'force'))
                $force = true;
 
+       if(($argc > 1) && intval($argv[1])) {
+               $manual_id = intval($argv[1]);
+               $force = true;
+       }
+
+       $sql_extra = (($manual_id) ? " AND `id` = $manual_id " : "");
+
        // 'stat' clause is a temporary measure until we have federation subscriptions working both directions
        $contacts = q("SELECT * FROM `contact` 
                WHERE ( ( `network` = 'dfrn' AND ( `dfrn-id` != '' OR (`issued-id` != '' AND `duplex` = 1)))
-               OR ( `network` = 'stat' AND `poll` != '' ) ) 
+               OR ( `network` IN ( 'stat', 'feed' ) AND `poll` != '' ))
+               $sql_extra 
                AND `self` = 0 AND `blocked` = 0 AND `readonly` = 0 ORDER BY RAND()");
 
        if(! count($contacts))
 
                if($contact['priority'] || $contact['subhub']) {
 
-                       $update = false;
+                       $hub_update = true;
+                       $update     = false;
+
+                       $t = $contact['last-update'];
 
                        // We should be getting everything via a hub. But just to be sure, let's check once a day.
+                       // (You can make this more or less frequent if desired by setting 'pushpoll_frequency' appropriately)
                        // This also lets us update our subscription to the hub, and add or replace hubs in case it
-                       // changed. 
+                       // changed. We will only update hubs once a day, regardless of 'pushpoll_frequency'. 
 
-                       if($contact['subhub'])
-                               $contact['priority'] = 3;
 
-                       $t = $contact['last-update'];
+                       if($contact['subhub']) {
+                               $interval = get_config('system','pushpoll_frequency');
+                               $contact['priority'] = (($interval !== false) ? intval($interval) : 3);
+                               $hub_update = false;
+
+                               if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day"))
+                                               $hub_update = true;
+                       }
+
+
+                       /**
+                        * Based on $contact['priority'], should we poll this site now? Or later?
+                        */                     
 
                        switch ($contact['priority']) {
                                case 5:
 
                $importer = $r[0];
 
-               logger("poller: IMPORTER: {$importer['name']}");
+               logger("poller: poll: IMPORTER: {$importer['name']}, CONTACT: {$contact['name']}");
 
                $last_update = (($contact['last-update'] === '0000-00-00 00:00:00') 
                        ? datetime_convert('UTC','UTC','now - 30 days', ATOM_TIME)
        
                        $xml = fetch_url($url);
 
-                       logger('poller: handshake with url ' . $url . ' returns xml: ' . $xml);
+                       logger('poller: handshake with url ' . $url . ' returns xml: ' . $xml, LOGGER_DATA);
+
 
                        if(! $xml) {
                                logger("poller: $url appears to be dead - marking for death ");
                                // mean the software was uninstalled or the domain expired. 
                                // Will keep trying for one month.
                                mark_for_death($contact);
+
+                               // set the last-update so we don't keep polling
+
+                               $r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
+                                       dbesc(datetime_convert()),
+                                       intval($contact['id'])
+                               );
+
+                               continue;
+                       }
+
+                       if(! strstr($xml,'<?xml')) {
+                               logger('poller: response from ' . $url . ' did not contain XML.');
+                               $r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
+                                       dbesc(datetime_convert()),
+                                       intval($contact['id'])
+                               );
                                continue;
                        }
 
 
                        if(intval($res->status) == 1) {
                                logger("poller: $url replied status 1 - marking for death ");
+
                                // we may not be friends anymore. Will keep trying for one month.
+                               // set the last-update so we don't keep polling
+
+                               $r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
+                                       dbesc(datetime_convert()),
+                                       intval($contact['id'])
+                               );
+
                                mark_for_death($contact);
                        }
                        else {
 
                        $postvars = array();
 
-                       $sent_dfrn_id = hex2bin($res->dfrn_id);
-                       $challenge    = hex2bin($res->challenge);
+                       $sent_dfrn_id = hex2bin((string) $res->dfrn_id);
+                       $challenge    = hex2bin((string) $res->challenge);
 
                        $final_dfrn_id = '';
 
                if(! strlen($xml))
                        continue;
 
-               consume_feed($xml,$importer,$contact,$hub);
+               consume_feed($xml,$importer,$contact,$hub,1);
 
                // do it twice. Ensures that children of parents which may be later in the stream aren't tossed
 
-               consume_feed($xml,$importer,$contact,$hub);
+               consume_feed($xml,$importer,$contact,$hub,1);
 
 
-               if((strlen($hub)) && (($contact['rel'] == REL_BUD) || (($contact['network'] === 'stat') && (! $contact['readonly'])))) {
+               if((strlen($hub)) && ($hub_update) 
+                       && (($contact['rel'] == REL_BUD) || (($contact['network'] === 'stat') && (! $contact['readonly'])))) {
                        logger('poller: subscribing to hub(s) : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
                        $hubs = explode(',', $hub);
                        if(count($hubs)) {