From 5d9ab6e7ac161a2431d9baca59281c03015b4ff5 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Wed, 6 Nov 2013 10:15:05 +0100 Subject: [PATCH 1/2] Update quota value in client after scan and upload After uploading, the quota value wasn't refreshed. This fix refreshes the quota value after files have been scanned or uploaded. --- apps/files/js/file-upload.js | 2 +- apps/files/js/filelist.js | 1 + apps/files/js/files.js | 43 ++++++++++++++++++++++++++---------- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js index 94290895ebd..553ca036360 100644 --- a/apps/files/js/file-upload.js +++ b/apps/files/js/file-upload.js @@ -404,7 +404,7 @@ $(document).ready(function() { $('#uploadprogresswrapper input.stop').fadeOut(); $('#uploadprogressbar').fadeOut(); - + Files.updateStorageStatistics(); }); fileupload.on('fileuploadfail', function(e, data) { OC.Upload.log('progress handle fileuploadfail', e, data); diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 3ef3c2c1766..66b4a006f88 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -554,6 +554,7 @@ var FileList={ checkTrashStatus(); FileList.updateFileSummary(); FileList.updateEmptyContent(); + Files.updateStorageStatistics(); } else { $.each(files,function(index,file) { var deleteAction = $('tr[data-file="'+files[i]+'"]').children("td.date").children(".action.delete"); diff --git a/apps/files/js/files.js b/apps/files/js/files.js index eb30ddfda0f..a7aea0957bd 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -1,4 +1,28 @@ Files={ + // file space size sync + _updateStorageStatistics: function() { + Files._updateStorageStatisticsTimeout = null; + if (Files.updateStorageStatistics.running){ + return; + } + Files.updateStorageStatistics.running = true; + $.getJSON(OC.filePath('files','ajax','getstoragestats.php'),function(response) { + Files.updateStorageStatistics.running = false; + Files.updateMaxUploadFilesize(response); + }); + }, + updateStorageStatistics: function() { + if (!OC.currentUser) { + return; + } + + // debounce to prevent calling too often + if (Files._updateStorageStatisticsTimeout) { + clearTimeout(Files._updateStorageStatisticsTimeout); + } + Files._updateStorageStatisticsTimeout = setTimeout(Files._updateStorageStatistics, 1000); + }, + updateMaxUploadFilesize:function(response) { if (response === undefined) { return; @@ -351,29 +375,23 @@ $(document).ready(function() { setTimeout ( "Files.displayStorageWarnings()", 100 ); OC.Notification.setDefault(Files.displayStorageWarnings); - // file space size sync - function update_storage_statistics() { - $.getJSON(OC.filePath('files','ajax','getstoragestats.php'),function(response) { - Files.updateMaxUploadFilesize(response); - }); - } // only possible at the moment if user is logged in if (OC.currentUser) { // start on load - we ask the server every 5 minutes - var update_storage_statistics_interval = 5*60*1000; - var update_storage_statistics_interval_id = setInterval(update_storage_statistics, update_storage_statistics_interval); + var updateStorageStatisticsInterval = 5*60*1000; + var updateStorageStatisticsIntervalId = setInterval(Files.updateStorageStatistics, updateStorageStatisticsInterval); // Use jquery-visibility to de-/re-activate file stats sync if ($.support.pageVisibility) { $(document).on({ 'show.visibility': function() { - if (!update_storage_statistics_interval_id) { - update_storage_statistics_interval_id = setInterval(update_storage_statistics, update_storage_statistics_interval); + if (!updateStorageStatisticsIntervalId) { + updateStorageStatisticsIntervalId = setInterval(Files.updateStorageStatistics, updateStorageStatisticsInterval); } }, 'hide.visibility': function() { - clearInterval(update_storage_statistics_interval_id); - update_storage_statistics_interval_id = 0; + clearInterval(updateStorageStatisticsIntervalId); + updateStorageStatisticsIntervalId = 0; } }); } @@ -417,6 +435,7 @@ function scanFiles(force, dir, users) { scannerEventSource.listen('done',function(count) { scanFiles.scanning=false; console.log('done after ' + count + ' files'); + Files.updateStorageStatistics(); }); scannerEventSource.listen('user',function(user) { console.log('scanning files for ' + user); From 31181e4348b9af2625cf4d6ad38cf4cd81db3c1f Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Wed, 6 Nov 2013 10:55:19 +0100 Subject: [PATCH 2/2] Fixed storage stats to be based on current directory Previously, the storage statistics were always for the root dir. This means that the upload button would always show the limit for the root dir, even when uploading to a shared dir or external storage. This fix adds a "dir" argument to getstoragestats.php. --- apps/files/ajax/getstoragestats.php | 8 +++++++- apps/files/js/filelist.js | 7 +++++++ apps/files/js/files.js | 26 +++++++++++++++++++------- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/apps/files/ajax/getstoragestats.php b/apps/files/ajax/getstoragestats.php index 32a77bff6c3..dd7c7dc5571 100644 --- a/apps/files/ajax/getstoragestats.php +++ b/apps/files/ajax/getstoragestats.php @@ -3,7 +3,13 @@ // only need filesystem apps $RUNTIME_APPTYPES = array('filesystem'); +$dir = '/'; + +if (isset($_GET['dir'])) { + $dir = $_GET['dir']; +} + OCP\JSON::checkLoggedIn(); // send back json -OCP\JSON::success(array('data' => \OCA\Files\Helper::buildFileStorageStatistics('/'))); +OCP\JSON::success(array('data' => \OCA\Files\Helper::buildFileStorageStatistics($dir))); diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 66b4a006f88..006bd1f4966 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -152,6 +152,9 @@ var FileList={ FileActions.display(tr.find('td.filename'), true); return tr; }, + getCurrentDirectory: function(){ + return $('#dir').val() || '/'; + }, /** * @brief Changes the current directory and reload the file list. * @param targetDir target directory (non URL encoded) @@ -224,6 +227,10 @@ var FileList={ return; } + // TODO: should rather return upload file size through + // the files list ajax call + Files.updateStorageStatistics(true); + if (result.data.permissions) { FileList.setDirectoryPermissions(result.data.permissions); } diff --git a/apps/files/js/files.js b/apps/files/js/files.js index a7aea0957bd..2947512ece5 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -2,16 +2,23 @@ Files={ // file space size sync _updateStorageStatistics: function() { Files._updateStorageStatisticsTimeout = null; - if (Files.updateStorageStatistics.running){ - return; + var currentDir = FileList.getCurrentDirectory(), + state = Files.updateStorageStatistics; + if (state.dir){ + if (state.dir === currentDir) { + return; + } + // cancel previous call, as it was for another dir + state.call.abort(); } - Files.updateStorageStatistics.running = true; - $.getJSON(OC.filePath('files','ajax','getstoragestats.php'),function(response) { - Files.updateStorageStatistics.running = false; + state.dir = currentDir; + state.call = $.getJSON(OC.filePath('files','ajax','getstoragestats.php') + '?dir=' + encodeURIComponent(currentDir),function(response) { + state.dir = null; + state.call = null; Files.updateMaxUploadFilesize(response); }); }, - updateStorageStatistics: function() { + updateStorageStatistics: function(force) { if (!OC.currentUser) { return; } @@ -20,7 +27,12 @@ Files={ if (Files._updateStorageStatisticsTimeout) { clearTimeout(Files._updateStorageStatisticsTimeout); } - Files._updateStorageStatisticsTimeout = setTimeout(Files._updateStorageStatistics, 1000); + if (force) { + Files._updateStorageStatistics(); + } + else { + Files._updateStorageStatisticsTimeout = setTimeout(Files._updateStorageStatistics, 250); + } }, updateMaxUploadFilesize:function(response) {