diff options
-rw-r--r-- | gui/remotebrowser.cpp | 42 | ||||
-rw-r--r-- | gui/remotebrowser.h | 1 |
2 files changed, 27 insertions, 16 deletions
diff --git a/gui/remotebrowser.cpp b/gui/remotebrowser.cpp index 995e6a654c..efeabb69a6 100644 --- a/gui/remotebrowser.cpp +++ b/gui/remotebrowser.cpp @@ -98,7 +98,8 @@ void RemoteBrowserDialog::handleCommand(CommandSender *sender, uint32 cmd, uint3 break; case kListItemActivatedCmd: case kListItemDoubleClickedCmd: - if (_nodeContent[data].isDirectory()) { + if (_nodeContent[data].isDirectory()) { + _rememberedNodeContents[_node.path()] = _nodeContent; listDirectory(_nodeContent[data]); } break; @@ -155,30 +156,39 @@ void RemoteBrowserDialog::updateListing() { } void RemoteBrowserDialog::goUp() { + if (_rememberedNodeContents.contains(_node.path())) + _rememberedNodeContents.erase(_node.path()); + Common::String path = _node.path(); if (path.size() && (path.lastChar() == '/' || path.lastChar() == '\\')) path.deleteLastChar(); if (path.empty()) { - draw(); - return; + _rememberedNodeContents.erase(""); + } else { + for (int i = path.size() - 1; i >= 0; --i) + if (i == 0 || path[i] == '/' || path[i] == '\\') { + path.erase(i); + break; + } } - for (int i = path.size()-1; i >= 0; --i) - if (i == 0 || path[i] == '/' || path[i] == '\\') { - path.erase(i); - break; - } + listDirectory(Cloud::StorageFile(path, 0, 0, true)); } void RemoteBrowserDialog::listDirectory(Cloud::StorageFile node) { if (_navigationLocked || _workingRequest) return; - _navigationLocked = true; - - _workingRequest = CloudMan.listDirectory( - node.path(), - new Common::Callback<RemoteBrowserDialog, Cloud::Storage::ListDirectoryResponse>(this, &RemoteBrowserDialog::directoryListedCallback), - new Common::Callback<RemoteBrowserDialog, Networking::ErrorResponse>(this, &RemoteBrowserDialog::directoryListedErrorCallback), - false - ); + + if (_rememberedNodeContents.contains(node.path())) { + _nodeContent = _rememberedNodeContents[node.path()]; + } else { + _navigationLocked = true; + + _workingRequest = CloudMan.listDirectory( + node.path(), + new Common::Callback<RemoteBrowserDialog, Cloud::Storage::ListDirectoryResponse>(this, &RemoteBrowserDialog::directoryListedCallback), + new Common::Callback<RemoteBrowserDialog, Networking::ErrorResponse>(this, &RemoteBrowserDialog::directoryListedErrorCallback), + false + ); + } _backupNode = _node; _node = node; diff --git a/gui/remotebrowser.h b/gui/remotebrowser.h index e13ee9db3d..0137c32dc0 100644 --- a/gui/remotebrowser.h +++ b/gui/remotebrowser.h @@ -53,6 +53,7 @@ protected: StaticTextWidget *_currentPath; Cloud::StorageFile _node, _backupNode; Common::Array<Cloud::StorageFile> _nodeContent; + Common::HashMap<Common::String, Common::Array<Cloud::StorageFile> > _rememberedNodeContents; Cloud::StorageFile _choice; bool _navigationLocked; bool _updateList; |