diff --git a/.gitignore b/.gitignore index 82b8973..9d8b304 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ update* make-archive.sh +*.sqlite +*.db \ No newline at end of file diff --git a/README.markdown b/README.markdown index a0e2548..cd7de1f 100644 --- a/README.markdown +++ b/README.markdown @@ -67,13 +67,28 @@ FAQ ### How to update your feeds with a cronjob? -You just need to be inside the directory `miniflux` and run the script `cronjob.php`. +You just need to be inside the directory `miniflux` and run the script `cronjob.php`. -By example: +Prameters | Type | Value +-------------------|--------------------------------|----------------------------- +--limit | optional |time in minutes +--call-interval | optional, exclude by --limit, requires --update-interval |time in minutes < update inteval time +--update-interval | optional, exclude by --limit, requires --call-interval |time in minutes >= call interval time + + +Examples: crontab -e 0 */4 * * * cd /path/to/miniflux && php cronjob.php >/dev/null 2>&1 + + # Updates the 10 oldest feeds each time + + 0 */4 * * * cd /path/to/miniflux && php cronjob.php --limit=10 >/dev/null 2>&1 + + # Updates all feeds in 60mn (updates the 8 oldest feeds each time with a total of 120 feeds). + + 0 */4 * * * cd /path/to/miniflux && php cronjob.php --call-interval=4 --update-interval=60 >/dev/null 2>&1 ### How Miniflux update my feeds from the user interface? diff --git a/miniflux/common.php b/miniflux/common.php index 7c0e222..e41803b 100644 --- a/miniflux/common.php +++ b/miniflux/common.php @@ -10,17 +10,21 @@ require 'schema.php'; require 'model.php'; -const DB_VERSION = 4; -const APP_VERSION = 'master'; +const DB_VERSION = 5; +const APP_VERSION = 'master'; const APP_USERAGENT = 'Miniflux - http://miniflux.net'; -const HTTP_TIMEOUT = 5; - +const HTTP_TIMEOUT = 5; +const LIMIT_ALL = -1; function get_db_filename() { return 'data/db.sqlite'; } +function is_console() +{ + return php_sapi_name() === 'cli'; +} PicoTools\container('db', function() { diff --git a/miniflux/cronjob.php b/miniflux/cronjob.php index 796240e..b85920b 100644 --- a/miniflux/cronjob.php +++ b/miniflux/cronjob.php @@ -1,5 +1,22 @@ = $call_interval) { + + $feeds_count = \PicoTools\singleton('db')->table('feeds')->count(); + $limit = ceil($feeds_count / ( $update_interval / $call_interval )) ; // compute new limit + } + + Model\update_feeds($limit); +} diff --git a/miniflux/model.php b/miniflux/model.php index 2bcf339..8365a2d 100644 --- a/miniflux/model.php +++ b/miniflux/model.php @@ -107,10 +107,11 @@ function import_feed($url) return false; } - -function update_feeds() +function update_feeds($limit = LIMIT_ALL) { - foreach (get_feeds_id() as $feed_id) { + $feeds_id = get_feeds_id($limit); + + foreach ($feeds_id as $feed_id) { update_feed($feed_id); } @@ -134,6 +135,8 @@ function update_feed($feed_id) APP_USERAGENT ); + update_feed_last_checked($feed_id); + if (! $resource->isModified()) { return true; @@ -158,12 +161,18 @@ function update_feed($feed_id) } -function get_feeds_id() +function get_feeds_id($limit = LIMIT_ALL) { - return \PicoTools\singleton('db') - ->table('feeds') - ->asc('updated') - ->listing('id', 'id'); + $table_feeds = \PicoTools\singleton('db')->table('feeds') + ->asc('last_checked'); + + if($limit !== LIMIT_ALL) { + + $table_feeds->limit((int)$limit); + } + + return $table_feeds->listing('id', 'id'); + } @@ -184,6 +193,14 @@ function get_feed($feed_id) ->findOne(); } +function update_feed_last_checked($feed_id) { + \PicoTools\singleton('db') + ->table('feeds') + ->eq('id', $feed_id) + ->save(array( + 'last_checked' => time(), + )); +} function update_feed_cache_infos($feed_id, $last_modified, $etag) { @@ -192,7 +209,8 @@ function update_feed_cache_infos($feed_id, $last_modified, $etag) ->eq('id', $feed_id) ->save(array( 'last_modified' => $last_modified, - 'etag' => $etag + 'etag' => $etag, + 'last_checked' => time(), )); } diff --git a/miniflux/schema.php b/miniflux/schema.php index 4007577..9907b10 100644 --- a/miniflux/schema.php +++ b/miniflux/schema.php @@ -2,6 +2,10 @@ namespace Schema; +function version_5($pdo) +{ + $pdo->exec('ALTER TABLE feeds ADD COLUMN last_checked INTEGER'); +} function version_4($pdo) { diff --git a/miniflux/templates/read_item.php b/miniflux/templates/read_item.php index 6af5719..e097335 100644 --- a/miniflux/templates/read_item.php +++ b/miniflux/templates/read_item.php @@ -3,7 +3,6 @@

-