diff options
author | Alexander Tkachev | 2016-07-15 13:46:43 +0600 |
---|---|---|
committer | Alexander Tkachev | 2016-08-24 16:07:55 +0600 |
commit | 06ccfd4b9af518707f51550a5b3fe6af313c3bd0 (patch) | |
tree | fa9f4223916c62845d1e15fbf1e7106cdbd643ba /backends/networking/sdl_net/handlers | |
parent | 626d85ea49801a40196292569848268dfb93621e (diff) | |
download | scummvm-rg350-06ccfd4b9af518707f51550a5b3fe6af313c3bd0.tar.gz scummvm-rg350-06ccfd4b9af518707f51550a5b3fe6af313c3bd0.tar.bz2 scummvm-rg350-06ccfd4b9af518707f51550a5b3fe6af313c3bd0.zip |
CLOUD: Add icons in "/files" list
Diffstat (limited to 'backends/networking/sdl_net/handlers')
-rw-r--r-- | backends/networking/sdl_net/handlers/filespagehandler.cpp | 32 | ||||
-rw-r--r-- | backends/networking/sdl_net/handlers/filespagehandler.h | 14 |
2 files changed, 38 insertions, 8 deletions
diff --git a/backends/networking/sdl_net/handlers/filespagehandler.cpp b/backends/networking/sdl_net/handlers/filespagehandler.cpp index e519c5ac8b..1b8ab463bc 100644 --- a/backends/networking/sdl_net/handlers/filespagehandler.cpp +++ b/backends/networking/sdl_net/handlers/filespagehandler.cpp @@ -68,7 +68,7 @@ void FilesPageHandler::handle(Client &client) { "<table>{content}</table>" \ "</body>" \ "</html>"; - Common::String itemTemplate = "<tr><td><a href=\"{link}\">{name}</a></td><td>{size}</td></tr>\n"; //TODO: load this template too? + Common::String itemTemplate = "<tr><td><img src=\"icons/{icon}\"/></td><td><a href=\"{link}\">{name}</a></td><td>{size}</td></tr>\n"; //TODO: load this template too? // load stylish response page from the archive Common::SeekableReadStream *const stream = HandlerUtils::getArchiveFile(FILES_PAGE_NAME); @@ -99,8 +99,8 @@ void FilesPageHandler::handle(Client &client) { bool FilesPageHandler::listDirectory(Common::String path, Common::String &content, const Common::String &itemTemplate) { if (path == "" || path == "/") { - addItem(content, itemTemplate, true, "/root/", _("File system root")); - addItem(content, itemTemplate, true, "/saves/", _("Saved games")); + addItem(content, itemTemplate, IT_DIRECTORY, "/root/", _("File system root")); + addItem(content, itemTemplate, IT_DIRECTORY, "/saves/", _("Saved games")); return true; } @@ -127,7 +127,7 @@ bool FilesPageHandler::listDirectory(Common::String path, Common::String &conten filePath = "/"; else filePath = parentPath(prefixToAdd + filePath); - addItem(content, itemTemplate, true, filePath, _("Parent directory")); + addItem(content, itemTemplate, IT_PARENT_DIRECTORY, filePath, _("Parent directory")); } // fill the content @@ -140,14 +140,32 @@ bool FilesPageHandler::listDirectory(Common::String path, Common::String &conten filePath.erase(0, prefixToRemove.size()); filePath = prefixToAdd + filePath; - addItem(content, itemTemplate, i->isDirectory(), filePath, name); + addItem(content, itemTemplate, detectType(i->isDirectory(), name), filePath, name); } return true; } -void FilesPageHandler::addItem(Common::String &content, const Common::String &itemTemplate, bool isDirectory, Common::String path, Common::String name, Common::String size) { - Common::String item = itemTemplate; +FilesPageHandler::ItemType FilesPageHandler::detectType(bool isDirectory, const Common::String &name) const { + if (isDirectory) return IT_DIRECTORY; + if (name.hasSuffix(".txt")) return IT_TXT; + if (name.hasSuffix(".zip")) return IT_ZIP; + if (name.hasSuffix(".7z")) return IT_7Z; + return IT_UNKNOWN; +} + +void FilesPageHandler::addItem(Common::String &content, const Common::String &itemTemplate, ItemType itemType, Common::String path, Common::String name, Common::String size) { + Common::String item = itemTemplate, icon; + bool isDirectory = (itemType == IT_DIRECTORY || itemType == IT_PARENT_DIRECTORY); + switch (itemType) { + case IT_DIRECTORY: icon = "dir.png"; break; + case IT_PARENT_DIRECTORY: icon = "up.png"; break; + case IT_TXT: icon = "txt.png"; break; + case IT_ZIP: icon = "zip.png"; break; + case IT_7Z: icon = "7z.png"; break; + default: icon = "unk.png"; + } + replace(item, "{icon}", icon); replace(item, "{link}", (isDirectory ? "files?path=" : "download?path=") + LocalWebserver::urlEncodeQueryParameterValue(path)); replace(item, "{name}", name); replace(item, "{size}", size); diff --git a/backends/networking/sdl_net/handlers/filespagehandler.h b/backends/networking/sdl_net/handlers/filespagehandler.h index ba132fd7ba..f102acd9fc 100644 --- a/backends/networking/sdl_net/handlers/filespagehandler.h +++ b/backends/networking/sdl_net/handlers/filespagehandler.h @@ -28,6 +28,15 @@ namespace Networking { class FilesPageHandler: public FilesBaseHandler { + enum ItemType { + IT_DIRECTORY, + IT_PARENT_DIRECTORY, + IT_TXT, + IT_ZIP, + IT_7Z, + IT_UNKNOWN + }; + void handle(Client &client); /** @@ -37,8 +46,11 @@ class FilesPageHandler: public FilesBaseHandler { */ bool listDirectory(Common::String path, Common::String &content, const Common::String &itemTemplate); + /** Helper method for detecting items' type. */ + ItemType detectType(bool isDirectory, const Common::String &name) const; + /** Helper method for adding items into the files list. */ - void addItem(Common::String &content, const Common::String &itemTemplate, bool isDirectory, Common::String path, Common::String name, Common::String size = ""); + void addItem(Common::String &content, const Common::String &itemTemplate, ItemType itemType, Common::String path, Common::String name, Common::String size = ""); public: FilesPageHandler(); |