Make sure the AppFetcher fetches the new applist from the appstore

When in the upgrade process the version in the config is still the old
version. (Since we only upgrade it after the upgrade is complete).
However the app list fetched from the appstore must be the new list.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
Roeland Jago Douma 2017-05-02 10:08:16 +02:00
parent 81ee0673a5
commit e79424932a
No known key found for this signature in database
GPG key ID: F941078878347C0C
4 changed files with 50 additions and 15 deletions

View file

@ -46,14 +46,7 @@ class AppFetcher extends Fetcher {
);
$this->fileName = 'apps.json';
$versionArray = explode('.', $this->config->getSystemValue('version'));
$this->endpointUrl = sprintf(
'https://apps.nextcloud.com/api/v1/platform/%d.%d.%d/apps.json',
$versionArray[0],
$versionArray[1],
$versionArray[2]
);
$this->setEndpoint();
}
/**
@ -68,7 +61,7 @@ class AppFetcher extends Fetcher {
/** @var mixed[] $response */
$response = parent::fetch($ETag, $content);
$ncVersion = $this->config->getSystemValue('version');
$ncVersion = $this->getVersion();
$ncMajorVersion = explode('.', $ncVersion)[0];
foreach($response['data'] as $dataKey => $app) {
$releases = [];
@ -118,4 +111,22 @@ class AppFetcher extends Fetcher {
$response['data'] = array_values($response['data']);
return $response;
}
private function setEndpoint() {
$versionArray = explode('.', $this->getVersion());
$this->endpointUrl = sprintf(
'https://apps.nextcloud.com/api/v1/platform/%d.%d.%d/apps.json',
$versionArray[0],
$versionArray[1],
$versionArray[2]
);
}
/**
* @param string $version
*/
public function setVersion($version) {
parent::setVersion($version);
$this->setEndpoint();
}
}

View file

@ -43,6 +43,8 @@ abstract class Fetcher {
protected $fileName;
/** @var string */
protected $endpointUrl;
/** @var string */
protected $version;
/**
* @param IAppData $appData
@ -95,7 +97,7 @@ abstract class Fetcher {
}
$responseJson['timestamp'] = $this->timeFactory->getTime();
$responseJson['ncversion'] = $this->config->getSystemValue('version');
$responseJson['ncversion'] = $this->getVersion();
if ($ETag !== '') {
$responseJson['ETag'] = $ETag;
}
@ -127,7 +129,7 @@ abstract class Fetcher {
if (is_array($jsonBlob)) {
// No caching when the version has been updated
if (isset($jsonBlob['ncversion']) && $jsonBlob['ncversion'] === $this->config->getSystemValue('version', '0.0.0')) {
if (isset($jsonBlob['ncversion']) && $jsonBlob['ncversion'] === $this->getVersion()) {
// If the timestamp is older than 300 seconds request the files new
if ((int)$jsonBlob['timestamp'] > ($this->timeFactory->getTime() - self::INVALIDATE_AFTER_SECONDS)) {
@ -154,4 +156,23 @@ abstract class Fetcher {
return [];
}
}
/**
* Get the currently Nextcloud version
* @return string
*/
protected function getVersion() {
if ($this->version === null) {
$this->version = $this->config->getSystemValue('version', '0.0.0');
}
return $this->version;
}
/**
* Set the current Nextcloud version
* @param string $version
*/
public function setVersion($version) {
$this->version = $version;
}
}

View file

@ -420,7 +420,7 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerService('AppHelper', function ($c) {
return new \OC\AppHelper();
});
$this->registerService('AppFetcher', function ($c) {
$this->registerService(AppFetcher::class, function ($c) {
return new AppFetcher(
$this->getAppDataDir('appstore'),
$this->getHTTPClientService(),
@ -428,6 +428,8 @@ class Server extends ServerContainer implements IServerContainer {
$this->getConfig()
);
});
$this->registerAlias('AppFetcher', AppFetcher::class);
$this->registerService('CategoryFetcher', function ($c) {
return new CategoryFetcher(
$this->getAppDataDir('appstore'),
@ -821,9 +823,6 @@ class Server extends ServerContainer implements IServerContainer {
$this->registerService(BundleFetcher::class, function () {
return new BundleFetcher($this->getL10N('lib'));
});
$this->registerService(AppFetcher::class, function() {
return $this->getAppFetcher();
});
$this->registerService(\OCP\Notification\IManager::class, function (Server $c) {
return new Manager(
$c->query(IValidator::class)

View file

@ -32,6 +32,7 @@
namespace OC;
use OC\App\AppStore\Fetcher\AppFetcher;
use OC\Hooks\BasicEmitter;
use OC\IntegrityCheck\Checker;
use OC_App;
@ -246,6 +247,9 @@ class Updater extends BasicEmitter {
$this->checkAppsRequirements();
$this->doAppUpgrade();
// Update the appfetchers version so it downloads the correct list from the appstore
\OC::$server->getAppFetcher()->setVersion($currentVersion);
// upgrade appstore apps
$this->upgradeAppStoreApps(\OC::$server->getAppManager()->getInstalledApps());