]> git.wh0rd.org - tt-rss.git/blobdiff - include/rssfuncs.php
define define_default() in installer
[tt-rss.git] / include / rssfuncs.php
index 65855754b95342e0db1de6f6798c7a16511285c2..43d931fc8bf035c27cadd40497373a550acc8390 100644 (file)
                        ORDER BY ttrss_feeds.id $query_limit");
 
                        if (db_num_rows($tmp_result) > 0) {
+                               $rss = false;
+
                                while ($tline = db_fetch_assoc($tmp_result)) {
                                        if($debug) _debug(" => " . $tline["last_updated"] . ", " . $tline["id"] . " " . $tline["owner_uid"]);
-                                       update_rss_feed($tline["id"], true);
+                                       $rss = update_rss_feed($tline["id"], true, false, $rss);
+                                       _debug_suppress(false);
                                        ++$nf;
                                }
                        }
        } // function update_daemon_common
 
        // ignore_daemon is not used
-       function update_rss_feed($feed, $ignore_daemon = false, $no_cache = false) {
+       function update_rss_feed($feed, $ignore_daemon = false, $no_cache = false, $rss = false) {
 
                $debug_enabled = defined('DAEMON_EXTENDED_DEBUG') || $_REQUEST['xdebug'];
 
+               _debug_suppress(!$debug_enabled);
                _debug("start", $debug_enabled);
 
                $result = db_query("SELECT id,update_interval,auth_login,
                $pluginhost->load($user_plugins, PluginHost::KIND_USER, $owner_uid);
                $pluginhost->load_data();
 
-               $rss = false;
-               $rss_hash = false;
+               if ($rss && is_object($rss) && get_class($rss) == "FeedParser") {
+                       _debug("using previously initialized parser object");
+               } else {
+                       $rss_hash = false;
 
-               $force_refetch = isset($_REQUEST["force_refetch"]);
+                       $force_refetch = isset($_REQUEST["force_refetch"]);
 
-               if (file_exists($cache_filename) &&
-                       is_readable($cache_filename) &&
-                       !$auth_login && !$auth_pass &&
-                       filemtime($cache_filename) > time() - 30) {
+                       if (file_exists($cache_filename) &&
+                               is_readable($cache_filename) &&
+                               !$auth_login && !$auth_pass &&
+                               filemtime($cache_filename) > time() - 30) {
 
-                       _debug("using local cache.", $debug_enabled);
+                               _debug("using local cache.", $debug_enabled);
 
-                       @$feed_data = file_get_contents($cache_filename);
+                               @$feed_data = file_get_contents($cache_filename);
 
-                       if ($feed_data) {
-                               $rss_hash = sha1($feed_data);
-                       }
+                               if ($feed_data) {
+                                       $rss_hash = sha1($feed_data);
+                               }
 
-               } else {
-                       _debug("local cache will not be used for this feed", $debug_enabled);
+                       } else {
+                               _debug("local cache will not be used for this feed", $debug_enabled);
+                       }
                }
 
                if (!$rss) {
                        $rss->init();
                }
 
-               require_once "lib/languagedetect/LanguageDetect.php";
+               if (DETECT_ARTICLE_LANGUAGE) {
+                       require_once "lib/languagedetect/LanguageDetect.php";
 
-               $lang = new Text_LanguageDetect();
-               $lang->setNameMode(2);
+                       $lang = new Text_LanguageDetect();
+                       $lang->setNameMode(2);
+               }
 
 //             print_r($rss);
 
 
                                _debug("feed hub url: $feed_hub_url", $debug_enabled);
 
-                               if ($feed_hub_url && function_exists('curl_init') &&
+                               $feed_self_url = $fetch_url;
+
+                               $links = $rss->get_links('self');
+
+                               if ($links && is_array($links)) {
+                                       foreach ($links as $l) {
+                                               $feed_self_url = $l;
+                                               break;
+                                       }
+                               }
+
+                               _debug("feed self url = $feed_self_url");
+
+                               if ($feed_hub_url && $feed_self_url && function_exists('curl_init') &&
                                        !ini_get("open_basedir")) {
 
                                        require_once 'lib/pubsubhubbub/subscriber.php';
 
                                        $s = new Subscriber($feed_hub_url, $callback_url);
 
-                                       $rc = $s->subscribe($fetch_url);
+                                       $rc = $s->subscribe($feed_self_url);
 
                                        _debug("feed hub url found, subscribe request sent.", $debug_enabled);
 
                                        print "\n";
                                }
 
-                               $entry_language = $lang->detect($entry_content, 1);
+                               $entry_language = "";
+
+                               if (DETECT_ARTICLE_LANGUAGE) {
+                                       $entry_language = $lang->detect($entry_title . " " . $entry_content, 1);
 
-                               if (count($entry_language) > 0) {
-                                       $entry_language = array_keys($entry_language);
-                                       $entry_language = db_escape_string(substr($entry_language[0], 0, 2));
+                                       if (count($entry_language) > 0) {
+                                               $entry_language = array_keys($entry_language);
 
-                                       _debug("detected language: $entry_language", $debug_enabled);
+                                               // the fuck?
+                                               if (is_array($entry_language))
+                                                       $entry_language = "";
+                                               else
+                                                       $entry_language = db_escape_string(substr($entry_language[0], 0, 2));
+
+                                               _debug("detected language: $entry_language", $debug_enabled);
+                                       }
                                }
 
                                $entry_comments = $item->get_comments_url();
                                        "tags" => $entry_tags,
                                        "plugin_data" => $entry_plugin_data,
                                        "author" => $entry_author,
-                                       "stored" => $stored_article);
+                                       "stored" => $stored_article,
+                                       "feed" => array("id" => $feed,
+                                               "fetch_url" => $fetch_url,
+                                               "site_url" => $site_url)
+                                       );
 
                                foreach ($pluginhost->get_hooks(PluginHost::HOOK_ARTICLE_FILTER) as $plugin) {
                                        $article = $plugin->hook_article_filter($article);
                                if (is_array($encs)) {
                                        foreach ($encs as $e) {
                                                $e_item = array(
-                                                       $e->link, $e->type, $e->length);
+                                                       $e->link, $e->type, $e->length, $e->title);
                                                array_push($enclosures, $e_item);
                                        }
                                }
 
                                db_query("BEGIN");
 
+//                             debugging
+//                             db_query("DELETE FROM ttrss_enclosures WHERE post_id = '$entry_ref_id'");
+
                                foreach ($enclosures as $enc) {
                                        $enc_url = db_escape_string($enc[0]);
                                        $enc_type = db_escape_string($enc[1]);
                                        $enc_dur = db_escape_string($enc[2]);
+                                       $enc_title = db_escape_string($enc[3]);
 
                                        $result = db_query("SELECT id FROM ttrss_enclosures
                                                WHERE content_url = '$enc_url' AND post_id = '$entry_ref_id'");
                                        if (db_num_rows($result) == 0) {
                                                db_query("INSERT INTO ttrss_enclosures
                                                        (content_url, content_type, title, duration, post_id) VALUES
-                                                       ('$enc_url', '$enc_type', '', '$enc_dur', '$entry_ref_id')");
+                                                       ('$enc_url', '$enc_type', '$enc_title', '$enc_dur', '$entry_ref_id')");
                                        }
                                }
 
 
                        $error_msg = db_escape_string(mb_substr($rss->error(), 0, 245));
 
-                       _debug("error fetching feed: $error_msg", $debug_enabled);
+                       _debug("fetch error: $error_msg", $debug_enabled);
+
+                       if (count($rss->errors()) > 1) {
+                               foreach ($rss->errors() as $error) {
+                                       _debug("+ $error");
+                               }
+                       }
 
                        db_query(
                                "UPDATE ttrss_feeds SET last_error = '$error_msg',
-                                       last_updated = NOW() WHERE id = '$feed'");
-               }
+                               last_updated = NOW() WHERE id = '$feed'");
 
-               unset($rss);
+                       unset($rss);
+               }
 
                _debug("done", $debug_enabled);
+
+               return $rss;
        }
 
        function cache_images($html, $site_url, $debug) {