+++ /dev/null
-<?php
-
-/*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2017 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Psy\VersionUpdater;
-
-use Psy\Shell;
-
-class IntervalChecker extends GitHubChecker
-{
- private $cacheFile;
- private $interval;
-
- public function __construct($cacheFile, $interval)
- {
- $this->cacheFile = $cacheFile;
- $this->interval = $interval;
- }
-
- public function fetchLatestRelease()
- {
- // Read the cached file
- $cached = json_decode(@file_get_contents($this->cacheFile, false));
- if ($cached && isset($cached->last_check) && isset($cached->release)) {
- $now = new \DateTime();
- $lastCheck = new \DateTime($cached->last_check);
- if ($lastCheck >= $now->sub($this->getDateInterval())) {
- return $cached->release;
- }
- }
-
- // Fall back to fetching from GitHub
- $release = parent::fetchLatestRelease();
- if ($release && isset($release->tag_name)) {
- $this->updateCache($release);
- }
-
- return $release;
- }
-
- private function getDateInterval()
- {
- switch ($this->interval) {
- case Checker::DAILY:
- return new \DateInterval('P1D');
- case Checker::WEEKLY:
- return new \DateInterval('P1W');
- case Checker::MONTHLY:
- return new \DateInterval('P1M');
- }
- }
-
- private function updateCache($release)
- {
- $data = array(
- 'last_check' => date(DATE_ATOM),
- 'release' => $release,
- );
-
- file_put_contents($this->cacheFile, json_encode($data));
- }
-}