From 1c49173c8f62d3b9e609d22a027a42376db5d3de Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 12 Nov 2015 17:03:11 +0100 Subject: Start refactoring download helpers and icon management --- src/vsession.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 3 deletions(-) (limited to 'src/vsession.cpp') diff --git a/src/vsession.cpp b/src/vsession.cpp index 5cd9d0b..45587f1 100644 --- a/src/vsession.cpp +++ b/src/vsession.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #if 0 #include // available since Qt 4.7 #endif @@ -14,7 +15,7 @@ #include // for getpwuid #include "globals.h" #include "vsession.h" -#include "httpxmldownloader.h" +#include "sessionsiconholder.h" bool VSession::init(const QString& xml, const QString& baseDirPath) { this->baseDirPath_ = baseDirPath; @@ -38,8 +39,63 @@ void VSession::addNodeWithAttribute(const QString& nodeName, node.setAttribute(attribute, value); } -QString VSession::icon() const { - return getAttribute("icon"); +QIcon VSession::icon() const { + QString icon(getAttribute("icon")); + SessionsIconHolder *iconHolder = SessionsIconHolder::get(); + if (icon.startsWith("http://")) { + // try to load icon from url + QIcon url_icon(iconHolder->getIcon(QUrl(icon))); + if (!url_icon.isNull()) { + return url_icon; + } + } else if (QFileInfo(icon).isAbsolute()) { + // try to load icon from file + QIcon file_icon(icon); + if (!file_icon.isNull()) { + return file_icon; + } + } + if (!icon.isEmpty()) { + QIcon res_icon(iconHolder->getIcon(icon)); + if (!res_icon.isNull()) { + return res_icon; + } + } + // Everything failed, try to guess the OS + QString os(getAttribute("os", "param").toLower()); + if (!os.isEmpty()) { + QIcon osi = iconHolder->getIcon(os); + if (!osi.isNull()) + return osi; + // These match vmware guestOS keywords mostly, extend for vbox... + if (os == "dos") + return iconHolder->getIcon("dos"); + if (os.startsWith("windows7")) + return iconHolder->getIcon("win7"); + if (os.startsWith("win31")) + return iconHolder->getIcon("win311"); + if (os.startsWith("windows8")) + return iconHolder->getIcon("win8"); + if (os.startsWith("win2000")) + return iconHolder->getIcon("win2000"); + if (os.startsWith("winxp")) + return iconHolder->getIcon("winxp"); + if (os.startsWith("debian")) + return iconHolder->getIcon("debian"); + if (os.startsWith("ubuntu")) + return iconHolder->getIcon("ubuntu"); + if (os.startsWith("win")) + return iconHolder->getIcon("windows"); + if (os.contains("linux")) + return iconHolder->getIcon("linux"); + } + // TODO: Maybe parse title of entry for an OS guess? + // Fallback to generic virtualizer icon + if (imgtype() == VMWARE) + return iconHolder->getIcon("vmware"); + if (imgtype() == VBOX) + return iconHolder->getIcon("virtualbox"); + return QIcon(); } QString VSession::toXml() const { -- cgit v1.2.3-55-g7522