]> git.wh0rd.org - tt-rss.git/commitdiff
add HOOK_UPDATE_TASK
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>
Mon, 24 Dec 2012 10:27:15 +0000 (14:27 +0400)
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>
Mon, 24 Dec 2012 10:27:15 +0000 (14:27 +0400)
classes/pluginhost.php
include/functions.php
plugins/instances/instances.php
update.php
update_daemon2.php

index e87f3a7e35d461a04bb08cd008c60509705f4e1b..c55667e1268345f73efa00c01f11080d2a4c9e11 100644 (file)
@@ -12,6 +12,7 @@ class PluginHost {
        const HOOK_PREFS_SECTION = 4;
        const HOOK_PREFS_TABS = 5;
        const HOOK_FEED_PARSED = 6;
+       const HOOK_UPDATE_TASK = 7;
 
        function __construct($link) {
                $this->link = $link;
index 6d82d803cb151767cf89411f22dd68dad925825a..8a3e07daafdb250ba59744e879eec063a8f56722 100644 (file)
                }
        }
 
-       // Status codes:
-       // -1  - never connected
-       // 0   - no data received
-       // 1   - data received successfully
-       // 2   - did not receive valid data
-       // >10 - server error, code + 10 (e.g. 16 means server error 6)
-
-       function get_linked_feeds($link, $instance_id = false) {
-               if ($instance_id)
-                       $instance_qpart = "id = '$instance_id' AND ";
-               else
-                       $instance_qpart = "";
-
-               if (DB_TYPE == "pgsql") {
-                       $date_qpart = "last_connected < NOW() - INTERVAL '6 hours'";
-               } else {
-                       $date_qpart = "last_connected < DATE_SUB(NOW(), INTERVAL 6 HOUR)";
-               }
-
-               $result = db_query($link, "SELECT id, access_key, access_url FROM ttrss_linked_instances
-                       WHERE $instance_qpart $date_qpart ORDER BY last_connected");
-
-               while ($line = db_fetch_assoc($result)) {
-                       $id = $line['id'];
-
-                       _debug("Updating: " . $line['access_url'] . " ($id)");
-
-                       $fetch_url = $line['access_url'] . '/public.php?op=fbexport';
-                       $post_query = 'key=' . $line['access_key'];
-
-                       $feeds = fetch_file_contents($fetch_url, false, false, false, $post_query);
-
-                       // try doing it the old way
-                       if (!$feeds) {
-                               $fetch_url = $line['access_url'] . '/backend.php?op=fbexport';
-                               $feeds = fetch_file_contents($fetch_url, false, false, false, $post_query);
-                       }
-
-                       if ($feeds) {
-                               $feeds = json_decode($feeds, true);
-
-                               if ($feeds) {
-                                       if ($feeds['error']) {
-                                               $status = $feeds['error']['code'] + 10;
-
-                                               // access denied
-                                               if ($status == 16) {
-                                                       db_query($link, "DELETE FROM ttrss_linked_feeds
-                                                               WHERE instance_id = '$id'");
-                                               }
-                                       } else {
-                                               $status = 1;
-
-                                               if (count($feeds['feeds']) > 0) {
-
-                                                       db_query($link, "DELETE FROM ttrss_linked_feeds
-                                                               WHERE instance_id = '$id'");
-
-                                                       foreach ($feeds['feeds'] as $feed) {
-                                                               $feed_url = db_escape_string($feed['feed_url']);
-                                                               $title = db_escape_string($feed['title']);
-                                                               $subscribers = db_escape_string($feed['subscribers']);
-                                                               $site_url = db_escape_string($feed['site_url']);
-
-                                                               db_query($link, "INSERT INTO ttrss_linked_feeds
-                                                                       (feed_url, site_url, title, subscribers, instance_id, created, updated)
-                                                               VALUES
-                                                                       ('$feed_url', '$site_url', '$title', '$subscribers', '$id', NOW(), NOW())");
-                                                       }
-                                               } else {
-                                                       // received 0 feeds, this might indicate that
-                                                       // the instance on the other hand is rebuilding feedbrowser cache
-                                                       // we will try again later
-
-                                                       // TODO: maybe perform expiration based on updated here?
-                                               }
-
-                                               _debug("Processed " . count($feeds['feeds']) . " feeds.");
-                                       }
-                               } else {
-                                       $status = 2;
-                               }
-
-                       } else {
-                               $status = 0;
-                       }
-
-                       _debug("Status: $status");
-
-                       db_query($link, "UPDATE ttrss_linked_instances SET
-                               last_status_out = '$status', last_connected = NOW() WHERE id = '$id'");
-
-               }
-       }
-
        function make_feed_browser($link, $search, $limit, $mode = 1) {
 
                $owner_uid = $_SESSION["uid"];
index c5d8067afee978d7152773b44b6ca72907f3e8d9..f95d511ffc4ce5d866e7b47cea7b35c3445ff49f 100644 (file)
@@ -16,6 +16,113 @@ class Instances extends Plugin implements IHandler {
 
                $host->add_hook($host::HOOK_PREFS_TABS, $this);
                $host->add_handler("pref-instances", "*", $this);
+               $host->add_command("get-feeds", "receive popular feeds from linked instances", $this);
+               $host->add_hook($host::HOOK_UPDATE_TASK, $this);
+       }
+
+       function hook_update_task($args) {
+               _debug("Get linked feeds...");
+               $this->get_linked_feeds($this->link);
+       }
+
+       // Status codes:
+       // -1  - never connected
+       // 0   - no data received
+       // 1   - data received successfully
+       // 2   - did not receive valid data
+       // >10 - server error, code + 10 (e.g. 16 means server error 6)
+
+       function get_linked_feeds($link, $instance_id = false) {
+               if ($instance_id)
+                       $instance_qpart = "id = '$instance_id' AND ";
+               else
+                       $instance_qpart = "";
+
+               if (DB_TYPE == "pgsql") {
+                       $date_qpart = "last_connected < NOW() - INTERVAL '6 hours'";
+               } else {
+                       $date_qpart = "last_connected < DATE_SUB(NOW(), INTERVAL 6 HOUR)";
+               }
+
+               $result = db_query($link, "SELECT id, access_key, access_url FROM ttrss_linked_instances
+                       WHERE $instance_qpart $date_qpart ORDER BY last_connected");
+
+               while ($line = db_fetch_assoc($result)) {
+                       $id = $line['id'];
+
+                       _debug("Updating: " . $line['access_url'] . " ($id)");
+
+                       $fetch_url = $line['access_url'] . '/public.php?op=fbexport';
+                       $post_query = 'key=' . $line['access_key'];
+
+                       $feeds = fetch_file_contents($fetch_url, false, false, false, $post_query);
+
+                       // try doing it the old way
+                       if (!$feeds) {
+                               $fetch_url = $line['access_url'] . '/backend.php?op=fbexport';
+                               $feeds = fetch_file_contents($fetch_url, false, false, false, $post_query);
+                       }
+
+                       if ($feeds) {
+                               $feeds = json_decode($feeds, true);
+
+                               if ($feeds) {
+                                       if ($feeds['error']) {
+                                               $status = $feeds['error']['code'] + 10;
+
+                                               // access denied
+                                               if ($status == 16) {
+                                                       db_query($link, "DELETE FROM ttrss_linked_feeds
+                                                               WHERE instance_id = '$id'");
+                                               }
+                                       } else {
+                                               $status = 1;
+
+                                               if (count($feeds['feeds']) > 0) {
+
+                                                       db_query($link, "DELETE FROM ttrss_linked_feeds
+                                                               WHERE instance_id = '$id'");
+
+                                                       foreach ($feeds['feeds'] as $feed) {
+                                                               $feed_url = db_escape_string($feed['feed_url']);
+                                                               $title = db_escape_string($feed['title']);
+                                                               $subscribers = db_escape_string($feed['subscribers']);
+                                                               $site_url = db_escape_string($feed['site_url']);
+
+                                                               db_query($link, "INSERT INTO ttrss_linked_feeds
+                                                                       (feed_url, site_url, title, subscribers, instance_id, created, updated)
+                                                               VALUES
+                                                                       ('$feed_url', '$site_url', '$title', '$subscribers', '$id', NOW(), NOW())");
+                                                       }
+                                               } else {
+                                                       // received 0 feeds, this might indicate that
+                                                       // the instance on the other hand is rebuilding feedbrowser cache
+                                                       // we will try again later
+
+                                                       // TODO: maybe perform expiration based on updated here?
+                                               }
+
+                                               _debug("Processed " . count($feeds['feeds']) . " feeds.");
+                                       }
+                               } else {
+                                       $status = 2;
+                               }
+
+                       } else {
+                               $status = 0;
+                       }
+
+                       _debug("Status: $status");
+
+                       db_query($link, "UPDATE ttrss_linked_instances SET
+                               last_status_out = '$status', last_connected = NOW() WHERE id = '$id'");
+
+               }
+       }
+
+
+       function get_feeds() {
+               $this->get_linked_feeds($this->link, false);
        }
 
        function get_prefs_js() {
index d039d062e19ccb08979568ab72ccb57505a54cf8..f1396f6e654cbf7c7704074794beaf65ba4678d1 100755 (executable)
@@ -51,7 +51,6 @@
                print "  -feedbrowser        - update feedbrowser\n";
                print "  -daemon             - start single-process update daemon\n";
                print "  -cleanup-tags       - perform tags table maintenance\n";
-               print "  -get-feeds          - receive popular feeds from linked instances\n";
                print "  -import USER FILE   - import articles from XML\n";
                print "  -quiet              - don't show messages\n";
                print "  -indexes            - recreate missing schema indexes\n";
@@ -98,7 +97,8 @@
                $rc = cleanup_tags($link, 14, 50000);
                _debug("Cleaned $rc cached tags.");
 
-               get_linked_feeds($link);
+               global $pluginhost;
+               $pluginhost->run_hooks($pluginhost::HOOK_UPDATE_TASK, "hook_update_task", $op);
        }
 
        if (in_array("-feedbrowser", $op)) {
 
                        _debug("Cleaned $rc cached tags.");
 
-                       get_linked_feeds($link);
+                       global $pluginhost;
+                       $pluginhost->run_hooks($pluginhost::HOOK_UPDATE_TASK, "hook_update_task", $op);
                }
 
        }
                _debug("$rc tags deleted.\n");
        }
 
-       if (in_array("-get-feeds", $op)) {
-               get_linked_feeds($link);
-       }
-
        if (in_array("-import",$op)) {
                $username = $argv[count($argv) - 2];
                $filename = $argv[count($argv) - 1];
index 3e66043aa6d49096ace5a19ca782a129c899c4b6..04a7b0fc2f596def0425b905903352d48541810c 100755 (executable)
 
                                                _debug("Cleaned $rc cached tags.");
 
-                                               _debug("Updating linked feeds...");
-                                               get_linked_feeds($link);
-
+                                               global $pluginhost;
+                                               $pluginhost->run_hooks($pluginhost::HOOK_UPDATE_TASK, "hook_update_task", $op);
                                        }
 
                                        _debug("Elapsed time: " . (time() - $start_timestamp) . " second(s)");