]> source.dussan.org Git - nextcloud-server.git/commitdiff
Adding a pending indicator to the files summary - fixes #14853
authorThomas Müller <thomas.mueller@tmit.eu>
Thu, 26 Mar 2015 22:30:51 +0000 (23:30 +0100)
committerThomas Müller <thomas.mueller@tmit.eu>
Fri, 27 Mar 2015 00:16:29 +0000 (01:16 +0100)
apps/files/js/filesummary.js
apps/files/tests/js/filesummarySpec.js

index 11cb4f8ee455f87ed61fda36f1a2cc57d186d6d6..a4cefe692a89b7edbceac888929026ce869e1507 100644 (file)
@@ -40,7 +40,8 @@
                        totalFiles: 0,
                        totalDirs: 0,
                        totalSize: 0,
-                       filter:''
+                       filter:'',
+                       sumIsPending:false
                },
 
                /**
                        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();
                        }
                        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();
                        }
                                totalDirs: 0,
                                totalFiles: 0,
                                totalSize: 0,
-                               filter: this.summary.filter
+                               filter: this.summary.filter,
+                               sumIsPending: false
                        };
 
                        for (var i = 0; i < files.length; i++) {
                                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);
                },
                        // 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) {
                        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 = {
                        // don't show the filesize column, if filesize is NaN (e.g. in trashbin)
                        var fileSize = '';
                        if (!isNaN(summary.totalSize)) {
-                               fileSize = '<td class="filesize">' + OC.Util.humanFileSize(summary.totalSize) + '</td>';
+                               fileSize = summary.sumIsPending ? t('files', 'Pending') : OC.Util.humanFileSize(summary.totalSize);
+                               fileSize = '<td class="filesize">' + fileSize + '</td>';
                        }
 
                        var info = t('files', '{dirs} and {files}', infoVars, null, {'escape': false});
index 4c53b7d8b3a28a562a2d139235341e66723f75cc..ae5ff95fc0cd9e63209c6d06fb088ac6e5a903ec 100644 (file)
@@ -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);
+       });
 });