فهرست منبع

Merge pull request #1306 from Alkarex/cron-favicon

Cron refresh favicons
Alexandre Alapetite 9 سال پیش
والد
کامیت
8ee61c1f78
6فایلهای تغییر یافته به همراه65 افزوده شده و 50 حذف شده
  1. 1 0
      CHANGELOG.md
  2. 2 0
      app/Models/Context.php
  3. 19 6
      app/Models/Feed.php
  4. 1 0
      app/actualize_script.php
  5. 40 0
      lib/favicons.php
  6. 2 44
      p/f.php

+ 1 - 0
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)

+ 2 - 0
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.
 	 *

+ 19 - 6
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) {

+ 1 - 0
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

+ 40 - 0
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;
+}

+ 2 - 44
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();