Implement library caching
This commit is contained in:
1 parent
6fb0a6dae6
commit
1e9375f5e9
2 files changed
+75
-2
No files matched your search
+69
-2
@@ -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");
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user