Fix for the update rate

Now perform a "round robin" of all toggle menu items. The delay is currently 100 ms to avoid Communications.BLE_QUEUE_FULL errors.
This commit is contained in:
Philip Abbey
2023-11-11 13:36:08 +00:00
parent b7ed8607fb
commit e7c4411dd2
40 changed files with 128 additions and 55 deletions

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">لا يوجد مفتاح API في إعدادات التطبيق</string>
<string id="NoApiUrl">لا يوجد عنوان URL لواجهة برمجة التطبيقات في إعدادات التطبيق</string>
<string id="NoConfigUrl">لا يوجد عنوان URL للتكوين في إعدادات التطبيق</string>
<string id="ApiFlood">مكالمات API سريعة جدًا. يرجى الإبلاغ عن هذا الخطأ مع تفاصيل الجهاز.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Няма API ключ в настройките на приложението</string>
<string id="NoApiUrl">Няма URL адрес на API в настройките на приложението</string>
<string id="NoConfigUrl">Няма конфигурационен URL адрес в настройките на приложението</string>
<string id="ApiFlood">Извикванията на API са твърде бързи. Моля, докладвайте тази грешка с подробности за устройството.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">V nastavení aplikace není žádný klíč API</string>
<string id="NoApiUrl">V nastavení aplikace není žádná adresa URL API</string>
<string id="NoConfigUrl">V nastavení aplikace není žádná konfigurační URL</string>
<string id="ApiFlood">Příliš rychlá volání API. Nahlaste tuto chybu s podrobnostmi o zařízení.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Ingen API-nøgle i applikationsindstillingerne</string>
<string id="NoApiUrl">Ingen API-URL i applikationsindstillingerne</string>
<string id="NoConfigUrl">Ingen konfigurations-URL i applikationsindstillingerne</string>
<string id="ApiFlood">API-kald for hurtigt. Rapportér venligst denne fejl med enhedsoplysninger.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Kein API-Schlüssel in den Anwendungseinstellungen</string>
<string id="NoApiUrl">Keine API-URL in den Anwendungseinstellungen</string>
<string id="NoConfigUrl">Keine Konfigurations-URL in den Anwendungseinstellungen</string>
<string id="ApiFlood">API-Aufrufe zu schnell. Bitte melden Sie diesen Fehler mit Gerätedetails.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Geen API-sleutel in de applicatie-instellingen</string>
<string id="NoApiUrl">Geen API-URL in de applicatie-instellingen</string>
<string id="NoConfigUrl">Geen configuratie-URL in de applicatie-instellingen</string>
<string id="ApiFlood">API-aanroepen te snel. Rapporteer deze fout met apparaatgegevens.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Rakenduse seadetes pole API-võtit</string>
<string id="NoApiUrl">Rakenduse seadetes pole API URL-i</string>
<string id="NoConfigUrl">Rakenduse seadetes pole konfiguratsiooni URL-i</string>
<string id="ApiFlood">API-kutsed liiga kiired. Teatage sellest veast koos seadme üksikasjadega.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Sovellusasetuksissa ei ole API-avainta</string>
<string id="NoApiUrl">Sovellusasetuksissa ei ole API URL-osoitetta</string>
<string id="NoConfigUrl">Sovelluksen asetuksissa ei ole konfigurointi-URL-osoitetta</string>
<string id="ApiFlood">API-kutsut liian nopeita. Ilmoita tästä virheestä laitteen tiedoilla.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Pas de clé API dans les paramètres de l'application</string>
<string id="NoApiUrl">Aucune URL API dans les paramètres de l'application</string>
<string id="NoConfigUrl">Aucune URL de configuration dans les paramètres de l'application</string>
<string id="ApiFlood">Appels API trop rapides. Veuillez signaler cette erreur avec les détails de l'appareil.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Δεν υπάρχει κλειδί API στις ρυθμίσεις της εφαρμογής</string>
<string id="NoApiUrl">Δεν υπάρχει URL API στις ρυθμίσεις της εφαρμογής</string>
<string id="NoConfigUrl">Δεν υπάρχει διεύθυνση URL διαμόρφωσης στις ρυθμίσεις της εφαρμογής</string>
<string id="ApiFlood">Κλήσεις API πολύ γρήγορες. Αναφέρετε αυτό το σφάλμα με τα στοιχεία της συσκευής.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">אין מפתח API בהגדרות האפליקציה</string>
<string id="NoApiUrl">אין כתובת API בהגדרות האפליקציה</string>
<string id="NoConfigUrl">אין כתובת אתר תצורה בהגדרות האפליקציה</string>
<string id="ApiFlood">קריאות API מהירות מדי. אנא דווח על שגיאה זו עם פרטי המכשיר.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Nema API ključa u postavkama aplikacije</string>
<string id="NoApiUrl">Nema API URL-a u postavkama aplikacije</string>
<string id="NoConfigUrl">Nema konfiguracijskog URL-a u postavkama aplikacije</string>
<string id="ApiFlood">API pozivi su prebrzi. Prijavite ovu pogrešku s pojedinostima o uređaju.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Nincs API kulcs az alkalmazás beállításaiban</string>
<string id="NoApiUrl">Nincs API URL az alkalmazás beállításai között</string>
<string id="NoConfigUrl">Nincs konfigurációs URL az alkalmazás beállításai között</string>
<string id="ApiFlood">Az API-hívások túl gyorsak. Kérjük, jelentse ezt a hibát az eszköz részleteivel.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Tidak ada kunci API di pengaturan aplikasi</string>
<string id="NoApiUrl">Tidak ada URL API di pengaturan aplikasi</string>
<string id="NoConfigUrl">Tidak ada URL konfigurasi di pengaturan aplikasi</string>
<string id="ApiFlood">Panggilan API terlalu cepat. Silakan laporkan kesalahan ini dengan detail perangkat.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Nessuna chiave API nelle impostazioni dell'applicazione</string>
<string id="NoApiUrl">Nessun URL API nelle impostazioni dell'applicazione</string>
<string id="NoConfigUrl">Nessun URL di configurazione nelle impostazioni dell'applicazione</string>
<string id="ApiFlood">Chiamate API troppo rapide. Segnala questo errore con i dettagli del dispositivo.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">アプリケーション設定に API キーがありません</string>
<string id="NoApiUrl">アプリケーション設定に API URL がありません</string>
<string id="NoConfigUrl">アプリケーション設定に構成 URL がありません</string>
<string id="ApiFlood">API 呼び出しが速すぎます。このエラーをデバイスの詳細とともに報告してください。</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">애플리케이션 설정에 API 키가 없습니다.</string>
<string id="NoApiUrl">애플리케이션 설정에 API URL이 없습니다.</string>
<string id="NoConfigUrl">애플리케이션 설정에 구성 URL이 없습니다.</string>
<string id="ApiFlood">API 호출이 너무 빠릅니다. 기기 세부정보와 함께 이 오류를 신고해 주세요.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Lietojumprogrammas iestatījumos nav API atslēgas</string>
<string id="NoApiUrl">Lietojumprogrammas iestatījumos nav API URL</string>
<string id="NoConfigUrl">Lietojumprogrammas iestatījumos nav konfigurācijas URL</string>
<string id="ApiFlood">API izsaukumi ir pārāk ātri. Lūdzu, ziņojiet par šo kļūdu, norādot informāciju par ierīci.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Programos nustatymuose nėra API rakto</string>
<string id="NoApiUrl">Programos nustatymuose nėra API URL</string>
<string id="NoConfigUrl">Programos nustatymuose nėra konfigūracijos URL</string>
<string id="ApiFlood">API skambučiai per greiti. Praneškite apie šią klaidą pateikdami išsamią įrenginio informaciją.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Ingen API-nøkkel i applikasjonsinnstillingene</string>
<string id="NoApiUrl">Ingen API-URL i applikasjonsinnstillingene</string>
<string id="NoConfigUrl">Ingen konfigurasjons-URL i applikasjonsinnstillingene</string>
<string id="ApiFlood">API-kall for raske. Rapporter denne feilen med enhetsdetaljer.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Brak klucza API w ustawieniach aplikacji</string>
<string id="NoApiUrl">Brak adresu API w ustawieniach aplikacji</string>
<string id="NoConfigUrl">Brak adresu URL konfiguracji w ustawieniach aplikacji</string>
<string id="ApiFlood">Wywołania API są zbyt szybkie. Zgłoś ten błąd, podając szczegóły urządzenia.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Nenhuma chave de API nas configurações do aplicativo</string>
<string id="NoApiUrl">Nenhum URL de API nas configurações do aplicativo</string>
<string id="NoConfigUrl">Nenhum URL de configuração nas configurações do aplicativo</string>
<string id="ApiFlood">Chamadas de API muito rápidas. Por favor, relate este erro com detalhes do dispositivo.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Nicio cheie API în setările aplicației</string>
<string id="NoApiUrl">Nicio adresă URL API în setările aplicației</string>
<string id="NoConfigUrl">Nicio adresă URL de configurare în setările aplicației</string>
<string id="ApiFlood">Apeluri API prea rapide. Vă rugăm să raportați această eroare cu detaliile dispozitivului.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">V nastaveniach aplikácie nie je žiadny kľúč API</string>
<string id="NoApiUrl">V nastaveniach aplikácie nie je žiadna adresa URL rozhrania API</string>
<string id="NoConfigUrl">V nastaveniach aplikácie nie je žiadna konfiguračná URL</string>
<string id="ApiFlood">Volania API sú príliš rýchle. Nahláste túto chybu s podrobnosťami o zariadení.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">V nastavitvah aplikacije ni ključa API</string>
<string id="NoApiUrl">V nastavitvah aplikacije ni URL-ja API-ja</string>
<string id="NoConfigUrl">V nastavitvah aplikacije ni konfiguracijskega URL-ja</string>
<string id="ApiFlood">API klici so prehitri. Prijavite to napako s podrobnostmi o napravi.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Sin clave API en la configuración de la aplicación</string>
<string id="NoApiUrl">No hay URL de API en la configuración de la aplicación</string>
<string id="NoConfigUrl">No hay URL de configuración en la configuración de la aplicación.</string>
<string id="ApiFlood">Llamadas API demasiado rápidas. Informe este error con los detalles del dispositivo.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Ingen API-nyckel i applikationsinställningarna</string>
<string id="NoApiUrl">Ingen API-URL i applikationsinställningarna</string>
<string id="NoConfigUrl">Ingen konfigurations-URL i programinställningarna</string>
<string id="ApiFlood">API-anrop för snabba. Rapportera detta fel med enhetsinformation.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">ไม่มีคีย์ API ในการตั้งค่าแอปพลิเคชัน</string>
<string id="NoApiUrl">ไม่มี URL API ในการตั้งค่าแอปพลิเคชัน</string>
<string id="NoConfigUrl">ไม่มี URL การกำหนดค่าในการตั้งค่าแอปพลิเคชัน</string>
<string id="ApiFlood">การเรียก API เร็วเกินไป โปรดรายงานข้อผิดพลาดนี้พร้อมรายละเอียดอุปกรณ์</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Uygulama ayarlarında API anahtarı yok</string>
<string id="NoApiUrl">Uygulama ayarlarında API URL'si yok</string>
<string id="NoConfigUrl">Uygulama ayarlarında yapılandırma URL'si yok</string>
<string id="ApiFlood">API çağrıları çok hızlı. Lütfen bu hatayı cihaz ayrıntılarıyla birlikte bildirin.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">У налаштуваннях програми немає ключа API</string>
<string id="NoApiUrl">У налаштуваннях програми немає URL-адреси API</string>
<string id="NoConfigUrl">У налаштуваннях програми немає URL-адреси конфігурації</string>
<string id="ApiFlood">Надто швидкі виклики API. Повідомте про цю помилку з деталями пристрою.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Không có khóa API trong cài đặt ứng dụng</string>
<string id="NoApiUrl">Không có URL API trong cài đặt ứng dụng</string>
<string id="NoConfigUrl">Không có URL cấu hình trong cài đặt ứng dụng</string>
<string id="ApiFlood">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ị.</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">应用程序设置中没有 API 密钥</string>
<string id="NoApiUrl">应用程序设置中没有 API URL</string>
<string id="NoConfigUrl">应用程序设置中没有配置 URL</string>
<string id="ApiFlood">API 调用速度太快。请报告此错误并提供设备详细信息。</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">應用程式設定中沒有 API 金鑰</string>
<string id="NoApiUrl">應用程式設定中沒有 API URL</string>
<string id="NoConfigUrl">應用程式設定中沒有配置 URL</string>
<string id="ApiFlood">API 呼叫速度太快。請報告此錯誤並提供設備詳細資訊。</string>
</strings>

