GlossiConf: Read/Write configs

pull/130/head
Peter Repukat 3 years ago
parent 981b256bd6
commit 0370f84f56

@ -106,7 +106,6 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="main.cpp" />
<ClCompile Include="TargetConfig.cpp" />
<ClCompile Include="UIModel.cpp" />
<None Include="qml\AddSelectTypeDialog.qml" />
<None Include="qml\FluentTextInput.qml" />
@ -121,7 +120,6 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="qml\WinEventFilter.h" />
<QtMoc Include="TargetConfig.h" />
</ItemGroup>
<ItemGroup>
<Xml Include="manifest.xml" />

@ -34,9 +34,6 @@
<ClCompile Include="UIModel.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TargetConfig.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="qml\main.qml">
@ -62,9 +59,6 @@
<QtMoc Include="UIModel.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="TargetConfig.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup>
<ItemGroup>
<ClInclude Include="qml\WinEventFilter.h">

@ -1,112 +0,0 @@
/*
Copyright 2021 Peter Repukat - FlatspotSoftware
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#include "TargetConfig.h"
TargetConfig::TargetConfig() : QObject(nullptr)
{
}
QString TargetConfig::getName() const
{
return name_;
}
void TargetConfig::setName(const QString& name)
{
name_ = name;
emit nameChanged();
}
bool TargetConfig::getLaunch() const
{
return launch_;
}
void TargetConfig::setLaunch(const bool launch)
{
launch_ = launch;
}
QString TargetConfig::getLaunchPath() const
{
return launch_path_;
}
void TargetConfig::setLaunchPath(const QString& launch_path)
{
launch_path_ = launch_path;
}
QString TargetConfig::getLaunchAppArgs() const
{
return launch_app_args_;
}
void TargetConfig::setLaunchAppArgs(const QString& launch_app_args)
{
launch_app_args_ = launch_app_args;
}
bool TargetConfig::getCloseOnExit() const
{
return close_on_exit_;
}
void TargetConfig::setCloseOnExit(const bool close_on_exit)
{
close_on_exit_ = close_on_exit;
}
bool TargetConfig::getHideDevices() const
{
return hide_devices_;
}
void TargetConfig::setHideDevices(const bool hide_devices)
{
hide_devices_ = hide_devices;
}
bool TargetConfig::getWindowMode() const
{
return window_mode_;
}
void TargetConfig::setWindowMode(const bool window_mode)
{
window_mode_ = window_mode;
}
int TargetConfig::getMaxFps() const
{
return max_fps_;
}
void TargetConfig::setMaxFps(const int max_fps)
{
max_fps_ = max_fps;
}
float TargetConfig::getScale() const
{
return scale_;
}
void TargetConfig::setScale(const float scale)
{
scale_ = scale;
}

@ -1,80 +0,0 @@
/*
Copyright 2021 Peter Repukat - FlatspotSoftware
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#pragma once
#include <QObject>
#include <QVariant>
class TargetConfig : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ getName WRITE setName NOTIFY nameChanged)
Q_PROPERTY(bool launch READ getLaunch WRITE setLaunch NOTIFY launchChanged)
Q_PROPERTY(QString launchPath READ getLaunchPath WRITE setLaunchPath NOTIFY launchPathChanged)
Q_PROPERTY(QString launchAppArgs READ getLaunchAppArgs WRITE setLaunchAppArgs NOTIFY launchAppArgsChanged)
Q_PROPERTY(bool closeOnExit READ getCloseOnExit WRITE setCloseOnExit NOTIFY closeOnExitChanged)
Q_PROPERTY(bool hideDevices READ getHideDevices WRITE setHideDevices NOTIFY hideDevicesChanged)
Q_PROPERTY(bool windowMode READ getWindowMode WRITE setWindowMode NOTIFY windowModeChanged)
Q_PROPERTY(int maxFps READ getMaxFps WRITE setMaxFps NOTIFY maxFpsChanged)
Q_PROPERTY(float scale READ getScale WRITE setScale NOTIFY scaleChanged)
public:
TargetConfig();
[[nodiscard]] QString getName() const;
void setName(const QString& name);
[[nodiscard]] bool getLaunch() const;
void setLaunch(const bool launch);
[[nodiscard]] QString getLaunchPath() const;
void setLaunchPath(const QString& launch_path);
[[nodiscard]] QString getLaunchAppArgs() const;
void setLaunchAppArgs(const QString& launch_app_args);
[[nodiscard]] bool getCloseOnExit() const;
void setCloseOnExit(const bool close_on_exit);
[[nodiscard]] bool getHideDevices() const;
void setHideDevices(const bool hide_devices);
[[nodiscard]] bool getWindowMode() const;
void setWindowMode(const bool window_mode);
[[nodiscard]] int getMaxFps() const;
void setMaxFps(const int max_fps);
[[nodiscard]] float getScale() const;
void setScale(const float scale);
signals:
void nameChanged();
void launchChanged();
void launchPathChanged();
void launchAppArgsChanged();
void closeOnExitChanged();
void hideDevicesChanged();
void windowModeChanged();
void maxFpsChanged();
void scaleChanged();
private:
static inline constexpr int version_ = 1;
QString name_;
bool launch_ = true;
QString launch_path_;
QString launch_app_args_;
bool close_on_exit_ = true;
bool hide_devices_ = true;
bool window_mode_ = false;
int max_fps_ = 0;
float scale_ = 0;
};

@ -16,9 +16,13 @@ limitations under the License.
#include "UIModel.h"
#include <QDir>
#include <QJsonObject>
#include <QJsonDocument>
#include "TargetConfig.h"
UIModel::UIModel() : QObject(nullptr)
{
auto path = std::filesystem::temp_directory_path()
@ -33,6 +37,11 @@ UIModel::UIModel() : QObject(nullptr)
config_path_ = path;
config_dir_name_ = (path /= "Targets").string().data();
if (!std::filesystem::exists(path))
std::filesystem::create_directories(path);
readConfigs();
}
void UIModel::readConfigs()
@ -40,17 +49,25 @@ void UIModel::readConfigs()
QDir dir(config_dir_name_);
auto entries = dir.entryList(QDir::Files, QDir::SortFlag::Name);
entries.removeIf([](const auto& entry) {
return entry.endsWith(".json");
});
QStringList fileNames;
std::ranges::transform(fileNames, std::back_inserter(fileNames), [](const auto& entry)
{
return entry.mid(0, entry.lastIndexOf(".json"));
return !entry.endsWith(".json");
});
std::ranges::for_each(fileNames, [this](const auto& name)
std::ranges::for_each(entries, [this](const auto& name)
{
targets_.append(QMap<QString, QVariant>{ { "name", name }});
auto path = config_path_;
path /= config_dir_name_.toStdString();
path /= name.toStdString();
QFile file(path);
if (!file.open(QIODevice::Text | QIODevice::ReadOnly))
{
// meh
return;
}
const auto data = file.readAll();
file.close();
const auto jsondoc = QJsonDocument::fromJson(data);
const auto json = jsondoc.object();
targets_.append(json.toVariantMap());
});
@ -65,40 +82,25 @@ QVariantList UIModel::getTargetList() const
void UIModel::addTarget(QVariant shortcut)
{
// TODO: write config
auto map = shortcut.toMap();
QVariantMap copy;
copy.insert("name", map["name"].toString());
copy.insert("launch", map["launch"].toBool());
copy.insert("launchPath", map["launchPath"].toString());
copy.insert("launchAppArgs", map["launchAppArgs"].toString());
copy.insert("closeOnExit", map["closeOnExit"].toBool());
copy.insert("hideDevices", map["hideDevices"].toBool());
copy.insert("windowMode", map["windowMode"].toBool());
copy.insert("maxFps", map["maxFps"].toInt());
copy.insert("scale", map["scale"].toInt());
targets_.append(copy);
const auto map = shortcut.toMap();
const auto json = QJsonDocument(QJsonObject::fromVariantMap(map));
auto wtf = json.toJson(QJsonDocument::Indented).toStdString();
writeTarget(wtf, map["name"].toString());
targets_.append(json.toVariant());
emit targetListChanged();
}
void UIModel::updateTarget(int index, QVariant shortcut)
{
const auto map = shortcut.toMap();
const auto json = QJsonDocument(QJsonObject::fromVariantMap(map));
auto wtf = json.toJson(QJsonDocument::Indented).toStdString();
auto map = shortcut.toMap();
writeTarget(wtf, map["name"].toString());
QVariantMap copy;
copy.insert("name", map["name"].toString());
copy.insert("launch", map["launch"].toBool());
copy.insert("launchPath", map["launchPath"].toString());
copy.insert("launchAppArgs", map["launchAppArgs"].toString());
copy.insert("closeOnExit", map["closeOnExit"].toBool());
copy.insert("hideDevices", map["hideDevices"].toBool());
copy.insert("windowMode", map["windowMode"].toBool());
copy.insert("maxFps", map["maxFps"].toInt());
copy.insert("scale", map["scale"].toInt());
targets_.replace(index, copy);
targets_.replace(index, json.toVariant());
emit targetListChanged();
}
@ -117,3 +119,19 @@ void UIModel::setAcrylicEffect(bool has_acrylic_affect)
has_acrylic_affect_ = has_acrylic_affect;
emit acrylicChanged();
}
void UIModel::writeTarget(const std::string& json, const QString& name)
{
auto path = config_path_;
path /= config_dir_name_.toStdString();
path /= (name + ".json").toStdString();
QFile file(path);
if (!file.open(QIODevice::Text | QIODevice::ReadWrite))
{
// meh
return;
}
file.write(json.data());
file.close();
}

@ -46,6 +46,8 @@ private:
std::filesystem::path config_path_;
QString config_dir_name_;
void writeTarget(const std::string& json, const QString& name);
QVariantList targets_;
#ifdef _WIN32

@ -144,8 +144,6 @@ Window {
onEditClicked: function(index, shortcutInfo){
shortcutProps.opacity = 1;
homeContent.opacity = 0;
console.log(index)
Object.keys(shortcutInfo).forEach((key) => console.log(key, shortcutInfo[key]))
props.shortcutInfo = shortcutInfo
windowContent.editedIndex = index;
}

Loading…
Cancel
Save