diff --git a/js/app.js b/js/app.js index 0cb98a9..b8f6991 100644 --- a/js/app.js +++ b/js/app.js @@ -1566,13 +1566,22 @@ document.addEventListener('DOMContentLoaded', async () => { if (isLibraryImport) { currentTrackElement.textContent = 'Adding to library...'; - const importResults = await importToLibrary(result, db, (progress) => { - if (progress.action === 'playlist') { - currentTrackElement.textContent = `Creating playlist: ${progress.item}`; - } else { - currentTrackElement.textContent = `Adding ${progress.action}: ${progress.item}`; + const importResults = await importToLibrary( + result, + db, + (progress) => { + if (progress.action === 'playlist') { + currentTrackElement.textContent = `Creating playlist: ${progress.item}`; + } else { + currentTrackElement.textContent = `Adding ${progress.action}: ${progress.item}`; + } + }, + { + favoriteTracks: false, + favoriteAlbums: false, + favoriteArtists: false, } - }); + ); console.log('Import results:', importResults); diff --git a/js/playlist-importer.js b/js/playlist-importer.js index cb46b85..f55f7e0 100644 --- a/js/playlist-importer.js +++ b/js/playlist-importer.js @@ -258,9 +258,9 @@ export async function parseDynamicCSV(csvText, api, onProgress, options = {}) { if (typeValue === 'album' || typeValue === 'favorite album') return 'album'; if (typeValue === 'artist' || typeValue === 'favorite artist') return 'artist'; if ( - typeValue === 'track' || typeValue === 'favorite' || typeValue === 'favorite track' || + typeValue === 'track' || typeValue === 'playlist' ) return 'track'; @@ -269,9 +269,13 @@ export async function parseDynamicCSV(csvText, api, onProgress, options = {}) { const hasTrackName = mappedHeaders.track !== undefined && values[mappedHeaders.track]; const hasArtistName = mappedHeaders.artist !== undefined && values[mappedHeaders.artist]; const hasAlbumName = mappedHeaders.album !== undefined && values[mappedHeaders.album]; - if (hasTrackName && hasAlbumName && values[mappedHeaders.track] === values[mappedHeaders.album]) return 'album'; if (hasTrackName && hasArtistName) return 'track'; + + if (hasTrackName && hasAlbumName && values[mappedHeaders.track] === values[mappedHeaders.album]) { + return hasArtistName ? 'track' : 'album'; + } + if (hasAlbumName && hasArtistName && !hasTrackName) return 'album'; if (hasArtistName && !hasTrackName && !hasAlbumName) return 'artist'; @@ -290,6 +294,9 @@ export async function parseDynamicCSV(csvText, api, onProgress, options = {}) { const albumName = mappedHeaders.album !== undefined ? values[mappedHeaders.album] : ''; const isrc = mappedHeaders.isrc !== undefined ? values[mappedHeaders.isrc] : ''; const playlistName = mappedHeaders.playlistName !== undefined ? values[mappedHeaders.playlistName] : ''; + const typeValue = + mappedHeaders.type !== undefined ? values[mappedHeaders.type]?.toLowerCase().trim() : ''; + const isFavorite = typeValue.includes('favorite'); if (onProgress) { onProgress({ @@ -322,6 +329,7 @@ export async function parseDynamicCSV(csvText, api, onProgress, options = {}) { } if (foundTrack) { + if (isFavorite) foundTrack.isFavorite = true; tracks.push(foundTrack); if (playlistName) { if (!playlists[playlistName]) { @@ -350,6 +358,7 @@ export async function parseDynamicCSV(csvText, api, onProgress, options = {}) { } if (foundAlbum) { + if (isFavorite) foundAlbum.isFavorite = true; albums.push(foundAlbum); } else { missingItems.push({ @@ -369,6 +378,7 @@ export async function parseDynamicCSV(csvText, api, onProgress, options = {}) { } if (foundArtist) { + if (isFavorite) foundArtist.isFavorite = true; artists.push(foundArtist); } else { missingItems.push({ @@ -404,7 +414,17 @@ export async function parseDynamicCSV(csvText, api, onProgress, options = {}) { }; } -export async function importToLibrary(csvResult, db, onProgress) { +/** + * Imports CSV result to library + * @param {Object} csvResult - Result from parseDynamicCSV + * @param {Object} db - Database instance + * @param {Function} onProgress - Progress callback + * @param {Object} options - Import options + * @returns {Promise