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
-
+
Desinstalando
-
+
(hueco libre)
-
+
(hueco en uso)
-
+
Instalar app...
-
+
Configurar...
-
+
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
-
+
-
+
-
+
-
+
-
+
-
+
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()));