mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-09 20:29:36 +02:00
Fix subsonic scanner
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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 (
|
||||||
|
|||||||
Reference in New Issue
Block a user