annotate vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children a9cd425dd02b
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of Psy Shell.
Chris@0 5 *
Chris@0 6 * (c) 2012-2018 Justin Hileman
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Psy\VersionUpdater;
Chris@0 13
Chris@0 14 use Psy\Shell;
Chris@0 15
Chris@0 16 class IntervalChecker extends GitHubChecker
Chris@0 17 {
Chris@0 18 private $cacheFile;
Chris@0 19 private $interval;
Chris@0 20
Chris@0 21 public function __construct($cacheFile, $interval)
Chris@0 22 {
Chris@0 23 $this->cacheFile = $cacheFile;
Chris@0 24 $this->interval = $interval;
Chris@0 25 }
Chris@0 26
Chris@0 27 public function fetchLatestRelease()
Chris@0 28 {
Chris@0 29 // Read the cached file
Chris@0 30 $cached = json_decode(@file_get_contents($this->cacheFile, false));
Chris@0 31 if ($cached && isset($cached->last_check) && isset($cached->release)) {
Chris@0 32 $now = new \DateTime();
Chris@0 33 $lastCheck = new \DateTime($cached->last_check);
Chris@0 34 if ($lastCheck >= $now->sub($this->getDateInterval())) {
Chris@0 35 return $cached->release;
Chris@0 36 }
Chris@0 37 }
Chris@0 38
Chris@0 39 // Fall back to fetching from GitHub
Chris@0 40 $release = parent::fetchLatestRelease();
Chris@0 41 if ($release && isset($release->tag_name)) {
Chris@0 42 $this->updateCache($release);
Chris@0 43 }
Chris@0 44
Chris@0 45 return $release;
Chris@0 46 }
Chris@0 47
Chris@0 48 private function getDateInterval()
Chris@0 49 {
Chris@0 50 switch ($this->interval) {
Chris@0 51 case Checker::DAILY:
Chris@0 52 return new \DateInterval('P1D');
Chris@0 53 case Checker::WEEKLY:
Chris@0 54 return new \DateInterval('P1W');
Chris@0 55 case Checker::MONTHLY:
Chris@0 56 return new \DateInterval('P1M');
Chris@0 57 }
Chris@0 58 }
Chris@0 59
Chris@0 60 private function updateCache($release)
Chris@0 61 {
Chris@0 62 $data = [
Chris@0 63 'last_check' => date(DATE_ATOM),
Chris@0 64 'release' => $release,
Chris@0 65 ];
Chris@0 66
Chris@0 67 file_put_contents($this->cacheFile, json_encode($data));
Chris@0 68 }
Chris@0 69 }