Send and display last watched on watch

This commit is contained in:
2026-04-22 22:17:28 -04:00
parent 017051ccbe
commit 6ad8ced5bb
3 changed files with 38 additions and 42 deletions

View File

@@ -2,15 +2,12 @@
#include <stdio.h>
#include <string.h>
// declare pkjs statics
static bool s_js_ready;
// declare window statics
static Window *s_main_window;
static TextLayer *s_sleep_time_header_layer;
static TextLayer *s_sleep_time_layer;
static TextLayer *s_last_episode_header_layer;
static TextLayer *s_last_episode_layer;
static TextLayer *s_last_watched_header_layer;
static TextLayer *s_last_watched_layer;
static TextLayer *s_pin_notice_layer;
// declare time tracking statics
@@ -20,36 +17,32 @@ static void send_sleep_time_to_pkjs() {
DictionaryIterator *out;
AppMessageResult result = app_message_outbox_begin(&out);
if (result != APP_MSG_OK) {
text_layer_set_text(s_last_episode_layer, "outbox_begin failure");
text_layer_set_text(s_last_watched_layer, "outbox_begin failure");
return;
}
dict_write_uint32(out, MESSAGE_KEY_PKJS_SLEEP_TIMESTAMP, s_sleep_timestamp);
result = app_message_outbox_send();
if (result != APP_MSG_OK) {
text_layer_set_text(s_last_episode_layer, "outbox_send failure");
text_layer_set_text(s_last_watched_layer, "outbox_send failure");
return;
}
}
static void inbox_received_handler(DictionaryIterator *iter, void *context) {
static void inbox_received_handler_watched(DictionaryIterator *iter, void *context) {
Tuple *watched_tuple = dict_find(iter, MESSAGE_KEY_PKJS_LAST_WATCHED);
if (watched_tuple) {
APP_LOG(APP_LOG_LEVEL_INFO, "Received PKJS_LAST_WATCHED, displaying...");
text_layer_set_text(s_last_watched_layer, watched_tuple->value->cstring);
}
}
static void inbox_received_handler_ready(DictionaryIterator *iter, void *context) {
Tuple *ready_tuple = dict_find(iter, MESSAGE_KEY_PKJS_READY);
if (ready_tuple) {
s_js_ready = true;
APP_LOG(APP_LOG_LEVEL_INFO, "Received PKJS_READY, calling PKJS...");
send_sleep_time_to_pkjs();
app_message_register_inbox_received(inbox_received_handler_watched);
}
APP_LOG(APP_LOG_LEVEL_INFO, "Received JS_READY, calling PKJS...");
send_sleep_time_to_pkjs();
}
static void inbox_dropped_handler(AppMessageResult reason, void *context) {
APP_LOG(APP_LOG_LEVEL_DEBUG, "Inbox dropped: %d", reason);
}
static void outbox_failed_handler(DictionaryIterator *iter, AppMessageResult reason, void *context) {
APP_LOG(APP_LOG_LEVEL_DEBUG, "Outbox send failed: %d", reason);
}
static void outbox_sent_handler(DictionaryIterator *iter, void *context) {
APP_LOG(APP_LOG_LEVEL_DEBUG, "Outbox send success");
}
static bool cb_update_sleep_time(HealthActivity activity, time_t start_time, time_t end_time, void *context) {
@@ -79,14 +72,17 @@ static void main_window_load(Window *window) {
} else {
text_layer_set_text(s_sleep_time_layer, "N/A (rough night?)");
}
s_last_episode_header_layer = text_layer_create(GRect(6, 72, PBL_DISPLAY_WIDTH, 30));
text_layer_set_background_color(s_last_episode_header_layer, GColorClear);
text_layer_set_font(s_last_episode_header_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD));
text_layer_set_text(s_last_episode_header_layer, "Last Episode");
s_last_episode_layer = text_layer_create(GRect(10, 96, PBL_DISPLAY_WIDTH, 30));
text_layer_set_background_color(s_last_episode_layer, GColorClear);
text_layer_set_font(s_last_episode_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24));
text_layer_set_text(s_last_episode_layer, "N/A"); // default - will be updated before display
s_last_watched_header_layer = text_layer_create(GRect(6, 72, PBL_DISPLAY_WIDTH, 30));
text_layer_set_background_color(s_last_watched_header_layer, GColorClear);
text_layer_set_font(s_last_watched_header_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24_BOLD));
text_layer_set_text(s_last_watched_header_layer, "Last Episode");
s_last_watched_layer = text_layer_create(GRect(10, 96, PBL_DISPLAY_WIDTH, PBL_DISPLAY_HEIGHT));
#if PBL_ROUND
text_layer_set_text_alignment(s_last_watched_layer, GTextAlignmentCenter);
#endif
text_layer_set_background_color(s_last_watched_layer, GColorClear);
text_layer_set_font(s_last_watched_layer, fonts_get_system_font(FONT_KEY_GOTHIC_24));
text_layer_set_text(s_last_watched_layer, "N/A"); // default - will be updated before display
s_pin_notice_layer = text_layer_create(GRect(0, PBL_DISPLAY_HEIGHT - 50, PBL_DISPLAY_WIDTH, 50));
text_layer_set_background_color(s_pin_notice_layer, GColorClear);
text_layer_set_font(s_pin_notice_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14));
@@ -96,16 +92,16 @@ static void main_window_load(Window *window) {
Layer *window_layer = window_get_root_layer(window);
layer_add_child(window_layer, text_layer_get_layer(s_sleep_time_header_layer));
layer_add_child(window_layer, text_layer_get_layer(s_sleep_time_layer));
layer_add_child(window_layer, text_layer_get_layer(s_last_episode_header_layer));
layer_add_child(window_layer, text_layer_get_layer(s_last_episode_layer));
layer_add_child(window_layer, text_layer_get_layer(s_last_watched_header_layer));
layer_add_child(window_layer, text_layer_get_layer(s_last_watched_layer));
layer_add_child(window_layer, text_layer_get_layer(s_pin_notice_layer));
}
static void main_window_unload(Window *window) {
text_layer_destroy(s_sleep_time_header_layer);
text_layer_destroy(s_sleep_time_layer);
text_layer_destroy(s_last_episode_header_layer);
text_layer_destroy(s_last_episode_layer);
text_layer_destroy(s_last_watched_header_layer);
text_layer_destroy(s_last_watched_layer);
text_layer_destroy(s_pin_notice_layer);
}
@@ -117,10 +113,7 @@ static void init() {
(WindowHandlers){.load = main_window_load, .unload = main_window_unload});
// initialize pkjs
app_message_register_inbox_received(inbox_received_handler);
app_message_register_inbox_dropped(inbox_dropped_handler);
app_message_register_outbox_failed(outbox_failed_handler);
app_message_register_outbox_sent(outbox_sent_handler);
app_message_register_inbox_received(inbox_received_handler_ready);
app_message_open(1024, 1024);
// get sleep time (UNIX timestamp)