Wire up timeline pins

This commit is contained in:
2026-05-02 19:35:34 -04:00
parent d99c248c49
commit dc1788c9d0
3 changed files with 54 additions and 21 deletions

View File

@@ -169,15 +169,47 @@ static void send_sleep_time_to_pkjs() {
}
}
static void soft_reload() {
window_stack_remove(s_main_window, false);
window_destroy(s_main_window);
static void send_pin_to_pkjs() {
DictionaryIterator *out;
AppMessageResult result = app_message_outbox_begin(&out);
if (result != APP_MSG_OK) {
text_layer_set_text(s_last_watched_layer, "outbox_begin failure");
return;
}
if (s_sleep_session_found) {
dict_write_uint32(out, MESSAGE_KEY_PKJS_PIN_TIMESTAMP, s_sleep_timestamp);
} else {
dict_write_uint32(out, MESSAGE_KEY_PKJS_PIN_TIMESTAMP, time(NULL));
}
dict_write_cstring(out, MESSAGE_KEY_PKJS_PIN_TITLE, text_layer_get_text(s_last_watched_layer));
result = app_message_outbox_send();
if (result != APP_MSG_OK) {
text_layer_set_text(s_last_watched_layer, "outbox_send failure");
return;
}
}
static void select_single_click_handler(ClickRecognizerRef recognizer, void *context) {
Window *window = (Window *)context;
send_pin_to_pkjs();
}
static void click_config_provider(Window *window) {
window_single_click_subscribe(BUTTON_ID_SELECT, select_single_click_handler);
}
static void soft_reload(bool first_load) {
if (!first_load) {
window_stack_remove(s_main_window, false);
window_destroy(s_main_window);
}
s_main_window = window_create();
window_set_background_color(s_main_window, GColorBlack);
window_set_window_handlers(
s_main_window,
(WindowHandlers){.load = main_window_load, .unload = main_window_unload});
window_stack_push(s_main_window, false);
window_set_click_config_provider(s_main_window, (ClickConfigProvider)click_config_provider);
send_sleep_time_to_pkjs();
}
@@ -219,19 +251,13 @@ static void inbox_received_handler(DictionaryIterator *iter, void *context) {
#else
layer_mark_dirty(s_button_bar_layer);
#endif
soft_reload(); // app needs "restarted" when settings are changed
soft_reload(false); // app needs "restarted" when settings are changed
return;
}
Tuple *watched_tuple = dict_find(iter, MESSAGE_KEY_PKJS_LAST_WATCHED);
if (watched_tuple) {
if (s_sleep_session_found) {
text_layer_set_text(s_last_watched_layer, watched_tuple->value->cstring);
} else {
static char last_watched_buffer[1024];
snprintf(last_watched_buffer, sizeof(last_watched_buffer), "Last item played:\n%s", watched_tuple->value->cstring);
text_layer_set_text(s_last_watched_layer, last_watched_buffer);
}
text_layer_set_text(s_last_watched_layer, watched_tuple->value->cstring);
#if PBL_DISPLAY_WIDTH >= 200
PropertyAnimation *sleep_bar_prop = property_animation_create_layer_frame(s_sleep_bar_layer, &s_sleep_bar_start, &GRect(0, -PBL_DISPLAY_HEIGHT + PBL_IF_ROUND_ELSE(53, 31), PBL_DISPLAY_WIDTH, PBL_DISPLAY_HEIGHT));
#else
@@ -250,13 +276,6 @@ static void inbox_received_handler(DictionaryIterator *iter, void *context) {
}
static void init() {
// initialize window
s_main_window = window_create();
window_set_background_color(s_main_window, GColorBlack);
window_set_window_handlers(
s_main_window,
(WindowHandlers){.load = main_window_load, .unload = main_window_unload});
// set colors if is_jellyfin is locally set;
// if it has not yet been set, it will be once
// the user saves their settings
@@ -284,7 +303,7 @@ static void init() {
// initialize pkjs
app_message_register_inbox_received(inbox_received_handler);
app_message_open(1024, 64);
app_message_open(1024, 1536);
// get sleep time (UNIX timestamp)
time_t end = time(NULL);
@@ -299,7 +318,7 @@ static void init() {
s_sleep_data_accessible = false;
}
window_stack_push(s_main_window, true);
soft_reload(true);
}
static void deinit() { window_destroy(s_main_window); }

View File

@@ -27,6 +27,18 @@ Pebble.addEventListener("appmessage", function (dict) {
callAPI(cfg.CLAY_API_HOST + "/api/v2?apikey=" + cfg.CLAY_API_KEY + "&cmd=get_history&length=100", null, false, cfg.CLAY_USER, sleepTimestamp);
}
}
if (dict.payload["PKJS_PIN_TIMESTAMP"] && dict.payload["PKJS_PIN_TITLE"]) {
var pin = {
id: dict.payload["PKJS_PIN_TIMESTAMP"],
time: new Date(dict.payload["PKJS_PIN_TIMESTAMP"] * 1000).toISOString(),
layout: {
type: "genericPin",
title: dict.payload["PKJS_PIN_TITLE"]
}
};
Pebble.insertTimelinePin(JSON.stringify(pin));
}
});
function callAPI(fullURL, apiKey, isJellyfin, trackedUser, sleepTimestamp) {