diff --git a/css/sideMenu.css b/css/sideMenu.css index 5877a35..6eaf9d3 100644 --- a/css/sideMenu.css +++ b/css/sideMenu.css @@ -175,6 +175,16 @@ color: var(--side-menu-text-color, #fff); } +.side-menu-loader { + text-align: center; +} + +.side-menu-loader svg { + width: 38px; + margin: auto; + stroke: var(--side-menu-text-color, #fff); +} + .side-menu-big .side-menu-app-icon { vertical-align: middle; margin-top: -2px; diff --git a/img/loader.svg b/img/loader.svg new file mode 100644 index 0000000..004a356 --- /dev/null +++ b/img/loader.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/lib/Controller/NavController.php b/lib/Controller/NavController.php index c34cb52..b79aad4 100644 --- a/lib/Controller/NavController.php +++ b/lib/Controller/NavController.php @@ -21,10 +21,12 @@ namespace OCA\SideMenu\Controller; use OC; use OC\App\AppStore\Fetcher\CategoryFetcher; use OC\URLGenerator; +use OCA\SideMenu\AppInfo\Application; use OCA\SideMenu\Service\AppRepository; use OCA\SideMenu\Service\ConfigProxy; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\JSONResponse; +use OCP\IConfig; use OCP\IL10N; use OCP\IRequest; use OCP\IUserSession; @@ -37,6 +39,11 @@ class NavController extends Controller */ protected $config; + /** + * @var IConfig + */ + protected $iConfig; + /** * @var AppRepository */ @@ -60,6 +67,7 @@ class NavController extends Controller public function __construct( string $appName, IRequest $request, + IConfig $iConfig, ConfigProxy $config, AppRepository $appRepository, CategoryFetcher $categoryFetcher, @@ -70,6 +78,7 @@ class NavController extends Controller parent::__construct($appName, $request); $this->config = $config; + $this->iConfig = $iConfig; $this->appRepository = $appRepository; $this->categoryFetcher = $categoryFetcher; $this->l10nFactory = $l10nFactory; @@ -87,7 +96,6 @@ class NavController extends Controller { $apps = $this->appRepository->getVisibleApps(); $currentLanguage = substr($this->l10nFactory->findLanguage(), 0, 2); - $categoriesLabels = $this->categoryFetcher->get(); $externalSitesInTopMenu = $this->config->getAppValueBool('external-sites-in-top-menu', '0'); $user = OC::$server[IUserSession::class]->getUser(); $appsCategories = []; @@ -100,6 +108,14 @@ class NavController extends Controller ]); } + $categoriesLabels = $this->config->getAppValueArray('cache-categories', '[]'); + + if (empty($categoriesLabels)) { + $categoriesLabels = $this->categoryFetcher->get(); + + $this->iConfig->setAppValue(Application::APP_ID, 'cache-categories', json_encode($categoriesLabels)); + } + $topMenuApps = $this->config->getAppValueArray('top-menu-apps', '[]'); $userTopMenuApps = $this->config->getUserValueArray($user, 'top-menu-apps', '[]'); @@ -135,7 +151,7 @@ class NavController extends Controller foreach ($categories as $category) { if (!isset($items[$category])) { $items[$category] = [ - 'name' => $categoriesLabels[$category], + 'name' => $categoriesLabels[$category] ?? $category, 'apps' => [], ]; } diff --git a/src/SideMenuBig.vue b/src/SideMenuBig.vue index 67be475..e744536 100644 --- a/src/SideMenuBig.vue +++ b/src/SideMenuBig.vue @@ -23,6 +23,25 @@ along with this program. If not, see .
+
+ + + + + + + + + + +
+