Browse Source

Always use the cache

If there is no cache available we will use the null cache. Which (you
guessed it) just doesn't do anything. This makes the code flow a bit
nicer and psalm a bit happier.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
pull/25578/head
Roeland Jago Douma 5 years ago
parent
commit
bf4210aa8d
  1. 41
      apps/weather_status/lib/Service/WeatherStatusService.php

41
apps/weather_status/lib/Service/WeatherStatusService.php

@ -72,9 +72,6 @@ class WeatherStatusService {
/** @var IAppManager */
private $appManager;
/** @var ICacheFactory */
private $cacheFactory;
/** @var ICache */
private $cache;
@ -116,9 +113,7 @@ class WeatherStatusService {
$this->version = $appManager->getAppVersion(Application::APP_ID);
$this->clientService = $clientService;
$this->client = $clientService->newClient();
if ($cacheFactory->isAvailable()) {
$this->cache = $cacheFactory->createDistributed();
}
$this->cache = $cacheFactory->createDistributed('weatherstatus');
}
/**
@ -397,12 +392,12 @@ class WeatherStatusService {
* @return array which contains the error message or the parsed JSON result
*/
private function requestJSON(string $url, array $params = []): array {
if (isset($this->cache)) {
$cacheKey = $url . '|' . implode(',', $params) . '|' . implode(',', array_keys($params));
if ($this->cache->hasKey($cacheKey)) {
return $this->cache->get($cacheKey);
}
$cacheKey = $url . '|' . implode(',', $params) . '|' . implode(',', array_keys($params));
$cacheValue = $this->cache->get($cacheKey);
if ($cacheValue !== null) {
return $cacheValue;
}
try {
$options = [
'headers' => [
@ -425,20 +420,20 @@ class WeatherStatusService {
return ['error' => $this->l10n->t('Error')];
} else {
$json = json_decode($body, true);
if (isset($this->cache)) {
// default cache duration is one hour
$cacheDuration = 60 * 60;
if (isset($headers['Expires']) && count($headers['Expires']) > 0) {
// if the Expires response header is set, use it to define cache duration
$expireTs = (new \Datetime($headers['Expires'][0]))->getTimestamp();
$nowTs = (new \Datetime())->getTimestamp();
$duration = $expireTs - $nowTs;
if ($duration > $cacheDuration) {
$cacheDuration = $duration;
}
// default cache duration is one hour
$cacheDuration = 60 * 60;
if (isset($headers['Expires']) && count($headers['Expires']) > 0) {
// if the Expires response header is set, use it to define cache duration
$expireTs = (new \Datetime($headers['Expires'][0]))->getTimestamp();
$nowTs = (new \Datetime())->getTimestamp();
$duration = $expireTs - $nowTs;
if ($duration > $cacheDuration) {
$cacheDuration = $duration;
}
$this->cache->set($cacheKey, $json, $cacheDuration);
}
$this->cache->set($cacheKey, $json, $cacheDuration);
return $json;
}
} catch (\Exception $e) {

Loading…
Cancel
Save