summaryrefslogblamecommitdiffstats
path: root/src/virtualizer.cpp
blob: 521f885e839fc25dd1c2b82f8adfeb0d6a1ab16b (plain) (tree)






























                                                                                            
#include "virtualizer.h"
#include "config.h"

#include <QMap>
#include <QProcess>

static QMap<QString, Virtualizer*> virtMap;

static bool query(const QString &id) {
    static const QString runVirt = Config::get(Config::RUNSCRIPT);
    QProcess proc;
    proc.start(runVirt, QStringList() << QStringLiteral("--query") << id);
    // XXX: This should really only take about a millisecond, but it could be made async too
    // and then once the result arrives, redraw the TreeView. Since the result is cached
    // per virtualizer, it doesn't seem worth the effort right now.
    return proc.waitForFinished(1000) && proc.exitCode() == 0;
}

Virtualizer::Virtualizer(const QString &id)
        : id(id), isAvailable(query(id)) {

}

const Virtualizer* Virtualizer::get(const QString &id) {
    if (virtMap.contains(id)) {
        return virtMap[id];
    }
    Virtualizer *v = new Virtualizer(id);
    virtMap.insert(id, v);
    return v;
}