From 2b0906cdffb69db3651b42f7cee2e67c7d095475 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20M=C3=BCller?= Date: Thu, 26 Mar 2015 23:30:51 +0100 Subject: [PATCH] Adding a pending indicator to the files summary - fixes #14853 --- apps/files/js/filesummary.js | 38 ++++++++++++++++++-------- apps/files/tests/js/filesummarySpec.js | 33 ++++++++++++++++++++++ 2 files changed, 60 insertions(+), 11 deletions(-) diff --git a/apps/files/js/filesummary.js b/apps/files/js/filesummary.js index 11cb4f8ee45..a4cefe692a8 100644 --- a/apps/files/js/filesummary.js +++ b/apps/files/js/filesummary.js @@ -40,7 +40,8 @@ totalFiles: 0, totalDirs: 0, totalSize: 0, - filter:'' + filter:'', + sumIsPending:false }, /** @@ -58,7 +59,12 @@ else { this.summary.totalFiles++; } - this.summary.totalSize += parseInt(file.size, 10) || 0; + var size = parseInt(file.size, 10) || 0; + if (size >=0) { + this.summary.totalSize += size; + } else { + this.summary.sumIsPending = true; + } if (!!update) { this.update(); } @@ -78,7 +84,10 @@ else { this.summary.totalFiles--; } - this.summary.totalSize -= parseInt(file.size, 10) || 0; + var size = parseInt(file.size, 10) || 0; + if (size >=0) { + this.summary.totalSize -= size; + } if (!!update) { this.update(); } @@ -103,7 +112,8 @@ totalDirs: 0, totalFiles: 0, totalSize: 0, - filter: this.summary.filter + filter: this.summary.filter, + sumIsPending: false }; for (var i = 0; i < files.length; i++) { @@ -117,7 +127,12 @@ else { summary.totalFiles++; } - summary.totalSize += parseInt(file.size, 10) || 0; + var size = parseInt(file.size, 10) || 0; + if (size >=0) { + summary.totalSize += size; + } else { + summary.sumIsPending = true; + } } this.setSummary(summary); }, @@ -160,7 +175,8 @@ // Substitute old content with new translations $dirInfo.html(n('files', '%n folder', '%n folders', this.summary.totalDirs)); $fileInfo.html(n('files', '%n file', '%n files', this.summary.totalFiles)); - this.$el.find('.filesize').html(OC.Util.humanFileSize(this.summary.totalSize)); + var fileSize = this.summary.sumIsPending ? t('files', 'Pending') : OC.Util.humanFileSize(this.summary.totalSize); + this.$el.find('.filesize').html(fileSize); // Show only what's necessary (may be hidden) if (this.summary.totalDirs === 0) { @@ -194,10 +210,9 @@ var summary = this.summary; var directoryInfo = n('files', '%n folder', '%n folders', summary.totalDirs); var fileInfo = n('files', '%n file', '%n files', summary.totalFiles); - if (this.summary.filter === '') { - var filterInfo = ''; - } else { - var filterInfo = ' ' + n('files', 'matches \'{filter}\'', 'match \'{filter}\'', summary.totalFiles + summary.totalDirs, {filter: summary.filter}); + var filterInfo = ''; + if (this.summary.filter !== '') { + filterInfo = ' ' + n('files', 'matches \'{filter}\'', 'match \'{filter}\'', summary.totalFiles + summary.totalDirs, {filter: summary.filter}); } var infoVars = { @@ -208,7 +223,8 @@ // don't show the filesize column, if filesize is NaN (e.g. in trashbin) var fileSize = ''; if (!isNaN(summary.totalSize)) { - fileSize = '' + OC.Util.humanFileSize(summary.totalSize) + ''; + fileSize = summary.sumIsPending ? t('files', 'Pending') : OC.Util.humanFileSize(summary.totalSize); + fileSize = '' + fileSize + ''; } var info = t('files', '{dirs} and {files}', infoVars, null, {'escape': false}); diff --git a/apps/files/tests/js/filesummarySpec.js b/apps/files/tests/js/filesummarySpec.js index 4c53b7d8b3a..ae5ff95fc0c 100644 --- a/apps/files/tests/js/filesummarySpec.js +++ b/apps/files/tests/js/filesummarySpec.js @@ -148,4 +148,37 @@ describe('OCA.Files.FileSummary tests', function() { expect(s.summary.totalFiles).toEqual(1); expect(s.summary.totalSize).toEqual(127903); }); + it('properly sum up pending folder sizes after adding', function() { + var s = new FileSummary($container); + s.setSummary({ + totalDirs: 0, + totalFiles: 0, + totalSize: 0 + }); + s.add({type: 'dir', size: -1}); + s.update(); + expect($container.hasClass('hidden')).toEqual(false); + expect($container.find('.info').text()).toEqual('1 folder and 0 files'); + expect($container.find('.filesize').text()).toEqual('Pending'); + expect(s.summary.totalDirs).toEqual(1); + expect(s.summary.totalFiles).toEqual(0); + expect(s.summary.totalSize).toEqual(0); + }); + it('properly sum up pending folder sizes after remove', function() { + var s = new FileSummary($container); + s.setSummary({ + totalDirs: 0, + totalFiles: 0, + totalSize: 0 + }); + s.add({type: 'dir', size: -1}); + s.remove({type: 'dir', size: -1}); + s.update(); + expect($container.hasClass('hidden')).toEqual(true); + expect($container.find('.info').text()).toEqual('0 folders and 0 files'); + expect($container.find('.filesize').text()).toEqual('0 B'); + expect(s.summary.totalDirs).toEqual(0); + expect(s.summary.totalFiles).toEqual(0); + expect(s.summary.totalSize).toEqual(0); + }); }); -- 2.39.5