summaryrefslogtreecommitdiff
path: root/rockworkd/libpebble/appinfo.cpp
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2016-02-11 23:55:16 +0100
committerAndrew Branson <andrew.branson@cern.ch>2016-02-11 23:55:16 +0100
commit29aaea2d80a9eb1715b6cddfac2d2aacf76358bd (patch)
tree012795b6bec16c72f38d33cff46324c9a0225868 /rockworkd/libpebble/appinfo.cpp
launchpad ~mzanetti/rockwork/trunk r87
Diffstat (limited to 'rockworkd/libpebble/appinfo.cpp')
-rw-r--r--rockworkd/libpebble/appinfo.cpp163
1 files changed, 163 insertions, 0 deletions
diff --git a/rockworkd/libpebble/appinfo.cpp b/rockworkd/libpebble/appinfo.cpp
new file mode 100644
index 0000000..4aeeeb7
--- /dev/null
+++ b/rockworkd/libpebble/appinfo.cpp
@@ -0,0 +1,163 @@
+#include <QSharedData>
+#include <QBuffer>
+#include <QDir>
+#include <QJsonDocument>
+#include <QUuid>
+#include "appinfo.h"
+#include "watchdatareader.h"
+#include "pebble.h"
+
+namespace {
+struct ResourceEntry {
+ int index;
+ quint32 offset;
+ quint32 length;
+ quint32 crc;
+};
+}
+
+AppInfo::AppInfo(const QString &path):
+ Bundle(path)
+{
+ if (path.isEmpty()) {
+ return;
+ }
+
+ QFile f(path + "/appinfo.json");
+ if (!f.open(QFile::ReadOnly)) {
+ qWarning() << "Error opening appinfo.json";
+ return;
+ }
+
+ QJsonParseError error;
+ QJsonDocument jsonDoc = QJsonDocument::fromJson(f.readAll(), &error);
+ if (error.error != QJsonParseError::NoError) {
+ qWarning() << "Error parsing appinfo.json";
+ return;
+ }
+
+ m_storeId = path.split("/").last();
+
+ QVariantMap map = jsonDoc.toVariant().toMap();
+
+ m_uuid = map.value("uuid").toUuid();
+ m_shortName = map.value("shortName").toString();
+ m_longName = map.value("longName").toString();
+ m_companyName = map.value("companyName").toString();
+ m_versionCode = map.value("versionCode").toInt();
+ m_versionLabel = map.value("versionLabel").toString();
+ m_capabilities = 0;
+
+ m_isWatchface = map.value("watchapp").toMap().value("watchface").toBool();
+
+ if (map.contains("appKeys")) {
+ QVariantMap appKeyMap = map.value("appKeys").toMap();
+ foreach (const QString &key, appKeyMap.keys()) {
+ m_appKeys.insert(key, appKeyMap.value(key).toInt());
+ }
+ }
+
+ if (map.contains("capabilities")) {
+ QList<QVariant> capabilities = map.value("capabilities").toList();
+
+ foreach (const QVariant &value, capabilities) {
+ QString capability = value.toString();
+ if (capability == "location") {
+ m_capabilities |= Location;
+ }
+ else if (capability == "configurable") {
+ m_capabilities |= Configurable;
+ }
+ }
+ }
+
+ QFile jsApp(path + "/pebble-js-app.js");
+ m_isJsKit = jsApp.exists();
+}
+
+AppInfo::AppInfo(const QUuid &uuid, bool isWatchFace, const QString &name, const QString &vendor, bool hasSettings):
+ m_uuid(uuid),
+ m_shortName(name),
+ m_companyName(vendor),
+ m_capabilities(hasSettings ? Configurable : None),
+ m_isWatchface(isWatchFace),
+ m_isSystemApp(true)
+{
+
+}
+
+
+AppInfo::~AppInfo()
+{}
+
+
+bool AppInfo::isValid() const
+{
+ return !m_uuid.isNull();
+}
+
+QUuid AppInfo::uuid() const
+{
+ return m_uuid;
+}
+
+QString AppInfo::storeId() const
+{
+ return m_storeId;
+}
+
+QString AppInfo::shortName() const
+{
+ return m_shortName;
+}
+
+QString AppInfo::longName() const
+{
+ return m_longName;
+}
+
+QString AppInfo::companyName() const
+{
+ return m_companyName;
+}
+
+int AppInfo::versionCode() const
+{
+ return m_versionCode;
+}
+
+QString AppInfo::versionLabel() const
+{
+ return m_versionLabel;
+}
+
+bool AppInfo::isWatchface() const
+{
+ return m_isWatchface;
+}
+
+bool AppInfo::isJSKit() const
+{
+ return m_isJsKit;
+}
+
+bool AppInfo::isSystemApp() const
+{
+ return m_isSystemApp;
+}
+
+QHash<QString, int> AppInfo::appKeys() const
+{
+ return m_appKeys;
+}
+
+bool AppInfo::hasSettings() const
+{
+ return (m_capabilities & Configurable);
+}
+
+AppInfo::Capabilities AppInfo::capabilities() const
+{
+ return m_capabilities;
+}
+