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