#include "launcherbackend.h" #include #include #include #include #include #include #include LauncherBackend::LauncherBackend(QObject *parent) : QObject(parent) , m_dataDir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)) { QDir().mkpath(m_dataDir); loadData(); } QStringList LauncherBackend::profileNames() const { QStringList names; for (const auto &p : m_profiles) names << p.name; return names; } QStringList LauncherBackend::versionNames() const { QStringList names; for (const auto &v : m_versions) names << v.name; return names; } void LauncherBackend::addProfile(const QString &name, const QString &login, const QString &password) { m_profiles.append({m_nextProfileId++, name, login, password}); saveProfiles(); emit profilesChanged(); } void LauncherBackend::addVersion(const QString &name, const QString &serverUrl) { m_versions.append({m_nextVersionId++, name, serverUrl}); saveVersions(); emit versionsChanged(); } void LauncherBackend::launchGame(int profileIndex, int versionIndex) { if (profileIndex < 0 || profileIndex >= m_profiles.size()) { emit launchError("Выберите профиль перед запуском"); return; } if (versionIndex < 0 || versionIndex >= m_versions.size()) { emit launchError("Выберите версию перед запуском"); return; } const auto &profile = m_profiles[profileIndex]; const auto &version = m_versions[versionIndex]; emit launched(profile.name, version.name, version.serverUrl); } void LauncherBackend::loadData() { auto loadFile = [](const QString &path, auto handler) { QFile f(path); if (!f.open(QIODevice::ReadOnly)) return; for (const auto &val : QJsonDocument::fromJson(f.readAll()).array()) handler(val.toObject()); }; loadFile(m_dataDir + "/profiles.json", [this](const QJsonObject &o) { int id = o["id"].toInt(); m_profiles.append({id, o["name"].toString(), o["login"].toString(), o["password"].toString()}); if (id >= m_nextProfileId) m_nextProfileId = id + 1; }); std::sort(m_profiles.begin(), m_profiles.end(), [](const Profile &a, const Profile &b) { return a.id < b.id; }); loadFile(m_dataDir + "/versions.json", [this](const QJsonObject &o) { int id = o["id"].toInt(); m_versions.append({id, o["name"].toString(), o["serverUrl"].toString()}); if (id >= m_nextVersionId) m_nextVersionId = id + 1; }); std::sort(m_versions.begin(), m_versions.end(), [](const Version &a, const Version &b) { return a.id < b.id; }); } void LauncherBackend::saveProfiles() { QJsonArray arr; for (const auto &p : m_profiles) arr.append(QJsonObject{{"id", p.id}, {"name", p.name}, {"login", p.login}, {"password", p.password}}); QFile f(m_dataDir + "/profiles.json"); if (f.open(QIODevice::WriteOnly)) f.write(QJsonDocument(arr).toJson()); } void LauncherBackend::saveVersions() { QJsonArray arr; for (const auto &v : m_versions) arr.append(QJsonObject{{"id", v.id}, {"name", v.name}, {"serverUrl", v.serverUrl}}); QFile f(m_dataDir + "/versions.json"); if (f.open(QIODevice::WriteOnly)) f.write(QJsonDocument(arr).toJson()); }