From 58f473d734373047db585d3b2926d33aa326f5ab Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Sat, 6 Jul 2013 17:00:00 +0200 Subject: split upgrade logic from ajax file --- core/ajax/update.php | 135 +++++++++++---------------------------------------- 1 file changed, 28 insertions(+), 107 deletions(-) (limited to 'core') diff --git a/core/ajax/update.php b/core/ajax/update.php index db00da02239..43ed75b07f1 100644 --- a/core/ajax/update.php +++ b/core/ajax/update.php @@ -4,113 +4,34 @@ $RUNTIME_NOAPPS = true; require_once '../../lib/base.php'; if (OC::checkUpgrade(false)) { - \OC_DB::enableCaching(false); - OC_Config::setValue('maintenance', true); - $installedVersion = OC_Config::getValue('version', '0.0.0'); - $currentVersion = implode('.', OC_Util::getVersion()); - OC_Log::write('core', 'starting upgrade from ' . $installedVersion . ' to ' . $currentVersion, OC_Log::WARN); - $updateEventSource = new OC_EventSource(); - $watcher = new UpdateWatcher($updateEventSource); - OC_Hook::connect('update', 'success', $watcher, 'success'); - OC_Hook::connect('update', 'error', $watcher, 'error'); - OC_Hook::connect('update', 'failure', $watcher, 'failure'); - $watcher->success('Turned on maintenance mode'); - try { - $result = OC_DB::updateDbFromStructure(OC::$SERVERROOT.'/db_structure.xml'); - $watcher->success('Updated database'); - - // do a file cache upgrade for users with files - // this can take loooooooooooooooooooooooong - __doFileCacheUpgrade($watcher); - } catch (Exception $exception) { - $watcher->failure($exception->getMessage()); - } - OC_Config::setValue('version', implode('.', OC_Util::getVersion())); - OC_App::checkAppsRequirements(); - // load all apps to also upgrade enabled apps - OC_App::loadApps(); - OC_Config::setValue('maintenance', false); - $watcher->success('Turned off maintenance mode'); - $watcher->done(); -} - -/** - * The FileCache Upgrade routine - * - * @param UpdateWatcher $watcher - */ -function __doFileCacheUpgrade($watcher) { - try { - $query = \OC_DB::prepare(' - SELECT DISTINCT `user` - FROM `*PREFIX*fscache` - '); - $result = $query->execute(); - } catch (\Exception $e) { - return; - } - $users = $result->fetchAll(); - if(count($users) == 0) { - return; - } - $step = 100 / count($users); - $percentCompleted = 0; - $lastPercentCompletedOutput = 0; - $startInfoShown = false; - foreach($users as $userRow) { - $user = $userRow['user']; - \OC\Files\Filesystem::initMountPoints($user); - \OC\Files\Cache\Upgrade::doSilentUpgrade($user); - if(!$startInfoShown) { - //We show it only now, because otherwise Info about upgraded apps - //will appear between this and progress info - $watcher->success('Updating filecache, this may take really long...'); - $startInfoShown = true; - } - $percentCompleted += $step; - $out = floor($percentCompleted); - if($out != $lastPercentCompletedOutput) { - $watcher->success('... '. $out.'% done ...'); - $lastPercentCompletedOutput = $out; - } - } - $watcher->success('Updated filecache'); -} - -class UpdateWatcher { - /** - * @var \OC_EventSource $eventSource; - */ - private $eventSource; - - public function __construct($eventSource) { - $this->eventSource = $eventSource; - } - - public function success($message) { - OC_Util::obEnd(); - $this->eventSource->send('success', $message); - ob_start(); - } - - public function error($message) { - OC_Util::obEnd(); - $this->eventSource->send('error', $message); - ob_start(); - } - - public function failure($message) { - OC_Util::obEnd(); - $this->eventSource->send('failure', $message); - $this->eventSource->close(); + $eventSource = new OC_EventSource(); + $updater = new \OC\Updater(\OC_Log::$object); + $updater->listen('\OC\Updater', 'maintenanceStart', function () use ($eventSource) { + $eventSource->send('success', 'Turned on maintenance mode'); + }); + $updater->listen('\OC\Updater', 'maintenanceEnd', function () use ($eventSource) { + $eventSource->send('success', 'Turned off maintenance mode'); + }); + $updater->listen('\OC\Updater', 'dbUpgrade', function () use ($eventSource) { + $eventSource->send('success', 'Updated database'); + }); + $updater->listen('\OC\Updater', 'filecacheStart', function () use ($eventSource) { + $eventSource->send('success', 'Updating filecache, this may take really long...'); + }); + $updater->listen('\OC\Updater', 'filecacheDone', function () use ($eventSource) { + $eventSource->send('success', 'Updated filecache'); + }); + $updater->listen('\OC\Updater', 'filecacheProgress', function ($out) use ($eventSource) { + $eventSource->send('success', '... ' . $out . '% done ...'); + }); + $updater->listen('\OC\Updater', 'failure', function ($message) use ($eventSource) { + $eventSource->send('failure', $message); + $eventSource->close(); OC_Config::setValue('maintenance', false); - die(); - } + }); - public function done() { - OC_Util::obEnd(); - $this->eventSource->send('done', ''); - $this->eventSource->close(); - } + $updater->upgrade(); -} \ No newline at end of file + $eventSource->send('done', ''); + $eventSource->close(); +} -- cgit v1.2.3