From 3e212a7e5b74644d14b9b0a234a89c5ee92ae73c Mon Sep 17 00:00:00 2001
From: SamidyFR <168582143+SamidyFR@users.noreply.github.com>
Date: Fri, 16 Jan 2026 15:47:58 +0000
Subject: [PATCH] style: auto-fix linting issues
---
index.html | 4 +-
js/accounts/pocketbase.js | 98 +++++++-------
js/db.js | 261 +++++++++++++++++++-------------------
js/ui-interactions.js | 8 +-
4 files changed, 190 insertions(+), 181 deletions(-)
diff --git a/index.html b/index.html
index dfed5d0..a7545a4 100644
--- a/index.html
+++ b/index.html
@@ -1493,10 +1493,12 @@
}
- We only store music data and a randomized ID to find out which Google/Email account is which.
+ We only store music data and a randomized ID to find out which Google/Email account is
+ which.
All data is anonymous. We do not store anything like emails, usernames, or anything
sensitive.
+
diff --git a/js/accounts/pocketbase.js b/js/accounts/pocketbase.js
index 09b7313..d8fb2f0 100644
--- a/js/accounts/pocketbase.js
+++ b/js/accounts/pocketbase.js
@@ -19,22 +19,22 @@ const syncManager = {
if (this._userRecordCache && this._userRecordCache.firebase_id === uid) {
return this._userRecordCache;
}
-
+
try {
- const record = await this.pb.collection('DB_users').getFirstListItem(
- `firebase_id="${uid}"`,
- { f_id: uid }
- );
+ const record = await this.pb.collection('DB_users').getFirstListItem(`firebase_id="${uid}"`, { f_id: uid });
this._userRecordCache = record;
return record;
} catch (error) {
if (error.status === 404) {
try {
- const newRecord = await this.pb.collection('DB_users').create({
- firebase_id: uid,
- library: {},
- history: [],
- }, { f_id: uid });
+ const newRecord = await this.pb.collection('DB_users').create(
+ {
+ firebase_id: uid,
+ library: {},
+ history: [],
+ },
+ { f_id: uid }
+ );
this._userRecordCache = newRecord;
return newRecord;
} catch (createError) {
@@ -95,11 +95,7 @@ const syncManager = {
}
try {
- const updated = await this.pb.collection('DB_users').update(
- record.id,
- { [field]: data },
- { f_id: uid }
- );
+ const updated = await this.pb.collection('DB_users').update(record.id, { [field]: data }, { f_id: uid });
this._userRecordCache = updated;
} catch (error) {
console.error(`Failed to sync ${field} to PocketBase:`, error);
@@ -114,13 +110,13 @@ const syncManager = {
if (!record) return;
let library = record.library || {};
-
+
if (typeof library === 'string') {
try {
library = JSON.parse(library);
} catch (e) {
console.error('Library field is not valid JSON', e);
- library = {};
+ library = {};
}
}
@@ -255,7 +251,7 @@ const syncManager = {
if (!record) return;
let userPlaylists = record.user_playlists || {};
-
+
if (typeof userPlaylists === 'string') {
try {
userPlaylists = JSON.parse(userPlaylists);
@@ -272,7 +268,7 @@ const syncManager = {
id: playlist.id,
name: playlist.name,
cover: playlist.cover || null,
- tracks: playlist.tracks ? playlist.tracks.map(t => this._minifyItem('track', t)) : [],
+ tracks: playlist.tracks ? playlist.tracks.map((t) => this._minifyItem('track', t)) : [],
createdAt: playlist.createdAt || Date.now(),
updatedAt: playlist.updatedAt || Date.now(),
numberOfTracks: playlist.tracks ? playlist.tracks.length : 0,
@@ -286,18 +282,19 @@ const syncManager = {
async getPublicPlaylist(uuid) {
try {
- const record = await this.pb.collection(PUBLIC_COLLECTION).getFirstListItem(
- `uuid="${uuid}"`,
- { p_id: uuid }
- );
+ const record = await this.pb
+ .collection(PUBLIC_COLLECTION)
+ .getFirstListItem(`uuid="${uuid}"`, { p_id: uuid });
let rawCover = record.image || record.cover || record.playlist_cover || '';
let extraData = record.data;
-
+
if (typeof extraData === 'string') {
- try { extraData = JSON.parse(extraData); } catch(e) {}
+ try {
+ extraData = JSON.parse(extraData);
+ } catch (e) {}
}
-
+
if (!rawCover && extraData && typeof extraData === 'object') {
rawCover = extraData.cover || extraData.image || '';
}
@@ -309,7 +306,7 @@ const syncManager = {
let images = [];
let tracks = record.tracks || [];
-
+
if (typeof tracks === 'string') {
try {
tracks = JSON.parse(tracks);
@@ -338,7 +335,6 @@ const syncManager = {
finalTitle = extraData.title || extraData.name;
}
if (!finalTitle) finalTitle = 'Untitled Playlist';
-
return {
...record,
@@ -352,7 +348,7 @@ const syncManager = {
numberOfTracks: tracks.length,
type: 'user-playlist',
isPublic: true,
- user: { name: 'Community Playlist' }
+ user: { name: 'Community Playlist' },
};
} catch (error) {
if (error.status === 404) return null;
@@ -379,14 +375,14 @@ const syncManager = {
isPublic: true,
data: {
title: playlist.name,
- cover: playlist.cover
- }
+ cover: playlist.cover,
+ },
};
try {
const existing = await this.pb.collection(PUBLIC_COLLECTION).getList(1, 1, {
filter: `uuid="${playlist.id}"`,
- p_id: playlist.id
+ p_id: playlist.id,
});
if (existing.items.length > 0) {
@@ -406,7 +402,7 @@ const syncManager = {
try {
const existing = await this.pb.collection('public_playlists').getList(1, 1, {
filter: `uuid="${uuid}"`,
- p_id: uuid
+ p_id: uuid,
});
if (existing.items && existing.items.length > 0) {
@@ -439,24 +435,36 @@ const syncManager = {
if (this._isSyncing) return;
this._isSyncing = true;
-
+
try {
const data = await this.getUserData();
-
+
if (data) {
const convertedData = {
- favorites_tracks: data.library.tracks ? Object.values(data.library.tracks).filter(t => t && typeof t === 'object') : [],
- favorites_albums: data.library.albums ? Object.values(data.library.albums).filter(a => a && typeof a === 'object') : [],
- favorites_artists: data.library.artists ? Object.values(data.library.artists).filter(a => a && typeof a === 'object') : [],
- favorites_playlists: data.library.playlists ? Object.values(data.library.playlists).filter(p => p && typeof p === 'object') : [],
- favorites_mixes: data.library.mixes ? Object.values(data.library.mixes).filter(m => m && typeof m === 'object') : [],
+ favorites_tracks: data.library.tracks
+ ? Object.values(data.library.tracks).filter((t) => t && typeof t === 'object')
+ : [],
+ favorites_albums: data.library.albums
+ ? Object.values(data.library.albums).filter((a) => a && typeof a === 'object')
+ : [],
+ favorites_artists: data.library.artists
+ ? Object.values(data.library.artists).filter((a) => a && typeof a === 'object')
+ : [],
+ favorites_playlists: data.library.playlists
+ ? Object.values(data.library.playlists).filter((p) => p && typeof p === 'object')
+ : [],
+ favorites_mixes: data.library.mixes
+ ? Object.values(data.library.mixes).filter((m) => m && typeof m === 'object')
+ : [],
history_tracks: data.history || [],
- user_playlists: data.userPlaylists ? Object.values(data.userPlaylists).filter(p => p && typeof p === 'object') : [],
+ user_playlists: data.userPlaylists
+ ? Object.values(data.userPlaylists).filter((p) => p && typeof p === 'object')
+ : [],
};
-
+
await db.importData(convertedData);
- await new Promise(resolve => setTimeout(resolve, 300));
-
+ await new Promise((resolve) => setTimeout(resolve, 300));
+
window.dispatchEvent(new CustomEvent('library-changed'));
window.dispatchEvent(new CustomEvent('history-changed'));
window.dispatchEvent(new HashChangeEvent('hashchange'));
@@ -477,4 +485,4 @@ if (pb) {
authManager.onAuthStateChanged(syncManager.onAuthStateChanged.bind(syncManager));
}
-export { pb, syncManager };
\ No newline at end of file
+export { pb, syncManager };
diff --git a/js/db.js b/js/db.js
index c8f6204..9ec3c76 100644
--- a/js/db.js
+++ b/js/db.js
@@ -141,28 +141,28 @@ export class MusicDatabase {
}
}
- async getFavorites(type) {
- const plural = type === 'mix' ? 'mixes' : `${type}s`;
- const storeName = `favorites_${plural}`;
- const db = await this.open();
- return new Promise((resolve, reject) => {
- const transaction = db.transaction(storeName, 'readonly');
- const store = transaction.objectStore(storeName);
-
- const request = store.getAll();
-
- request.onsuccess = () => {
- const results = request.result;
- results.sort((a, b) => {
- const aTime = a.addedAt || 0;
- const bTime = b.addedAt || 0;
- return bTime - aTime; // Newest first
- });
- resolve(results);
- };
- request.onerror = () => reject(request.error);
- });
- }
+ async getFavorites(type) {
+ const plural = type === 'mix' ? 'mixes' : `${type}s`;
+ const storeName = `favorites_${plural}`;
+ const db = await this.open();
+ return new Promise((resolve, reject) => {
+ const transaction = db.transaction(storeName, 'readonly');
+ const store = transaction.objectStore(storeName);
+
+ const request = store.getAll();
+
+ request.onsuccess = () => {
+ const results = request.result;
+ results.sort((a, b) => {
+ const aTime = a.addedAt || 0;
+ const bTime = b.addedAt || 0;
+ return bTime - aTime; // Newest first
+ });
+ resolve(results);
+ };
+ request.onerror = () => reject(request.error);
+ });
+ }
_minifyItem(type, item) {
if (!item) return item;
@@ -281,105 +281,102 @@ export class MusicDatabase {
return data;
}
- async importData(data, clear = false) {
- const db = await this.open();
-
- const importStore = async (storeName, items) => {
- if (items === undefined) return false;
-
- let itemsArray = Array.isArray(items) ? items : Object.values(items || {});
-
- console.log(`Importing to ${storeName}: ${itemsArray.length} items`);
-
- if (itemsArray.length === 0) {
- if (clear) {
- return new Promise((resolve, reject) => {
- const transaction = db.transaction(storeName, 'readwrite');
- const store = transaction.objectStore(storeName);
-
- const countReq = store.count();
- countReq.onsuccess = () => {
- if (countReq.result > 0) {
- store.clear();
- }
- };
-
- transaction.oncomplete = () => {
- resolve(countReq.result > 0);
- };
- transaction.onerror = () => reject(transaction.error);
- });
- }
- return false;
- }
-
- return new Promise((resolve, reject) => {
- const transaction = db.transaction(storeName, 'readwrite');
- const store = transaction.objectStore(storeName);
- let hasChanges = false;
-
- // force clear on first sync
- console.log(`Clearing ${storeName} to Make Sure Everythings Good`);
- store.clear();
- hasChanges = true;
-
- itemsArray.forEach((item) => {
- if (item.id && typeof item.id === 'string' && !isNaN(item.id)) {
- item.id = parseInt(item.id, 10);
- }
- if (item.album?.id && typeof item.album.id === 'string' && !isNaN(item.album.id)) {
- item.album.id = parseInt(item.album.id, 10);
- }
- if (item.artists) {
- item.artists.forEach(artist => {
- if (artist.id && typeof artist.id === 'string' && !isNaN(artist.id)) {
- artist.id = parseInt(artist.id, 10);
- }
- });
- }
-
- console.log(`${storeName}: Adding item with ID ${item.id || item.uuid || item.timestamp}`);
- store.put(item);
- });
-
- transaction.oncomplete = () => {
- console.log(`${storeName}: Imported ${itemsArray.length} items`);
- resolve(true);
- };
-
- transaction.onerror = (event) => {
- console.error(`${storeName}: Transaction error:`, event.target.error);
- reject(transaction.error);
- };
- });
- };
-
- console.log('Starting import with data:', {
- tracks: data.favorites_tracks?.length || 0,
- albums: data.favorites_albums?.length || 0,
- artists: data.favorites_artists?.length || 0,
- playlists: data.favorites_playlists?.length || 0,
- mixes: data.favorites_mixes?.length || 0,
- history: data.history_tracks?.length || 0,
- userPlaylists: data.user_playlists?.length || 0,
- });
-
- const results = await Promise.all([
- importStore('favorites_tracks', data.favorites_tracks),
- importStore('favorites_albums', data.favorites_albums),
- importStore('favorites_artists', data.favorites_artists),
- importStore('favorites_playlists', data.favorites_playlists),
- importStore('favorites_mixes', data.favorites_mixes),
- importStore('history_tracks', data.history_tracks),
- data.user_playlists ? importStore('user_playlists', data.user_playlists) : Promise.resolve(false),
- ]);
-
- console.log('Import results:', results);
- return results.some((r) => r);
- }
+ async importData(data, clear = false) {
+ const db = await this.open();
+ const importStore = async (storeName, items) => {
+ if (items === undefined) return false;
+ let itemsArray = Array.isArray(items) ? items : Object.values(items || {});
+ console.log(`Importing to ${storeName}: ${itemsArray.length} items`);
+
+ if (itemsArray.length === 0) {
+ if (clear) {
+ return new Promise((resolve, reject) => {
+ const transaction = db.transaction(storeName, 'readwrite');
+ const store = transaction.objectStore(storeName);
+
+ const countReq = store.count();
+ countReq.onsuccess = () => {
+ if (countReq.result > 0) {
+ store.clear();
+ }
+ };
+
+ transaction.oncomplete = () => {
+ resolve(countReq.result > 0);
+ };
+ transaction.onerror = () => reject(transaction.error);
+ });
+ }
+ return false;
+ }
+
+ return new Promise((resolve, reject) => {
+ const transaction = db.transaction(storeName, 'readwrite');
+ const store = transaction.objectStore(storeName);
+ let hasChanges = false;
+
+ // force clear on first sync
+ console.log(`Clearing ${storeName} to Make Sure Everythings Good`);
+ store.clear();
+ hasChanges = true;
+
+ itemsArray.forEach((item) => {
+ if (item.id && typeof item.id === 'string' && !isNaN(item.id)) {
+ item.id = parseInt(item.id, 10);
+ }
+ if (item.album?.id && typeof item.album.id === 'string' && !isNaN(item.album.id)) {
+ item.album.id = parseInt(item.album.id, 10);
+ }
+ if (item.artists) {
+ item.artists.forEach((artist) => {
+ if (artist.id && typeof artist.id === 'string' && !isNaN(artist.id)) {
+ artist.id = parseInt(artist.id, 10);
+ }
+ });
+ }
+
+ console.log(`${storeName}: Adding item with ID ${item.id || item.uuid || item.timestamp}`);
+ store.put(item);
+ });
+
+ transaction.oncomplete = () => {
+ console.log(`${storeName}: Imported ${itemsArray.length} items`);
+ resolve(true);
+ };
+
+ transaction.onerror = (event) => {
+ console.error(`${storeName}: Transaction error:`, event.target.error);
+ reject(transaction.error);
+ };
+ });
+ };
+
+ console.log('Starting import with data:', {
+ tracks: data.favorites_tracks?.length || 0,
+ albums: data.favorites_albums?.length || 0,
+ artists: data.favorites_artists?.length || 0,
+ playlists: data.favorites_playlists?.length || 0,
+ mixes: data.favorites_mixes?.length || 0,
+ history: data.history_tracks?.length || 0,
+ userPlaylists: data.user_playlists?.length || 0,
+ });
+
+ const results = await Promise.all([
+ importStore('favorites_tracks', data.favorites_tracks),
+ importStore('favorites_albums', data.favorites_albums),
+ importStore('favorites_artists', data.favorites_artists),
+ importStore('favorites_playlists', data.favorites_playlists),
+ importStore('favorites_mixes', data.favorites_mixes),
+ importStore('history_tracks', data.history_tracks),
+ data.user_playlists ? importStore('user_playlists', data.user_playlists) : Promise.resolve(false),
+ ]);
+
+ console.log('Import results:', results);
+ return results.some((r) => r);
+ }
_updatePlaylistMetadata(playlist) {
playlist.numberOfTracks = playlist.tracks ? playlist.tracks.length : 0;
@@ -402,9 +399,11 @@ export class MusicDatabase {
}
_dispatchPlaylistSync(action, playlist) {
- window.dispatchEvent(new CustomEvent('sync-playlist-change', {
- detail: { action, playlist }
- }));
+ window.dispatchEvent(
+ new CustomEvent('sync-playlist-change', {
+ detail: { action, playlist },
+ })
+ );
}
// User Playlists API
@@ -418,14 +417,14 @@ export class MusicDatabase {
createdAt: Date.now(),
updatedAt: Date.now(),
numberOfTracks: tracks.length,
- images: [] // Initialize images
+ images: [], // Initialize images
};
this._updatePlaylistMetadata(playlist);
await this.performTransaction('user_playlists', 'readwrite', (store) => store.put(playlist));
-
+
// TRIGGER SYNC
this._dispatchPlaylistSync('create', playlist);
-
+
return playlist;
}
@@ -439,9 +438,9 @@ export class MusicDatabase {
playlist.updatedAt = Date.now();
this._updatePlaylistMetadata(playlist);
await this.performTransaction('user_playlists', 'readwrite', (store) => store.put(playlist));
-
+
this._dispatchPlaylistSync('update', playlist);
-
+
return playlist;
}
@@ -453,15 +452,15 @@ export class MusicDatabase {
playlist.updatedAt = Date.now();
this._updatePlaylistMetadata(playlist);
await this.performTransaction('user_playlists', 'readwrite', (store) => store.put(playlist));
-
+
this._dispatchPlaylistSync('update', playlist);
-
+
return playlist;
}
async deletePlaylist(playlistId) {
await this.performTransaction('user_playlists', 'readwrite', (store) => store.delete(playlistId));
-
+
// TRIGGER SYNC (but for deleting)
this._dispatchPlaylistSync('delete', { id: playlistId });
}
@@ -474,9 +473,9 @@ export class MusicDatabase {
playlist.updatedAt = Date.now();
this._updatePlaylistMetadata(playlist);
await this.performTransaction('user_playlists', 'readwrite', (store) => store.put(playlist));
-
+
this._dispatchPlaylistSync('update', playlist);
-
+
return playlist;
}
diff --git a/js/ui-interactions.js b/js/ui-interactions.js
index c5c8f4f..f578843 100644
--- a/js/ui-interactions.js
+++ b/js/ui-interactions.js
@@ -81,8 +81,8 @@ export function initializeUIInteractions(player, api) {
const likeBtn = container.querySelector('#like-queue-btn');
if (likeBtn) {
likeBtn.addEventListener('click', async () => {
- const { db } = await import('./db.js'); // Already imported
- const { syncManager } = await import('./accounts/pocketbase.js');
+ const { db } = await import('./db.js'); // Already imported
+ const { syncManager } = await import('./accounts/pocketbase.js');
const { showNotification } = await import('./downloads.js');
let addedCount = 0;
@@ -107,8 +107,8 @@ export function initializeUIInteractions(player, api) {
const addToPlaylistBtn = container.querySelector('#add-queue-to-playlist-btn');
if (addToPlaylistBtn) {
addToPlaylistBtn.addEventListener('click', async () => {
- const { db } = await import('./db.js'); // Already imported
- const { syncManager } = await import('./accounts/pocketbase.js');
+ const { db } = await import('./db.js'); // Already imported
+ const { syncManager } = await import('./accounts/pocketbase.js');
const { showNotification } = await import('./downloads.js');
const playlists = await db.getPlaylists();