diff --git a/server/lib/settings/index.ts b/server/lib/settings/index.ts index e37eccc948..cabb8ec9ef 100644 --- a/server/lib/settings/index.ts +++ b/server/lib/settings/index.ts @@ -76,6 +76,7 @@ export interface DVRSettings { syncEnabled: boolean; preventSearch: boolean; tagRequests: boolean; + tagRequestsNoID: boolean; overrideRule: number[]; } diff --git a/server/subscriber/MediaRequestSubscriber.ts b/server/subscriber/MediaRequestSubscriber.ts index 251ee47efc..0e3eabe64c 100644 --- a/server/subscriber/MediaRequestSubscriber.ts +++ b/server/subscriber/MediaRequestSubscriber.ts @@ -303,46 +303,84 @@ export class MediaRequestSubscriber if (radarrSettings.tagRequests) { const radarrTags = await radarr.getTags(); - // old tags had space around the hyphen - let userTag = radarrTags.find((v) => - v.label.startsWith(entity.requestedBy.id + ' - ') - ); - // new tags do not have spaces around the hyphen, since spaces are not allowed anymore - if (!userTag) { - userTag = radarrTags.find((v) => - v.label.startsWith(entity.requestedBy.id + '-') + // We do not want to append user ID to tag + if (radarrSettings.tagRequestsNoID) { + let userTag = radarrTags.find((v) => + v.label.startsWith( + sanitizeDisplayName( + entity.requestedBy.displayName.toLowerCase() + ) + ) ); - } - if (!userTag) { - logger.info(`Requester has no active tag. Creating new`, { - label: 'Media Request', - requestId: entity.id, - mediaId: entity.media.id, - userId: entity.requestedBy.id, - newTag: - entity.requestedBy.id + - '-' + - sanitizeDisplayName(entity.requestedBy.displayName), - }); - userTag = await radarr.createTag({ - label: - entity.requestedBy.id + - '-' + - sanitizeDisplayName(entity.requestedBy.displayName), - }); - } - if (userTag.id) { - if (!tags?.find((v) => v === userTag?.id)) { - tags?.push(userTag.id); + if (!userTag) { + logger.info(`Requester has no active tag. Creating new`, { + label: 'Media Request', + requestId: entity.id, + mediaId: entity.media.id, + userId: entity.requestedBy.id, + newTag: sanitizeDisplayName(entity.requestedBy.displayName), + }); + userTag = await radarr.createTag({ + label: sanitizeDisplayName(entity.requestedBy.displayName), + }); + } + if (userTag.id) { + if (!tags?.find((v) => v === userTag?.id)) { + tags?.push(userTag.id); + } + } else { + logger.warn(`Requester has no tag and failed to add one`, { + label: 'Media Request', + requestId: entity.id, + mediaId: entity.media.id, + userId: entity.requestedBy.id, + radarrServer: + radarrSettings.hostname + ':' + radarrSettings.port, + }); } } else { - logger.warn(`Requester has no tag and failed to add one`, { - label: 'Media Request', - requestId: entity.id, - mediaId: entity.media.id, - userId: entity.requestedBy.id, - radarrServer: radarrSettings.hostname + ':' + radarrSettings.port, - }); + // old tags had space around the hyphen + let userTag = radarrTags.find((v) => + v.label.startsWith(entity.requestedBy.id + ' - ') + ); + // new tags do not have spaces around the hyphen, since spaces are not allowed anymore + if (!userTag) { + userTag = radarrTags.find((v) => + v.label.startsWith(entity.requestedBy.id + '-') + ); + } + if (!userTag) { + logger.info(`Requester has no active tag. Creating new`, { + label: 'Media Request', + requestId: entity.id, + mediaId: entity.media.id, + userId: entity.requestedBy.id, + newTag: + entity.requestedBy.id + + '-' + + sanitizeDisplayName(entity.requestedBy.displayName), + }); + userTag = await radarr.createTag({ + label: + entity.requestedBy.id + + '-' + + sanitizeDisplayName(entity.requestedBy.displayName), + }); + } + if (userTag.id) { + if (!tags?.find((v) => v === userTag?.id)) { + tags?.push(userTag.id); + } + } else { + logger.warn(`Requester has no tag and failed to add one`, { + label: 'Media Request', + requestId: entity.id, + mediaId: entity.media.id, + userId: entity.requestedBy.id, + radarrServer: + radarrSettings.hostname + ':' + radarrSettings.port, + }); + } } } @@ -628,46 +666,83 @@ export class MediaRequestSubscriber if (sonarrSettings.tagRequests) { const sonarrTags = await sonarr.getTags(); - // old tags had space around the hyphen - let userTag = sonarrTags.find((v) => - v.label.startsWith(entity.requestedBy.id + ' - ') - ); - // new tags do not have spaces around the hyphen, since spaces are not allowed anymore - if (!userTag) { - userTag = sonarrTags.find((v) => - v.label.startsWith(entity.requestedBy.id + '-') + if (sonarrSettings.tagRequestsNoID) { + let userTag = sonarrTags.find((v) => + v.label.startsWith( + sanitizeDisplayName( + entity.requestedBy.displayName.toLowerCase() + ) + ) ); - } - if (!userTag) { - logger.info(`Requester has no active tag. Creating new`, { - label: 'Media Request', - requestId: entity.id, - mediaId: entity.media.id, - userId: entity.requestedBy.id, - newTag: - entity.requestedBy.id + - '-' + - sanitizeDisplayName(entity.requestedBy.displayName), - }); - userTag = await sonarr.createTag({ - label: - entity.requestedBy.id + - '-' + - sanitizeDisplayName(entity.requestedBy.displayName), - }); - } - if (userTag.id) { - if (!tags?.find((v) => v === userTag?.id)) { - tags?.push(userTag.id); + if (!userTag) { + logger.info(`Requester has no active tag. Creating new`, { + label: 'Media Request', + requestId: entity.id, + mediaId: entity.media.id, + userId: entity.requestedBy.id, + newTag: sanitizeDisplayName(entity.requestedBy.displayName), + }); + userTag = await sonarr.createTag({ + label: sanitizeDisplayName(entity.requestedBy.displayName), + }); + } + if (userTag.id) { + if (!tags?.find((v) => v === userTag?.id)) { + tags?.push(userTag.id); + } + } else { + logger.warn(`Requester has no tag and failed to add one`, { + label: 'Media Request', + requestId: entity.id, + mediaId: entity.media.id, + userId: entity.requestedBy.id, + sonarrServer: + sonarrSettings.hostname + ':' + sonarrSettings.port, + }); } } else { - logger.warn(`Requester has no tag and failed to add one`, { - label: 'Media Request', - requestId: entity.id, - mediaId: entity.media.id, - userId: entity.requestedBy.id, - sonarrServer: sonarrSettings.hostname + ':' + sonarrSettings.port, - }); + // old tags had space around the hyphen + let userTag = sonarrTags.find((v) => + v.label.startsWith(entity.requestedBy.id + ' - ') + ); + // new tags do not have spaces around the hyphen, since spaces are not allowed anymore + if (!userTag) { + userTag = sonarrTags.find((v) => + v.label.startsWith(entity.requestedBy.id + '-') + ); + } + if (!userTag) { + logger.info(`Requester has no active tag. Creating new`, { + label: 'Media Request', + requestId: entity.id, + mediaId: entity.media.id, + userId: entity.requestedBy.id, + newTag: + entity.requestedBy.id + + '-' + + sanitizeDisplayName(entity.requestedBy.displayName), + }); + userTag = await sonarr.createTag({ + label: + entity.requestedBy.id + + '-' + + sanitizeDisplayName(entity.requestedBy.displayName), + }); + } + if (userTag.id) { + if (!tags?.find((v) => v === userTag?.id)) { + tags?.push(userTag.id); + } + } else { + logger.warn(`Requester has no tag and failed to add one`, { + label: 'Media Request', + requestId: entity.id, + mediaId: entity.media.id, + userId: entity.requestedBy.id, + sonarrServer: + sonarrSettings.hostname + ':' + sonarrSettings.port, + }); + } } } diff --git a/src/components/Settings/RadarrModal/index.tsx b/src/components/Settings/RadarrModal/index.tsx index 6921d1b5e3..ef0ac76594 100644 --- a/src/components/Settings/RadarrModal/index.tsx +++ b/src/components/Settings/RadarrModal/index.tsx @@ -60,6 +60,9 @@ const messages = defineMessages('components.Settings.RadarrModal', { testFirstTags: 'Test connection to load tags', tags: 'Tags', enableSearch: 'Enable Automatic Search', + tagRequestsNoID: 'No ID in tag', + tagRequestsNoIDInfo: + 'Do not prefix the tag with user ID. Tag Requests must be enable for this to work.', tagRequests: 'Tag Requests', tagRequestsInfo: "Automatically add an additional tag with the requester's user ID & display name", @@ -231,6 +234,7 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => { syncEnabled: radarr?.syncEnabled ?? false, enableSearch: !radarr?.preventSearch, tagRequests: radarr?.tagRequests ?? false, + tagRequestsNoID: radarr?.tagRequestsNoID ?? false, }} validationSchema={RadarrSettingsSchema} onSubmit={async (values) => { @@ -257,6 +261,7 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => { syncEnabled: values.syncEnabled, preventSearch: !values.enableSearch, tagRequests: values.tagRequests, + tagRequestsNoID: values.tagRequestsNoID, }; if (!radarr) { await axios.post('/api/v1/settings/radarr', submission); @@ -726,6 +731,21 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => { /> +