64 lines
2.0 KiB
JavaScript
64 lines
2.0 KiB
JavaScript
(function () {
|
|
const prefix = 'lan-play:release:v1:';
|
|
|
|
function folder(path) {
|
|
const index = path.lastIndexOf('/');
|
|
return index < 0 ? '' : path.slice(0, index);
|
|
}
|
|
|
|
function key(path) {
|
|
return `${prefix}${folder(path)}`;
|
|
}
|
|
|
|
function load(path) {
|
|
try { return JSON.parse(localStorage.getItem(key(path))) || {}; }
|
|
catch (_) { return {}; }
|
|
}
|
|
|
|
function store(path, value) {
|
|
try { localStorage.setItem(key(path), JSON.stringify(value)); } catch (_) {}
|
|
}
|
|
|
|
function label(track) {
|
|
const labels = track && track.labels || [];
|
|
const selected = labels.find((item) => item.text) || labels[0];
|
|
return selected && selected.text || track && track.label || '';
|
|
}
|
|
|
|
function descriptor(track, ordinal) {
|
|
if (!track) return { off: true };
|
|
return {
|
|
off: false,
|
|
lang: track.lang || track.language || '',
|
|
label: label(track),
|
|
roles: (track.roles || []).map((role) => role.value || role).filter(Boolean).sort(),
|
|
ordinal
|
|
};
|
|
}
|
|
|
|
function remember(path, type, track, ordinal) {
|
|
const profile = load(path);
|
|
profile[type] = descriptor(track, ordinal);
|
|
store(path, profile);
|
|
}
|
|
|
|
function find(path, type, tracks) {
|
|
const wanted = load(path)[type];
|
|
if (!wanted) return undefined;
|
|
if (wanted.off) return null;
|
|
const described = tracks.map((track, ordinal) => ({ track, ordinal, value: descriptor(track, ordinal) }));
|
|
let matches = described.filter((item) => wanted.lang && item.value.lang === wanted.lang);
|
|
if (wanted.label) {
|
|
const labeled = matches.filter((item) => item.value.label === wanted.label);
|
|
if (labeled.length) matches = labeled;
|
|
}
|
|
if (!matches.length && wanted.label) {
|
|
matches = described.filter((item) => item.value.label === wanted.label);
|
|
}
|
|
if (!matches.length && !wanted.lang && !wanted.label) matches = described;
|
|
return (matches.find((item) => item.ordinal === wanted.ordinal) || matches[0] || {}).track;
|
|
}
|
|
|
|
window.LanPlayPreferences = { folder, load, remember, find };
|
|
})();
|