2016-02-09 07:06:48 -05:00
|
|
|
<?php
|
2019-12-03 13:57:53 -05:00
|
|
|
|
2018-01-17 07:42:02 -05:00
|
|
|
declare(strict_types=1);
|
2019-12-03 13:57:53 -05:00
|
|
|
|
2016-02-09 07:06:48 -05:00
|
|
|
/**
|
2024-05-30 14:13:41 -04:00
|
|
|
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
|
|
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
2016-02-09 07:06:48 -05:00
|
|
|
*/
|
|
|
|
|
namespace OCA\UpdateNotification;
|
|
|
|
|
|
2018-06-26 11:25:37 -04:00
|
|
|
use OC\Updater\ChangesCheck;
|
2016-04-11 07:19:22 -04:00
|
|
|
use OC\Updater\VersionCheck;
|
2024-09-24 11:23:48 -04:00
|
|
|
use OCP\AppFramework\Services\IInitialState;
|
2016-02-09 07:06:48 -05:00
|
|
|
|
|
|
|
|
class UpdateChecker {
|
|
|
|
|
|
2024-09-24 11:23:48 -04:00
|
|
|
public function __construct(
|
|
|
|
|
private VersionCheck $updater,
|
|
|
|
|
private ChangesCheck $changesCheck,
|
|
|
|
|
private IInitialState $initialState,
|
|
|
|
|
) {
|
2016-02-09 07:06:48 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
2018-01-17 07:42:02 -05:00
|
|
|
public function getUpdateState(): array {
|
2016-02-09 07:06:48 -05:00
|
|
|
$data = $this->updater->check();
|
|
|
|
|
$result = [];
|
|
|
|
|
|
2018-01-17 07:42:02 -05:00
|
|
|
if (isset($data['version']) && $data['version'] !== '' && $data['version'] !== []) {
|
2016-02-09 07:06:48 -05:00
|
|
|
$result['updateAvailable'] = true;
|
2018-11-08 08:50:12 -05:00
|
|
|
$result['updateVersion'] = $data['version'];
|
|
|
|
|
$result['updateVersionString'] = $data['versionstring'];
|
2016-09-27 08:47:59 -04:00
|
|
|
$result['updaterEnabled'] = $data['autoupdater'] === '1';
|
2018-03-14 09:21:49 -04:00
|
|
|
$result['versionIsEol'] = $data['eol'] === '1';
|
2018-01-17 07:42:02 -05:00
|
|
|
if (strpos($data['web'], 'https://') === 0) {
|
2016-02-09 07:06:48 -05:00
|
|
|
$result['updateLink'] = $data['web'];
|
|
|
|
|
}
|
2018-01-17 07:42:02 -05:00
|
|
|
if (strpos($data['url'], 'https://') === 0) {
|
2016-09-27 08:47:59 -04:00
|
|
|
$result['downloadLink'] = $data['url'];
|
|
|
|
|
}
|
2018-06-26 11:25:37 -04:00
|
|
|
if (strpos($data['changes'], 'https://') === 0) {
|
|
|
|
|
try {
|
|
|
|
|
$result['changes'] = $this->changesCheck->check($data['changes'], $data['version']);
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
// no info, not a problem
|
|
|
|
|
}
|
2018-05-30 09:53:08 -04:00
|
|
|
}
|
2016-02-09 07:06:48 -05:00
|
|
|
|
|
|
|
|
return $result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2024-09-24 11:23:48 -04:00
|
|
|
* Provide update information as initial state
|
2016-02-09 07:06:48 -05:00
|
|
|
*/
|
2024-09-24 11:23:48 -04:00
|
|
|
public function setInitialState(): void {
|
|
|
|
|
$updateState = $this->getUpdateState();
|
|
|
|
|
if (empty($updateState)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$this->initialState->provideInitialState('updateState', [
|
|
|
|
|
'updateVersion' => $updateState['updateVersionString'],
|
|
|
|
|
'updateLink' => $updateState['updateLink'] ?? '',
|
2016-02-09 07:06:48 -05:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|