#include "DesktopBackend.h" #include #include DesktopBackend::DesktopBackend(QObject* parent) : QObject(parent) , m_locale(QLocale::system().name()) {} void DesktopBackend::setDesktops(const QVariantList& desktops) { m_rawDesktops = desktops; m_selectedIndex = -1; rebuildDesktops(); emit desktopsChanged(); emit selectedIndexChanged(); } void DesktopBackend::setLocale(const QString& locale) { if (m_locale == locale) return; m_locale = locale; rebuildDesktops(); emit localeChanged(); emit desktopsChanged(); } void DesktopBackend::rebuildDesktops() { const bool hungarian = m_locale.startsWith(QLatin1String("hu")); const bool german = m_locale.startsWith(QLatin1String("de")); m_desktops.clear(); for (const QVariant& v : m_rawDesktops) { const QVariantMap raw = v.toMap(); QVariantMap item; item.insert(QStringLiteral("name"), raw.value(QStringLiteral("name"))); item.insert( QStringLiteral("description"), hungarian ? raw.value(QStringLiteral("description_hu"), raw.value(QStringLiteral("description"))) : german ? raw.value(QStringLiteral("description_de"), raw.value(QStringLiteral("description"))) : raw.value(QStringLiteral("description_en"), raw.value(QStringLiteral("description")))); item.insert( QStringLiteral("badge"), hungarian ? raw.value(QStringLiteral("badge_hu"), raw.value(QStringLiteral("badge"))) : german ? raw.value(QStringLiteral("badge_de"), raw.value(QStringLiteral("badge"))) : raw.value(QStringLiteral("badge_en"), raw.value(QStringLiteral("badge")))); item.insert(QStringLiteral("badge_color"), raw.value(QStringLiteral("badge_color"))); item.insert(QStringLiteral("available"), raw.value(QStringLiteral("available"), true)); item.insert(QStringLiteral("packages"), raw.value(QStringLiteral("packages"))); m_desktops.append(item); } } void DesktopBackend::selectDesktop(int index) { if (index < 0 || index >= m_desktops.size()) return; if (!m_desktops[index].toMap().value(QStringLiteral("available"), true).toBool()) return; if (index == m_selectedIndex) return; m_selectedIndex = index; emit selectedIndexChanged(); emit selectionMade(); } QStringList DesktopBackend::selectedPackages() const { if (m_selectedIndex < 0 || m_selectedIndex >= m_desktops.size()) return {}; const QVariantMap desktop = m_desktops[m_selectedIndex].toMap(); QStringList pkgs; for (const auto& v : desktop.value(QStringLiteral("packages")).toList()) pkgs << v.toString(); return pkgs; }