From c409d29f66057a1a2c0e405e60cc8aa5623bc52f Mon Sep 17 00:00:00 2001
From: Alexander Tkachev
Date: Tue, 5 Jul 2016 20:42:57 +0600
Subject: CLOUD: Add "/files" handler
Shows the page with controls, but doesn't actually list the directories,
create the specified ones or allows to upload files yet.
---
backends/networking/sdl_net/indexpagehandler.cpp | 28 +++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
(limited to 'backends/networking/sdl_net/indexpagehandler.cpp')
diff --git a/backends/networking/sdl_net/indexpagehandler.cpp b/backends/networking/sdl_net/indexpagehandler.cpp
index 2d1f2c2cd7..c2ea470802 100644
--- a/backends/networking/sdl_net/indexpagehandler.cpp
+++ b/backends/networking/sdl_net/indexpagehandler.cpp
@@ -33,11 +33,13 @@ namespace Networking {
#define ARCHIVE_NAME "wwwroot.zip"
#define INDEX_PAGE_NAME "index.html"
+#define FILES_PAGE_NAME "files.html"
IndexPageHandler::IndexPageHandler(): CommandSender(nullptr) {}
IndexPageHandler::~IndexPageHandler() {
LocalServer.removePathHandler("/");
+ LocalServer.removePathHandler("/files/");
Common::ArchiveMemberList fileList = listArchive();
for (Common::ArchiveMemberList::iterator it = fileList.begin(); it != fileList.end(); ++it) {
@@ -68,6 +70,28 @@ void IndexPageHandler::handle(Client &client) {
LocalWebserver::setClientGetHandler(client, response);
}
+void IndexPageHandler::handleFiles(Client &client) {
+ Common::String response = "
ScummVM{content}"; //TODO
+
+ // load stylish response page from the archive
+ Common::SeekableReadStream *const stream = getArchiveFile(FILES_PAGE_NAME);
+ if (stream) response = readEverythingFromStream(stream);
+
+ // TODO: list specified directory
+ Common::String path = client.queryParameter("path");
+ Common::String content = "";
+
+ //these occur twice:
+ replace(response, "{create_directory_button}", _("Create directory"));
+ replace(response, "{create_directory_button}", _("Create directory"));
+ replace(response, "{upload_files_button}", _("Upload files")); //tab
+ replace(response, "{upload_file_button}", _("Upload files")); //button in the tab
+ replace(response, "{create_directory_desc}", _("Type new directory name:"));
+ replace(response, "{upload_file_desc}", _("Select a file to upload:"));
+ replace(response, "{content}", content);
+ LocalWebserver::setClientGetHandler(client, response);
+}
+
void IndexPageHandler::handleResource(Client &client) {
Common::String filename = client.path();
filename.deleteChar(0);
@@ -80,11 +104,13 @@ void IndexPageHandler::addPathHandler(LocalWebserver &server) {
// we can't use LocalServer yet, because IndexPageHandler is created while LocalWebserver is created
// (thus no _instance is available and it causes stack overflow)
server.addPathHandler("/", new Common::Callback(this, &IndexPageHandler::handle));
+ server.addPathHandler("/files", new Common::Callback(this, &IndexPageHandler::handleFiles));
Common::ArchiveMemberList fileList = listArchive();
for (Common::ArchiveMemberList::iterator it = fileList.begin(); it != fileList.end(); ++it) {
Common::ArchiveMember const &m = **it;
- if (m.getName() == INDEX_PAGE_NAME) continue;
+ if (m.getName() == INDEX_PAGE_NAME) continue;
+ if (m.getName() == FILES_PAGE_NAME) continue;
server.addPathHandler("/" + m.getName(), new Common::Callback(this, &IndexPageHandler::handleResource));
}
}
--
cgit v1.2.3