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);
- if (count($entry_language) > 0) {
- $entry_language = array_keys($entry_language);
- $entry_language = db_escape_string($entry_language[0]);
+ // 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);
+ _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) {
$rc = cleanup_tags( 14, 50000);
_debug("Cleaned $rc cached tags.");
+
+ PluginHost::getInstance()->run_hooks(PluginHost::HOOK_HOUSE_KEEPING, "hook_house_keeping", "");
+
}
?>