diff --git a/frontend/src/components/dirent-detail/dirent-details/dir-details.js b/frontend/src/components/dirent-detail/dirent-details/dir-details.js
index c98414ab67..ecaf90429b 100644
--- a/frontend/src/components/dirent-detail/dirent-details/dir-details.js
+++ b/frontend/src/components/dirent-detail/dirent-details/dir-details.js
@@ -6,6 +6,8 @@ import { CellType } from '../../../metadata/constants';
import { gettext } from '../../../utils/constants';
import { MetadataDetails } from '../../../metadata';
import { useMetadataStatus } from '../../../hooks';
+import { Utils } from '../../../utils/utils';
+import { SYSTEM_FOLDERS } from '../../../constants';
const DirDetails = ({ direntDetail }) => {
const { enableMetadata, enableMetadataManagement } = useMetadataStatus();
@@ -13,14 +15,35 @@ const DirDetails = ({ direntDetail }) => {
return { type: CellType.MTIME, name: gettext('Last modified time') };
}, []);
+ const sizeField = useMemo(() => ({ type: 'size', name: gettext('Size') }), []);
+ const filesField = useMemo(() => ({ type: CellType.NUMBER, name: gettext('Files') }), []);
+ let file_count = direntDetail.file_count || 0;
+ let size = Utils.bytesToSize(direntDetail.size);
+ let special_folder = false;
+ if (direntDetail.path !== undefined) {
+ special_folder = SYSTEM_FOLDERS.some(folder => direntDetail.path.startsWith(folder));
+ }
+
return (
<>
+ {enableMetadataManagement && enableMetadata && (
+ <>
+
+ {special_folder ?
+ :
+ }
+
+
+ {special_folder ?
+ :
+ }
+
+
+ >
+ )}
- {enableMetadataManagement && enableMetadata && (
-
- )}
>
);
};
diff --git a/seahub/api2/endpoints/dir.py b/seahub/api2/endpoints/dir.py
index 17227bb3af..22c37ead45 100644
--- a/seahub/api2/endpoints/dir.py
+++ b/seahub/api2/endpoints/dir.py
@@ -29,7 +29,7 @@ from seahub.base.templatetags.seahub_tags import email2nickname, \
email2contact_email
from seahub.utils.repo import parse_repo_perm
from seahub.constants import PERMISSION_INVISIBLE
-
+from seahub.repo_metadata.models import RepoMetadata
from seahub.settings import ENABLE_VIDEO_THUMBNAIL, THUMBNAIL_ROOT, THUMBNAIL_DEFAULT_SIZE
from seaserv import seafile_api
@@ -580,13 +580,43 @@ class DirDetailView(APIView):
error_msg = 'Permission denied.'
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
- dir_obj = seafile_api.get_dirent_by_path(repo_id, path)
+ dir_obj = seafile_api.get_dirent_by_path(repo_id, path)
+
dir_info = {
'repo_id': repo_id,
'path': path,
'name': dir_obj.obj_name if dir_obj else '',
'mtime': timestamp_to_isoformat_timestr(dir_obj.mtime) if dir_obj else '',
'permission': permission,
- }
+ }
+
+ # metadata enable check
+ metadata = RepoMetadata.objects.filter(repo_id=repo_id).first()
+ if metadata and metadata.enabled:
+ from seafevents.repo_metadata.constants import METADATA_TABLE
+ from seahub.repo_metadata.metadata_server_api import MetadataServerAPI
+ metadata_server_api = MetadataServerAPI(repo_id, request.user.username)
+ try:
+ sql = f"""
+ SELECT
+ COUNT(*) AS file_count,
+ SUM(`{METADATA_TABLE.columns.size.name}`) AS total_size
+ FROM `{METADATA_TABLE.name}`
+ WHERE
+ (`{METADATA_TABLE.columns.is_dir.name}` = False) AND
+ (
+ `{METADATA_TABLE.columns.parent_dir.name}` ILIKE '{path}%' OR
+ `{METADATA_TABLE.columns.parent_dir.name}` = '{path[:-1]}'
+ )
+ """
+ results = metadata_server_api.query_rows(sql, [])
+ result_row = results.get('results')[0]
+ dir_info['file_count'] = result_row.get('file_count', 0)
+ dir_info['size'] = result_row.get('total_size', 0)
+ except Exception as e:
+ logger.exception(e)
+ error_msg = 'Internal Server Error'
+ return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
+
return Response(dir_info)