Respect updater kill switch and fall back to download button

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2016-09-27 14:47:59 +02:00
parent 0fac5146bd
commit 7d910437fd
No known key found for this signature in database
GPG Key ID: E166FD8976B3BAC8
6 changed files with 38 additions and 8 deletions

View File

@ -35,6 +35,11 @@ $(document).ready(function(){
body.removeAttr('id'); body.removeAttr('id');
body.attr('id', 'body-settings'); body.attr('id', 'body-settings');
} }
},
error: function(){
OC.Notification.showTemporary(t('updatenotification', 'Could not start updater, please try the manual update'));
$('#oca_updatenotification_button').addClass('hidden');
$('#oca_updatenotification_section .button').removeClass('hidden');
} }
}); });
}); });

View File

@ -107,11 +107,13 @@ class AdminController extends Controller implements ISettings {
$notifyGroups = json_decode($this->config->getAppValue('updatenotification', 'notify_groups', '["admin"]'), true); $notifyGroups = json_decode($this->config->getAppValue('updatenotification', 'notify_groups', '["admin"]'), true);
$params = [ $params = [
'isNewVersionAvailable' => ($updateState === []) ? false : true, 'isNewVersionAvailable' => !empty($updateState['updateAvailable']),
'lastChecked' => $lastUpdateCheck, 'lastChecked' => $lastUpdateCheck,
'currentChannel' => $currentChannel, 'currentChannel' => $currentChannel,
'channels' => $channels, 'channels' => $channels,
'newVersionString' => ($updateState === []) ? '' : $updateState['updateVersion'], 'newVersionString' => (empty($updateState['updateVersion'])) ? '' : $updateState['updateVersion'],
'downloadLink' => (empty($updateState['downloadLink'])) ? '' : $updateState['downloadLink'],
'updaterEnabled' => $updateState['updaterEnabled'],
'notify_groups' => implode('|', $notifyGroups), 'notify_groups' => implode('|', $notifyGroups),
]; ];

View File

@ -46,9 +46,13 @@ class UpdateChecker {
if(isset($data['version']) && $data['version'] !== '' && $data['version'] !== []) { if(isset($data['version']) && $data['version'] !== '' && $data['version'] !== []) {
$result['updateAvailable'] = true; $result['updateAvailable'] = true;
$result['updateVersion'] = $data['versionstring']; $result['updateVersion'] = $data['versionstring'];
$result['updaterEnabled'] = $data['autoupdater'] === '1';
if(substr($data['web'], 0, 8) === 'https://') { if(substr($data['web'], 0, 8) === 'https://') {
$result['updateLink'] = $data['web']; $result['updateLink'] = $data['web'];
} }
if(substr($data['url'], 0, 8) === 'https://') {
$result['downloadLink'] = $data['url'];
}
return $result; return $result;
} }

View File

@ -14,13 +14,18 @@
$currentChannel = $_['currentChannel']; $currentChannel = $_['currentChannel'];
?> ?>
<form id="oca_updatenotification_section" class="followupsection"> <form id="oca_updatenotification_section" class="followupsection">
<?php if($isNewVersionAvailable === true): ?> <?php if($isNewVersionAvailable === true) { ?>
<strong><?php p($l->t('A new version is available: %s', [$newVersionString])); ?></strong> <strong><?php p($l->t('A new version is available: %s', [$newVersionString])); ?></strong>
<input type="button" id="oca_updatenotification_button" value="<?php p($l->t('Open updater')) ?>"> <?php if ($_['updaterEnabled']) { ?>
<?php else: ?> <input type="button" id="oca_updatenotification_button" value="<?php p($l->t('Open updater')) ?>">
<?php } ?>
<?php if (!empty($_['downloadLink'])) { ?>
<a href="<?php p($_['downloadLink']); ?>" class="button<?php if ($_['updaterEnabled']) { p(' hidden'); } ?>"><?php p($l->t('Download now')) ?></a>
<?php } ?>
<?php } else { ?>
<strong><?php print_unescaped($l->t('Your version is up to date.')); ?></strong> <strong><?php print_unescaped($l->t('Your version is up to date.')); ?></strong>
<span class="icon-info svg" title="<?php p($l->t('Checked on %s', [$lastCheckedDate])) ?>"></span> <span class="icon-info svg" title="<?php p($l->t('Checked on %s', [$lastCheckedDate])) ?>"></span>
<?php endif; ?> <?php } ?>
<p> <p>
<label for="release-channel"><?php p($l->t('Update channel:')) ?></label> <label for="release-channel"><?php p($l->t('Update channel:')) ?></label>

View File

@ -110,7 +110,12 @@ class AdminControllerTest extends TestCase {
$this->updateChecker $this->updateChecker
->expects($this->once()) ->expects($this->once())
->method('getUpdateState') ->method('getUpdateState')
->willReturn(['updateVersion' => '8.1.2']); ->willReturn([
'updateAvailable' => true,
'updateVersion' => '8.1.2',
'downloadLink' => 'https://downloads.nextcloud.org/server',
'updaterEnabled' => true,
]);
$params = [ $params = [
'isNewVersionAvailable' => true, 'isNewVersionAvailable' => true,
@ -118,6 +123,8 @@ class AdminControllerTest extends TestCase {
'currentChannel' => \OCP\Util::getChannel(), 'currentChannel' => \OCP\Util::getChannel(),
'channels' => $channels, 'channels' => $channels,
'newVersionString' => '8.1.2', 'newVersionString' => '8.1.2',
'downloadLink' => 'https://downloads.nextcloud.org/server',
'updaterEnabled' => true,
'notify_groups' => 'admin', 'notify_groups' => 'admin',
]; ];
@ -154,7 +161,7 @@ class AdminControllerTest extends TestCase {
$this->updateChecker $this->updateChecker
->expects($this->once()) ->expects($this->once())
->method('getUpdateState') ->method('getUpdateState')
->willReturn([]); ->willReturn(['updaterEnabled' => false]);
$params = [ $params = [
'isNewVersionAvailable' => false, 'isNewVersionAvailable' => false,
@ -162,6 +169,8 @@ class AdminControllerTest extends TestCase {
'currentChannel' => \OCP\Util::getChannel(), 'currentChannel' => \OCP\Util::getChannel(),
'channels' => $channels, 'channels' => $channels,
'newVersionString' => '', 'newVersionString' => '',
'downloadLink' => '',
'updaterEnabled' => 0,
'notify_groups' => 'admin', 'notify_groups' => 'admin',
]; ];

View File

@ -50,11 +50,13 @@ class UpdateCheckerTest extends TestCase {
'versionstring' => 'Nextcloud 123', 'versionstring' => 'Nextcloud 123',
'web'=> 'javascript:alert(1)', 'web'=> 'javascript:alert(1)',
'url'=> 'javascript:alert(2)', 'url'=> 'javascript:alert(2)',
'autoupdater'=> '0',
]); ]);
$expected = [ $expected = [
'updateAvailable' => true, 'updateAvailable' => true,
'updateVersion' => 'Nextcloud 123', 'updateVersion' => 'Nextcloud 123',
'updaterEnabled' => false,
]; ];
$this->assertSame($expected, $this->updateChecker->getUpdateState()); $this->assertSame($expected, $this->updateChecker->getUpdateState());
} }
@ -68,12 +70,15 @@ class UpdateCheckerTest extends TestCase {
'versionstring' => 'Nextcloud 123', 'versionstring' => 'Nextcloud 123',
'web'=> 'https://docs.nextcloud.com/myUrl', 'web'=> 'https://docs.nextcloud.com/myUrl',
'url'=> 'https://downloads.nextcloud.org/server', 'url'=> 'https://downloads.nextcloud.org/server',
'autoupdater'=> '1',
]); ]);
$expected = [ $expected = [
'updateAvailable' => true, 'updateAvailable' => true,
'updateVersion' => 'Nextcloud 123', 'updateVersion' => 'Nextcloud 123',
'updaterEnabled' => true,
'updateLink' => 'https://docs.nextcloud.com/myUrl', 'updateLink' => 'https://docs.nextcloud.com/myUrl',
'downloadLink' => 'https://downloads.nextcloud.org/server',
]; ];
$this->assertSame($expected, $this->updateChecker->getUpdateState()); $this->assertSame($expected, $this->updateChecker->getUpdateState());
} }