Fix subsonic scanner

This commit is contained in:
jeffvli
2022-11-21 11:27:39 -08:00
parent 1d05966127
commit edc80bc3b4
2 changed files with 34 additions and 26 deletions
+3 -3
View File
@@ -1,7 +1,7 @@
import { Server } from '@prisma/client'; import { Server } from '@prisma/client';
import { randomString } from '@utils/index';
import axios from 'axios'; import axios from 'axios';
import md5 from 'md5'; import md5 from 'md5';
import { randomString } from '../../utils/random-string';
import { import {
SSAlbumListEntry, SSAlbumListEntry,
SSAlbumListResponse, SSAlbumListResponse,
@@ -103,8 +103,8 @@ const getAlbums = async (
) )
.then((res) => { .then((res) => {
if ( if (
!res.data.albumList2.album || !res.data.albumList2?.album ||
res.data.albumList2.album.length === 0 res.data.albumList2?.album?.length === 0
) { ) {
// Flatten and return once there are no more albums left // Flatten and return once there are no more albums left
return recursiveData.flatMap((album) => album); return recursiveData.flatMap((album) => album);
+31 -23
View File
@@ -1,7 +1,7 @@
/* eslint-disable no-await-in-loop */ /* eslint-disable no-await-in-loop */
import { ImageType, Server, ServerFolder, Task } from '@prisma/client'; import { ImageType, Server, ServerFolder, Task } from '@prisma/client';
import { prisma, throttle } from '@lib/index'; import { prisma, throttle } from '../../lib/index';
import { uniqueArray } from '@utils/index'; import { uniqueArray } from '../../utils/index';
import { queue } from '../queues'; import { queue } from '../queues';
import { subsonicApi } from './subsonic.api'; import { subsonicApi } from './subsonic.api';
import { subsonicUtils } from './subsonic.utils'; import { subsonicUtils } from './subsonic.utils';
@@ -73,7 +73,7 @@ export const scanAlbums = async (
}); });
const albums = await subsonicApi.getAlbums(server, { const albums = await subsonicApi.getAlbums(server, {
musicFolderId: serverFolder.id, musicFolderId: serverFolder.remoteId,
offset: 0, offset: 0,
size: 500, size: 500,
type: 'newest', type: 'newest',
@@ -103,33 +103,35 @@ export const scanAlbums = async (
await prisma.album.upsert({ await prisma.album.upsert({
create: { create: {
albumArtists: { connect: albumArtistConnect }, albumArtists: { connect: albumArtistConnect },
deleted: false,
genres: { connect: album.genre ? { name: album.genre } : undefined }, genres: { connect: album.genre ? { name: album.genre } : undefined },
images: { connect: imagesConnect }, images: { connect: imagesConnect },
name: album.title, name: album.name,
releaseDate: album?.year releaseDate: album?.year
? new Date(album.year, 0).toISOString() ? new Date(Number(String(album.year).slice(4)), 0).toISOString()
: undefined, : undefined,
releaseYear: album.year, releaseYear: album.year,
remoteCreatedAt: album.created, remoteCreatedAt: album.created,
remoteId: album.id, remoteId: album.id,
serverFolders: { connect: { id: serverFolder.id } }, serverFolders: { connect: { id: serverFolder.id } },
serverId: server.id, serverId: server.id,
sortName: album.title, sortName: album.name,
}, },
update: { update: {
albumArtists: { connect: albumArtistConnect }, albumArtists: { connect: albumArtistConnect },
deleted: false,
genres: { connect: album.genre ? { name: album.genre } : undefined }, genres: { connect: album.genre ? { name: album.genre } : undefined },
images: { connect: imagesConnect }, images: { connect: imagesConnect },
name: album.title, name: album.name,
releaseDate: album?.year releaseDate: album?.year
? new Date(album.year, 0).toISOString() ? new Date(Number(String(album.year).slice(4)), 0).toISOString()
: undefined, : undefined,
releaseYear: album.year, releaseYear: album.year,
remoteCreatedAt: album.created, remoteCreatedAt: album.created,
remoteId: album.id, remoteId: album.id,
serverFolders: { connect: { id: serverFolder.id } }, serverFolders: { connect: { id: serverFolder.id } },
serverId: server.id, serverId: server.id,
sortName: album.title, sortName: album.name,
}, },
where: { where: {
uniqueAlbumId: { uniqueAlbumId: {
@@ -170,45 +172,53 @@ const throttledAlbumFetch = throttle(
return { return {
create: { create: {
albumArtists: { connect: albumArtistsConnect }, // albumArtistId: song.artistId ? song.artistId : undefined,
albumArtist: { connect: albumArtistsConnect },
artistName: !song.artistId ? song.artist : undefined, artistName: !song.artistId ? song.artist : undefined,
bitRate: song.bitRate, bitRate: song.bitRate ? song.bitRate : undefined,
container: song.suffix, container: song.suffix,
deleted: false,
discNumber: song.discNumber, discNumber: song.discNumber,
duration: song.duration, duration: song.duration,
genres: { connect: genresConnect }, genres: { connect: genresConnect },
images: { connect: imagesConnect }, images: { connect: imagesConnect },
name: song.title, name: song.title,
releaseDate: song?.year releaseDate: song?.year
? new Date(song.year, 0).toISOString() ? new Date(Number(String(song.year).slice(4)), 0).toISOString()
: undefined, : undefined,
releaseYear: song.year, releaseYear: song.year,
remoteCreatedAt: song.created, remoteCreatedAt: song.created,
remoteId: song.id, remoteId: song.id,
server: { connect: { id: server.id } },
serverFolders: { connect: { id: serverFolder.id } }, serverFolders: { connect: { id: serverFolder.id } },
serverId: server.id, // serverId: server.id,
size: song.size, size: song.size,
sortName: song.title, sortName: song.title,
trackNumber: song.track, trackNumber: song.track,
}, },
update: { update: {
albumArtists: { connect: albumArtistsConnect }, albumArtist: { connect: albumArtistsConnect },
// albumArtistId: song.artistId ? song.artistId : undefined,
artistName: !song.artistId ? song.artist : undefined, artistName: !song.artistId ? song.artist : undefined,
bitRate: song.bitRate,
bitRate: song.bitRate ? song.bitRate : undefined,
container: song.suffix, container: song.suffix,
deleted: false,
discNumber: song.discNumber, discNumber: song.discNumber,
duration: song.duration, duration: song.duration,
genres: { connect: genresConnect }, genres: { connect: genresConnect },
images: { connect: imagesConnect }, images: { connect: imagesConnect },
name: song.title, name: song.title,
releaseDate: song?.year releaseDate: song?.year
? new Date(song.year, 0).toISOString() ? new Date(Number(String(song.year).slice(4)), 0).toISOString()
: undefined, : undefined,
releaseYear: song.year, releaseYear: song.year,
remoteCreatedAt: song.created, remoteCreatedAt: song.created,
remoteId: song.id, remoteId: song.id,
server: { connect: { id: server.id } },
serverFolders: { connect: { id: serverFolder.id } }, serverFolders: { connect: { id: serverFolder.id } },
serverId: server.id,
// serverId: server.id,
size: song.size, size: song.size,
sortName: song.title, sortName: song.title,
trackNumber: song.track, trackNumber: song.track,
@@ -228,7 +238,7 @@ const throttledAlbumFetch = throttle(
const artistsConnect = uniqueArtistIds.map((artistId) => { const artistsConnect = uniqueArtistIds.map((artistId) => {
return { return {
uniqueArtistId: { uniqueAlbumArtistId: {
remoteId: artistId!, remoteId: artistId!,
serverId: server.id, serverId: server.id,
}, },
@@ -237,12 +247,12 @@ const throttledAlbumFetch = throttle(
await prisma.album.update({ await prisma.album.update({
data: { data: {
artists: { connect: artistsConnect }, // albumArtists: { connect: artistsConnect },
songs: { upsert: songsUpsert }, songs: { upsert: songsUpsert },
}, },
where: { where: {
uniqueAlbumId: { uniqueAlbumId: {
remoteId: albumRes.album.id, remoteId: album.remoteId,
serverId: server.id, serverId: server.id,
}, },
}, },
@@ -269,10 +279,8 @@ export const scanAlbumDetail = async (
}); });
for (let i = 0; i < dbAlbums.length; i += 1) { for (let i = 0; i < dbAlbums.length; i += 1) {
promises.push(throttledAlbumFetch(server, serverFolder, dbAlbums[i])); await throttledAlbumFetch(server, serverFolder, dbAlbums[i]);
} }
await Promise.all(promises);
}; };
const scanAll = async ( const scanAll = async (