diff --git a/src/views/appstore.html b/src/views/appstore.html index 2b8aaaeec..f1a10dfb5 100644 --- a/src/views/appstore.html +++ b/src/views/appstore.html @@ -146,19 +146,24 @@

Please upgrade to a bigger plan. Alternately, free up resources by uninstalling unused applications.

Please upgrade to a server instance with more memory. Alternately, free up resources by uninstalling unused applications.

-
+
+

Subscription required to install more apps.

+

The free plan only contains 2 apps, signing up for a Cloudron subscription allows up to 20 apps. All apps will be automatically kept up-to-date via the appstore.

+
+
-
+
+
- - diff --git a/src/views/appstore.js b/src/views/appstore.js index a03e0cb4c..df7152dd0 100644 --- a/src/views/appstore.js +++ b/src/views/appstore.js @@ -74,8 +74,9 @@ angular.module('Application').controller('AppStoreController', ['$scope', '$loca $('#collapseInstallForm').collapse('hide'); $('#collapseResourceConstraint').collapse('hide'); - $('#collapseMediaLinksCarousel').collapse('show'); + $('#collapseAppLimitReached').collapse('hide'); $('#postInstallMessage').collapse('hide'); + $('#collapseMediaLinksCarousel').collapse('show'); if ($scope.appInstallForm) { $scope.appInstallForm.$setPristine(); @@ -162,7 +163,13 @@ angular.module('Application').controller('AppStoreController', ['$scope', '$loca Client.installApp($scope.appInstall.app.id, $scope.appInstall.app.manifest, $scope.appInstall.app.title, data, function (error) { if (error) { - if (error.statusCode === 409 && (error.message.indexOf('is reserved') !== -1 || error.message.indexOf('is already in use') !== -1)) { + if (error.statusCode === 402) { + $scope.appInstall.state = 'appLimitReached'; + $('#collapseMediaLinksCarousel').collapse('hide'); + $('#collapseResourceConstraint').collapse('hide'); + $('#collapseInstallForm').collapse('hide'); + $('#collapseAppLimitReached').collapse('show'); + } else if (error.statusCode === 409 && (error.message.indexOf('is reserved') !== -1 || error.message.indexOf('is already in use') !== -1)) { $scope.appInstall.error.port = error.message; } else if (error.statusCode === 409) { $scope.appInstall.error.location = 'This name is already taken.'; @@ -484,22 +491,30 @@ angular.module('Application').controller('AppStoreController', ['$scope', '$loca if (!result.token || !result.cloudronId) return callback(); - $scope.appstoreConfig = result; + var appstoreConfig = result; - AppStore.getCloudronDetails(result, function (error) { + AppStore.getCloudronDetails(appstoreConfig, function (error) { if (error) return callback(error); - $scope.validAppstoreAccount = true; + AppStore.getProfile(appstoreConfig.token, function (error, result) { + if (error) return console.error(error); - // clear busy state when a login/signup was performed - $scope.appstoreLogin.busy = false; + // assign late to avoid UI flicketing on update + appstoreConfig.profile = result; + $scope.appstoreConfig = appstoreConfig; - // also update the root controller status - $scope.$parent.fetchAppstoreProfileAndSubscription(function (error) { - if (error) console.error(error); + $scope.validAppstoreAccount = true; + + // clear busy state when a login/signup was performed + $scope.appstoreLogin.busy = false; + + // also update the root controller status + $scope.$parent.fetchAppstoreProfileAndSubscription(function (error) { + if (error) console.error(error); + }); + + callback(); }); - - callback(); }); }); }