]> git.wh0rd.org - tt-rss.git/blobdiff - include/rssfuncs.php
properly update favicon_last_checked
[tt-rss.git] / include / rssfuncs.php
index 15d0d80ae5a3065a5828dfe831c2f8849009d3c4..c86c36773f3328a98158af7b385e78d6f864d6c6 100644 (file)
@@ -60,6 +60,8 @@
        function update_daemon_common($link, $limit = DAEMON_FEED_LIMIT, $from_http = false, $debug = true) {
                // Process all other feeds using last_updated and interval parameters
 
+               define('PREFS_NO_CACHE', true);
+
                // Test if the user has loggued in recently. If not, it does not update its feeds.
                if (!SINGLE_USER_MODE && DAEMON_UPDATE_LOGIN_LIMIT > 0) {
                        if (DB_TYPE == "pgsql") {
@@ -79,7 +81,8 @@
                                ) OR (
                                        ttrss_feeds.update_interval > 0
                                        AND ttrss_feeds.last_updated < NOW() - CAST((ttrss_feeds.update_interval || ' minutes') AS INTERVAL)
-                               ) OR ttrss_feeds.last_updated IS NULL)";
+                               ) OR ttrss_feeds.last_updated IS NULL
+                               OR last_updated = '1970-01-01 00:00:00')";
                } else {
                        $update_limit_qpart = "AND ((
                                        ttrss_feeds.update_interval = 0
@@ -87,7 +90,8 @@
                                ) OR (
                                        ttrss_feeds.update_interval > 0
                                        AND ttrss_feeds.last_updated < DATE_SUB(NOW(), INTERVAL ttrss_feeds.update_interval MINUTE)
-                               ) OR ttrss_feeds.last_updated IS NULL)";
+                               ) OR ttrss_feeds.last_updated IS NULL
+                               OR last_updated = '1970-01-01 00:00:00')";
                }
 
                // Test if feed is currently being updated by another process.
                }
 
                // Send feed digests by email if needed.
-               send_headlines_digests($link, 100, $debug);
+               send_headlines_digests($link, $debug);
 
        } // function update_daemon_common
 
        function fetch_twitter_rss($link, $url, $owner_uid) {
 
                require_once 'lib/tmhoauth/tmhOAuth.php';
+               require_once "lib/magpierss/rss_fetch.inc";
+               require_once 'lib/magpierss/rss_utils.inc';
 
                $result = db_query($link, "SELECT twitter_oauth FROM ttrss_users
                        WHERE id = $owner_uid");
                                'user_secret' => $access_token['oauth_token_secret'],
                        ));
 
-                       $code = $tmhOAuth->request('GET', $url);
+                       $code = $tmhOAuth->request('GET', $url,
+                               convertUrlQuery(parse_url($url, PHP_URL_QUERY)));
 
                        if ($code == 200) {
 
                                }
 
                        $result = db_query($link, "SELECT id,update_interval,auth_login,
-                               auth_pass,cache_images,update_method
+                               auth_pass,cache_images,update_method,last_updated
                                FROM ttrss_feeds WHERE id = '$feed' AND $updstart_thresh_qpart");
 
                } else {
                        $auth_pass = urlencode($auth_pass);
                }
 
-               $update_interval = db_fetch_result($result, 0, "update_interval");
                $cache_images = sql_bool_to_bool(db_fetch_result($result, 0, "cache_images"));
                $fetch_url = db_fetch_result($result, 0, "feed_url");
 
