diff options
author | Alexander Tkachev | 2016-07-19 14:31:37 +0600 |
---|---|---|
committer | Alexander Tkachev | 2016-08-24 16:07:55 +0600 |
commit | 36b381e411f4e55ba9590a4102f5b84ce6b724ce (patch) | |
tree | 1c0ab0495e1d1aa867663ae0a3ea28d7359bac60 /backends/networking/sdl_net/handlers | |
parent | da229dd84c5761f80b16c25edba7bfb738fc835f (diff) | |
download | scummvm-rg350-36b381e411f4e55ba9590a4102f5b84ce6b724ce.tar.gz scummvm-rg350-36b381e411f4e55ba9590a4102f5b84ce6b724ce.tar.bz2 scummvm-rg350-36b381e411f4e55ba9590a4102f5b84ce6b724ce.zip |
CLOUD: Make "/create" support AJAX
Now creating directories doesn't refresh the "/filesAJAX" page.
Diffstat (limited to 'backends/networking/sdl_net/handlers')
-rw-r--r-- | backends/networking/sdl_net/handlers/createdirectoryhandler.cpp | 32 | ||||
-rw-r--r-- | backends/networking/sdl_net/handlers/createdirectoryhandler.h | 2 |
2 files changed, 28 insertions, 6 deletions
diff --git a/backends/networking/sdl_net/handlers/createdirectoryhandler.cpp b/backends/networking/sdl_net/handlers/createdirectoryhandler.cpp index fc02b643c1..2ded9785a0 100644 --- a/backends/networking/sdl_net/handlers/createdirectoryhandler.cpp +++ b/backends/networking/sdl_net/handlers/createdirectoryhandler.cpp @@ -38,25 +38,25 @@ void CreateDirectoryHandler::handle(Client &client) { // check that <path> is not an absolute root if (path == "" || path == "/") { - HandlerUtils::setFilesManagerErrorMessageHandler(client, _("Can't create directory here!")); + handleError(client, _("Can't create directory here!")); return; } // transform virtual path to actual file system one Common::String prefixToRemove = "", prefixToAdd = ""; if (!transformPath(path, prefixToRemove, prefixToAdd) || path.empty()) { - HandlerUtils::setFilesManagerErrorMessageHandler(client, _("Invalid path!")); + handleError(client, _("Invalid path!")); return; } // check that <path> exists and is directory AbstractFSNode *node = g_system->getFilesystemFactory()->makeFileNodePath(path); if (!node->exists()) { - HandlerUtils::setFilesManagerErrorMessageHandler(client, _("Parent directory doesn't exists!")); + handleError(client, _("Parent directory doesn't exists!")); return; } if (!node->isDirectory()) { - HandlerUtils::setFilesManagerErrorMessageHandler(client, _("Can't create a directory within a file!")); + handleError(client, _("Can't create a directory within a file!")); return; } @@ -65,17 +65,23 @@ void CreateDirectoryHandler::handle(Client &client) { node = g_system->getFilesystemFactory()->makeFileNodePath(path + name); if (node->exists()) { if (!node->isDirectory()) { - HandlerUtils::setFilesManagerErrorMessageHandler(client, _("There is a file with that name in the parent directory!")); + handleError(client, _("There is a file with that name in the parent directory!")); return; } } else { // create the <directory_name> in <path> if (!node->create(true)) { - HandlerUtils::setFilesManagerErrorMessageHandler(client, _("Failed to create the directory!")); + handleError(client, _("Failed to create the directory!")); return; } } + // if json requested, respond with it + if (client.queryParameter("answer_json") == "true") { + setJsonResponseHandler(client, "success", _("Directory created successfully!")); + return; + } + // set redirect on success HandlerUtils::setMessageHandler( client, @@ -91,6 +97,20 @@ void CreateDirectoryHandler::handle(Client &client) { ); } +void CreateDirectoryHandler::handleError(Client &client, Common::String message) const { + if (client.queryParameter("answer_json") == "true") setJsonResponseHandler(client, "error", message); + else HandlerUtils::setFilesManagerErrorMessageHandler(client, message); +} + +void CreateDirectoryHandler::setJsonResponseHandler(Client &client, Common::String type, Common::String message) const { + Common::JSONObject response; + response.setVal("type", new Common::JSONValue(type)); + response.setVal("message", new Common::JSONValue(message)); + + Common::JSONValue json = response; + LocalWebserver::setClientGetHandler(client, json.stringify(true)); +} + /// public ClientHandlerCallback CreateDirectoryHandler::getHandler() { diff --git a/backends/networking/sdl_net/handlers/createdirectoryhandler.h b/backends/networking/sdl_net/handlers/createdirectoryhandler.h index 2ffaf96f1f..bd0e8874da 100644 --- a/backends/networking/sdl_net/handlers/createdirectoryhandler.h +++ b/backends/networking/sdl_net/handlers/createdirectoryhandler.h @@ -29,6 +29,8 @@ namespace Networking { class CreateDirectoryHandler: public FilesBaseHandler { void handle(Client &client); + void handleError(Client &client, Common::String message) const; + void setJsonResponseHandler(Client &client, Common::String type, Common::String message) const; public: CreateDirectoryHandler(); virtual ~CreateDirectoryHandler(); |