aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2016-10-12 21:37:01 +0200
committerGravatar GitHub <noreply@github.com> 2016-10-12 21:37:01 +0200
commit8ee61c1f788980f8fb862b4cfd75eba5e78a2547 (patch)
tree139d72232e21305ad7501fca2c5c52b0c50708b2
parent2630393587fccb8f14c1b61208debc30d314c015 (diff)
parent8a923aa8c75cae951e9700b44010304aea506340 (diff)
Merge pull request #1306 from Alkarex/cron-favicon
Cron refresh favicons
-rw-r--r--CHANGELOG.md1
-rw-r--r--app/Models/Context.php2
-rw-r--r--app/Models/Feed.php25
-rwxr-xr-xapp/actualize_script.php1
-rw-r--r--lib/favicons.php40
-rw-r--r--p/f.php46
6 files changed, 65 insertions, 50 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 68967bbba..3178e6ae7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,7 @@
* Support custom ports `localhost:3306` for database servers [#1241](https://github.com/FreshRSS/FreshRSS/issues/1241)
* Add date to exported files [#1240](https://github.com/FreshRSS/FreshRSS/issues/1240)
* Auto-refresh favicons once or twice a month [#1181](https://github.com/FreshRSS/FreshRSS/issues/1181), [#1298](https://github.com/FreshRSS/FreshRSS/issues/1298)
+ * Cron updates will also refresh favicons every 2 weeks [#1306](https://github.com/FreshRSS/FreshRSS/pull/1306)
* Bug fixing
* Correction of bugs related CSRF tokens introduced in version 1.5.0 [#1253](https://github.com/FreshRSS/FreshRSS/issues/1253), [44f22ab](https://github.com/FreshRSS/FreshRSS/pull/1261/commits/d9bf9b2c6f0b2cc9dec3b638841b7e3040dcf46f)
* Fix bug in Global view introduced in version 1.5.0 [#1269](https://github.com/FreshRSS/FreshRSS/pull/1269)
diff --git a/app/Models/Context.php b/app/Models/Context.php
index a38b1e0f1..889ddab1e 100644
--- a/app/Models/Context.php
+++ b/app/Models/Context.php
@@ -37,6 +37,8 @@ class FreshRSS_Context {
public static $id_max = '';
public static $sinceHours = 0;
+ public static $isCron = false;
+
/**
* Initialize the context.
*
diff --git a/app/Models/Feed.php b/app/Models/Feed.php
index 21c1ef93d..55c2db4d6 100644
--- a/app/Models/Feed.php
+++ b/app/Models/Feed.php
@@ -131,13 +131,26 @@ class FreshRSS_Feed extends Minz_Model {
return $this->nbNotRead;
}
public function faviconPrepare() {
- $file = DATA_PATH . '/favicons/' . $this->hash() . '.txt';
- if (!file_exists($file)) {
- $t = $this->website;
- if ($t == '') {
- $t = $this->url;
+ global $favicons_dir;
+ require_once(LIB_PATH . '/favicons.php');
+ $url = $this->website;
+ if ($url == '') {
+ $url = $this->url;
+ }
+ $txt = $favicons_dir . $this->hash() . '.txt';
+ if (!file_exists($txt)) {
+ file_put_contents($txt, $url);
+ }
+ if (FreshRSS_Context::$isCron) {
+ $ico = $favicons_dir . $this->hash() . '.ico';
+ $ico_mtime = @filemtime($ico);
+ $txt_mtime = @filemtime($txt);
+ if ($txt_mtime != false &&
+ ($ico_mtime == false || $ico_mtime < $txt_mtime || ($ico_mtime < time() - (14 * 86400)))) {
+ // no ico file or we should download a new one.
+ $url = file_get_contents($txt);
+ download_favicon($url, $ico) || touch($ico);
}
- file_put_contents($file, $t);
}
}
public static function faviconDelete($hash) {
diff --git a/app/actualize_script.php b/app/actualize_script.php
index fc4f9bfbb..78712d721 100755
--- a/app/actualize_script.php
+++ b/app/actualize_script.php
@@ -28,6 +28,7 @@ $app = new FreshRSS();
$system_conf = Minz_Configuration::get('system');
$system_conf->auth_type = 'none'; // avoid necessity to be logged in (not saved!)
+FreshRSS_Context::$isCron = true;
// Create the list of users to actualize.
// Users are processed in a random order but always start with admin
diff --git a/lib/favicons.php b/lib/favicons.php
new file mode 100644
index 000000000..6709f6745
--- /dev/null
+++ b/lib/favicons.php
@@ -0,0 +1,40 @@
+<?php
+
+include(LIB_PATH . '/Favicon/Favicon.php');
+include(LIB_PATH . '/Favicon/DataAccess.php');
+
+$favicons_dir = DATA_PATH . '/favicons/';
+$default_favicon = PUBLIC_PATH . '/themes/icons/default_favicon.ico';
+
+function download_favicon($website, $dest) {
+ global $favicons_dir, $default_favicon;
+
+ syslog(LOG_DEBUG, 'FreshRSS Favicon discovery GET ' . $website);
+ $favicon_getter = new \Favicon\Favicon();
+ $favicon_getter->setCacheDir($favicons_dir);
+ $favicon_url = $favicon_getter->get($website);
+
+ if ($favicon_url === false) {
+ return @copy($default_favicon, $dest);
+ }
+
+ syslog(LOG_DEBUG, 'FreshRSS Favicon GET ' . $favicon_url);
+ $c = curl_init($favicon_url);
+ curl_setopt($c, CURLOPT_HEADER, false);
+ curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($c, CURLOPT_BINARYTRANSFER, true);
+ $img_raw = curl_exec($c);
+ $status_code = curl_getinfo($c, CURLINFO_HTTP_CODE);
+ curl_close($c);
+
+ if ($status_code === 200) {
+ $file = fopen($dest, 'w');
+ if ($file !== false) {
+ fwrite($file, $img_raw);
+ fclose($file);
+ return true;
+ }
+ }
+
+ return false;
+}
diff --git a/p/f.php b/p/f.php
index df3e4b5f3..e4c82bb16 100644
--- a/p/f.php
+++ b/p/f.php
@@ -1,51 +1,9 @@
<?php
require('../constants.php');
-
-include(LIB_PATH . '/Favicon/Favicon.php');
-include(LIB_PATH . '/Favicon/DataAccess.php');
+require(LIB_PATH . '/favicons.php');
require(LIB_PATH . '/http-conditional.php');
-
-$favicons_dir = DATA_PATH . '/favicons/';
-$default_favicon = PUBLIC_PATH . '/themes/icons/default_favicon.ico';
-
-
-/* Télécharge le favicon d'un site et le place sur le serveur */
-function download_favicon($website, $dest) {
- global $favicons_dir, $default_favicon;
-
- syslog(LOG_DEBUG, 'FreshRSS Favicon discovery GET ' . $website);
- $favicon_getter = new \Favicon\Favicon();
- $favicon_getter->setCacheDir($favicons_dir);
- $favicon_url = $favicon_getter->get($website);
-
- if ($favicon_url === false) {
- return @copy($default_favicon, $dest);
- }
-
- syslog(LOG_DEBUG, 'FreshRSS Favicon GET ' . $favicon_url);
- $c = curl_init($favicon_url);
- curl_setopt($c, CURLOPT_HEADER, false);
- curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($c, CURLOPT_BINARYTRANSFER, true);
- $img_raw = curl_exec($c);
- $status_code = curl_getinfo($c, CURLINFO_HTTP_CODE);
- curl_close($c);
-
- if ($status_code === 200) {
- $file = fopen($dest, 'w');
- if ($file !== false) {
- fwrite($file, $img_raw);
- fclose($file);
- return true;
- }
- }
-
- return false;
-}
-
-
function show_default_favicon($cacheSeconds = 3600) {
global $default_favicon;
@@ -71,7 +29,7 @@ $txt_mtime = @filemtime($txt);
header('Content-Type: image/x-icon');
-if ($ico_mtime == false || $txt_mtime > $ico_mtime || ($ico_mtime < time() - (rand(15, 20) * 86400))) {
+if ($ico_mtime == false || $ico_mtime < $txt_mtime || ($ico_mtime < time() - (rand(15, 20) * 86400))) {
if ($txt_mtime == false) {
show_default_favicon(1800);
exit();