-               if ($update_interval < 0) { return false; }
-
                $feed = db_escape_string($feed);
 
                if ($auth_login && $auth_pass ){
 
                } else {
 
+                       // Ignore cache if new feed or manual update.
+                       $cache_age = (is_null($last_updated) || $last_updated == '1970-01-01 00:00:00') ?
+                               -1 : get_feed_update_interval($link, $feed) * 60;
+
                        if ($update_method == 3) {
                                $rss = fetch_twitter_rss($link, $fetch_url, $owner_uid);
                        } else if ($update_method == 1) {
 
-                               define('MAGPIE_CACHE_AGE', get_feed_update_interval($link, $feed) * 60);
+                               define('MAGPIE_CACHE_AGE', $cache_age);
                                define('MAGPIE_CACHE_ON', !$no_cache);
                                define('MAGPIE_FETCH_TIME_OUT', 60);
                                define('MAGPIE_CACHE_DIR', CACHE_DIR . "/magpie");
        #                       $rss->set_timeout(10);
                                $rss->set_feed_url($fetch_url);
                                $rss->set_output_encoding('UTF-8');
-                               $rss->force_feed(true);
+                               //$rss->force_feed(true);
 
                                if ($debug_enabled) {
                                        _debug("feed update interval (sec): " .
 
                                if (!$no_cache) {
                                        $rss->set_cache_location($simplepie_cache_dir);
-                                       $rss->set_cache_duration(get_feed_update_interval($link, $feed) * 60);
+                                       $rss->set_cache_duration($cache_age);
                                }
 
                                $rss->init();
 
 //                     db_query($link, "BEGIN");
 
-                       $result = db_query($link, "SELECT title,icon_url,site_url,owner_uid
+                       if (DB_TYPE == "pgsql") {
+                               $favicon_interval_qpart = "favicon_last_checked < NOW() - INTERVAL '12 hour'";
+                       } else {
+                               $favicon_interval_qpart = "favicon_last_checked < DATE_SUB(NOW(), INTERVAL 12 HOUR)";
+                       }
+
+                       $result = db_query($link, "SELECT title,icon_url,site_url,owner_uid,
+                               (favicon_last_checked IS NULL OR $favicon_interval_qpart) AS
+                                               favicon_needs_check
                                FROM ttrss_feeds WHERE id = '$feed'");
 
                        $registered_title = db_fetch_result($result, 0, "title");
                        $orig_icon_url = db_fetch_result($result, 0, "icon_url");
                        $orig_site_url = db_fetch_result($result, 0, "site_url");
+                       $favicon_needs_check = sql_bool_to_bool(db_fetch_result($result, 0,
+                               "favicon_needs_check"));
 
                        $owner_uid = db_fetch_result($result, 0, "owner_uid");
 
                        if ($use_simplepie) {
-                               $site_url = $rss->get_link();
+                               $site_url = db_escape_string(trim($rss->get_link()));
                        } else {
-                               $site_url = $rss->channel["link"];
+                               $site_url = db_escape_string(trim($rss->channel["link"]));
+                       }
+
+                       // weird, weird Magpie
+                       if (!$use_simplepie) {
+                               if (!$site_url) $site_url = db_escape_string($rss->channel["link_"]);
                        }
 
                        $site_url = rewrite_relative_url($fetch_url, $site_url);
+                       $site_url = substr($site_url, 0, 250);
 
                        if ($debug_enabled) {
                                _debug("update_rss_feed: checking favicon...");
                        }
 
-                       check_feed_favicon($site_url, $feed, $link);
+                       if ($favicon_needs_check) {
+                               check_feed_favicon($site_url, $feed, $link);
+
+                               db_query($link, "UPDATE ttrss_feeds SET favicon_last_checked = NOW()
+                                       WHERE id = '$feed'");
+                       }
 
                        if (!$registered_title || $registered_title == "[Unknown]") {
 
                                        title = '$feed_title' WHERE id = '$feed'");
                        }
 
-                       // weird, weird Magpie
-                       if (!$use_simplepie) {
-                               if (!$site_url) $site_url = db_escape_string($rss->channel["link_"]);
-                       }
-
-                       if ($site_url && $orig_site_url != db_escape_string($site_url)) {
+                       if ($site_url && $orig_site_url != $site_url) {
                                db_query($link, "UPDATE ttrss_feeds SET
                                        site_url = '$site_url' WHERE id = '$feed'");
                        }
 //                     print "I: " . $rss->channel["image"]["url"];
 
                        if (!$use_simplepie) {
-                               $icon_url = db_escape_string($rss->image["url"]);
+                               $icon_url = db_escape_string(trim($rss->image["url"]));
                        } else {
-                               $icon_url = db_escape_string($rss->get_image_url());
+                               $icon_url = db_escape_string(trim($rss->get_image_url()));
                        }
 
+                       $icon_url = rewrite_relative_url($fetch_url, $icon_url);
                        $icon_url = substr($icon_url, 0, 250);
 
                        if ($icon_url && $orig_icon_url != $icon_url) {
                                        $entry_content = $item["content:escaped"];
 
                                        if (!$entry_content) $entry_content = $item["content:encoded"];
-                                       if (!$entry_content) $entry_content = $item["content"]["encoded"];
+                                       if (!$entry_content && is_array($entry_content)) $entry_content = $item["content"]["encoded"];
                                        if (!$entry_content) $entry_content = $item["content"];
 
                                        if (is_array($entry_content)) $entry_content = $entry_content[0];
                                if (!file_exists($local_filename)) {
                                        $file_content = fetch_file_contents($src);
 
-                                       if ($file_content) {
+                                       if ($file_content && strlen($file_content) > 1024) {
                                                file_put_contents($local_filename, $file_content);
                                        }
                                }
 
                $node = $doc->getElementsByTagName('body')->item(0);
 
-               return $doc->saveXML($node);
+               return $doc->saveXML($node, LIBXML_NOEMPTYTAG);
        }
 
        function expire_cached_files($debug) {
-               foreach (array("magpie", "simplepie", "images") as $dir) {
+               foreach (array("magpie", "simplepie", "images", "export") as $dir) {
                        $cache_dir = CACHE_DIR . "/$dir";
 
                        if ($debug) _debug("Expiring $cache_dir");
                        if (is_writable($cache_dir)) {
                                $files = glob("$cache_dir/*");
 
-                               foreach ($files as $file) {
-                                       if (time() - filemtime($file) > 86400*7) {
-                                               unlink($file);
+                               if ($files)
+                                       foreach ($files as $file) {
+                                               if (time() - filemtime($file) > 86400*7) {
+                                                       unlink($file);
 
-                                               ++$num_deleted;
+                                                       ++$num_deleted;
+                                               }
                                        }
                                }
-                       }
 
                        if ($debug) _debug("Removed $num_deleted files.");
                }
        }
 
+       /**
+       * Source: http://www.php.net/manual/en/function.parse-url.php#104527
+       * Returns the url query as associative array
+       *
+       * @param    string    query
+       * @return    array    params
+       */
+       function convertUrlQuery($query) {
+               $queryParts = explode('&', $query);
+
+               $params = array();
+
+               foreach ($queryParts as $param) {
+                       $item = explode('=', $param);
+                       $params[$item[0]] = $item[1];
+               }
+
+               return $params;
+       }
 ?>