Skip to content

Commit 3dd4eba

Browse files
committed
Extract the funciton
This way we can set the return type
1 parent a9ec896 commit 3dd4eba

File tree

1 file changed

+28
-17
lines changed

1 file changed

+28
-17
lines changed

webapp/src/Service/DOMJudgeService.php

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ class DOMJudgeService
7474
protected ?Executable $defaultCompareExecutable = null;
7575
protected ?Executable $defaultRunExecutable = null;
7676

77+
private string $localVersionString = '';
78+
7779
final public const EVAL_DEFAULT = 0;
7880
final public const EVAL_LAZY = 1;
7981
final public const EVAL_FULL = 2;
@@ -1708,6 +1710,25 @@ public function getAllowedLanguagesForContest(?Contest $contest) : array {
17081710
->getResult();
17091711
}
17101712

1713+
/**
1714+
* @return String[]|false
1715+
*/
1716+
public function cacher_checkNewVersion(ItemInterface $item): array|false {
1717+
$item->expiresAfter(86400);
1718+
1719+
$versionUrl = 'https://versions.domjudge.org';
1720+
$options = ['http' => ['timeout' => 1, 'method' => 'GET', 'header' => "User-Agent: DOMjudge#" . $this->domjudgeInstallMethod . "/" . $this->localVersionString . "\r\n"]];
1721+
$context = stream_context_create($options);
1722+
$response = @file_get_contents($versionUrl, false, $context);
1723+
if ($response === false) {
1724+
return false;
1725+
}
1726+
// Assume we get a one-level unordered JSON list with the released versions e.g. ["10.0.0", "9.11.0", "12.0.12", "10.0.1"]
1727+
$tmp_versions = json_decode($response, true);
1728+
natsort($tmp_versions);
1729+
return array_reverse($tmp_versions);
1730+
}
1731+
17111732
/**
17121733
* Returns either the next strictly higher version or false when nothing is found/requested.
17131734
*/
@@ -1718,29 +1739,19 @@ public function checkNewVersion(): string|false {
17181739
// The local version is something like "x.y.z / commit hash", e.g. "8.4.0DEV/4e25adb13" for development
17191740
// or 8.3.2 for a released version
17201741
// In case of development we remove the commit hash for some anonymity but keep the DEV to not count those as the (possibly) released version
1721-
$localVersionString = strtok($this->domjudgeVersion, "/");
1722-
$localVersion = explode(".", $localVersionString);
1742+
$this->localVersionString = (string)strtok($this->domjudgeVersion, "/");
1743+
$localVersion = explode(".", $this->localVersionString);
17231744
if (count($localVersion) !== 3) {
17241745
// Unknown version, someone might have locally modified and used their own versioning
17251746
return false;
17261747
}
17271748

17281749
$cache = new FilesystemAdapter();
1729-
$versions = $cache->get('domjudge_versions', function (ItemInterface $item, string $localVersionString): string|false {
1730-
$item->expiresAfter(86400);
1731-
1732-
$versionUrl = 'https://versions.domjudge.org';
1733-
$options = ['http' => ['timeout' => 1, 'method' => 'GET', 'header' => "User-Agent: DOMjudge#" . $this->domjudgeInstallMethod . "/" . $localVersionString . "\r\n"]];
1734-
$context = stream_context_create($options);
1735-
$response = @file_get_contents($versionUrl, false, $context);
1736-
if ($response === false) {
1737-
return false;
1738-
}
1739-
// Assume we get a one-level unordered JSON list with the released versions e.g. ["10.0.0", "9.11.0", "12.0.12", "10.0.1"]
1740-
$tmp_versions = json_decode($response, true);
1741-
natsort($tmp_versions);
1742-
return array_reverse($tmp_versions);
1743-
});
1750+
try {
1751+
$versions = $cache->get('domjudge_versions', [$this, 'cacher_checkNewVersion']);
1752+
} catch (InvalidArgumentException $e) {
1753+
return false;
1754+
}
17441755

17451756
if (!$versions) {
17461757
return false;

0 commit comments

Comments
 (0)