135 lines
3.9 KiB
C++
135 lines
3.9 KiB
C++
#ifndef WALLREEL_PROVIDER_BOOTSTRAP_HPP
|
|
#define WALLREEL_PROVIDER_BOOTSTRAP_HPP
|
|
|
|
#include <QQmlEngine>
|
|
|
|
#include "Cache/manager.hpp"
|
|
#include "Config/manager.hpp"
|
|
#include "Image/manager.hpp"
|
|
#include "Palette/manager.hpp"
|
|
#include "Service/manager.hpp"
|
|
#include "Utils/misc.hpp"
|
|
#include "appoptions.hpp"
|
|
#include "logger.hpp"
|
|
|
|
namespace WallReel::Core::Provider {
|
|
|
|
class Bootstrap {
|
|
friend class Carousel;
|
|
|
|
public:
|
|
Bootstrap(const AppOptions& options) {
|
|
configMgr = new Config::Manager(
|
|
Utils::getConfigDir(),
|
|
Utils::getPicturesDir(),
|
|
options.appendDirs,
|
|
options.configPath);
|
|
|
|
cacheMgr = new Cache::Manager(
|
|
Utils::getCacheDir(),
|
|
configMgr->getCacheConfig().maxImageEntries);
|
|
|
|
if (options.clearCache) {
|
|
cacheMgr->clearCache();
|
|
return;
|
|
}
|
|
|
|
imageMgr = new Image::Manager(
|
|
*cacheMgr,
|
|
configMgr->getFocusImageSize());
|
|
|
|
paletteMgr = new Palette::Manager(
|
|
configMgr->getThemeConfig(),
|
|
*imageMgr);
|
|
qRegisterMetaType<Palette::PaletteItem>("PaletteItem");
|
|
qRegisterMetaType<Palette::ColorItem>("ColorItem");
|
|
|
|
serviceMgr = new Service::Manager(
|
|
configMgr->getActionConfig(),
|
|
*imageMgr,
|
|
*paletteMgr,
|
|
options.disableActions);
|
|
}
|
|
|
|
void start() {
|
|
cacheMgr->evictOldEntries();
|
|
configMgr->captureState();
|
|
imageMgr->loadAndProcess(configMgr->getWallpapers());
|
|
}
|
|
|
|
bool apply(const QString& path) {
|
|
QEventLoop loop;
|
|
bool successFlag = false;
|
|
|
|
paletteMgr->setSelectedPalette(cacheMgr->getSetting(
|
|
Cache::SettingsType::LastSelectedPalette,
|
|
[]() { return Config::CacheConfigItems::defaultSelectedPalette; }));
|
|
|
|
QObject::connect(
|
|
configMgr,
|
|
&Config::Manager::stateCaptured,
|
|
&loop,
|
|
[&]() {
|
|
loop.quit();
|
|
},
|
|
Qt::SingleShotConnection);
|
|
configMgr->captureState();
|
|
loop.exec();
|
|
|
|
QMetaObject::Connection connection;
|
|
|
|
connection = QObject::connect(
|
|
imageMgr,
|
|
&Image::Manager::isLoadingChanged,
|
|
&loop,
|
|
[&]() {
|
|
if (!imageMgr->isLoading()) {
|
|
QObject::disconnect(connection);
|
|
QVariant idVar = imageMgr->model()->data(
|
|
imageMgr->model()->index(0, 0),
|
|
Image::Model::IdRole);
|
|
if (idVar.isValid()) {
|
|
auto id = idVar.toString();
|
|
paletteMgr->updateColor(id);
|
|
QObject::connect(
|
|
serviceMgr,
|
|
&Service::Manager::selectCompleted,
|
|
&loop,
|
|
[&](bool success) {
|
|
successFlag = success;
|
|
loop.quit();
|
|
},
|
|
Qt::SingleShotConnection);
|
|
serviceMgr->selectWallpaper(id);
|
|
} else {
|
|
Logger::critical("Bootstrap", "No images loaded, cannot apply wallpaper");
|
|
loop.quit();
|
|
}
|
|
}
|
|
});
|
|
|
|
imageMgr->loadAndProcess({Utils::expandPath(path)});
|
|
loop.exec();
|
|
return successFlag;
|
|
}
|
|
|
|
~Bootstrap() {
|
|
delete serviceMgr;
|
|
delete paletteMgr;
|
|
delete imageMgr;
|
|
delete configMgr;
|
|
delete cacheMgr;
|
|
}
|
|
|
|
private:
|
|
Cache::Manager* cacheMgr{};
|
|
Config::Manager* configMgr{};
|
|
Image::Manager* imageMgr{};
|
|
Palette::Manager* paletteMgr{};
|
|
Service::Manager* serviceMgr{};
|
|
};
|
|
|
|
} // namespace WallReel::Core::Provider
|
|
|
|
#endif // WALLREEL_PROVIDER_BOOTSTRAP_HPP
|