summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--classes/rssutils.php28
-rw-r--r--include/functions.php5
-rw-r--r--schema/ttrss_schema_mysql.sql3
-rw-r--r--schema/ttrss_schema_pgsql.sql3
-rw-r--r--schema/versions/mysql/133.sql7
-rw-r--r--schema/versions/pgsql/133.sql7
6 files changed, 37 insertions, 16 deletions
diff --git a/classes/rssutils.php b/classes/rssutils.php
index d6fe048f9..f6326720d 100644
--- a/classes/rssutils.php
+++ b/classes/rssutils.php
@@ -312,7 +312,8 @@ class RSSUtils {
feed_url,auth_pass,cache_images,
mark_unread_on_update, owner_uid,
auth_pass_encrypted, feed_language,
- last_modified
+ last_modified,
+ ".SUBSTRING_FOR_DATE."(last_unconditional, 1, 19) AS last_unconditional
FROM ttrss_feeds WHERE id = '$feed'");
$owner_uid = db_fetch_result($result, 0, "owner_uid");
@@ -333,6 +334,7 @@ class RSSUtils {
}
$stored_last_modified = db_fetch_result($result, 0, "last_modified");
+ $last_unconditional = db_fetch_result($result, 0, "last_unconditional");
$cache_images = sql_bool_to_bool(db_fetch_result($result, 0, "cache_images"));
$fetch_url = db_fetch_result($result, 0, "feed_url");
$feed_language = db_escape_string(mb_strtolower(db_fetch_result($result, 0, "feed_language")));
@@ -384,21 +386,21 @@ class RSSUtils {
// fetch feed from source
if (!$feed_data) {
- _debug("stored last modified: $stored_last_modified", $debug_enabled);
- _debug("fetching [$fetch_url]...", $debug_enabled);
+ _debug("last unconditional update request: $last_unconditional");
if (ini_get("open_basedir") && function_exists("curl_init")) {
_debug("not using CURL due to open_basedir restrictions");
}
- /*$feed_data = fetch_file_contents($fetch_url, false,
- $auth_login, $auth_pass, false,
- $no_cache ? FEED_FETCH_NO_CACHE_TIMEOUT : FEED_FETCH_TIMEOUT,
- 0);*/
+ if (time() - strtotime($last_unconditional) > MAX_CONDITIONAL_INTERVAL) {
+ _debug("maximum allowed interval for conditional requests exceeded, forcing refetch");
+
+ $force_refetch = true;
+ } else {
+ _debug("stored last modified for conditional request: $stored_last_modified", $debug_enabled);
+ }
- // TODO: last_modified should be limited, if the feed has not been updated for a while
- // we probably should force one update without the header
- // unfortunately last_updated gets bumped on http 304 so that daemon would work properly
+ _debug("fetching [$fetch_url] (force_refetch: $force_refetch)...", $debug_enabled);
$feed_data = fetch_file_contents([
"url" => $fetch_url,
@@ -553,7 +555,7 @@ class RSSUtils {
_debug("no articles found.", $debug_enabled);
db_query("UPDATE ttrss_feeds
- SET last_updated = NOW(), last_error = '' WHERE id = '$feed'");
+ SET last_updated = NOW(), last_unconditional = NOW(), last_error = '' WHERE id = '$feed'");
return; // no articles
}
@@ -1140,7 +1142,7 @@ class RSSUtils {
purge_feed($feed, 0, $debug_enabled);
db_query("UPDATE ttrss_feeds
- SET last_updated = NOW(), last_error = '' WHERE id = '$feed'");
+ SET last_updated = NOW(), last_unconditional = NOW(), last_error = '' WHERE id = '$feed'");
// db_query("COMMIT");
@@ -1158,7 +1160,7 @@ class RSSUtils {
db_query(
"UPDATE ttrss_feeds SET last_error = '$error_msg',
- last_updated = NOW() WHERE id = '$feed'");
+ last_updated = NOW(), last_unconditional = NOW() WHERE id = '$feed'");
unset($rss);
return;
diff --git a/include/functions.php b/include/functions.php
index fc4d7eb7e..1f9c80a02 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -1,6 +1,6 @@
<?php
define('EXPECTED_CONFIG_VERSION', 26);
- define('SCHEMA_VERSION', 132);
+ define('SCHEMA_VERSION', 133);
define('LABEL_BASE_INDEX', -1024);
define('PLUGIN_FEED_BASE_INDEX', -128);
@@ -57,6 +57,9 @@
// do not cache files smaller than that (bytes)
define_default('CACHE_MAX_DAYS', 7);
// max age in days for various automatically cached (temporary) files
+ define_default('MAX_CONDITIONAL_INTERVAL', 3600*6);
+ // max interval between forced unconditional updates for servers
+ // not complying with http if-modified-since (seconds)
/* tunables end here */
diff --git a/schema/ttrss_schema_mysql.sql b/schema/ttrss_schema_mysql.sql
index 67a22e6d9..ce299f4e0 100644
--- a/schema/ttrss_schema_mysql.sql
+++ b/schema/ttrss_schema_mysql.sql
@@ -102,6 +102,7 @@ create table ttrss_feeds (id integer not null auto_increment primary key,
update_interval integer not null default 0,
purge_interval integer not null default 0,
last_updated datetime default null,
+ last_unconditional datetime default null,
last_error varchar(250) not null default '',
last_modified varchar(250) not null default '',
favicon_avg_color varchar(11) default null,
@@ -283,7 +284,7 @@ create table ttrss_tags (id integer primary key auto_increment,
create table ttrss_version (schema_version int not null) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
-insert into ttrss_version values (132);
+insert into ttrss_version values (133);
create table ttrss_enclosures (id integer primary key auto_increment,
content_url text not null,
diff --git a/schema/ttrss_schema_pgsql.sql b/schema/ttrss_schema_pgsql.sql
index 7870b4b37..9f3975353 100644
--- a/schema/ttrss_schema_pgsql.sql
+++ b/schema/ttrss_schema_pgsql.sql
@@ -72,6 +72,7 @@ create table ttrss_feeds (id serial not null primary key,
update_interval integer not null default 0,
purge_interval integer not null default 0,
last_updated timestamp default null,
+ last_unconditional timestamp default null,
last_error text not null default '',
last_modified text not null default '',
favicon_avg_color varchar(11) default null,
@@ -265,7 +266,7 @@ create index ttrss_tags_post_int_id_idx on ttrss_tags(post_int_id);
create table ttrss_version (schema_version int not null);
-insert into ttrss_version values (132);
+insert into ttrss_version values (133);
create table ttrss_enclosures (id serial not null primary key,
content_url text not null,
diff --git a/schema/versions/mysql/133.sql b/schema/versions/mysql/133.sql
new file mode 100644
index 000000000..e1693a9cb
--- /dev/null
+++ b/schema/versions/mysql/133.sql
@@ -0,0 +1,7 @@
+begin;
+
+alter table ttrss_feeds add column last_unconditional datetime null;
+
+UPDATE ttrss_version SET schema_version = 133;
+
+commit;
diff --git a/schema/versions/pgsql/133.sql b/schema/versions/pgsql/133.sql
new file mode 100644
index 000000000..7bf2f9fa6
--- /dev/null
+++ b/schema/versions/pgsql/133.sql
@@ -0,0 +1,7 @@
+begin;
+
+alter table ttrss_feeds add column last_unconditional timestamp null;
+
+UPDATE ttrss_version SET schema_version = 133;
+
+commit;