diff options
Diffstat (limited to 'api')
-rw-r--r-- | api/dead/README.md | 3 | ||||
-rw-r--r-- | api/dead/src/AbstractCommonModel.cpp (renamed from api/logic/AbstractCommonModel.cpp) | 0 | ||||
-rw-r--r-- | api/dead/src/AbstractCommonModel.h (renamed from api/logic/AbstractCommonModel.h) | 0 | ||||
-rw-r--r-- | api/dead/src/BaseConfigObject.cpp (renamed from api/logic/BaseConfigObject.cpp) | 0 | ||||
-rw-r--r-- | api/dead/src/BaseConfigObject.h (renamed from api/logic/BaseConfigObject.h) | 0 | ||||
-rw-r--r-- | api/dead/src/TypeMagic.h (renamed from api/logic/TypeMagic.h) | 0 | ||||
-rw-r--r-- | api/dead/src/handlers/IconResourceHandler.cpp | 37 | ||||
-rw-r--r-- | api/dead/src/handlers/IconResourceHandler.h | 23 | ||||
-rw-r--r-- | api/dead/src/handlers/WebResourceHandler.cpp | 68 | ||||
-rw-r--r-- | api/dead/src/handlers/WebResourceHandler.h | 23 | ||||
-rw-r--r-- | api/dead/src/resources/Resource.cpp (renamed from api/logic/resources/Resource.cpp) | 0 | ||||
-rw-r--r-- | api/dead/src/resources/Resource.h (renamed from api/logic/resources/Resource.h) | 0 | ||||
-rw-r--r-- | api/dead/src/resources/ResourceHandler.cpp (renamed from api/logic/resources/ResourceHandler.cpp) | 0 | ||||
-rw-r--r-- | api/dead/src/resources/ResourceHandler.h (renamed from api/logic/resources/ResourceHandler.h) | 0 | ||||
-rw-r--r-- | api/dead/src/resources/ResourceObserver.cpp (renamed from api/logic/resources/ResourceObserver.cpp) | 0 | ||||
-rw-r--r-- | api/dead/src/resources/ResourceObserver.h (renamed from api/logic/resources/ResourceObserver.h) | 0 | ||||
-rw-r--r-- | api/dead/src/resources/ResourceProxyModel.cpp (renamed from api/logic/resources/ResourceProxyModel.cpp) | 0 | ||||
-rw-r--r-- | api/dead/src/resources/ResourceProxyModel.h (renamed from api/logic/resources/ResourceProxyModel.h) | 0 | ||||
-rw-r--r-- | api/dead/test/tst_Resource.cpp | 116 | ||||
-rw-r--r-- | api/logic/CMakeLists.txt | 15 |
20 files changed, 270 insertions, 15 deletions
diff --git a/api/dead/README.md b/api/dead/README.md new file mode 100644 index 00000000..520b18d3 --- /dev/null +++ b/api/dead/README.md @@ -0,0 +1,3 @@ +This stuff is dead code I collected from the repository that still looks like it might be useful for something. + +Moved on 10. April 2016 - if it hasn't been moved or used in a while, delete this. diff --git a/api/logic/AbstractCommonModel.cpp b/api/dead/src/AbstractCommonModel.cpp index 71d75829..71d75829 100644 --- a/api/logic/AbstractCommonModel.cpp +++ b/api/dead/src/AbstractCommonModel.cpp diff --git a/api/logic/AbstractCommonModel.h b/api/dead/src/AbstractCommonModel.h index 31b86a23..31b86a23 100644 --- a/api/logic/AbstractCommonModel.h +++ b/api/dead/src/AbstractCommonModel.h diff --git a/api/logic/BaseConfigObject.cpp b/api/dead/src/BaseConfigObject.cpp index 3040ac2e..3040ac2e 100644 --- a/api/logic/BaseConfigObject.cpp +++ b/api/dead/src/BaseConfigObject.cpp diff --git a/api/logic/BaseConfigObject.h b/api/dead/src/BaseConfigObject.h index 1c96b3d1..1c96b3d1 100644 --- a/api/logic/BaseConfigObject.h +++ b/api/dead/src/BaseConfigObject.h diff --git a/api/logic/TypeMagic.h b/api/dead/src/TypeMagic.h index fa9d12a9..fa9d12a9 100644 --- a/api/logic/TypeMagic.h +++ b/api/dead/src/TypeMagic.h diff --git a/api/dead/src/handlers/IconResourceHandler.cpp b/api/dead/src/handlers/IconResourceHandler.cpp new file mode 100644 index 00000000..b03553fd --- /dev/null +++ b/api/dead/src/handlers/IconResourceHandler.cpp @@ -0,0 +1,37 @@ +#include "IconResourceHandler.h" +#include <xdgicon.h> + +#include <QDir> +#include <QDebug> + +QList<std::weak_ptr<IconResourceHandler>> IconResourceHandler::m_iconHandlers; + +IconResourceHandler::IconResourceHandler(const QString &key) + : m_key(key) +{ +} + +void IconResourceHandler::setTheme(const QString &theme) +{ + // notify everyone + for (auto handler : m_iconHandlers) + { + std::shared_ptr<IconResourceHandler> ptr = handler.lock(); + if (ptr) + { + ptr->setResult(ptr->get()); + } + } +} + +void IconResourceHandler::init(std::shared_ptr<ResourceHandler> &ptr) +{ + m_iconHandlers.append(std::dynamic_pointer_cast<IconResourceHandler>(ptr)); + // we always have a result, so lets report it now! + setResult(get()); +} + +QVariant IconResourceHandler::get() const +{ + return XdgIcon::fromTheme(m_key); +} diff --git a/api/dead/src/handlers/IconResourceHandler.h b/api/dead/src/handlers/IconResourceHandler.h new file mode 100644 index 00000000..0cc4de4f --- /dev/null +++ b/api/dead/src/handlers/IconResourceHandler.h @@ -0,0 +1,23 @@ +#pragma once + +#include <memory> +#include <resources/ResourceHandler.h> + +class IconResourceHandler : public ResourceHandler +{ +public: + explicit IconResourceHandler(const QString &key); + + /// Sets the current theme and notifies all IconResourceHandlers of the change + static void setTheme(const QString &theme); + +private: + // we need to keep track of all IconResourceHandlers so that we can update them if the theme changes + void init(std::shared_ptr<ResourceHandler> &ptr) override; + static QList<std::weak_ptr<IconResourceHandler>> m_iconHandlers; + + QString m_key; + + // the workhorse, returns QVariantMap (filename => size) for m_key/m_theme + QVariant get() const; +}; diff --git a/api/dead/src/handlers/WebResourceHandler.cpp b/api/dead/src/handlers/WebResourceHandler.cpp new file mode 100644 index 00000000..757b870a --- /dev/null +++ b/api/dead/src/handlers/WebResourceHandler.cpp @@ -0,0 +1,68 @@ +#include "WebResourceHandler.h" + +#include "net/CacheDownload.h" +#include "net/HttpMetaCache.h" +#include "net/NetJob.h" +#include "FileSystem.h" +#include "Env.h" + +//FIXME: wrong. needs to be done elsewhere. +QMap<QString, NetJob *> WebResourceHandler::m_activeDownloads; + +WebResourceHandler::WebResourceHandler(const QString &url) + : QObject(), m_url(url) +{ + MetaEntryPtr entry = ENV.metacache()->resolveEntry("icons", url); + if (!entry->isStale()) + { + setResultFromFile(entry->getFullPath()); + } + else if (m_activeDownloads.contains(url)) + { + NetJob *job = m_activeDownloads.value(url); + connect(job, &NetJob::succeeded, this, &WebResourceHandler::succeeded); + connect(job, &NetJob::failed, this, [job, this]() {setFailure(job->failReason());}); + connect(job, &NetJob::progress, this, &WebResourceHandler::progress); + } + else + { + NetJob *job = new NetJob("Icon download"); + job->addNetAction(CacheDownload::make(QUrl(url), entry)); + connect(job, &NetJob::succeeded, this, &WebResourceHandler::succeeded); + connect(job, &NetJob::failed, this, [job, this]() {setFailure(job->failReason());}); + connect(job, &NetJob::progress, this, &WebResourceHandler::progress); + connect(job, &NetJob::finished, job, [job](){m_activeDownloads.remove(m_activeDownloads.key(job));job->deleteLater();}); + m_activeDownloads.insert(url, job); + job->start(); + } +} + +void WebResourceHandler::succeeded() +{ + MetaEntryPtr entry = ENV.metacache()->resolveEntry("icons", m_url); + setResultFromFile(entry->getFullPath()); + m_activeDownloads.remove(m_activeDownloads.key(qobject_cast<NetJob *>(sender()))); +} +void WebResourceHandler::progress(qint64 current, qint64 total) +{ + if (total == 0) + { + setProgress(101); + } + else + { + setProgress(current / total); + } +} + +void WebResourceHandler::setResultFromFile(const QString &file) +{ + try + { + setResult(FS::read(file)); + } + catch (Exception &e) + { + setFailure(e.cause()); + } +} diff --git a/api/dead/src/handlers/WebResourceHandler.h b/api/dead/src/handlers/WebResourceHandler.h new file mode 100644 index 00000000..54bef6a1 --- /dev/null +++ b/api/dead/src/handlers/WebResourceHandler.h @@ -0,0 +1,23 @@ +#pragma once + +#include <QObject> +#include <resources/ResourceHandler.h> + +class NetJob; + +class WebResourceHandler : public QObject, public ResourceHandler +{ +public: + explicit WebResourceHandler(const QString &url); + +private slots: + void succeeded(); + void progress(qint64 current, qint64 total); + +private: + static QMap<QString, NetJob *> m_activeDownloads; + + QString m_url; + + void setResultFromFile(const QString &file); +}; diff --git a/api/logic/resources/Resource.cpp b/api/dead/src/resources/Resource.cpp index e95675d7..e95675d7 100644 --- a/api/logic/resources/Resource.cpp +++ b/api/dead/src/resources/Resource.cpp diff --git a/api/logic/resources/Resource.h b/api/dead/src/resources/Resource.h index 63e97b88..63e97b88 100644 --- a/api/logic/resources/Resource.h +++ b/api/dead/src/resources/Resource.h diff --git a/api/logic/resources/ResourceHandler.cpp b/api/dead/src/resources/ResourceHandler.cpp index 46a4422c..46a4422c 100644 --- a/api/logic/resources/ResourceHandler.cpp +++ b/api/dead/src/resources/ResourceHandler.cpp diff --git a/api/logic/resources/ResourceHandler.h b/api/dead/src/resources/ResourceHandler.h index f09d8904..f09d8904 100644 --- a/api/logic/resources/ResourceHandler.h +++ b/api/dead/src/resources/ResourceHandler.h diff --git a/api/logic/resources/ResourceObserver.cpp b/api/dead/src/resources/ResourceObserver.cpp index 4f168fd2..4f168fd2 100644 --- a/api/logic/resources/ResourceObserver.cpp +++ b/api/dead/src/resources/ResourceObserver.cpp diff --git a/api/logic/resources/ResourceObserver.h b/api/dead/src/resources/ResourceObserver.h index c42e41ba..c42e41ba 100644 --- a/api/logic/resources/ResourceObserver.h +++ b/api/dead/src/resources/ResourceObserver.h diff --git a/api/logic/resources/ResourceProxyModel.cpp b/api/dead/src/resources/ResourceProxyModel.cpp index f026d9a9..f026d9a9 100644 --- a/api/logic/resources/ResourceProxyModel.cpp +++ b/api/dead/src/resources/ResourceProxyModel.cpp diff --git a/api/logic/resources/ResourceProxyModel.h b/api/dead/src/resources/ResourceProxyModel.h index 98a3dbd1..98a3dbd1 100644 --- a/api/logic/resources/ResourceProxyModel.h +++ b/api/dead/src/resources/ResourceProxyModel.h diff --git a/api/dead/test/tst_Resource.cpp b/api/dead/test/tst_Resource.cpp new file mode 100644 index 00000000..4bf41a03 --- /dev/null +++ b/api/dead/test/tst_Resource.cpp @@ -0,0 +1,116 @@ +#include <QTest> +#include "TestUtil.h" + +#include "resources/Resource.h" +#include "resources/ResourceHandler.h" +#include "resources/ResourceObserver.h" + +class DummyStringResourceHandler : public ResourceHandler +{ +public: + explicit DummyStringResourceHandler(const QString &key) + : m_key(key) {} + + void init(std::shared_ptr<ResourceHandler> &) override + { + setResult(m_key); + } + + QString m_key; +}; +class DummyObserver : public ResourceObserver +{ +public: + void resourceUpdated() override + { + values += get<QString>(); + } + + QStringList values; +}; +class DummyObserverObject : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString property MEMBER property) + +public: + explicit DummyObserverObject(QObject *parent = nullptr) : QObject(parent) {} + + QString property; +}; + +class ResourceTest : public QObject +{ + Q_OBJECT + private + slots: + void initTestCase() + { + Resource::registerHandler<DummyStringResourceHandler>("dummy"); + } + void cleanupTestCase() + { + } + + void test_Then() + { + QString val; + Resource::create("dummy:test_Then") + ->then([&val](const QString &key) { val = key; }); + QCOMPARE(val, QStringLiteral("test_Then")); + } + void test_Object() + { + DummyObserver *observer = new DummyObserver; + Resource::create("dummy:test_Object")->applyTo(observer); + QCOMPARE(observer->values, QStringList() << "test_Object"); + } + void test_QObjectProperty() + { + DummyObserverObject *object = new DummyObserverObject; + Resource::create("dummy:test_QObjectProperty")->applyTo(object); + QCOMPARE(object->property, QStringLiteral("test_QObjectProperty")); + } + + void test_DontRequestPlaceholder() + { + // since dummy:asdf immediently gives a value we should not get the placeholder + Resource::create("dummy:asdf", Resource::create("dummy:fdsa")) + ->then([](const QString &key) { QCOMPARE(key, QStringLiteral("asdf")); }); + } + + void test_MergedResources() + { + auto r1 = Resource::create("dummy:asdf"); + auto r2 = Resource::create("dummy:asdf"); + auto r3 = Resource::create("dummy:fdsa"); + auto r4 = Resource::create("dummy:asdf"); + + QCOMPARE(r1, r2); + QCOMPARE(r1, r4); + QVERIFY(r1 != r3); + QVERIFY(r2 != r3); + QVERIFY(r4 != r3); + } + + void test_MergedResourceWithPlaceholder() + { + auto p1 = Resource::create("dummy:placeA"); + auto p2 = Resource::create("dummy:placeB"); + + auto r1 = Resource::create("dummy:asdf"); + auto r2 = Resource::create("dummy:asdf", p1); + auto r3 = Resource::create("dummy:asdf", p2); + auto r4 = Resource::create("dummy:asdf", p1); + + QCOMPARE(r2, r4); + QVERIFY(r1 != r2); + QVERIFY(r1 != r3); + QVERIFY(r1 != r4); + QVERIFY(r2 != r3); + } +}; + +QTEST_GUILESS_MAIN(ResourceTest) + +#include "tst_Resource.moc" diff --git a/api/logic/CMakeLists.txt b/api/logic/CMakeLists.txt index 317627d5..a7013c9d 100644 --- a/api/logic/CMakeLists.txt +++ b/api/logic/CMakeLists.txt @@ -16,11 +16,6 @@ set(LOGIC_SOURCES MMCZip.cpp MMCStrings.h MMCStrings.cpp - BaseConfigObject.h - BaseConfigObject.cpp - AbstractCommonModel.h - AbstractCommonModel.cpp - TypeMagic.h # Prefix tree where node names are strings between separators SeparatorPrefixTree.h @@ -47,16 +42,6 @@ set(LOGIC_SOURCES # a smart pointer wrapper intended for safer use with Qt signal/slot mechanisms QObjectPtr.h - # Resources - resources/Resource.cpp - resources/Resource.h - resources/ResourceHandler.cpp - resources/ResourceHandler.h - resources/ResourceObserver.cpp - resources/ResourceObserver.h - resources/ResourceProxyModel.h - resources/ResourceProxyModel.cpp - # Path matchers pathmatcher/FSTreeMatcher.h pathmatcher/IPathMatcher.h |