diff --git a/app/pebbledinterface.cpp b/app/pebbledinterface.cpp index c978dd0..cc9a617 100644 --- a/app/pebbledinterface.cpp +++ b/app/pebbledinterface.cpp @@ -294,8 +294,12 @@ void PebbledInterface::refreshAllApps() QVariantMap m; m.insert("uuid", uuid.toString()); + m.insert("isLocal", orig.value("local")); m.insert("shortName", orig.value("short-name")); m.insert("longName", orig.value("long-name")); + m.insert("companyName", orig.value("company-name")); + m.insert("versionLabel", orig.value("version-label")); + m.insert("isWatchface", orig.value("is-watchface")); QByteArray pngIcon = orig.value("menu-icon").toByteArray(); if (!pngIcon.isEmpty()) { diff --git a/app/qml/pages/InstallAppDialog.qml b/app/qml/pages/InstallAppDialog.qml index fa96c28..1510c57 100644 --- a/app/qml/pages/InstallAppDialog.qml +++ b/app/qml/pages/InstallAppDialog.qml @@ -24,6 +24,8 @@ Dialog { id: appDelegate contentHeight: Theme.itemSizeSmall + visible: modelData.isLocal + property string uuid: modelData.uuid property bool alreadyInstalled: pebbled.isAppInstalled(uuid) @@ -41,7 +43,7 @@ Dialog { Image { id: appImage anchors.centerIn: parent - source: "image://pebble-app-icon/" + uuid; + source: appDelegate.visible ? "image://pebble-app-icon/" + uuid : "" scale: 2 } } diff --git a/app/qml/pages/WatchPage.qml b/app/qml/pages/WatchPage.qml index 43c2b99..b36280f 100644 --- a/app/qml/pages/WatchPage.qml +++ b/app/qml/pages/WatchPage.qml @@ -101,6 +101,7 @@ Page { property bool isEmptySlot: modelData === "" property var appInfo: pebbled.appInfoByUuid(modelData) property bool isKnownApp: appInfo.hasOwnProperty("uuid") + property bool isLocalApp: appInfo.hasOwnProperty("isLocal") && appInfo.isLocal property bool busy: false function configure() { @@ -155,9 +156,9 @@ Page { Image { id: slotImage anchors.centerIn: parent - source: isKnownApp ? "image://pebble-app-icon/" + modelData : "" + source: isLocalApp ? "image://pebble-app-icon/" + modelData : "" scale: 2 - visible: !isEmptySlot && isKnownApp && !slotBusy.running + visible: !isEmptySlot && isLocalApp && !slotBusy.running } Rectangle { @@ -170,7 +171,7 @@ Page { color: slotDelegate.highlighted ? Theme.highlightColor : Theme.primaryColor } color: "transparent" - visible: isEmptySlot && !slotBusy.running + visible: (isEmptySlot || !isLocalApp) && !slotBusy.running } BusyIndicator { @@ -189,7 +190,7 @@ Page { rightMargin: Theme.paddingLarge verticalCenter: parent.verticalCenter } - text: isEmptySlot ? qsTr("(empty slot)") : (isKnownApp ? appInfo.longName : qsTr("(slot in use by unknown app)")) + text: isEmptySlot ? qsTr("(empty slot)") : (isKnownApp ? (isLocalApp ? appInfo.longName : appInfo.shortName) : qsTr("(slot in use by unknown app)")) color: slotDelegate.highlighted ? Theme.highlightColor : Theme.primaryColor onTextChanged: slotDelegate.busy = false; } @@ -204,7 +205,7 @@ Page { } MenuItem { text: qsTr("Configure...") - visible: !isEmptySlot && isKnownApp + visible: !isEmptySlot && isLocalApp onClicked: configure(); } MenuItem { diff --git a/app/translations/pebble-es.ts b/app/translations/pebble-es.ts index 0316ecb..9be8be2 100644 --- a/app/translations/pebble-es.ts +++ b/app/translations/pebble-es.ts @@ -221,32 +221,32 @@ Si esto tarda mucho, comprueba que el reloj esté emparejado correctamente.Aplicaciones instaladas - + Uninstalling Desinstalando - + (empty slot) (hueco libre) - + (slot in use by unknown app) (hueco en uso) - + Install app... Instalar app... - + Configure... Configurar... - + Uninstall Desinstalar diff --git a/app/translations/pebble.ts b/app/translations/pebble.ts index 7a78d9d..0f953bc 100644 --- a/app/translations/pebble.ts +++ b/app/translations/pebble.ts @@ -220,32 +220,32 @@ If it can't be found please check it's available and paired in Bluetoo - + Uninstalling - + (empty slot) - + (slot in use by unknown app) - + Install app... - + Configure... - + Uninstall diff --git a/daemon/appinfo.cpp b/daemon/appinfo.cpp index 4397abc..587ed8b 100644 --- a/daemon/appinfo.cpp +++ b/daemon/appinfo.cpp @@ -3,6 +3,7 @@ #include "appinfo.h" struct AppInfoData : public QSharedData { + bool local; QUuid uuid; QString shortName; QString longName; @@ -20,6 +21,7 @@ struct AppInfoData : public QSharedData { AppInfo::AppInfo() : d(new AppInfoData) { + d->local = false; d->versionCode = 0; d->watchface = false; d->jskit = false; @@ -41,6 +43,16 @@ AppInfo::~AppInfo() { } +bool AppInfo::isLocal() const +{ + return d->local; +} + +void AppInfo::setLocal(const bool local) +{ + d->local = local; +} + QUuid AppInfo::uuid() const { return d->uuid; diff --git a/daemon/appinfo.h b/daemon/appinfo.h index 3d5c4b4..c0b5e72 100644 --- a/daemon/appinfo.h +++ b/daemon/appinfo.h @@ -19,6 +19,7 @@ class AppInfo }; Q_DECLARE_FLAGS(Capabilities, Capability) + Q_PROPERTY(bool local READ isLocal WRITE setLocal) Q_PROPERTY(QUuid uuid READ uuid WRITE setUuid) Q_PROPERTY(QString shortName READ shortName WRITE setShortName) Q_PROPERTY(QString longName READ longName WRITE setLongName) @@ -37,6 +38,9 @@ class AppInfo AppInfo &operator=(const AppInfo &); ~AppInfo(); + bool isLocal() const; + void setLocal(const bool local); + QUuid uuid() const; void setUuid(const QUuid &uuid); diff --git a/daemon/appmanager.cpp b/daemon/appmanager.cpp index 9896a70..24335bc 100644 --- a/daemon/appmanager.cpp +++ b/daemon/appmanager.cpp @@ -88,6 +88,16 @@ void AppManager::rescan() emit appsChanged(); } +void AppManager::insertAppInfo(const AppInfo &info) +{ + _apps.insert(info.uuid(), info); + _names.insert(info.shortName(), info.uuid()); + + const char *type = info.isWatchface() ? "watchface" : "app"; + const char *local = info.isLocal() ? "local" : "watch"; + qCDebug(l) << "found" << local << type << info.shortName() << info.versionCode() << "/" << info.versionLabel() << "with uuid" << info.uuid().toString(); +} + void AppManager::scanApp(const QString &path) { qCDebug(l) << "scanning app" << path; @@ -114,6 +124,7 @@ void AppManager::scanApp(const QString &path) const QJsonObject root = doc.object(); AppInfo info; + info.setLocal(true); info.setUuid(QUuid(root["uuid"].toString())); info.setShortName(root["shortName"].toString()); info.setLongName(root["longName"].toString()); @@ -183,11 +194,7 @@ void AppManager::scanApp(const QString &path) return; } - _apps.insert(info.uuid(), info); - _names.insert(info.shortName(), info.uuid()); - - const char *type = info.isWatchface() ? "watchface" : "app"; - qCDebug(l) << "found installed" << type << info.shortName() << info.versionLabel() << "with uuid" << info.uuid().toString(); + insertAppInfo(info); } QByteArray AppManager::extractFromResourcePack(const QString &file, int wanted_id) const diff --git a/daemon/appmanager.h b/daemon/appmanager.h index e96ffe5..cc98ef1 100644 --- a/daemon/appmanager.h +++ b/daemon/appmanager.h @@ -22,6 +22,8 @@ class AppManager : public QObject AppInfo info(const QUuid &uuid) const; AppInfo info(const QString &shortName) const; + void insertAppInfo(const AppInfo &info); + public slots: void rescan(); diff --git a/daemon/bankmanager.cpp b/daemon/bankmanager.cpp index f0aa68b..041f4c6 100644 --- a/daemon/bankmanager.cpp +++ b/daemon/bankmanager.cpp @@ -262,6 +262,15 @@ void BankManager::refresh() _slots[index].version = version; AppInfo info = apps->info(name); + if (info.shortName() != name) { + info.setLocal(false); + info.setUuid(QUuid::createUuid()); + info.setShortName(name); + info.setCompanyName(company); + info.setVersionCode(version); + info.setCapabilities(AppInfo::Capabilities(flags)); + apps->insertAppInfo(info); + } QUuid uuid = info.uuid(); _slots[index].uuid = uuid; diff --git a/daemon/manager.cpp b/daemon/manager.cpp index 6498c68..557fa07 100644 --- a/daemon/manager.cpp +++ b/daemon/manager.cpp @@ -374,7 +374,8 @@ QVariantList PebbledProxy::AllApps() const foreach (const QUuid &uuid, uuids) { const AppInfo &info = manager()->apps->info(uuid); QVariantMap m; - m.insert("uuid", QVariant::fromValue(uuid.toString())); + m.insert("local", QVariant::fromValue(info.isLocal())); + m.insert("uuid", QVariant::fromValue(info.uuid().toString())); m.insert("short-name", QVariant::fromValue(info.shortName())); m.insert("long-name", QVariant::fromValue(info.longName())); m.insert("company-name", QVariant::fromValue(info.companyName()));