diff options
author | Simon Rettberg | 2015-11-12 17:03:11 +0100 |
---|---|---|
committer | Simon Rettberg | 2015-11-12 17:03:11 +0100 |
commit | 1c49173c8f62d3b9e609d22a027a42376db5d3de (patch) | |
tree | 2e5559d0435aa5ff784ee58e7dbcc8524a048984 /src/vsession.cpp | |
parent | Add images for win2k, winxp, win8 (diff) | |
download | vmchooser2-1c49173c8f62d3b9e609d22a027a42376db5d3de.tar.gz vmchooser2-1c49173c8f62d3b9e609d22a027a42376db5d3de.tar.xz vmchooser2-1c49173c8f62d3b9e609d22a027a42376db5d3de.zip |
Start refactoring download helpers and icon management
Diffstat (limited to 'src/vsession.cpp')
-rw-r--r-- | src/vsession.cpp | 62 |
1 files changed, 59 insertions, 3 deletions
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 <QDate> #include <QThread> #include <QStringList> +#include <QIcon> #if 0 #include <QHostInfo> // available since Qt 4.7 #endif @@ -14,7 +15,7 @@ #include <pwd.h> // 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 { |