diff --git a/web/pgadmin/misc/file_manager/__init__.py b/web/pgadmin/misc/file_manager/__init__.py index 4a8e709..fb2dce4 100644 --- a/web/pgadmin/misc/file_manager/__init__.py +++ b/web/pgadmin/misc/file_manager/__init__.py @@ -146,6 +146,11 @@ class FileManagerModule(PgAdminModule): gettext("Maximum file upload size (MB)"), 'integer', 50, category_label=gettext('Options') ) + self.last_directory_visited = self.preference.register( + 'options', 'last_directory_visited', + gettext("Last directory visited"), 'text', '/', + category_label=gettext('Options') + ) # Initialise the module @@ -234,6 +239,14 @@ def delete_trans_id(trans_id): data={'status': True} ) +@blueprint.route("/save_last_dir/", methods=["POST"]) +@login_required +def save_last_directory_visited(trans_id): + blueprint.last_directory_visited.set(req.json['path']) + return make_json_response( + data={'status': True} + ) + class Filemanager(object): """FileManager Class.""" @@ -299,7 +312,7 @@ class Filemanager(object): # create configs using above configs configs = { - "fileroot": "/", + "fileroot": blueprint.last_directory_visited.get(), "dialog_type": fm_type, "title": title, "upload": { @@ -556,6 +569,8 @@ class Filemanager(object): """ trans_data = Filemanager.get_trasaction_selection(self.trans_id) dir = self.dir + if not dir.endswith('/'): + dir += '/'; filelist = self.list_filesystem(dir, path, trans_data, file_type) return filelist diff --git a/web/pgadmin/misc/file_manager/templates/file_manager/js/file_manager.js b/web/pgadmin/misc/file_manager/templates/file_manager/js/file_manager.js index 473a05f..412e6c8 100644 --- a/web/pgadmin/misc/file_manager/templates/file_manager/js/file_manager.js +++ b/web/pgadmin/misc/file_manager/templates/file_manager/js/file_manager.js @@ -46,6 +46,15 @@ define([ contentType: "application/json; charset=utf-8", }); }; + + var set_last_traversed_dir = function(path, _url) { + return $.ajax({ + url: _url, + type: 'POST', + data: JSON.stringify(path), + contentType: 'application/json' + }); + }; // Declare the Storage dialog alertify.dialog('storageManagerDlg', function() { var controls = [], // Keep tracking of all the backform controls @@ -141,6 +150,12 @@ define([ var newFile = $('.currentpath').val() + sel_file; pgAdmin.Browser.Events.trigger('pgadmin-storage:finish_btn:storage_dialog', newFile); + + var _Url = "{{ url_for('file_manager.index') }}" + "save_last_dir/" + trans_id; + var file_data = { + 'path': $('.currentpath').val() + }; + set_last_traversed_dir(file_data, _Url); } else if (closeEvent.button.text == "{{ _('Cancel') }}") { if (removeTransId(trans_id)) { this.destroy(); @@ -258,6 +273,12 @@ define([ pgAdmin.Browser.Events.trigger('pgadmin-storage:finish_btn:select_file', newFile); removeTransId(trans_id); + // Ajax call to store the last directory visited once user press select button + var _Url = "{{ url_for('file_manager.index') }}" + "save_last_dir/" + trans_id; + var file_data = { + 'path': $('.currentpath').val() + }; + set_last_traversed_dir(file_data, _Url); } else if (closeEvent.button.text == "{{ _('Cancel') }}") { if (removeTransId(trans_id)) { this.destroy(); @@ -375,6 +396,12 @@ define([ pgAdmin.Browser.Events.trigger('pgadmin-storage:finish_btn:select_folder', newFile); removeTransId(trans_id); + // Ajax call to store the last directory visited once user press select button + var _Url = "{{ url_for('file_manager.index') }}" + "save_last_dir/" + trans_id; + var file_data = { + 'path': $('.currentpath').val() + }; + set_last_traversed_dir(file_data, _Url); } else if (closeEvent.button.text == "{{ _('Cancel') }}") { if (removeTransId(trans_id)) { this.destroy(); @@ -536,6 +563,12 @@ define([ pgAdmin.Browser.Events.trigger('pgadmin-storage:finish_btn:create_file', newFile); removeTransId(trans_id); } + + var _Url = "{{ url_for('file_manager.index') }}" + "save_last_dir/" + trans_id; + var file_data = { + 'path': $('.currentpath').val() + }; + set_last_traversed_dir(file_data, _Url); } else if (closeEvent.button.text == "{{ _('Cancel') }}") { if (removeTransId(trans_id)) { this.destroy(); diff --git a/web/pgadmin/misc/file_manager/templates/file_manager/js/utility.js b/web/pgadmin/misc/file_manager/templates/file_manager/js/utility.js index f1a5ef4..76069e2 100755 --- a/web/pgadmin/misc/file_manager/templates/file_manager/js/utility.js +++ b/web/pgadmin/misc/file_manager/templates/file_manager/js/utility.js @@ -216,6 +216,7 @@ var setUploader = function(path) { $('.storage_dialog #uploader h1').html(file_path); $('.currentpath').val(path); + enab_dis_level_up(); if ($('.storage_dialog #uploader h1 span').length === 0) { $(''+lg.current_folder+'').appendTo($('.storage_dialog #uploader h1')); } @@ -1188,7 +1189,7 @@ var enab_dis_level_up = function() { $level_up = $('.file_manager').find('button.level-up'), $home_btn = $('.file_manager').find('button.home'); - if (b === fileRoot) { + if (b === '/') { $level_up.attr('disabled', 'disabled'); $home_btn.attr('disabled', 'disabled'); } else { @@ -1370,7 +1371,7 @@ $('.file_manager .uploader').on('click', 'a', function(e) { $('.file_manager .home').click(function() { var currentViewMode = $('.fileinfo').data('view'); $('.fileinfo').data('view', currentViewMode); - getFolderInfo(fileRoot); + getFolderInfo('/'); enab_dis_level_up(); }); @@ -1381,7 +1382,7 @@ $(".file_manager .level-up").click(function() { // Enable/Disable level up button enab_dis_level_up(); - if (b != fileRoot) { + if (b != '/') { parent = b.substring(0, b.slice(0, -1).lastIndexOf("/")) + "/"; var d = $(".fileinfo").data("view"); $(".fileinfo").data("view", d);