1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-09-15 06:52:34 +02:00

class ScreenPlay - minor changes and improvements

This commit is contained in:
JeJo 2019-04-22 04:57:14 +02:00
parent 273a4cbaca
commit 14bddbe991
2 changed files with 117 additions and 90 deletions

View File

@ -1,97 +1,93 @@
#include "screenplay.h" #include "screenplay.h"
ScreenPlay::ScreenPlay(InstalledListModel* ilm, Settings* set, MonitorListModel* mlm, SDKConnector* sdkc, QObject* parent) ScreenPlay::ScreenPlay(InstalledListModel* ilm, Settings* set, MonitorListModel* mlm, SDKConnector* sdkc, QObject* parent)
: QObject(parent) : QObject{parent},
{ m_ilm{ilm},
m_ilm = ilm; m_settings{set},
m_settings = set; m_mlm{mlm},
m_mlm = mlm; m_qGuiApplication{static_cast<QGuiApplication*>(QGuiApplication::instance())},
m_qGuiApplication = static_cast<QGuiApplication*>(QGuiApplication::instance()); m_sdkc{sdkc}
m_sdkc = sdkc; {}
}
void ScreenPlay::createWallpaper(int monitorIndex, QUrl absoluteStoragePath, QString previewImage, float volume, QString fillMode, QString type) void ScreenPlay::createWallpaper(int monitorIndex, QUrl absoluteStoragePath, QString previewImage, float volume, QString fillMode, QString type)
void ScreenPlay::createWallpaper(
const int monitorIndex, QUrl absoluteStoragePath,
const QString &previewImage, const float volume,
const QString &fillMode, const QString &type)
{ {
ProjectFile project; ProjectFile project{};
if (!m_ilm->getProjectByAbsoluteStoragePath(&absoluteStoragePath, &project)) { if (!m_ilm->getProjectByAbsoluteStoragePath(&absoluteStoragePath, &project)) {
return; return;
} }
// Remove previous wallpaper, if any
// Remove previous wallpaper //this->removeAllWallpaper();
removeWallpaperAt(monitorIndex); this->removeWallpaperAt(0);
m_settings->increaseActiveWallpaperCounter(); m_settings->increaseActiveWallpaperCounter();
QVector<int> tmpMonitorIndex; m_screenPlayWallpaperList.emplace_back(
tmpMonitorIndex.append(monitorIndex); RefSPWall::create(
m_screenPlayWallpaperList.append(QSharedPointer<ScreenPlayWallpaper>(new ScreenPlayWallpaper(tmpMonitorIndex, absoluteStoragePath.toLocalFile(), previewImage, volume, fillMode, type, this))); QVector<int>{monitorIndex}, absoluteStoragePath.toLocalFile(),
previewImage, volume, fillMode, type, this)
m_mlm->setWallpaperActiveMonitor(m_qGuiApplication->screens().at(monitorIndex), absoluteStoragePath.toLocalFile() + "/" + previewImage); );
m_mlm->setWallpaperActiveMonitor(m_qGuiApplication->screens().at(monitorIndex),
QString{absoluteStoragePath.toLocalFile() + "/" + previewImage});
} }
void ScreenPlay::createWidget(QUrl absoluteStoragePath, QString previewImage) void ScreenPlay::createWidget(QUrl absoluteStoragePath, const QString &previewImage)
{ {
ProjectFile project; ProjectFile project{};
if (!m_ilm->getProjectByAbsoluteStoragePath(&absoluteStoragePath, &project)) { if (!m_ilm->getProjectByAbsoluteStoragePath(&absoluteStoragePath, &project)) {
return; return;
} }
m_screenPlayWidgetList.emplace_back(
QString fullPath = absoluteStoragePath.toLocalFile() + "/" + project.m_file.toString(); RefSPWidget::create(
absoluteStoragePath.toLocalFile(), previewImage,
m_screenPlayWidgetList.append(QSharedPointer<ScreenPlayWidget>(new ScreenPlayWidget(absoluteStoragePath.toLocalFile(), previewImage, fullPath, this))); QString{absoluteStoragePath.toLocalFile() + "/" + project.m_file.toString()},
this)
);
} }
void ScreenPlay::removeAllWallpaper() void ScreenPlay::removeAllWallpaper() noexcept
{ {
m_sdkc->closeAllWallpapers(); if(m_sdkc && m_settings && !m_screenPlayWallpaperList.empty()){
m_settings->setActiveWallpaperCounter(0); m_sdkc->closeAllWallpapers();
m_screenPlayWallpaperList.clear(); m_settings->setActiveWallpaperCounter(0);
emit allWallpaperRemoved(); m_screenPlayWallpaperList.clear();
emit allWallpaperRemoved();
}
return;
} }
void ScreenPlay::requestProjectSettingsListModelAt(int index) void ScreenPlay::requestProjectSettingsListModelAt(const int index) const noexcept
{ {
for (const RefSPWall &refSPWallpaper: m_screenPlayWallpaperList) {
//Q_ASSERT(index > m_mlm->size()); if (!refSPWallpaper.data()->screenNumber().empty() &&
for (int i = 0; i < m_screenPlayWallpaperList.count(); ++i) { refSPWallpaper.data()->screenNumber()[0] == index) { // ??? only at index == 0
if (m_screenPlayWallpaperList.at(i).data()->screenNumber().at(0) == index) { emit projectSettingsListModelFound(
emit projectSettingsListModelFound(m_screenPlayWallpaperList.at(i).data()->projectSettingsListModel().data(), m_screenPlayWallpaperList.at(i).data()->type()); refSPWallpaper.data()->projectSettingsListModel().data(),
refSPWallpaper.data()->type());
return; return;
} }
} }
emit projectSettingsListModelNotFound(); emit projectSettingsListModelNotFound();
} }
QString ScreenPlay::generateID() void ScreenPlay::setWallpaperValue(const int at, const QString &key, const QString &value) noexcept
{ {
const QString possibleCharacters("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); Q_ASSERT(static_cast<std::size_t>(at) < m_screenPlayWallpaperList.size() && m_sdkc);
const int randomStringLength = 32; for (const RefSPWall &refSPWallpaper: m_screenPlayWallpaperList) {
auto* radomGen = QRandomGenerator::system(); if (!refSPWallpaper.data()->screenNumber().empty() && m_sdkc &&
refSPWallpaper.data()->screenNumber()[0] == at) { // ??? only at index == 0
QString randomString; m_sdkc->setWallpaperValue(refSPWallpaper.data()->appID(), key, value);
for (int i = 0; i < randomStringLength; ++i) {
int index = radomGen->bounded(possibleCharacters.length());
QChar nextChar = possibleCharacters.at(index);
randomString.append(nextChar);
}
return randomString;
}
void ScreenPlay::setWallpaperValue(int at, QString key, QString value)
{
Q_ASSERT(at < m_screenPlayWallpaperList.size());
for (int i = 0; i < m_screenPlayWallpaperList.count(); ++i) {
if (m_screenPlayWallpaperList.at(i).data()->screenNumber().at(0) == at) {
m_sdkc->setWallpaperValue(m_screenPlayWallpaperList.at(i).data()->appID(), key, value);
return; return;
} }
} }
} }
void ScreenPlay::setAllWallpaperValue(QString key, QString value) void ScreenPlay::setAllWallpaperValue(const QString &key, const QString &value) noexcept
{ {
for (int i = 0; i < m_screenPlayWallpaperList.count(); ++i) { Q_ASSERT(m_sdkc);
m_sdkc->setWallpaperValue(m_screenPlayWallpaperList.at(i).data()->appID(), key, value); for (const RefSPWall &refSPWallpaper: m_screenPlayWallpaperList) {
if(m_sdkc) m_sdkc->setWallpaperValue(refSPWallpaper.data()->appID(), key, value);
} }
} }
@ -112,20 +108,30 @@ void ScreenPlay::removeWallpaperAt(int at)
} }
} }
QVector<int> ScreenPlay::getMonitorByAppID(QString appID) QVector<int> ScreenPlay::getMonitorByAppID(const QString &appID) const
{ {
for (int i = 0; i < m_screenPlayWallpaperList.length(); ++i) { for (const RefSPWall &refSPWallpaper: m_screenPlayWallpaperList) {
if (m_screenPlayWallpaperList.at(i).data()->appID() == appID) { if (refSPWallpaper.data()->appID() == appID) {
return m_screenPlayWallpaperList.at(i).data()->screenNumber(); return refSPWallpaper.data()->screenNumber();
} }
} }
return QVector<int>{};
return QVector<int>();
} }
Settings* ScreenPlay::settings() const QString ScreenPlay::generateID() const
{ {
return m_settings; const QString possibleCharacters{
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"};
const int randomStringLength = 32;
const auto radomGen = QRandomGenerator::system();
QString randomString;
for (int i = 0; i < randomStringLength; ++i) {
const int index = radomGen->bounded(possibleCharacters.length());
const QChar nextChar = possibleCharacters.at(index);
randomString.append(nextChar);
}
return randomString;
} }
QSharedPointer<ProjectSettingsListModel> ScreenPlayWallpaper::projectSettingsListModel() const QSharedPointer<ProjectSettingsListModel> ScreenPlayWallpaper::projectSettingsListModel() const

View File

@ -24,40 +24,60 @@
class ScreenPlayWallpaper; class ScreenPlayWallpaper;
class ScreenPlayWidget; class ScreenPlayWidget;
// conveniences types
using RefSPWall = QSharedPointer<ScreenPlayWallpaper>;
using RefSPWidget = QSharedPointer<ScreenPlayWidget>;
class ScreenPlay : public QObject { class ScreenPlay : public QObject {
Q_OBJECT Q_OBJECT
private:
InstalledListModel *const m_ilm{nullptr};
Settings *const m_settings{nullptr};
MonitorListModel *const m_mlm{nullptr};
QGuiApplication *const m_qGuiApplication{nullptr};
SDKConnector *const m_sdkc{nullptr};
std::vector<RefSPWall> m_screenPlayWallpaperList;
std::vector<RefSPWidget> m_screenPlayWidgetList;
public: public:
explicit ScreenPlay(InstalledListModel* ilm, Settings* set, MonitorListModel* mlm, SDKConnector* sdkc, QObject* parent = nullptr); // constructor(s)
explicit ScreenPlay(
InstalledListModel* ilm, Settings* set,
MonitorListModel* mlm, SDKConnector* sdkc,
QObject* parent = nullptr);
// copy and move disable(for now) : remember rule of 1/3/5
Q_DISABLE_COPY_MOVE(ScreenPlay)
Settings* settings() const; Settings* settings() const;
InstalledListModel* m_ilm;
Settings* m_settings;
MonitorListModel* m_mlm;
QGuiApplication* m_qGuiApplication;
SDKConnector* m_sdkc;
signals: signals:
void allWallpaperRemoved(); void allWallpaperRemoved() const;
void projectSettingsListModelFound(ProjectSettingsListModel* li, QString type); void projectSettingsListModelFound(ProjectSettingsListModel* li, const QString &type) const;
void projectSettingsListModelNotFound(); void projectSettingsListModelNotFound() const;
public slots: public slots:
void createWallpaper(int monitorIndex, QUrl absoluteStoragePath, QString previewImage, float volume, QString fillMode, QString type);
void createWidget(QUrl absoluteStoragePath, QString previewImage);
void removeAllWallpaper();
void requestProjectSettingsListModelAt(int index);
void setWallpaperValue(int at, QString key, QString value);
void setAllWallpaperValue(QString key, QString value);
void removeWallpaperAt(int at); void removeWallpaperAt(int at);
QVector<int> getMonitorByAppID(QString appID); void createWallpaper(
QString generateID(); const int monitorIndex, QUrl absoluteStoragePath,
const QString &previewImage, const float volume,
private: const QString &fillMode, const QString &type);
QVector<QSharedPointer<ScreenPlayWallpaper>> m_screenPlayWallpaperList; void createWidget(QUrl absoluteStoragePath, const QString &previewImage);
QVector<QSharedPointer<ScreenPlayWidget>> m_screenPlayWidgetList; void removeAllWallpaper() noexcept;
void requestProjectSettingsListModelAt(const int index) const noexcept;
void setWallpaperValue(const int at, const QString &key, const QString &value) noexcept;
void setAllWallpaperValue(const QString &key, const QString &value) noexcept;
void removeWallpaperAt(const int at);
QVector<int> getMonitorByAppID(const QString &appID) const;
QString generateID() const;
}; };
/*!
\class ScreenPlayWallpaper
\brief Used for Creation of Wallpaper, Scenes and Widgets
*/
class ScreenPlayWallpaper : public QObject { class ScreenPlayWallpaper : public QObject {
Q_OBJECT Q_OBJECT
@ -72,6 +92,7 @@ public:
{ {
m_screenNumber = screenNumber; m_screenNumber = screenNumber;
m_projectPath = projectPath; m_projectPath = projectPath;
m_previewImage = previewImage; m_previewImage = previewImage;
m_type = type; m_type = type;
@ -93,7 +114,7 @@ public:
proArgs.append(m_projectPath); proArgs.append(m_projectPath);
m_appID = parent->generateID(); m_appID = parent->generateID();
proArgs.append("appID=" + m_appID); proArgs.append("appID=" + m_appID);
proArgs.append(parent->m_settings->decoder()); proArgs.append(parent->settings()->decoder());
proArgs.append(QString::number(static_cast<double>(volume))); proArgs.append(QString::number(static_cast<double>(volume)));
proArgs.append(fillMode); proArgs.append(fillMode);
@ -225,7 +246,7 @@ public:
if (fullPath.endsWith(".exe")) { if (fullPath.endsWith(".exe")) {
m_process->setProgram(fullPath); m_process->setProgram(fullPath);
} else if (fullPath.endsWith(".qml")) { } else if (fullPath.endsWith(".qml")) {
m_process->setProgram(parent->m_settings->getScreenPlayWidgetPath().path()); m_process->setProgram(parent->settings()->getScreenPlayWidgetPath().path());
} }
qDebug() << m_process->program(); qDebug() << m_process->program();
connect(m_process, &QProcess::errorOccurred, this, [](QProcess::ProcessError error) { connect(m_process, &QProcess::errorOccurred, this, [](QProcess::ProcessError error) {