From 1a034ce6993373b35ac05fb7a7463fc5b55b69ae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Julius=20H=C3=A4rtl?= <jus@bitgrid.net>
Date: Wed, 30 May 2018 16:06:18 +0200
Subject: [PATCH] Implement update functionality
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Julius Härtl <jus@bitgrid.net>
---
 lib/private/App/AppManager.php |  1 +
 lib/private/legacy/app.php     |  1 +
 settings/src/store/apps.js     | 25 +++++++++++++++++++++++++
 3 files changed, 27 insertions(+)

diff --git a/lib/private/App/AppManager.php b/lib/private/App/AppManager.php
index 4d0859b1988..94addb2b785 100644
--- a/lib/private/App/AppManager.php
+++ b/lib/private/App/AppManager.php
@@ -323,6 +323,7 @@ class AppManager implements IAppManager {
 	public function clearAppsCache() {
 		$settingsMemCache = $this->memCacheFactory->createDistributed('settings');
 		$settingsMemCache->clear('listApps');
+		$this->appInfos = [];
 	}
 
 	/**
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php
index 70f1b16e3c6..d3c9859c68d 100644
--- a/lib/private/legacy/app.php
+++ b/lib/private/legacy/app.php
@@ -887,6 +887,7 @@ class OC_App {
 		}
 		self::registerAutoloading($appId, $appPath);
 
+		\OC::$server->getAppManager()->clearAppsCache();
 		$appData = self::getAppInfo($appId);
 		self::executeRepairSteps($appId, $appData['repair-steps']['pre-migration']);
 
diff --git a/settings/src/store/apps.js b/settings/src/store/apps.js
index f19f894309b..9fedabf0223 100644
--- a/settings/src/store/apps.js
+++ b/settings/src/store/apps.js
@@ -99,6 +99,15 @@ const mutations = {
 		state.apps.find(app => app.id === appId).canInstall = true;
 	},
 
+	updateApp(state, appId) {
+		let app = state.apps.find(app => app.id === appId);
+		let version = app.update;
+		app.update = null;
+		app.version = version;
+		state.updateCount--;
+
+	},
+
 	resetApps(state) {
 		state.apps = [];
 	},
@@ -246,6 +255,22 @@ const actions = {
 		}).catch((error) => context.commit('API_FAILURE', { appId, error }));
 	},
 
+	updateApp(context, { appId }) {
+		return api.requireAdmin().then((response) => {
+			context.commit('startLoading', appId);
+			return api.get(OC.generateUrl(`settings/apps/update/${appId}`))
+				.then((response) => {
+					context.commit('stopLoading', appId);
+					context.commit('updateApp', appId);
+					return true;
+				})
+				.catch((error) => {
+					context.commit('stopLoading', appId);
+					context.commit('APPS_API_FAILURE', { appId, error })
+				})
+		}).catch((error) => context.commit('API_FAILURE', { appId, error }));
+	},
+
 	getApps(context, { category }) {
 		context.commit('startLoading', 'list');
 		return api.get(OC.generateUrl(`settings/apps/list?category=${category}`))
-- 
GitLab