diff --git a/frontend/src/components/dir-view/dir-view.js b/frontend/src/components/dir-view/dir-view.js index efb0673131..2d5396e93f 100644 --- a/frontend/src/components/dir-view/dir-view.js +++ b/frontend/src/components/dir-view/dir-view.js @@ -170,7 +170,7 @@ class DirView extends React.Component { let repoID = this.state.repoID; this.setState({isDirentListLoading: true}); seafileAPI.listDir(repoID, path, {'with_thumbnail': true}).then(res => { - let direntList = res.data.map(item => { + let direntList = res.data.dirent_list.map(item => { let fileName = item.name.toLowerCase(); if (fileName === 'readme.md' || fileName === 'readme.markdown') { this.setState({readmeMarkdown: item}); diff --git a/frontend/src/components/file-chooser/dirent-list-item.js b/frontend/src/components/file-chooser/dirent-list-item.js index 48c1bd7047..04db6b0305 100644 --- a/frontend/src/components/file-chooser/dirent-list-item.js +++ b/frontend/src/components/file-chooser/dirent-list-item.js @@ -45,7 +45,7 @@ class DirentListItem extends React.Component { if (!this.state.hasRequest) { seafileAPI.listDir(this.props.repo.repo_id, this.state.filePath).then(res => { let direntList = []; - res.data.forEach(item => { + res.data.dirent_list.forEach(item => { if (this.props.isShowFile === true) { // show dir and file let dirent = new Dirent(item); direntList.push(dirent); diff --git a/frontend/src/components/file-chooser/dirent-list-view.js b/frontend/src/components/file-chooser/dirent-list-view.js index 5defe3950e..871b4463d9 100644 --- a/frontend/src/components/file-chooser/dirent-list-view.js +++ b/frontend/src/components/file-chooser/dirent-list-view.js @@ -26,7 +26,7 @@ class DirentListView extends React.Component { let repo = this.props.repo; seafileAPI.listDir(repo.repo_id, '/').then(res => { let direntList = []; - res.data.forEach(item => { + res.data.dirent_list.forEach(item => { if (this.props.isShowFile === true) { let dirent = new Dirent(item); direntList.push(dirent); diff --git a/frontend/src/markdown-editor.js b/frontend/src/markdown-editor.js index f2c5d7a2e5..46b5ebc3aa 100644 --- a/frontend/src/markdown-editor.js +++ b/frontend/src/markdown-editor.js @@ -151,7 +151,7 @@ class EditorUtilities { getFiles() { return seafileAPI.listDir(repoID, dirPath, { recursive: true} ).then((response) => { - var files = response.data.map((item) => { + var files = response.data.dirent_list.map((item) => { return { name: item.name, type: item.type === 'dir' ? 'dir' : 'file', diff --git a/frontend/src/repo-wiki-mode.js b/frontend/src/repo-wiki-mode.js index 6e617355fd..457ea07208 100644 --- a/frontend/src/repo-wiki-mode.js +++ b/frontend/src/repo-wiki-mode.js @@ -248,7 +248,7 @@ class Wiki extends Component { loadSidePanel = (initialPath) => { seafileAPI.listDir(repoID, '/',{recursive: true}).then(items => { - const files = items.data.map(item => { + const files = items.data.dirent_list.map(item => { return { name: item.name, type: item.type === 'dir' ? 'dir' : 'file', @@ -337,7 +337,7 @@ class Wiki extends Component { this.setState({isDirentListLoading: true}); seafileAPI.listDir(repoID, path, {'with_thumbnail': true}).then(res => { let direntList = []; - res.data.forEach(item => { + res.data.dirent_list.forEach(item => { let fileName = item.name.toLowerCase(); if (fileName === 'readme.md' || fileName === 'readme.markdown') { this.setState({readmeMarkdown: item}); diff --git a/frontend/src/utils/editor-utilties.js b/frontend/src/utils/editor-utilties.js index 5438cdd371..609266fd90 100644 --- a/frontend/src/utils/editor-utilties.js +++ b/frontend/src/utils/editor-utilties.js @@ -22,7 +22,7 @@ class EditorUtilities { listRepoDir() { return seafileAPI.listDir(repoID, '/',{recursive: true}).then(items => { - const files = items.data.map(item => { + const files = items.data.dirent_list.map(item => { return { name: item.name, type: item.type === 'dir' ? 'dir' : 'file', diff --git a/seahub/api2/endpoints/dir.py b/seahub/api2/endpoints/dir.py index 0c296255f6..07561b2538 100644 --- a/seahub/api2/endpoints/dir.py +++ b/seahub/api2/endpoints/dir.py @@ -113,21 +113,24 @@ class DirView(APIView): # get dir/file list recursively username = request.user.username if recursive == '1': - result = [] dir_file_info_list = get_dir_file_recursively(username, repo_id, parent_dir, []) + + response_dict = {} + response_dict['dirent_list'] = [] + if request_type == 'f': for item in dir_file_info_list: if item['type'] == 'file': - result.append(item) + response_dict['dirent_list'].append(item) elif request_type == 'd': for item in dir_file_info_list: if item['type'] == 'dir': - result.append(item) + response_dict['dirent_list'].append(item) else: - result = dir_file_info_list + response_dict['dirent_list'] = dir_file_info_list - return Response(result) + return Response(response_dict) # get dirent(folder and file) list try: @@ -249,16 +252,17 @@ class DirView(APIView): dir_info_list.sort(lambda x, y: cmp(x['name'].lower(), y['name'].lower())) file_info_list.sort(lambda x, y: cmp(x['name'].lower(), y['name'].lower())) - if request_type == 'f': - result = file_info_list - elif request_type == 'd': - result = dir_info_list - else: - result = dir_info_list + file_info_list + response_dict = {} + response_dict["user_perm"] = permission - response = Response(result) - response["dir_perm"] = permission - return response + if request_type == 'f': + response_dict['dirent_list'] = file_info_list + elif request_type == 'd': + response_dict['dirent_list'] = dir_info_list + else: + response_dict['dirent_list'] = dir_info_list + file_info_list + + return Response(response_dict) def post(self, request, repo_id, format=None): """ Create, rename, revert dir. diff --git a/tests/api/endpoints/test_dir_view.py b/tests/api/endpoints/test_dir_view.py index 610ecedbe8..7277e9afa3 100644 --- a/tests/api/endpoints/test_dir_view.py +++ b/tests/api/endpoints/test_dir_view.py @@ -66,13 +66,13 @@ class DirViewTest(BaseTestCase): self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 2 + assert len(json_resp['dirent_list']) == 2 - assert json_resp[0]['type'] == 'dir' - assert json_resp[0]['name'] == self.folder_name + assert json_resp['dirent_list'][0]['type'] == 'dir' + assert json_resp['dirent_list'][0]['name'] == self.folder_name - assert json_resp[1]['type'] == 'file' - assert json_resp[1]['name'] == self.file_name + assert json_resp['dirent_list'][1]['type'] == 'file' + assert json_resp['dirent_list'][1]['name'] == self.file_name def test_can_get_with_dir_type_parameter(self): @@ -81,9 +81,9 @@ class DirViewTest(BaseTestCase): self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 1 - assert json_resp[0]['type'] == 'dir' - assert json_resp[0]['name'] == self.folder_name + assert len(json_resp['dirent_list']) == 1 + assert json_resp['dirent_list'][0]['type'] == 'dir' + assert json_resp['dirent_list'][0]['name'] == self.folder_name def test_can_get_with_file_type_parameter(self): @@ -92,9 +92,9 @@ class DirViewTest(BaseTestCase): self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 1 - assert json_resp[0]['type'] == 'file' - assert json_resp[0]['name'] == self.file_name + assert len(json_resp['dirent_list']) == 1 + assert json_resp['dirent_list'][0]['type'] == 'file' + assert json_resp['dirent_list'][0]['name'] == self.file_name def test_can_get_with_recursive_parameter(self): @@ -108,17 +108,17 @@ class DirViewTest(BaseTestCase): self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 3 - assert json_resp[0]['type'] == 'dir' - assert json_resp[0]['name'] == self.folder_name - assert json_resp[0]['parent_dir'] == '/' + assert len(json_resp['dirent_list']) == 3 + assert json_resp['dirent_list'][0]['type'] == 'dir' + assert json_resp['dirent_list'][0]['name'] == self.folder_name + assert json_resp['dirent_list'][0]['parent_dir'] == '/' - assert json_resp[1]['type'] == 'dir' - assert json_resp[1]['name'] == new_dir_name - assert json_resp[1]['parent_dir'] == self.folder_path + assert json_resp['dirent_list'][1]['type'] == 'dir' + assert json_resp['dirent_list'][1]['name'] == new_dir_name + assert json_resp['dirent_list'][1]['parent_dir'] == self.folder_path - assert json_resp[2]['type'] == 'file' - assert json_resp[2]['name'] == self.file_name + assert json_resp['dirent_list'][2]['type'] == 'file' + assert json_resp['dirent_list'][2]['name'] == self.file_name def test_can_get_with_recursive_and_dir_type_parameter(self): @@ -133,13 +133,13 @@ class DirViewTest(BaseTestCase): json_resp = json.loads(resp.content) assert len(json_resp) == 2 - assert json_resp[0]['type'] == 'dir' - assert json_resp[0]['name'] == self.folder_name - assert json_resp[0]['parent_dir'] == '/' + assert json_resp['dirent_list'][0]['type'] == 'dir' + assert json_resp['dirent_list'][0]['name'] == self.folder_name + assert json_resp['dirent_list'][0]['parent_dir'] == '/' - assert json_resp[1]['type'] == 'dir' - assert json_resp[1]['name'] == new_dir_name - assert json_resp[1]['parent_dir'] == self.folder_path + assert json_resp['dirent_list'][1]['type'] == 'dir' + assert json_resp['dirent_list'][1]['name'] == new_dir_name + assert json_resp['dirent_list'][1]['parent_dir'] == self.folder_path def test_can_get_with_recursive_and_file_type_parameter(self): @@ -153,9 +153,9 @@ class DirViewTest(BaseTestCase): self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 1 - assert json_resp[0]['type'] == 'file' - assert json_resp[0]['name'] == self.file_name + assert len(json_resp['dirent_list']) == 1 + assert json_resp['dirent_list'][0]['type'] == 'file' + assert json_resp['dirent_list'][0]['name'] == self.file_name def test_can_get_file_with_lock_info(self): @@ -168,10 +168,10 @@ class DirViewTest(BaseTestCase): resp = self.client.get(self.url + '?t=f') self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 1 - assert json_resp[0]['type'] == 'file' - assert json_resp[0]['name'] == self.file_name - assert json_resp[0]['lock_owner'] == '' + assert len(json_resp['dirent_list']) == 1 + assert json_resp['dirent_list'][0]['type'] == 'file' + assert json_resp['dirent_list'][0]['name'] == self.file_name + assert json_resp['dirent_list'][0]['lock_owner'] == '' # lock file seafile_api.lock_file(self.repo_id, self.file_path, self.admin_name, 1) @@ -180,10 +180,10 @@ class DirViewTest(BaseTestCase): resp = self.client.get(self.url + '?t=f') self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 1 - assert json_resp[0]['type'] == 'file' - assert json_resp[0]['name'] == self.file_name - assert json_resp[0]['lock_owner'] == self.admin_name + assert len(json_resp['dirent_list']) == 1 + assert json_resp['dirent_list'][0]['type'] == 'file' + assert json_resp['dirent_list'][0]['name'] == self.file_name + assert json_resp['dirent_list'][0]['lock_owner'] == self.admin_name def test_can_get_file_with_star_info(self): @@ -193,10 +193,10 @@ class DirViewTest(BaseTestCase): resp = self.client.get(self.url + '?t=f') self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 1 - assert json_resp[0]['type'] == 'file' - assert json_resp[0]['name'] == self.file_name - assert json_resp[0]['starred'] == False + assert len(json_resp['dirent_list']) == 1 + assert json_resp['dirent_list'][0]['type'] == 'file' + assert json_resp['dirent_list'][0]['name'] == self.file_name + assert json_resp['dirent_list'][0]['starred'] == False # star file resp = self.client.post(reverse('starredfiles'), {'repo_id': self.repo.id, 'p': self.file_path}) @@ -206,10 +206,10 @@ class DirViewTest(BaseTestCase): resp = self.client.get(self.url + '?t=f') self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 1 - assert json_resp[0]['type'] == 'file' - assert json_resp[0]['name'] == self.file_name - assert json_resp[0]['starred'] == True + assert len(json_resp['dirent_list']) == 1 + assert json_resp['dirent_list'][0]['type'] == 'file' + assert json_resp['dirent_list'][0]['name'] == self.file_name + assert json_resp['dirent_list'][0]['starred'] == True def test_can_get_file_with_tag_info(self): @@ -219,10 +219,10 @@ class DirViewTest(BaseTestCase): resp = self.client.get(self.url + '?t=f') self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 1 - assert json_resp[0]['type'] == 'file' - assert json_resp[0]['name'] == self.file_name - assert not json_resp[0].has_key('file_tags') + assert len(json_resp['dirent_list']) == 1 + assert json_resp['dirent_list'][0]['type'] == 'file' + assert json_resp['dirent_list'][0]['name'] == self.file_name + assert not json_resp['dirent_list'][0].has_key('file_tags') # add file tag tag_name = randstring(6) @@ -238,12 +238,12 @@ class DirViewTest(BaseTestCase): resp = self.client.get(self.url + '?t=f') self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 1 - assert json_resp[0]['type'] == 'file' - assert json_resp[0]['name'] == self.file_name - assert json_resp[0]['file_tags'][0]['repo_tag_id'] == repo_tag_id - assert json_resp[0]['file_tags'][0]['tag_name'] == tag_name - assert json_resp[0]['file_tags'][0]['tag_color'] == tag_color + assert len(json_resp['dirent_list']) == 1 + assert json_resp['dirent_list'][0]['type'] == 'file' + assert json_resp['dirent_list'][0]['name'] == self.file_name + assert json_resp['dirent_list'][0]['file_tags'][0]['repo_tag_id'] == repo_tag_id + assert json_resp['dirent_list'][0]['file_tags'][0]['tag_name'] == tag_name + assert json_resp['dirent_list'][0]['file_tags'][0]['tag_color'] == tag_color def test_can_get_file_with_thumbnail_info(self): @@ -258,12 +258,12 @@ class DirViewTest(BaseTestCase): resp = self.client.get(self.url + '?t=f&with_thumbnail=true&p=%s' % self.folder_path) self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 1 - assert json_resp[0]['type'] == 'file' - assert json_resp[0]['name'] == image_file_name - assert not json_resp[0].has_key('encoded_thumbnail_src') + assert len(json_resp['dirent_list']) == 1 + assert json_resp['dirent_list'][0]['type'] == 'file' + assert json_resp['dirent_list'][0]['name'] == image_file_name + assert not json_resp['dirent_list'][0].has_key('encoded_thumbnail_src') - file_id = json_resp[0]['id'] + file_id = json_resp['dirent_list'][0]['id'] # prepare thumbnail size = 48 @@ -281,10 +281,10 @@ class DirViewTest(BaseTestCase): self.assertEqual(200, resp.status_code) self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert len(json_resp) == 1 - assert json_resp[0]['type'] == 'file' - assert json_resp[0]['name'] == image_file_name - assert image_file_name in json_resp[0]['encoded_thumbnail_src'] + assert len(json_resp['dirent_list']) == 1 + assert json_resp['dirent_list'][0]['type'] == 'file' + assert json_resp['dirent_list'][0]['name'] == image_file_name + assert image_file_name in json_resp['dirent_list'][0]['encoded_thumbnail_src'] def test_get_dir_with_invalid_perm(self): # login as admin, then get dir info in user's repo