View File

@ -29,4 +29,5 @@
<string id="NoAPIKey">Tiada kunci API dalam tetapan aplikasi</string>
<string id="NoApiUrl">Tiada URL API dalam tetapan aplikasi</string>
<string id="NoConfigUrl">Tiada URL konfigurasi dalam tetapan aplikasi</string>
<string id="ApiFlood">Panggilan API terlalu pantas. Sila laporkan ralat ini dengan butiran peranti.</string>
</strings>

View File

@ -23,4 +23,5 @@
<string id="NoAPIKey">No API key in the application settings</string>
<string id="NoApiUrl">No API URL in the application settings</string>
<string id="NoConfigUrl">No configuration URL in the application settings</string>
<string id="ApiFlood">API calls too rapid. Please report this error with device details.</string>
</strings>

View File

@ -24,7 +24,8 @@ 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
// 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
}

View File

@ -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<HomeAssistantToggleMenuItem>;
itu[nextItemToUpdate].getState();
nextItemToUpdate = (nextItemToUpdate + 1) % itu.size();
}
}
function getApp() as HomeAssistantApp {

View File

@ -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)) {

View File

@ -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++) {

View File

@ -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(
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<HomeAssistantToggleMenuItem> {
var fullList = [];
var lmi = mListMenuItems as Lang.Array<HomeAssistantViewMenuItem>;
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 {}
}