diff --git a/resources-ara/strings/strings.xml b/resources-ara/strings/strings.xml
index da94a9a..c83e9a6 100644
--- a/resources-ara/strings/strings.xml
+++ b/resources-ara/strings/strings.xml
@@ -29,4 +29,5 @@
لا يوجد مفتاح API في إعدادات التطبيق
لا يوجد عنوان URL لواجهة برمجة التطبيقات في إعدادات التطبيق
لا يوجد عنوان URL للتكوين في إعدادات التطبيق
+ مكالمات API سريعة جدًا. يرجى الإبلاغ عن هذا الخطأ مع تفاصيل الجهاز.
\ No newline at end of file
diff --git a/resources-bul/strings/strings.xml b/resources-bul/strings/strings.xml
index f0e0def..5d18ac1 100644
--- a/resources-bul/strings/strings.xml
+++ b/resources-bul/strings/strings.xml
@@ -29,4 +29,5 @@
Няма API ключ в настройките на приложението
Няма URL адрес на API в настройките на приложението
Няма конфигурационен URL адрес в настройките на приложението
+ Извикванията на API са твърде бързи. Моля, докладвайте тази грешка с подробности за устройството.
\ No newline at end of file
diff --git a/resources-ces/strings/strings.xml b/resources-ces/strings/strings.xml
index e6b75a5..9681dc4 100644
--- a/resources-ces/strings/strings.xml
+++ b/resources-ces/strings/strings.xml
@@ -29,4 +29,5 @@
V nastavení aplikace není žádný klíč API
V nastavení aplikace není žádná adresa URL API
V nastavení aplikace není žádná konfigurační URL
+ Příliš rychlá volání API. Nahlaste tuto chybu s podrobnostmi o zařízení.
\ No newline at end of file
diff --git a/resources-dan/strings/strings.xml b/resources-dan/strings/strings.xml
index 44af751..47bcf83 100644
--- a/resources-dan/strings/strings.xml
+++ b/resources-dan/strings/strings.xml
@@ -29,4 +29,5 @@
Ingen API-nøgle i applikationsindstillingerne
Ingen API-URL i applikationsindstillingerne
Ingen konfigurations-URL i applikationsindstillingerne
+ API-kald for hurtigt. Rapportér venligst denne fejl med enhedsoplysninger.
\ No newline at end of file
diff --git a/resources-deu/strings/strings.xml b/resources-deu/strings/strings.xml
index 5df7810..4c06dec 100644
--- a/resources-deu/strings/strings.xml
+++ b/resources-deu/strings/strings.xml
@@ -29,4 +29,5 @@
Kein API-Schlüssel in den Anwendungseinstellungen
Keine API-URL in den Anwendungseinstellungen
Keine Konfigurations-URL in den Anwendungseinstellungen
+ API-Aufrufe zu schnell. Bitte melden Sie diesen Fehler mit Gerätedetails.
\ No newline at end of file
diff --git a/resources-dut/strings/strings.xml b/resources-dut/strings/strings.xml
index 8b33213..f61bc44 100644
--- a/resources-dut/strings/strings.xml
+++ b/resources-dut/strings/strings.xml
@@ -29,4 +29,5 @@
Geen API-sleutel in de applicatie-instellingen
Geen API-URL in de applicatie-instellingen
Geen configuratie-URL in de applicatie-instellingen
+ API-aanroepen te snel. Rapporteer deze fout met apparaatgegevens.
\ No newline at end of file
diff --git a/resources-est/strings/strings.xml b/resources-est/strings/strings.xml
index f302031..e0c1c98 100644
--- a/resources-est/strings/strings.xml
+++ b/resources-est/strings/strings.xml
@@ -29,4 +29,5 @@
Rakenduse seadetes pole API-võtit
Rakenduse seadetes pole API URL-i
Rakenduse seadetes pole konfiguratsiooni URL-i
+ API-kutsed liiga kiired. Teatage sellest veast koos seadme üksikasjadega.
\ No newline at end of file
diff --git a/resources-fin/strings/strings.xml b/resources-fin/strings/strings.xml
index 70f8caa..9a70bdd 100644
--- a/resources-fin/strings/strings.xml
+++ b/resources-fin/strings/strings.xml
@@ -29,4 +29,5 @@
Sovellusasetuksissa ei ole API-avainta
Sovellusasetuksissa ei ole API URL-osoitetta
Sovelluksen asetuksissa ei ole konfigurointi-URL-osoitetta
+ API-kutsut liian nopeita. Ilmoita tästä virheestä laitteen tiedoilla.
\ No newline at end of file
diff --git a/resources-fre/strings/strings.xml b/resources-fre/strings/strings.xml
index cca17a5..290d454 100644
--- a/resources-fre/strings/strings.xml
+++ b/resources-fre/strings/strings.xml
@@ -29,4 +29,5 @@
Pas de clé API dans les paramètres de l'application
Aucune URL API dans les paramètres de l'application
Aucune URL de configuration dans les paramètres de l'application
+ Appels API trop rapides. Veuillez signaler cette erreur avec les détails de l'appareil.
\ No newline at end of file
diff --git a/resources-gre/strings/strings.xml b/resources-gre/strings/strings.xml
index 18fdd1e..e058e69 100644
--- a/resources-gre/strings/strings.xml
+++ b/resources-gre/strings/strings.xml
@@ -29,4 +29,5 @@
Δεν υπάρχει κλειδί API στις ρυθμίσεις της εφαρμογής
Δεν υπάρχει URL API στις ρυθμίσεις της εφαρμογής
Δεν υπάρχει διεύθυνση URL διαμόρφωσης στις ρυθμίσεις της εφαρμογής
+ Κλήσεις API πολύ γρήγορες. Αναφέρετε αυτό το σφάλμα με τα στοιχεία της συσκευής.
\ No newline at end of file
diff --git a/resources-heb/strings/strings.xml b/resources-heb/strings/strings.xml
index 5edf23b..fce9dd0 100644
--- a/resources-heb/strings/strings.xml
+++ b/resources-heb/strings/strings.xml
@@ -29,4 +29,5 @@
אין מפתח API בהגדרות האפליקציה
אין כתובת API בהגדרות האפליקציה
אין כתובת אתר תצורה בהגדרות האפליקציה
+ קריאות API מהירות מדי. אנא דווח על שגיאה זו עם פרטי המכשיר.
\ No newline at end of file
diff --git a/resources-hrv/strings/strings.xml b/resources-hrv/strings/strings.xml
index 7e61b99..ec410fe 100644
--- a/resources-hrv/strings/strings.xml
+++ b/resources-hrv/strings/strings.xml
@@ -29,4 +29,5 @@
Nema API ključa u postavkama aplikacije
Nema API URL-a u postavkama aplikacije
Nema konfiguracijskog URL-a u postavkama aplikacije
+ API pozivi su prebrzi. Prijavite ovu pogrešku s pojedinostima o uređaju.
\ No newline at end of file
diff --git a/resources-hun/strings/strings.xml b/resources-hun/strings/strings.xml
index a4484e5..b0f0330 100644
--- a/resources-hun/strings/strings.xml
+++ b/resources-hun/strings/strings.xml
@@ -29,4 +29,5 @@
Nincs API kulcs az alkalmazás beállításaiban
Nincs API URL az alkalmazás beállításai között
Nincs konfigurációs URL az alkalmazás beállításai között
+ Az API-hívások túl gyorsak. Kérjük, jelentse ezt a hibát az eszköz részleteivel.
\ No newline at end of file
diff --git a/resources-ind/strings/strings.xml b/resources-ind/strings/strings.xml
index aa3ba2f..3002087 100644
--- a/resources-ind/strings/strings.xml
+++ b/resources-ind/strings/strings.xml
@@ -29,4 +29,5 @@
Tidak ada kunci API di pengaturan aplikasi
Tidak ada URL API di pengaturan aplikasi
Tidak ada URL konfigurasi di pengaturan aplikasi
+ Panggilan API terlalu cepat. Silakan laporkan kesalahan ini dengan detail perangkat.
\ No newline at end of file
diff --git a/resources-ita/strings/strings.xml b/resources-ita/strings/strings.xml
index 17a9326..4784cc3 100644
--- a/resources-ita/strings/strings.xml
+++ b/resources-ita/strings/strings.xml
@@ -29,4 +29,5 @@
Nessuna chiave API nelle impostazioni dell'applicazione
Nessun URL API nelle impostazioni dell'applicazione
Nessun URL di configurazione nelle impostazioni dell'applicazione
+ Chiamate API troppo rapide. Segnala questo errore con i dettagli del dispositivo.
\ No newline at end of file
diff --git a/resources-jpn/strings/strings.xml b/resources-jpn/strings/strings.xml
index cd4e7e7..f14e825 100644
--- a/resources-jpn/strings/strings.xml
+++ b/resources-jpn/strings/strings.xml
@@ -29,4 +29,5 @@
アプリケーション設定に API キーがありません
アプリケーション設定に API URL がありません
アプリケーション設定に構成 URL がありません
+ API 呼び出しが速すぎます。このエラーをデバイスの詳細とともに報告してください。
\ No newline at end of file
diff --git a/resources-kor/strings/strings.xml b/resources-kor/strings/strings.xml
index a951a06..57f0304 100644
--- a/resources-kor/strings/strings.xml
+++ b/resources-kor/strings/strings.xml
@@ -29,4 +29,5 @@
애플리케이션 설정에 API 키가 없습니다.
애플리케이션 설정에 API URL이 없습니다.
애플리케이션 설정에 구성 URL이 없습니다.
+ API 호출이 너무 빠릅니다. 기기 세부정보와 함께 이 오류를 신고해 주세요.
\ No newline at end of file
diff --git a/resources-lav/strings/strings.xml b/resources-lav/strings/strings.xml
index 9eaeeb1..9fb0d95 100644
--- a/resources-lav/strings/strings.xml
+++ b/resources-lav/strings/strings.xml
@@ -29,4 +29,5 @@
Lietojumprogrammas iestatījumos nav API atslēgas
Lietojumprogrammas iestatījumos nav API URL
Lietojumprogrammas iestatījumos nav konfigurācijas URL
+ API izsaukumi ir pārāk ātri. Lūdzu, ziņojiet par šo kļūdu, norādot informāciju par ierīci.
\ No newline at end of file
diff --git a/resources-lit/strings/strings.xml b/resources-lit/strings/strings.xml
index e599cbf..2b67606 100644
--- a/resources-lit/strings/strings.xml
+++ b/resources-lit/strings/strings.xml
@@ -29,4 +29,5 @@
Programos nustatymuose nėra API rakto
Programos nustatymuose nėra API URL
Programos nustatymuose nėra konfigūracijos URL
+ API skambučiai per greiti. Praneškite apie šią klaidą pateikdami išsamią įrenginio informaciją.
\ No newline at end of file
diff --git a/resources-nob/strings/strings.xml b/resources-nob/strings/strings.xml
index edcddbf..e8cf47f 100644
--- a/resources-nob/strings/strings.xml
+++ b/resources-nob/strings/strings.xml
@@ -29,4 +29,5 @@
Ingen API-nøkkel i applikasjonsinnstillingene
Ingen API-URL i applikasjonsinnstillingene
Ingen konfigurasjons-URL i applikasjonsinnstillingene
+ API-kall for raske. Rapporter denne feilen med enhetsdetaljer.
\ No newline at end of file
diff --git a/resources-pol/strings/strings.xml b/resources-pol/strings/strings.xml
index 5f7db9b..c229b79 100644
--- a/resources-pol/strings/strings.xml
+++ b/resources-pol/strings/strings.xml
@@ -29,4 +29,5 @@
Brak klucza API w ustawieniach aplikacji
Brak adresu API w ustawieniach aplikacji
Brak adresu URL konfiguracji w ustawieniach aplikacji
+ Wywołania API są zbyt szybkie. Zgłoś ten błąd, podając szczegóły urządzenia.
\ No newline at end of file
diff --git a/resources-por/strings/strings.xml b/resources-por/strings/strings.xml
index 4b98456..13f5f8d 100644
--- a/resources-por/strings/strings.xml
+++ b/resources-por/strings/strings.xml
@@ -29,4 +29,5 @@
Nenhuma chave de API nas configurações do aplicativo
Nenhum URL de API nas configurações do aplicativo
Nenhum URL de configuração nas configurações do aplicativo
+ Chamadas de API muito rápidas. Por favor, relate este erro com detalhes do dispositivo.
\ No newline at end of file
diff --git a/resources-ron/strings/strings.xml b/resources-ron/strings/strings.xml
index 430f2f4..46ef306 100644
--- a/resources-ron/strings/strings.xml
+++ b/resources-ron/strings/strings.xml
@@ -29,4 +29,5 @@
Nicio cheie API în setările aplicației
Nicio adresă URL API în setările aplicației
Nicio adresă URL de configurare în setările aplicației
+ Apeluri API prea rapide. Vă rugăm să raportați această eroare cu detaliile dispozitivului.
\ No newline at end of file
diff --git a/resources-slo/strings/strings.xml b/resources-slo/strings/strings.xml
index 70e5be8..524d03d 100644
--- a/resources-slo/strings/strings.xml
+++ b/resources-slo/strings/strings.xml
@@ -29,4 +29,5 @@
V nastaveniach aplikácie nie je žiadny kľúč API
V nastaveniach aplikácie nie je žiadna adresa URL rozhrania API
V nastaveniach aplikácie nie je žiadna konfiguračná URL
+ Volania API sú príliš rýchle. Nahláste túto chybu s podrobnosťami o zariadení.
\ No newline at end of file
diff --git a/resources-slv/strings/strings.xml b/resources-slv/strings/strings.xml
index 77e7b24..31870bf 100644
--- a/resources-slv/strings/strings.xml
+++ b/resources-slv/strings/strings.xml
@@ -29,4 +29,5 @@
V nastavitvah aplikacije ni ključa API
V nastavitvah aplikacije ni URL-ja API-ja
V nastavitvah aplikacije ni konfiguracijskega URL-ja
+ API klici so prehitri. Prijavite to napako s podrobnostmi o napravi.
\ No newline at end of file
diff --git a/resources-spa/strings/strings.xml b/resources-spa/strings/strings.xml
index 1cf43c5..a016a52 100644
--- a/resources-spa/strings/strings.xml
+++ b/resources-spa/strings/strings.xml
@@ -29,4 +29,5 @@
Sin clave API en la configuración de la aplicación
No hay URL de API en la configuración de la aplicación
No hay URL de configuración en la configuración de la aplicación.
+ Llamadas API demasiado rápidas. Informe este error con los detalles del dispositivo.
\ No newline at end of file
diff --git a/resources-swe/strings/strings.xml b/resources-swe/strings/strings.xml
index 45f099d..91b6cf8 100644
--- a/resources-swe/strings/strings.xml
+++ b/resources-swe/strings/strings.xml
@@ -29,4 +29,5 @@
Ingen API-nyckel i applikationsinställningarna
Ingen API-URL i applikationsinställningarna
Ingen konfigurations-URL i programinställningarna
+ API-anrop för snabba. Rapportera detta fel med enhetsinformation.
\ No newline at end of file
diff --git a/resources-tha/strings/strings.xml b/resources-tha/strings/strings.xml
index ef40948..03de333 100644
--- a/resources-tha/strings/strings.xml
+++ b/resources-tha/strings/strings.xml
@@ -29,4 +29,5 @@
ไม่มีคีย์ API ในการตั้งค่าแอปพลิเคชัน
ไม่มี URL API ในการตั้งค่าแอปพลิเคชัน
ไม่มี URL การกำหนดค่าในการตั้งค่าแอปพลิเคชัน
+ การเรียก API เร็วเกินไป โปรดรายงานข้อผิดพลาดนี้พร้อมรายละเอียดอุปกรณ์
\ No newline at end of file
diff --git a/resources-tur/strings/strings.xml b/resources-tur/strings/strings.xml
index e00cc00..c7e7002 100644
--- a/resources-tur/strings/strings.xml
+++ b/resources-tur/strings/strings.xml
@@ -29,4 +29,5 @@
Uygulama ayarlarında API anahtarı yok
Uygulama ayarlarında API URL'si yok
Uygulama ayarlarında yapılandırma URL'si yok
+ API çağrıları çok hızlı. Lütfen bu hatayı cihaz ayrıntılarıyla birlikte bildirin.
\ No newline at end of file
diff --git a/resources-ukr/strings/strings.xml b/resources-ukr/strings/strings.xml
index 75df959..4077a04 100644
--- a/resources-ukr/strings/strings.xml
+++ b/resources-ukr/strings/strings.xml
@@ -29,4 +29,5 @@
У налаштуваннях програми немає ключа API
У налаштуваннях програми немає URL-адреси API
У налаштуваннях програми немає URL-адреси конфігурації
+ Надто швидкі виклики API. Повідомте про цю помилку з деталями пристрою.
\ No newline at end of file
diff --git a/resources-vie/strings/strings.xml b/resources-vie/strings/strings.xml
index c2a6afe..01530c7 100644
--- a/resources-vie/strings/strings.xml
+++ b/resources-vie/strings/strings.xml
@@ -29,4 +29,5 @@
Không có khóa API trong cài đặt ứng dụng
Không có URL API trong cài đặt ứng dụng
Không có URL cấu hình trong cài đặt ứng dụng
+ Cuộc gọi API quá nhanh. Vui lòng báo cáo lỗi này với các chi tiết thiết bị.
\ No newline at end of file
diff --git a/resources-zhs/strings/strings.xml b/resources-zhs/strings/strings.xml
index f0a37d0..a70b1a6 100644
--- a/resources-zhs/strings/strings.xml
+++ b/resources-zhs/strings/strings.xml
@@ -29,4 +29,5 @@
应用程序设置中没有 API 密钥
应用程序设置中没有 API URL
应用程序设置中没有配置 URL
+ API 调用速度太快。请报告此错误并提供设备详细信息。
\ No newline at end of file
diff --git a/resources-zht/strings/strings.xml b/resources-zht/strings/strings.xml
index 905c12e..acac8c8 100644
--- a/resources-zht/strings/strings.xml
+++ b/resources-zht/strings/strings.xml
@@ -29,4 +29,5 @@
應用程式設定中沒有 API 金鑰
應用程式設定中沒有 API URL
應用程式設定中沒有配置 URL
+ API 呼叫速度太快。請報告此錯誤並提供設備詳細資訊。
\ No newline at end of file
diff --git a/resources-zsm/strings/strings.xml b/resources-zsm/strings/strings.xml
index bc1a38b..d56ae4c 100644
--- a/resources-zsm/strings/strings.xml
+++ b/resources-zsm/strings/strings.xml
@@ -29,4 +29,5 @@
Tiada kunci API dalam tetapan aplikasi
Tiada URL API dalam tetapan aplikasi
Tiada URL konfigurasi dalam tetapan aplikasi
+ Panggilan API terlalu pantas. Sila laporkan ralat ini dengan butiran peranti.
\ No newline at end of file
diff --git a/resources/strings/strings.xml b/resources/strings/strings.xml
index 87c85f3..6ca1034 100644
--- a/resources/strings/strings.xml
+++ b/resources/strings/strings.xml
@@ -23,4 +23,5 @@
No API key in the application settings
No API URL in the application settings
No configuration URL in the application settings
+ API calls too rapid. Please report this error with device details.
diff --git a/source/Globals.mc b/source/Globals.mc
index 1769b2b..bd813a7 100644
--- a/source/Globals.mc
+++ b/source/Globals.mc
@@ -23,8 +23,9 @@ using Toybox.Lang;
class Globals {
// Enable printing of messages to the debug console (don't make this a Property
// as the messages can't be read from a watch!)
- static const debug = false;
- static const updateInterval = 10; // seconds
- static const alertTimeout = 2000; // ms
- static const tapTimeout = 1000; // ms
+ static const debug = false;
+ // There's a danger this time is device sensitive.
+ static const menuItemUpdateInterval = 100; // ms, 100 ms seems okay for Venu2
+ static const alertTimeout = 2000; // ms
+ static const tapTimeout = 1000; // ms
}
diff --git a/source/HomeAssistantApp.mc b/source/HomeAssistantApp.mc
index 071d023..bc7d7e5 100644
--- a/source/HomeAssistantApp.mc
+++ b/source/HomeAssistantApp.mc
@@ -31,7 +31,10 @@ class HomeAssistantApp extends Application.AppBase {
hidden var strNoConfigUrl as Lang.String;
hidden var strNoInternet as Lang.String;
hidden var strNoMenu as Lang.String;
+ hidden var strApiFlood as Lang.String;
hidden var timer as Timer.Timer;
+ hidden var itemsToUpdate; // Array initialised by onReturnFetchMenuConfig()
+ hidden var nextItemToUpdate = 0; // Index into the above array
function initialize() {
AppBase.initialize();
@@ -40,6 +43,7 @@ class HomeAssistantApp extends Application.AppBase {
strNoConfigUrl = WatchUi.loadResource($.Rez.Strings.NoConfigUrl);
strNoInternet = WatchUi.loadResource($.Rez.Strings.NoInternet);
strNoMenu = WatchUi.loadResource($.Rez.Strings.NoMenu);
+ strApiFlood = WatchUi.loadResource($.Rez.Strings.ApiFlood);
timer = new Timer.Timer();
}
@@ -89,14 +93,24 @@ class HomeAssistantApp extends Application.AppBase {
System.println("HomeAssistantApp onReturnFetchMenuConfig() Response Code: " + responseCode);
System.println("HomeAssistantApp onReturnFetchMenuConfig() Response Data: " + data);
}
- if (responseCode == 200) {
+ if (responseCode == Communications.BLE_QUEUE_FULL) {
+ if (Globals.debug) {
+ System.println("HomeAssistantApp onReturnFetchMenuConfig() Response Code: BLE_QUEUE_FULL, API calls too rapid.");
+ }
+ var cw = WatchUi.getCurrentView();
+ if (!(cw[0] instanceof ErrorView)) {
+ // Avoid pushing multiple ErrorViews
+ WatchUi.pushView(new ErrorView(strApiFlood), new ErrorDelegate(), WatchUi.SLIDE_UP);
+ }
+ } else if (responseCode == 200) {
haMenu = new HomeAssistantView(data, null);
+ WatchUi.switchToView(haMenu, new HomeAssistantViewDelegate(), WatchUi.SLIDE_IMMEDIATE);
+ itemsToUpdate = haMenu.getItemsToUpdate();
timer.start(
- haMenu.method(:stateUpdate),
- Globals.updateInterval * 1000,
+ method(:updateNextMenuItem),
+ Globals.menuItemUpdateInterval,
true
);
- WatchUi.switchToView(haMenu, new HomeAssistantViewDelegate(), WatchUi.SLIDE_IMMEDIATE);
} else if (responseCode == -300) {
if (Globals.debug) {
System.println("HomeAssistantApp Note - onReturnFetchMenuConfig(): Network request timeout.");
@@ -123,6 +137,14 @@ class HomeAssistantApp extends Application.AppBase {
);
}
+ // We need to spread out the API calls so as not to overload the results queue and cause Communications.BLE_QUEUE_FULL (-101) error.
+ // This function is called by a timer every Globals.menuItemUpdateInterval ms.
+ function updateNextMenuItem() as Void {
+ var itu = itemsToUpdate as Lang.Array;
+ itu[nextItemToUpdate].getState();
+ nextItemToUpdate = (nextItemToUpdate + 1) % itu.size();
+ }
+
}
function getApp() as HomeAssistantApp {
diff --git a/source/HomeAssistantMenuItem.mc b/source/HomeAssistantMenuItem.mc
index 6691ba3..ffdd0c1 100644
--- a/source/HomeAssistantMenuItem.mc
+++ b/source/HomeAssistantMenuItem.mc
@@ -26,6 +26,7 @@ using Toybox.Application.Properties;
class HomeAssistantMenuItem extends WatchUi.MenuItem {
hidden var api_key = Properties.getValue("api_key");
hidden var strNoInternet as Lang.String;
+ hidden var strApiFlood as Lang.String;
hidden var mService as Lang.String or Null;
function initialize(
@@ -39,6 +40,7 @@ class HomeAssistantMenuItem extends WatchUi.MenuItem {
} or Null
) {
strNoInternet = WatchUi.loadResource($.Rez.Strings.NoInternet);
+ strApiFlood = WatchUi.loadResource($.Rez.Strings.ApiFlood);
mService = service;
WatchUi.MenuItem.initialize(
label,
@@ -52,10 +54,19 @@ class HomeAssistantMenuItem extends WatchUi.MenuItem {
//
function onReturnExecScript(responseCode as Lang.Number, data as Null or Lang.Dictionary or Lang.String) as Void {
if (Globals.debug) {
- System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: " + responseCode);
- System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Data: " + data);
+ System.println("HomeAssistantMenuItem onReturnExecScript() Response Code: " + responseCode);
+ System.println("HomeAssistantMenuItem onReturnExecScript() Response Data: " + data);
}
- if (responseCode == 200) {
+ if (responseCode == Communications.BLE_QUEUE_FULL) {
+ if (Globals.debug) {
+ System.println("HomeAssistantMenuItem onReturnExecScript() Response Code: BLE_QUEUE_FULL, API calls too rapid.");
+ }
+ var cw = WatchUi.getCurrentView();
+ if (!(cw[0] instanceof ErrorView)) {
+ // Avoid pushing multiple ErrorViews
+ WatchUi.pushView(new ErrorView(strApiFlood), new ErrorDelegate(), WatchUi.SLIDE_UP);
+ }
+ } else if (responseCode == 200) {
var d = data as Lang.Array;
for(var i = 0; i < d.size(); i++) {
if ((d[i].get("entity_id") as Lang.String).equals(mIdentifier)) {
diff --git a/source/HomeAssistantToggleMenuItem.mc b/source/HomeAssistantToggleMenuItem.mc
index 8abef5c..0e35538 100644
--- a/source/HomeAssistantToggleMenuItem.mc
+++ b/source/HomeAssistantToggleMenuItem.mc
@@ -26,6 +26,7 @@ using Toybox.Application.Properties;
class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
hidden var api_key = Properties.getValue("api_key");
hidden var strNoInternet as Lang.String;
+ hidden var strApiFlood as Lang.String;
function initialize(
label as Lang.String or Lang.Symbol,
@@ -41,6 +42,7 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
} or Null
) {
strNoInternet = WatchUi.loadResource($.Rez.Strings.NoInternet);
+ strApiFlood = WatchUi.loadResource($.Rez.Strings.ApiFlood);
WatchUi.ToggleMenuItem.initialize(label, subLabel, identifier, enabled, options);
api_key = Properties.getValue("api_key");
}
@@ -64,7 +66,16 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: " + responseCode);
System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Data: " + data);
}
- if (responseCode == 200) {
+ if (responseCode == Communications.BLE_QUEUE_FULL) {
+ if (Globals.debug) {
+ System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: BLE_QUEUE_FULL, API calls too rapid.");
+ }
+ var cw = WatchUi.getCurrentView();
+ if (!(cw[0] instanceof ErrorView)) {
+ // Avoid pushing multiple ErrorViews
+ WatchUi.pushView(new ErrorView(strApiFlood), new ErrorDelegate(), WatchUi.SLIDE_UP);
+ }
+ } else if (responseCode == 200) {
var state = data.get("state") as Lang.String;
if (Globals.debug) {
System.println((data.get("attributes") as Lang.Dictionary).get("friendly_name") + " State=" + state);
@@ -107,10 +118,19 @@ class HomeAssistantToggleMenuItem extends WatchUi.ToggleMenuItem {
//
function onReturnSetState(responseCode as Lang.Number, data as Null or Lang.Dictionary or Lang.String) as Void {
if (Globals.debug) {
- System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Code: " + responseCode);
- System.println("HomeAssistantToggleMenuItem onReturnGetState() Response Data: " + data);
+ System.println("HomeAssistantToggleMenuItem onReturnSetState() Response Code: " + responseCode);
+ System.println("HomeAssistantToggleMenuItem onReturnSetState() Response Data: " + data);
}
- if (responseCode == 200) {
+ if (responseCode == Communications.BLE_QUEUE_FULL) {
+ if (Globals.debug) {
+ System.println("HomeAssistantToggleMenuItem onReturnSetState() Response Code: BLE_QUEUE_FULL, API calls too rapid.");
+ }
+ var cw = WatchUi.getCurrentView();
+ if (!(cw[0] instanceof ErrorView)) {
+ // Avoid pushing multiple ErrorViews
+ WatchUi.pushView(new ErrorView(strApiFlood), new ErrorDelegate(), WatchUi.SLIDE_UP);
+ }
+ } else if (responseCode == 200) {
var state;
var d = data as Lang.Array;
for(var i = 0; i < d.size(); i++) {
diff --git a/source/HomeAssistantView.mc b/source/HomeAssistantView.mc
index bbe5934..f74ea8a 100644
--- a/source/HomeAssistantView.mc
+++ b/source/HomeAssistantView.mc
@@ -24,6 +24,9 @@ using Toybox.WatchUi;
class HomeAssistantView extends WatchUi.Menu2 {
hidden var strMenuItemTap as Lang.String;
+ // List of items that need to have their status updated periodically
+ hidden var mListToggleItems = [];
+ hidden var mListMenuItems = [];
function initialize(
definition as Lang.Dictionary,
@@ -56,15 +59,15 @@ class HomeAssistantView extends WatchUi.Menu2 {
var service = items[i].get("service") as Lang.String or Null;
if (type != null && name != null && entity != null) {
if (type.equals("toggle")) {
- addItem(
- new HomeAssistantToggleMenuItem(
- name,
- toggle_obj,
- entity,
- false,
- null
- )
+ var item = new HomeAssistantToggleMenuItem(
+ name,
+ toggle_obj,
+ entity,
+ false,
+ null
);
+ addItem(item);
+ mListToggleItems.add(item);
} else if (type.equals("tap")) {
addItem(
new HomeAssistantMenuItem(
@@ -76,46 +79,27 @@ class HomeAssistantView extends WatchUi.Menu2 {
)
);
} else if (type.equals("group")) {
- addItem(
- new HomeAssistantViewMenuItem(items[i])
- );
+ var item = new HomeAssistantViewMenuItem(items[i]);
+ addItem(item);
+ mListMenuItems.add(item);
}
}
}
}
+ function getItemsToUpdate() as Lang.Array {
+ var fullList = [];
+ var lmi = mListMenuItems as Lang.Array;
+ for(var i = 0; i < lmi.size(); i++) {
+ fullList.addAll(lmi[i].getMenuView().getItemsToUpdate());
+ }
+ return fullList.addAll(mListToggleItems);
+ }
+
// Called when this View is brought to the foreground. Restore
// the state of this View and prepare it to be shown. This includes
// loading resources into memory.
- function onShow() as Void {
- for(var i = 0; i < mItems.size(); i++) {
- if (mItems[i] instanceof HomeAssistantToggleMenuItem) {
- var toggleItem = mItems[i] as HomeAssistantToggleMenuItem;
- toggleItem.getState();
- if (Globals.debug) {
- System.println("HomeAssistantView Note: " + toggleItem.getLabel() + " ID=" + toggleItem.getId() + " Enabled=" + toggleItem.isEnabled());
- }
- }
- }
- }
-
- function stateUpdate() as Void {
- for(var i = 0; i < mItems.size(); i++) {
- if (mItems[i] instanceof HomeAssistantToggleMenuItem) {
- var toggleItem = mItems[i] as HomeAssistantToggleMenuItem;
- toggleItem.getState();
- if (Globals.debug) {
- System.println("HomeAssistantView Toggle stateUpdate: " + toggleItem.getLabel() + " ID=" + toggleItem.getId() + " Enabled=" + toggleItem.isEnabled());
- }
- } else if (mItems[i] instanceof HomeAssistantViewMenuItem) {
- var menu = mItems[i] as HomeAssistantViewMenuItem;
- if (Globals.debug) {
- System.println("HomeAssistantView Menu stateUpdate: " + menu.getLabel() + " ID=" + menu.getId());
- }
- menu.getMenuView().stateUpdate();
- }
- }
- }
+ function onShow() as Void {}
}