summaryrefslogtreecommitdiffstats
path: root/apps/files/lib
diff options
context:
space:
mode:
authorJohn Molakvoæ <skjnldsv@protonmail.com>2023-01-04 19:06:52 +0100
committerJohn Molakvoæ <skjnldsv@protonmail.com>2023-01-17 18:30:41 +0100
commitb9906fb21e9f1aadf14e473b8c26a2ec7537fa11 (patch)
tree3b068eb999c675760d715e78da2d5eee8668cb44 /apps/files/lib
parent9af7ee8d11b43a7a3d14f7aa8390aff0a4174f55 (diff)
downloadnextcloud-server-b9906fb21e9f1aadf14e473b8c26a2ec7537fa11.tar.gz
nextcloud-server-b9906fb21e9f1aadf14e473b8c26a2ec7537fa11.zip
feat(files): Quota in navigation
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
Diffstat (limited to 'apps/files/lib')
-rw-r--r--apps/files/lib/Controller/AjaxController.php57
-rw-r--r--apps/files/lib/Controller/ApiController.php14
-rw-r--r--apps/files/lib/Controller/ViewController.php24
3 files changed, 25 insertions, 70 deletions
diff --git a/apps/files/lib/Controller/AjaxController.php b/apps/files/lib/Controller/AjaxController.php
deleted file mode 100644
index cd26ab7a6f8..00000000000
--- a/apps/files/lib/Controller/AjaxController.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * @copyright Copyright (c) 2018, Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @author Roeland Jago Douma <roeland@famdouma.nl>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-namespace OCA\Files\Controller;
-
-use OCA\Files\Helper;
-use OCP\AppFramework\Controller;
-use OCP\AppFramework\Http\JSONResponse;
-use OCP\Files\NotFoundException;
-use OCP\IRequest;
-
-class AjaxController extends Controller {
- public function __construct(string $appName, IRequest $request) {
- parent::__construct($appName, $request);
- }
-
- /**
- * @NoAdminRequired
- */
- public function getStorageStats(string $dir = '/'): JSONResponse {
- try {
- return new JSONResponse([
- 'status' => 'success',
- 'data' => Helper::buildFileStorageStatistics($dir),
- ]);
- } catch (NotFoundException $e) {
- return new JSONResponse([
- 'status' => 'error',
- 'data' => [
- 'message' => 'Folder not found'
- ],
- ]);
- }
- }
-}
diff --git a/apps/files/lib/Controller/ApiController.php b/apps/files/lib/Controller/ApiController.php
index f2329fc384b..604cf9a3c64 100644
--- a/apps/files/lib/Controller/ApiController.php
+++ b/apps/files/lib/Controller/ApiController.php
@@ -257,6 +257,20 @@ class ApiController extends Controller {
return new DataResponse(['files' => $files]);
}
+
+ /**
+ * Returns the current logged-in user's storage stats.
+ *
+ * @NoAdminRequired
+ *
+ * @param ?string $dir the directory to get the storage stats from
+ * @return JSONResponse
+ */
+ public function getStorageStats($dir = '/'): JSONResponse {
+ $storageInfo = \OC_Helper::getStorageInfo($dir ?: '/');
+ return new JSONResponse(['message' => 'ok', 'data' => $storageInfo]);
+ }
+
/**
* Change the default sort mode
*
diff --git a/apps/files/lib/Controller/ViewController.php b/apps/files/lib/Controller/ViewController.php
index 0594b63f56b..b607764e602 100644
--- a/apps/files/lib/Controller/ViewController.php
+++ b/apps/files/lib/Controller/ViewController.php
@@ -136,11 +136,11 @@ class ViewController extends Controller {
* @return array
* @throws \OCP\Files\NotFoundException
*/
- protected function getStorageInfo() {
+ protected function getStorageInfo(string $dir = '/') {
\OC_Util::setupFS();
- $dirInfo = \OC\Files\Filesystem::getFileInfo('/', false);
+ $rootInfo = \OC\Files\Filesystem::getFileInfo('/', false);
- return \OC_Helper::getStorageInfo('/', $dirInfo);
+ return \OC_Helper::getStorageInfo($dir, $rootInfo ?: null);
}
/**
@@ -241,18 +241,16 @@ class ViewController extends Controller {
$nav->assign('navigationItems', $navItems);
- $nav->assign('usage', \OC_Helper::humanFileSize($storageInfo['used']));
- if ($storageInfo['quota'] === \OCP\Files\FileInfo::SPACE_UNLIMITED) {
- $totalSpace = $this->l10n->t('Unlimited');
- } else {
- $totalSpace = \OC_Helper::humanFileSize($storageInfo['total']);
- }
- $nav->assign('total_space', $totalSpace);
- $nav->assign('quota', $storageInfo['quota']);
- $nav->assign('usage_relative', $storageInfo['relative']);
-
$contentItems = [];
+ try {
+ // If view is files, we use the directory, otherwise we use the root storage
+ $storageInfo = $this->getStorageInfo(($view === 'files' && $dir) ? $dir : '/');
+ } catch(\Exception $e) {
+ $storageInfo = $this->getStorageInfo();
+ }
+
+ $this->initialState->provideInitialState('storageStats', $storageInfo);
$this->initialState->provideInitialState('navigation', $navItems);
$this->initialState->provideInitialState('config', $this->userConfig->getConfigs());