@@ -22,6 +22,7 @@
22#include "launcherbackend.h"
22#include "launcherbackend.h"
24#include <QDir>
24#include <QDir>
25+#include <QDBusArgument>
25#include <QFileInfo>
26#include <QFileInfo>
27LauncherBackend::LauncherBackend(bool useStorage, QObject *parent):
28LauncherBackend::LauncherBackend(bool useStorage, QObject *parent):
@@ -69,7 +70,7 @@ void LauncherBackend::setStoredApplications(const QStringList &appIds)
69 clearItems();
70 clearItems();
71 for (const QString &appId: appIds) {
72 for (const QString &appId: appIds) {
72− loadDesktopFile(appId, pinnedItems.contains(desktopFile(appId)));
73+ loadApp(makeAppDetails(appId, pinnedItems.contains(desktopFile(appId))));
75 syncToAccounts();
76 syncToAccounts();
@@ -165,46 +166,45 @@ void LauncherBackend::triggerQuickListAction(const QString &appId, const QString
166void LauncherBackend::syncFromAccounts()
167void LauncherBackend::syncFromAccounts()
168− auto appIds = QStringList();
169+ QList<QVariantMap> apps;
170 if (m_user != "" && m_accounts != nullptr) {
173 if (m_user != "" && m_accounts != nullptr) {
171− appIds = m_accounts->getUserProperty(m_user, "launcher-items").toStringList();
174+ auto variant = m_accounts->getUserProperty(m_user, "launcher-items");
175+ variant.value<QDBusArgument>() >> apps;
174 // TODO: load default pinned ones from default config, instead of hardcoding here...
178 // TODO: load default pinned ones from default config, instead of hardcoding here...
175− if (appIds.isEmpty()) {
179+ if (apps.isEmpty()) {
176− appIds <<
180+ apps <<
177− "phone-app.desktop" <<
181+ makeAppDetails("phone-app.desktop", true) <<
178− "camera-app.desktop" <<
182+ makeAppDetails("camera-app.desktop", true) <<
179− "gallery-app.desktop" <<
183+ makeAppDetails("gallery-app.desktop", true) <<
180− "facebook-webapp.desktop" <<
184+ makeAppDetails("facebook-webapp.desktop", true) <<
181− "webbrowser-app.desktop" <<
185+ makeAppDetails("webbrowser-app.desktop", true) <<
182− "twitter-webapp.desktop" <<
186+ makeAppDetails("twitter-webapp.desktop", true) <<
183− "gmail-webapp.desktop" <<
187+ makeAppDetails("gmail-webapp.desktop", true) <<
184− "ubuntu-weather-app.desktop" <<
188+ makeAppDetails("ubuntu-weather-app.desktop", true) <<
185− "notes-app.desktop" <<
189+ makeAppDetails("notes-app.desktop", true) <<
186− "calendar-app.desktop";
190+ makeAppDetails("calendar-app.desktop", true);
189− setStoredApplications(appIds);
193+ for (const QVariant &app: apps) {
190−
194+ loadApp(app.toMap());
191− // Mark all apps as pinned (since we just refreshed the set)
192− for (LauncherBackendItem &app: m_storedApps) {
197void LauncherBackend::syncToAccounts()
198void LauncherBackend::syncToAccounts()
199− auto pinnedItems = QStringList();
200+ if (m_user != "" && m_accounts != nullptr) {
201+ QList<QVariantMap> items;
200− for (LauncherBackendItem &app: m_storedApps) {
203+ for (LauncherBackendItem &app: m_storedApps) {
202− pinnedItems.append(app.settings->fileName());
204+ items << makeAppDetails(app.settings->fileName(), app.pinned);
206− if (m_user != "" && m_accounts != nullptr) {
207− m_accounts->setUserProperty(m_user, "launcher-items", QVariant(pinnedItems));
207+ m_accounts->setUserProperty(m_user, "launcher-items", QVariant::fromValue(items));
@@ -214,13 +214,27 @@ QSettings *LauncherBackend::parseDesktopFile(const QString &appId) const
214 return new QSettings(fullAppId, QSettings::IniFormat);
214 return new QSettings(fullAppId, QSettings::IniFormat);
217−bool LauncherBackend::loadDesktopFile(const QString &appId, bool isPinned)
217+void LauncherBackend::loadApp(const QVariantMap &details)
219+ auto appId = details.value("id").toString();
220+ auto isPinned = details.value("is-pinned").toBool();
222+ if (appId.isEmpty()) {
219− auto item = LauncherBackendItem();
226+ LauncherBackendItem item;
220 item.settings = parseDesktopFile(appId);
227 item.settings = parseDesktopFile(appId);
221 item.pinned = isPinned;
228 item.pinned = isPinned;
222 m_storedApps.append(item);
229 m_storedApps.append(item);
223− return true; // QSettings doesn't really indicate a failure mode right now
230+}
232+QVariantMap LauncherBackend::makeAppDetails(const QString &appId, bool pinned) const
234+ QVariantMap details;
235+ details.insert("id", appId);
236+ details.insert("is-pinned", pinned);
226int LauncherBackend::findItem(const QString &appId) const
240int LauncherBackend::findItem(const QString &appId) const