summaryrefslogtreecommitdiffstats
path: root/src/vsession.cpp
diff options
context:
space:
mode:
authorSimon Rettberg2015-11-12 17:03:11 +0100
committerSimon Rettberg2015-11-12 17:03:11 +0100
commit1c49173c8f62d3b9e609d22a027a42376db5d3de (patch)
tree2e5559d0435aa5ff784ee58e7dbcc8524a048984 /src/vsession.cpp
parentAdd images for win2k, winxp, win8 (diff)
downloadvmchooser2-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.cpp62
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 {