Add getChildMedia method to Media class and update BaseScanner class to handle parentRatingKey

pull/3800/merge^2
Anatole Sot 3 months ago
parent 8b2f86a34d
commit fc9fb2b2d7

@ -85,6 +85,24 @@ class Media {
}
}
public static async getChildMedia(
parentId: number
): Promise<Media[] | undefined> {
const mediaRepository = getRepository(Media);
try {
const media = await mediaRepository.find({
where: { parentRatingKey: parentId },
relations: { requests: true, issues: true },
});
return media;
} catch (e) {
logger.error(e.message);
return undefined;
}
}
@PrimaryGeneratedColumn()
public id: number;
@ -168,6 +186,12 @@ class Media {
@Column({ nullable: true, type: 'varchar' })
public ratingKey4k?: string | null;
@Column({ nullable: true, type: 'varchar' })
public title?: string;
@Column({ nullable: true, type: 'varchar' })
public parentRatingKey?: number;
public serviceUrl?: string;
public serviceUrl4k?: string;
public downloadStatus?: DownloadingItem[] = [];

@ -40,6 +40,7 @@ interface ProcessOptions {
externalServiceSlug?: string;
title?: string;
processing?: boolean;
parentRatingKey?: string;
}
export interface ProcessableSeason {
@ -567,6 +568,7 @@ class BaseScanner<T> {
} else {
const newMedia = new Media();
newMedia.mbId = mbId;
newMedia.title = title;
newMedia.secondaryType = SecondaryType.ARTIST;
newMedia.status = !processing
? MediaStatus.AVAILABLE
@ -599,6 +601,7 @@ class BaseScanner<T> {
externalServiceId,
processing = false,
title = 'Unknown Title',
parentRatingKey = undefined,
}: ProcessOptions = {}
): Promise<void> {
const mediaRepository = getRepository(Media);
@ -654,6 +657,10 @@ class BaseScanner<T> {
} else {
const newMedia = new Media();
newMedia.mbId = mbId;
newMedia.title = title;
newMedia.parentRatingKey = parentRatingKey
? Number(parentRatingKey.match(/(\d+)/)?.[0])
: undefined;
newMedia.secondaryType = SecondaryType.RELEASE;
newMedia.status = !processing
? MediaStatus.AVAILABLE

@ -378,6 +378,7 @@ class PlexScanner
mediaAddedAt: new Date(plexitem.addedAt * 1000),
ratingKey: plexitem.ratingKey,
title: plexitem.title,
parentRatingKey: plexitem.parentRatingKey,
});
} else {
this.log('No MusicBrainz ID found for album', 'warn', {

@ -149,9 +149,6 @@ export interface ArtistResult {
name: string;
type: mbArtistType;
releases: ReleaseResult[];
recordings: RecordingResult[];
releaseGroups: ReleaseGroupResult[];
works: WorkResult[];
gender?: string;
area?: string;
beginDate?: string;
@ -286,23 +283,6 @@ export const mapArtistResult = async (
? artist.releases.map((release) => mapReleaseResult(release))
: []
),
recordings: await Promise.all(
Array.isArray(artist.recordings)
? artist.recordings.map((recording) => mapRecordingResult(recording))
: []
),
releaseGroups: await Promise.all(
Array.isArray(artist.releaseGroups)
? artist.releaseGroups.map((releaseGroup) =>
mapReleaseGroupResult(releaseGroup)
)
: []
),
works: await Promise.all(
Array.isArray(artist.works)
? artist.works.map((work) => mapWorkResult(work))
: []
),
tags: artist.tags,
mediaInfo: media ?? undefined,
posterPath: await getPosterFromMB(artist),

Loading…
Cancel
Save