forked from blallo/rss-bridge
Implement customizable cache timeout (#641)
* [BridgeAbstract] Implement customizable cache timeout The customizable cache timeout is used instead of the default cache timeout (CACHE_TIMEOUT) if specified by the caller. * [index] Add new global parameter '_cache_timeout' The _cache_timeout parameter is an optional parameter that can be used to specify a custom cache timeout. This option is enabled by default. It can be disabled using the named constant 'CUSTOM_CACHE_TIMEOUT' which supports two states: > true: Enabled (default) > false: Disabled * [BridgeAbstract] Change scope of 'getCacheTimeout' to public * [html] Add cache timeout parameter to all bridges The timeout parameter only shows if CUSTOM_CACHE_TIMEOUT has been set to true. The default value is automatically set to the value specified in the bridge. * [index] Disable custom cache timeout by default
This commit is contained in:
parent
cacbe90102
commit
8ba817478b
4 changed files with 81 additions and 2 deletions
16
index.php
16
index.php
|
@ -19,6 +19,10 @@ define('PROXY_BYBRIDGE', false);
|
||||||
// Comment this line or keep PROXY_NAME empty to display PROXY_URL instead
|
// Comment this line or keep PROXY_NAME empty to display PROXY_URL instead
|
||||||
define('PROXY_NAME', 'Hidden Proxy Name');
|
define('PROXY_NAME', 'Hidden Proxy Name');
|
||||||
|
|
||||||
|
// Allows the operator to specify custom cache timeouts via '&_cache_timeout=3600'
|
||||||
|
// true: enabled, false: disabled (default)
|
||||||
|
define('CUSTOM_CACHE_TIMEOUT', false);
|
||||||
|
|
||||||
date_default_timezone_set('UTC');
|
date_default_timezone_set('UTC');
|
||||||
error_reporting(0);
|
error_reporting(0);
|
||||||
|
|
||||||
|
@ -168,6 +172,16 @@ try {
|
||||||
define('NOPROXY', true);
|
define('NOPROXY', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Custom cache timeout
|
||||||
|
$cache_timeout = -1;
|
||||||
|
if(array_key_exists('_cache_timeout', $params)) {
|
||||||
|
if(!CUSTOM_CACHE_TIMEOUT) {
|
||||||
|
throw new \HttpException('This server doesn\'t support "_cache_timeout"!');
|
||||||
|
}
|
||||||
|
|
||||||
|
$cache_timeout = filter_var($params['_cache_timeout'], FILTER_VALIDATE_INT);
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize cache
|
// Initialize cache
|
||||||
$cache = Cache::create('FileCache');
|
$cache = Cache::create('FileCache');
|
||||||
$cache->setPath(CACHE_DIR);
|
$cache->setPath(CACHE_DIR);
|
||||||
|
@ -178,10 +192,12 @@ try {
|
||||||
unset($params['bridge']);
|
unset($params['bridge']);
|
||||||
unset($params['format']);
|
unset($params['format']);
|
||||||
unset($params['_noproxy']);
|
unset($params['_noproxy']);
|
||||||
|
unset($params['_cache_timeout']);
|
||||||
|
|
||||||
// Load cache & data
|
// Load cache & data
|
||||||
try {
|
try {
|
||||||
$bridge->setCache($cache);
|
$bridge->setCache($cache);
|
||||||
|
$bridge->setCacheTimeout($cache_timeout);
|
||||||
$bridge->setDatas($params);
|
$bridge->setDatas($params);
|
||||||
} catch(Exception $e) {
|
} catch(Exception $e) {
|
||||||
http_response_code($e->getCode());
|
http_response_code($e->getCode());
|
||||||
|
|
|
@ -14,6 +14,7 @@ abstract class BridgeAbstract implements BridgeInterface {
|
||||||
protected $items = array();
|
protected $items = array();
|
||||||
protected $inputs = array();
|
protected $inputs = array();
|
||||||
protected $queriedContext = '';
|
protected $queriedContext = '';
|
||||||
|
protected $cacheTimeout;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return cachable datas (extrainfos and items) stored in the bridge
|
* Return cachable datas (extrainfos and items) stored in the bridge
|
||||||
|
@ -171,7 +172,7 @@ abstract class BridgeAbstract implements BridgeInterface {
|
||||||
if(!is_null($this->cache)) {
|
if(!is_null($this->cache)) {
|
||||||
$time = $this->cache->getTime();
|
$time = $this->cache->getTime();
|
||||||
if($time !== false
|
if($time !== false
|
||||||
&& (time() - static::CACHE_TIMEOUT < $time)
|
&& (time() - $this->getCacheTimeout() < $time)
|
||||||
&& (!defined('DEBUG') || DEBUG !== true)) {
|
&& (!defined('DEBUG') || DEBUG !== true)) {
|
||||||
$cached = $this->cache->loadData();
|
$cached = $this->cache->loadData();
|
||||||
if(isset($cached['items']) && isset($cached['extraInfos'])) {
|
if(isset($cached['items']) && isset($cached['extraInfos'])) {
|
||||||
|
@ -268,4 +269,17 @@ abstract class BridgeAbstract implements BridgeInterface {
|
||||||
public function setCache(\CacheInterface $cache){
|
public function setCache(\CacheInterface $cache){
|
||||||
$this->cache = $cache;
|
$this->cache = $cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setCacheTimeout($timeout){
|
||||||
|
if(is_numeric($timeout) && ($timeout < 1 || $timeout > 86400)) {
|
||||||
|
$this->cacheTimeout = static::CACHE_TIMEOUT;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->cacheTimeout = $timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCacheTimeout(){
|
||||||
|
return isset($this->cacheTimeout) ? $this->cacheTimeout : static::CACHE_TIMEOUT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,4 +68,20 @@ interface BridgeInterface {
|
||||||
* @param object CacheInterface The cache instance
|
* @param object CacheInterface The cache instance
|
||||||
*/
|
*/
|
||||||
public function setCache(\CacheInterface $cache);
|
public function setCache(\CacheInterface $cache);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the timeout for clearing the cache files. The timeout must be
|
||||||
|
* specified between 1..86400 seconds (max. 24 hours). The default timeout
|
||||||
|
* (specified by the bridge maintainer) applies for invalid values.
|
||||||
|
*
|
||||||
|
* @param int $timeout The cache timeout in seconds
|
||||||
|
*/
|
||||||
|
public function setCacheTimeout($timeout);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the cache timeout
|
||||||
|
*
|
||||||
|
* @return int Cache timeout
|
||||||
|
*/
|
||||||
|
public function getCacheTimeout();
|
||||||
}
|
}
|
||||||
|
|
35
lib/html.php
35
lib/html.php
|
@ -75,8 +75,24 @@ CARD;
|
||||||
. ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL)
|
. ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL)
|
||||||
. ')</label><br />'
|
. ')</label><br />'
|
||||||
. PHP_EOL;
|
. PHP_EOL;
|
||||||
}
|
} if(CUSTOM_CACHE_TIMEOUT) {
|
||||||
|
$idArg = 'arg-'
|
||||||
|
. urlencode($bridgeName)
|
||||||
|
. '-'
|
||||||
|
. urlencode('_cache_timeout');
|
||||||
|
|
||||||
|
$card .= '<label for="'
|
||||||
|
. $idArg
|
||||||
|
. '">Cache timeout in seconds : </label>'
|
||||||
|
. PHP_EOL;
|
||||||
|
|
||||||
|
$card .= '<input id="'
|
||||||
|
. $idArg
|
||||||
|
. '" type="number" value="'
|
||||||
|
. $bridge->getCacheTimeout()
|
||||||
|
. '" name="_cache_timeout" /><br />'
|
||||||
|
. PHP_EOL;
|
||||||
|
}
|
||||||
$card .= $getHelperButtonsFormat($formats);
|
$card .= $getHelperButtonsFormat($formats);
|
||||||
} else {
|
} else {
|
||||||
$card .= '<span style="font-weight: bold;">Inactive</span>';
|
$card .= '<span style="font-weight: bold;">Inactive</span>';
|
||||||
|
@ -251,6 +267,23 @@ CARD;
|
||||||
. ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL)
|
. ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL)
|
||||||
. ')</label><br />'
|
. ')</label><br />'
|
||||||
. PHP_EOL;
|
. PHP_EOL;
|
||||||
|
} if(CUSTOM_CACHE_TIMEOUT) {
|
||||||
|
$idArg = 'arg-'
|
||||||
|
. urlencode($bridgeName)
|
||||||
|
. '-'
|
||||||
|
. urlencode('_cache_timeout');
|
||||||
|
|
||||||
|
$card .= '<label for="'
|
||||||
|
. $idArg
|
||||||
|
. '">Cache timeout in seconds : </label>'
|
||||||
|
. PHP_EOL;
|
||||||
|
|
||||||
|
$card .= '<input id="'
|
||||||
|
. $idArg
|
||||||
|
. '" type="number" value="'
|
||||||
|
. $bridge->getCacheTimeout()
|
||||||
|
. '" name="_cache_timeout" /><br />'
|
||||||
|
. PHP_EOL;
|
||||||
}
|
}
|
||||||
$card .= $getHelperButtonsFormat($formats);
|
$card .= $getHelperButtonsFormat($formats);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue