aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Models/Context.php2
-rw-r--r--app/Models/Feed.php24
-rwxr-xr-xapp/actualize_script.php1
-rw-r--r--lib/favicons.php40
-rw-r--r--p/f.php46
5 files changed, 63 insertions, 50 deletions
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..b78f5f064 100644
--- a/app/Models/Feed.php
+++ b/app/Models/Feed.php
@@ -131,13 +131,25 @@ 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;
+ 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 < 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();