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) => { /> +
+ +
+ +
+
); diff --git a/src/components/Settings/SonarrModal/index.tsx b/src/components/Settings/SonarrModal/index.tsx index c497bb6a34..1d9538923c 100644 --- a/src/components/Settings/SonarrModal/index.tsx +++ b/src/components/Settings/SonarrModal/index.tsx @@ -67,6 +67,9 @@ const messages = defineMessages('components.Settings.SonarrModal', { syncEnabled: 'Enable Scan', externalUrl: 'External URL', 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", @@ -247,6 +250,7 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { syncEnabled: sonarr?.syncEnabled ?? false, enableSearch: !sonarr?.preventSearch, tagRequests: sonarr?.tagRequests ?? false, + tagRequestsNoID: sonarr?.tagRequestsNoID ?? false, }} validationSchema={SonarrSettingsSchema} onSubmit={async (values) => { @@ -290,6 +294,7 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { syncEnabled: values.syncEnabled, preventSearch: !values.enableSearch, tagRequests: values.tagRequests, + tagRequestsNoID: values.tagRequestsNoID, }; if (!sonarr) { await axios.post('/api/v1/settings/sonarr', submission); @@ -1023,6 +1028,21 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { /> +
+ +
+ +
+
); diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index 34963834d2..8dea7022d2 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -830,6 +830,8 @@ "components.Settings.RadarrModal.servername": "Server Name", "components.Settings.RadarrModal.ssl": "Use SSL", "components.Settings.RadarrModal.syncEnabled": "Enable Scan", + "components.Settings.RadarrModal.tagRequestsNoID": "No ID in tag", + "components.Settings.RadarrModal.tagRequestsNoIDInfo": "Do not prefix the tag with user ID. Tag Requests must be enable for this to work.", "components.Settings.RadarrModal.tagRequests": "Tag Requests", "components.Settings.RadarrModal.tagRequestsInfo": "Automatically add an additional tag with the requester's user ID & display name", "components.Settings.RadarrModal.tags": "Tags", @@ -1077,6 +1079,8 @@ "components.Settings.SonarrModal.servername": "Server Name", "components.Settings.SonarrModal.ssl": "Use SSL", "components.Settings.SonarrModal.syncEnabled": "Enable Scan", + "components.Settings.SonarrModal.tagRequestsNoID": "No ID in tag", + "components.Settings.SonarrModal.tagRequestsNoIDInfo": "Do not prefix the tag with user ID. Tag Requests must be enable for this to work.", "components.Settings.SonarrModal.tagRequests": "Tag Requests", "components.Settings.SonarrModal.tagRequestsInfo": "Automatically add an additional tag with the requester's user ID & display name", "components.Settings.SonarrModal.tags": "Tags", diff --git a/src/i18n/locale/fr.json b/src/i18n/locale/fr.json index 99ed0e0001..c239515cb2 100644 --- a/src/i18n/locale/fr.json +++ b/src/i18n/locale/fr.json @@ -1205,7 +1205,11 @@ "components.Selector.starttyping": "Commencez à taper pour rechercher.", "components.Settings.SettingsJobsCache.editJobScheduleSelectorSeconds": "Toutes les {jobScheduleSeconds, plural, one {seconde} other {{jobScheduleSeconds} secondes}}", "components.Settings.SettingsJobsCache.availability-sync": "Synchronisation de la disponibilité des médias", + "components.Settings.RadarrModal.tagRequestsNoID": "Pas de ID dans le tag", + "components.Settings.RadarrModal.tagRequestsNoIDInfo": "Ne pas ajouter le préfixe ID utilisateur au tag. Requis que l'option Tager les demandes soit active.", "components.Settings.RadarrModal.tagRequests": "Tager les demandes", + "components.Settings.SonarrModal.tagRequestsNoID": "Pas de ID dans le tag", + "components.Settings.SonarrModal.tagRequestsNoIDInfo": "Ne pas ajouter le préfixe ID utilisateur au tag. Requis que l'option Tager les demandes soit active.", "components.Settings.SonarrModal.tagRequests": "Tager les demandes", "components.Settings.SonarrModal.tagRequestsInfo": "Ajouter automatiquement un tag supplémentaire avec l'ID utilisateur et le nom d'affichage du demandeur", "i18n.collection": "Collection",