diff --git a/api2/views.py b/api2/views.py index 79f7c00716..96638df03c 100644 --- a/api2/views.py +++ b/api2/views.py @@ -25,6 +25,7 @@ from share.models import FileShare from seahub.views import access_to_repo, validate_owner from seahub.utils import gen_file_get_url, gen_token, gen_file_upload_url, \ check_filename_with_rename, get_starred_files, get_ccnetapplet_root, \ + get_dir_files_last_modified, \ get_ccnet_server_addr_port, star_file, unstar_file, string2list try: from seahub.settings import CLOUD_MODE @@ -376,13 +377,15 @@ def get_file_size (id): size = seafserv_threaded_rpc.get_file_size(id) return size if size else 0 -def get_dir_entrys_by_id(request, dir_id): +def get_dir_entrys_by_id(request, repo_id, path, dir_id): try: dirs = seafserv_threaded_rpc.list_dir(dir_id) except SearpcError, e: return api_error(HTTP_520_OPERATION_FAILED, "Failed to list dir.") + mtimes = get_dir_files_last_modified (repo_id, path, dir_id) + dir_list, file_list = [], [] for dirent in dirs: dtype = "file" @@ -398,11 +401,13 @@ def get_dir_entrys_by_id(request, dir_id): entry["type"]=dtype entry["name"]=dirent.obj_name entry["id"]=dirent.obj_id + entry["mtime"]=mtimes.get(dirent.obj_name, None) if dtype == 'dir': dir_list.append(entry) else: file_list.append(entry) + dir_list.sort(lambda x, y : cmp(x['name'].lower(),y['name'].lower())) file_list.sort(lambda x, y : cmp(x['name'].lower(),y['name'].lower())) dentrys = dir_list + file_list @@ -471,7 +476,7 @@ def reloaddir(request, repo_id, parent_dir): if not dir_id: return api_error(status.HTTP_404_NOT_FOUND, "Path does not exist") - return get_dir_entrys_by_id(request, dir_id) + return get_dir_entrys_by_id(request, repo_id, parent_dir, dir_id) def reloaddir_if_neccessary (request, repo_id, parent_dir): @@ -841,7 +846,7 @@ class DirView(APIView): response["oid"] = dir_id return response else: - return get_dir_entrys_by_id(request, dir_id) + return get_dir_entrys_by_id(request, repo_id, path, dir_id) def post(self, request, repo_id, format=None): # new dir diff --git a/utils/__init__.py b/utils/__init__.py index 2e8e022159..37a5aad179 100644 --- a/utils/__init__.py +++ b/utils/__init__.py @@ -760,13 +760,14 @@ def calc_dir_files_last_modified(repo_id, parent_dir, parent_dir_hash, dir_id): return last_modified_info -def get_dir_files_last_modified(repo_id, parent_dir): +def get_dir_files_last_modified(repo_id, parent_dir, dir_id=None): '''Calc the last modified time of all the files under the directory of the repo . Return a dict whose keys are the file names and values are their corresponding last modified timestamps. ''' - dir_id = seafserv_threaded_rpc.get_dir_id_by_path(repo_id, parent_dir) + if not dir_id: + dir_id = seafserv_threaded_rpc.get_dir_id_by_path(repo_id, parent_dir) parent_dir_hash = calc_file_path_hash(parent_dir) if not dir_id: return {}