fix(plex sync): catch errors that occur during processMovie

this also removes the unique constraint on imdbId

re #244 #246 #250
This commit is contained in:
sct
2020-12-14 08:01:33 +00:00
parent cb5c0403c1
commit edbbccf3ae
3 changed files with 80 additions and 42 deletions

View File

@@ -11,6 +11,7 @@
"start": "NODE_ENV=production node dist/index.js", "start": "NODE_ENV=production node dist/index.js",
"i18n:extract": "extract-messages -l=en -o src/i18n/locale -d en --flat true --overwriteDefault false './src/**/!(*.test).{ts,tsx}'", "i18n:extract": "extract-messages -l=en -o src/i18n/locale -d en --flat true --overwriteDefault false './src/**/!(*.test).{ts,tsx}'",
"migration:generate": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:generate", "migration:generate": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:generate",
"migration:create": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:create",
"migration:run": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:run", "migration:run": "ts-node --project server/tsconfig.json ./node_modules/.bin/typeorm migration:run",
"format": "prettier --write ." "format": "prettier --write ."
}, },

View File

@@ -51,10 +51,19 @@ class JobPlexSync {
private async processMovie(plexitem: PlexLibraryItem) { private async processMovie(plexitem: PlexLibraryItem) {
const mediaRepository = getRepository(Media); const mediaRepository = getRepository(Media);
try {
if (plexitem.guid.match(plexRegex)) { if (plexitem.guid.match(plexRegex)) {
const metadata = await this.plexClient.getMetadata(plexitem.ratingKey); const metadata = await this.plexClient.getMetadata(plexitem.ratingKey);
const newMedia = new Media(); const newMedia = new Media();
if (!metadata.Guid) {
logger.debug('No Guid metadata for this title. Skipping', {
label: 'Plex Sync',
ratingKey: plexitem.ratingKey,
});
return;
}
metadata.Guid.forEach((ref) => { metadata.Guid.forEach((ref) => {
if (ref.id.match(imdbRegex)) { if (ref.id.match(imdbRegex)) {
newMedia.imdbId = ref.id.match(imdbRegex)?.[1] ?? undefined; newMedia.imdbId = ref.id.match(imdbRegex)?.[1] ?? undefined;
@@ -110,6 +119,14 @@ class JobPlexSync {
} }
} }
} }
} catch (e) {
this.log(
`Failed to process plex item. ratingKey: ${
plexitem.parentRatingKey ?? plexitem.ratingKey
}`,
'error'
);
}
} }
private async processShow(plexitem: PlexLibraryItem) { private async processShow(plexitem: PlexLibraryItem) {

View File

@@ -0,0 +1,20 @@
import { MigrationInterface, QueryRunner, TableUnique } from 'typeorm';
export class DropImdbIdConstraint1607928251245 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropUniqueConstraint(
'media',
'UQ_7ff2d11f6a83cb52386eaebe74b'
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createUniqueConstraint(
'media',
new TableUnique({
name: 'UQ_7ff2d11f6a83cb52386eaebe74b',
columnNames: ['imdbId'],
})
);
}
}