Implement library caching

This commit is contained in:
RandyTheSilly committed 2026-10-11 14:19:13 -04:00
1 parent 6fb0a6dae6
commit 1e9375f5e9
2 files changed
+75 -2

No files matched your search

+6
View File
@@ -191,6 +191,8 @@ static void to_pkjs_move_back() {
}
}
////////////////////// MENU LAYER CALLBACKS //////////////////////
static uint16_t menu_get_num_rows(MenuLayer *menu_layer, uint16_t section_index, void *context) {
switch (s_current_menu_scope) {
case NAV_SCOPE_MAIN:
@@ -256,6 +258,8 @@ static void menu_click_config_provider(void *context) {
window_single_click_subscribe(BUTTON_ID_BACK, menu_back_click_handler);
}
////////////////////// UI //////////////////////
static void divider_layer_update_proc(Layer *layer, GContext *ctx) {
graphics_context_set_fill_color(ctx, GColorBlack);
graphics_fill_rect(ctx, layer_get_bounds(layer), 0, GCornerNone);
@@ -296,6 +300,8 @@ static void main_window_unload() {
menu_layer_destroy(s_menu_layer);
}
////////////////////// SETUP //////////////////////
static void init() {
// initialize pkjs
app_message_register_inbox_received(inbox_received_handler);
+69 -2
View File
@@ -12,10 +12,69 @@ var NavScope = Object.freeze({
});
var cfg = JSON.parse(localStorage.getItem('clay-settings'));
var currentArtist = null;
////////////////////// LIBRARY CACHE //////////////////////
var LIBRARY_CACHE_KEY = 'library-cache';
var lookupMap = new Map();
var jfIdToSeqIdMap = new Map();
var allJfIds = [];
var currentArtist = null;
function saveLibraryCache() {
function encodeValue(value) {
if (value instanceof Map) {
const entries = [];
for (const [k, v] of value.entries()) {
entries.push([k, encodeValue(v)]);
}
return { __type: 'Map', entries: entries };
}
if (Array.isArray(value)) {
return value.map(encodeValue);
}
return value;
}
try {
localStorage.setItem(LIBRARY_CACHE_KEY, JSON.stringify({
lookupMap: encodeValue(lookupMap),
jfIdToSeqIdMap: encodeValue(jfIdToSeqIdMap),
allJfIds: allJfIds
}));
} catch (err) {
console.log('failed to save library cache: ' + err);
}
}
function loadLibraryCache() {
function decodeValue(value) {
if (value && typeof value === 'object' && value.__type === 'Map') {
const map = new Map();
for (const [k, v] of value.entries) {
map.set(k, decodeValue(v));
}
return map;
}
if (Array.isArray(value)) {
return value.map(decodeValue);
}
return value;
}
const raw = localStorage.getItem(LIBRARY_CACHE_KEY);
if (!raw) { return; }
try {
const cache = JSON.parse(raw);
lookupMap = decodeValue(cache.lookupMap);
jfIdToSeqIdMap = decodeValue(cache.jfIdToSeqIdMap);
allJfIds = cache.allJfIds || [];
} catch (err) {
console.log('failed to load library cache: ' + err);
}
}
////////////////////// SYNC //////////////////////
function toggleReadyState(ready) {
const readyDict = {};
@@ -50,7 +109,9 @@ function syncLibrary() {
let lastAlbumInfo = { AlbumArtist: "", AlbumName: ""};
//let lastAlbumInfo = { AlbumArtist: "", AlbumName: "", AlbumYear: 0 }; // TODO FUTURE USE
let currentSeqId = 0;
allJfIds = [] // ensure blank
allJfIds = [];
lookupMap = new Map();
jfIdToSeqIdMap = new Map();
for (const track of libObj.Items) {
if (!track.Name) continue;
@@ -94,12 +155,15 @@ function syncLibrary() {
}
//console.log(JSON.stringify(lookupMap, (k, v) => v instanceof Map ? Object.fromEntries(v) : v));
saveLibraryCache();
toggleReadyState(true);
});
});
}
}
////////////////////// EVENT HANDLING //////////////////////
Pebble.addEventListener('showConfiguration', function () {
Pebble.openURL(clay.generateUrl());
});
@@ -119,6 +183,7 @@ Pebble.addEventListener('webviewclosed', function(e) {
});
Pebble.addEventListener("ready", function () {
loadLibraryCache();
toggleReadyState(true);
});
@@ -183,6 +248,8 @@ Pebble.addEventListener("appmessage", function (dict) {
}
});
////////////////////// JELLYFIN API //////////////////////
function reportAPIFailure() {
console.log("API FAILURE");
}