svelte5 migration, formatting cleanup
This commit is contained in:
@@ -6,31 +6,31 @@ const dbName = './db/strimserve.db';
|
||||
const db = new Database(dbName);
|
||||
|
||||
export function getStreams() {
|
||||
const indexData = db
|
||||
.prepare(
|
||||
'SELECT id, stream_date, title, tags, length_seconds ' + 'FROM Stream ORDER BY id DESC'
|
||||
)
|
||||
.all();
|
||||
indexData.forEach((stream) => {
|
||||
stream['stream_date'] = Date.parse(stream['stream_date']);
|
||||
stream['tags'] = JSON.parse(stream['tags']);
|
||||
});
|
||||
return indexData;
|
||||
const indexData = db
|
||||
.prepare(
|
||||
'SELECT id, stream_date, title, tags, length_seconds ' + 'FROM Stream ORDER BY id DESC'
|
||||
)
|
||||
.all();
|
||||
indexData.forEach((stream) => {
|
||||
stream['stream_date'] = Date.parse(stream['stream_date']);
|
||||
stream['tags'] = JSON.parse(stream['tags']);
|
||||
});
|
||||
return indexData;
|
||||
}
|
||||
|
||||
export function getStreamInfo(streamId) {
|
||||
const streamData = db
|
||||
.prepare(
|
||||
'SELECT id, stream_date, filename, ' +
|
||||
'format, title, description, tags, ' +
|
||||
'length_seconds, tracks FROM Stream ' +
|
||||
'WHERE id = ?'
|
||||
)
|
||||
.get(streamId);
|
||||
if (streamData) {
|
||||
streamData['stream_date'] = Date.parse(streamData['stream_date']);
|
||||
streamData['tracks'] = JSON.parse(streamData['tracks']);
|
||||
streamData['tags'] = JSON.parse(streamData['tags']);
|
||||
}
|
||||
return streamData;
|
||||
const streamData = db
|
||||
.prepare(
|
||||
'SELECT id, stream_date, filename, ' +
|
||||
'format, title, description, tags, ' +
|
||||
'length_seconds, tracks FROM Stream ' +
|
||||
'WHERE id = ?'
|
||||
)
|
||||
.get(streamId);
|
||||
if (streamData) {
|
||||
streamData['stream_date'] = Date.parse(streamData['stream_date']);
|
||||
streamData['tracks'] = JSON.parse(streamData['tracks']);
|
||||
streamData['tags'] = JSON.parse(streamData['tags']);
|
||||
}
|
||||
return streamData;
|
||||
}
|
||||
|
||||
@@ -5,41 +5,41 @@ export const currentStream = writable({});
|
||||
export const currentSongIndex = writable(null);
|
||||
|
||||
export const favoritedStreams = writable(
|
||||
new Set(JSON.parse((browser && localStorage.getItem('favoritedStreams')) || '[]'))
|
||||
new Set(JSON.parse((browser && localStorage.getItem('favoritedStreams')) || '[]'))
|
||||
);
|
||||
|
||||
if (browser) {
|
||||
favoritedStreams.subscribe((val) => {
|
||||
localStorage.setItem('favoritedStreams', JSON.stringify(Array.from(val)));
|
||||
});
|
||||
favoritedStreams.subscribe((val) => {
|
||||
localStorage.setItem('favoritedStreams', JSON.stringify(Array.from(val)));
|
||||
});
|
||||
}
|
||||
|
||||
export const tagList = [
|
||||
'acoustic',
|
||||
'electronic',
|
||||
'orchestral',
|
||||
'rock',
|
||||
'pop',
|
||||
'metal',
|
||||
'aggressive',
|
||||
'folk',
|
||||
'jazzy',
|
||||
'dance.music',
|
||||
'untz',
|
||||
'breakbeats',
|
||||
'electronica',
|
||||
'chiptune',
|
||||
'left.field',
|
||||
'denpa',
|
||||
'vocaloid',
|
||||
'funky',
|
||||
'lush',
|
||||
'noisy',
|
||||
'psychedelic',
|
||||
'dark',
|
||||
'calm',
|
||||
'moody',
|
||||
'uplifting'
|
||||
'acoustic',
|
||||
'electronic',
|
||||
'orchestral',
|
||||
'rock',
|
||||
'pop',
|
||||
'metal',
|
||||
'aggressive',
|
||||
'folk',
|
||||
'jazzy',
|
||||
'dance.music',
|
||||
'untz',
|
||||
'breakbeats',
|
||||
'electronica',
|
||||
'chiptune',
|
||||
'left.field',
|
||||
'denpa',
|
||||
'vocaloid',
|
||||
'funky',
|
||||
'lush',
|
||||
'noisy',
|
||||
'psychedelic',
|
||||
'dark',
|
||||
'calm',
|
||||
'moody',
|
||||
'uplifting'
|
||||
];
|
||||
|
||||
let timestampList;
|
||||
@@ -47,39 +47,39 @@ let timestampList;
|
||||
// utility
|
||||
|
||||
function locationOf(element, array, start, end) {
|
||||
start = start || 0;
|
||||
end = end || array.length;
|
||||
var pivot = parseInt(start + (end - start) / 2, 10);
|
||||
if (end - start <= 1 || array[pivot] === element) return pivot;
|
||||
if (array[pivot] < element) {
|
||||
return locationOf(element, array, pivot, end);
|
||||
} else {
|
||||
return locationOf(element, array, start, pivot);
|
||||
}
|
||||
start = start || 0;
|
||||
end = end || array.length;
|
||||
var pivot = parseInt(start + (end - start) / 2, 10);
|
||||
if (end - start <= 1 || array[pivot] === element) return pivot;
|
||||
if (array[pivot] < element) {
|
||||
return locationOf(element, array, pivot, end);
|
||||
} else {
|
||||
return locationOf(element, array, start, pivot);
|
||||
}
|
||||
}
|
||||
|
||||
// exported methods
|
||||
|
||||
export function getSongAtTime(currentTime) {
|
||||
return locationOf(currentTime, timestampList) - 1;
|
||||
return locationOf(currentTime, timestampList) - 1;
|
||||
}
|
||||
|
||||
// less operations needed when doing regular lookups
|
||||
export function updateCurrentSong(currentTime, songIndex) {
|
||||
function updateCurrentSongRecurse(songIndex) {
|
||||
if (currentTime >= timestampList[songIndex + 2]) {
|
||||
return updateCurrentSongRecurse(songIndex + 1);
|
||||
} else if (currentTime < timestampList[songIndex + 1]) {
|
||||
return updateCurrentSongRecurse(songIndex - 1);
|
||||
}
|
||||
return songIndex;
|
||||
}
|
||||
function updateCurrentSongRecurse(songIndex) {
|
||||
if (currentTime >= timestampList[songIndex + 2]) {
|
||||
return updateCurrentSongRecurse(songIndex + 1);
|
||||
} else if (currentTime < timestampList[songIndex + 1]) {
|
||||
return updateCurrentSongRecurse(songIndex - 1);
|
||||
}
|
||||
return songIndex;
|
||||
}
|
||||
|
||||
currentSongIndex.set(updateCurrentSongRecurse(songIndex));
|
||||
currentSongIndex.set(updateCurrentSongRecurse(songIndex));
|
||||
}
|
||||
|
||||
export function updateCurrentStream(stream) {
|
||||
currentStream.set(stream);
|
||||
timestampList = [-Infinity, ...stream.tracks.map((track) => track[0]), Infinity];
|
||||
currentSongIndex.set(0);
|
||||
currentStream.set(stream);
|
||||
timestampList = [-Infinity, ...stream.tracks.map((track) => track[0]), Infinity];
|
||||
currentSongIndex.set(0);
|
||||
}
|
||||
|
||||
@@ -3,35 +3,35 @@ import Sqids from 'sqids';
|
||||
let sqids = new Sqids({ minLength: 6, alphabet: 'abcdefghijklmnopqrstuvwxyz0123456789' });
|
||||
|
||||
export function hashcode(str) {
|
||||
for (var i = 0, h = 9; i < str.length; ) h = Math.imul(h ^ str.charCodeAt(i++), 9 ** 9);
|
||||
return h ^ (h >>> 9);
|
||||
for (var i = 0, h = 9; i < str.length; ) h = Math.imul(h ^ str.charCodeAt(i++), 9 ** 9);
|
||||
return h ^ (h >>> 9);
|
||||
}
|
||||
|
||||
// for mnemonic display
|
||||
export function shorthandCode(str) {
|
||||
return sqids.encode([hashcode(str) & 0xffff]);
|
||||
return sqids.encode([hashcode(str) & 0xffff]);
|
||||
}
|
||||
|
||||
// for tag display
|
||||
export function hashColor(str) {
|
||||
const hash = hashcode(str);
|
||||
return `hsl(${hash % 360}, ${65 + (hash % 30) + 1}%, ${85 + (hash % 10) + 1}%)`;
|
||||
const hash = hashcode(str);
|
||||
return `hsl(${hash % 360}, ${65 + (hash % 30) + 1}%, ${85 + (hash % 10) + 1}%)`;
|
||||
}
|
||||
|
||||
export function formatSecondsToHms(s) {
|
||||
s = Number(s);
|
||||
var h = Math.floor(s / 3600);
|
||||
var m = Math.ceil((s % 3600) / 60);
|
||||
s = Number(s);
|
||||
var h = Math.floor(s / 3600);
|
||||
var m = Math.ceil((s % 3600) / 60);
|
||||
|
||||
var hDisplay = h > 0 ? h + (h == 1 ? ' hr' : ' hrs') + (m > 0 ? ', ' : '') : '';
|
||||
var mDisplay = m > 0 ? m + (m == 1 ? ' min' : ' mins') : '';
|
||||
return hDisplay + mDisplay;
|
||||
var hDisplay = h > 0 ? h + (h == 1 ? ' hr' : ' hrs') + (m > 0 ? ', ' : '') : '';
|
||||
var mDisplay = m > 0 ? m + (m == 1 ? ' min' : ' mins') : '';
|
||||
return hDisplay + mDisplay;
|
||||
}
|
||||
|
||||
export function formatDate(unix_timestamp) {
|
||||
return new Date(unix_timestamp).toISOString().split('T')[0];
|
||||
return new Date(unix_timestamp).toISOString().split('T')[0];
|
||||
}
|
||||
|
||||
export function formatTrackTime(s) {
|
||||
return new Date(s * 1000).toISOString().slice(11, 19);
|
||||
return new Date(s * 1000).toISOString().slice(11, 19);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user