diff --git a/components/details/ItemDetails.bs b/components/details/ItemDetails.bs index d3ef3c02d..e0ccca34a 100644 --- a/components/details/ItemDetails.bs +++ b/components/details/ItemDetails.bs @@ -331,7 +331,7 @@ sub renderDetailContent() setFieldText("title", itemData.name) - hideMediaDesc = moonfinPlugin.ParseBoolSetting(chainLookupReturn(m.global.session, "user.settings.`ui.itemdetail.hideMediaDescription`", false), false) and (isEpisode() or LCase(m.top.itemType) = "movie") + hideMediaDesc = ItemHidesMediaDescription(m.top.itemType, m.top.seerrOnly = true, m.global.session) taglineNode = m.top.findNode("tagline") if isValid(taglineNode) diff --git a/components/details/ModernItemDetails.bs b/components/details/ModernItemDetails.bs index cf80ba0e2..56f72898b 100644 --- a/components/details/ModernItemDetails.bs +++ b/components/details/ModernItemDetails.bs @@ -522,7 +522,7 @@ sub showUpNextCard() m.upNextCard.title = parts.join(" - ") overviewText = chainLookupReturn(ep, "json.Overview", "") - if hidesMediaDescription() + if hidesMediaDescription("episode") overviewText = "" else if isValidAndNotEmpty(overviewText) overviewText = stripHtmlTags(overviewText) @@ -1235,7 +1235,7 @@ sub renderDetailContent() setFieldText("title", itemData.name) - hideMediaDesc = hidesMediaDescription() and (isEpisode() or LCase(m.top.itemType) = "movie") + hideMediaDesc = hidesMediaDescription() taglineNode = m.top.findNode("tagline") if isValid(taglineNode) diff --git a/components/details/NouveauItemDetails.bs b/components/details/NouveauItemDetails.bs index 7c7559e88..2f66f2d16 100644 --- a/components/details/NouveauItemDetails.bs +++ b/components/details/NouveauItemDetails.bs @@ -334,7 +334,7 @@ sub renderDetailContent() ' The name stands in until a logo arrives, and a title with no logo keeps it if not isValidAndNotEmpty(m.top.logoImageURI) then m.titleNode.visible = true - hideMediaDesc = hidesMediaDescription() and (isEpisode() or LCase(m.top.itemType) = "movie") + hideMediaDesc = hidesMediaDescription() overviewText = itemData.overview if isValidAndNotEmpty(overviewText) then overviewText = stripHtmlTags(overviewText) if isPerson() then overviewText = detailSectionLayout.Shows("biography") ? readableText(overviewText) : "" diff --git a/components/details/SpotlightItemDetails.bs b/components/details/SpotlightItemDetails.bs index 7a24d8d10..d56bf56f7 100644 --- a/components/details/SpotlightItemDetails.bs +++ b/components/details/SpotlightItemDetails.bs @@ -298,7 +298,7 @@ sub renderDetailContent() setFieldText("title", itemData.name) m.titleNode.visible = isValidAndNotEmpty(itemData.name) and not m.logoGroup.visible - hideMediaDesc = hidesMediaDescription() and (isEpisode() or LCase(m.top.itemType) = "movie") + hideMediaDesc = hidesMediaDescription() taglineNode = m.top.findNode("tagline") if isValid(taglineNode) diff --git a/components/details/detailPopulationHost.bs b/components/details/detailPopulationHost.bs index 6038671a8..73b342fa8 100644 --- a/components/details/detailPopulationHost.bs +++ b/components/details/detailPopulationHost.bs @@ -21,8 +21,10 @@ const META_INK = "#FFFFFFBF" ' function isSeason() as boolean ' function isMusic() as boolean -function hidesMediaDescription() as boolean - return moonfinPlugin.ParseBoolSetting(chainLookupReturn(m.global.session, "user.settings.`ui.itemdetail.hideMediaDescription`", false), false) +function hidesMediaDescription(overrideType = "" as string) as boolean + targetType = isValidAndNotEmpty(overrideType) ? overrideType : (m.top.itemType ?? "") + isSeerr = (m.top.seerrOnly = true) + return ItemHidesMediaDescription(targetType, isSeerr, m.global.session) end function ' What the file is, read off the first video and audio stream the way the other diff --git a/components/music/AlbumDetails.bs b/components/music/AlbumDetails.bs index 26dd979dd..fc469a458 100644 --- a/components/music/AlbumDetails.bs +++ b/components/music/AlbumDetails.bs @@ -109,7 +109,7 @@ sub onPageContentChanged() end if overview = json.LookupCI("Overview") - if isValidAndNotEmpty(overview) + if isValidAndNotEmpty(overview) and not ItemHidesMediaDescription("musicalbum", false, m.global.session) m.albumOverview.text = overview m.albumOverview.visible = true else diff --git a/components/music/ArtistDetails.bs b/components/music/ArtistDetails.bs index e43a20e9a..bca6fec09 100644 --- a/components/music/ArtistDetails.bs +++ b/components/music/ArtistDetails.bs @@ -96,7 +96,7 @@ sub onPageContentChanged() overview = json.LookupCI("Overview") end if - if isValidAndNotEmpty(overview) + if isValidAndNotEmpty(overview) and not ItemHidesMediaDescription("musicartist", false, m.global.session) m.artistOverview.text = overview m.artistOverview.visible = true else diff --git a/components/music/PlaylistDetails.bs b/components/music/PlaylistDetails.bs index 3e6b57e3d..116006dd2 100644 --- a/components/music/PlaylistDetails.bs +++ b/components/music/PlaylistDetails.bs @@ -99,7 +99,7 @@ sub onPageContentChanged() m.playlistTitle.text = isValid(json.name) ? json.name : "" overview = json.LookupCI("Overview") - if isValidAndNotEmpty(overview) + if isValidAndNotEmpty(overview) and not ItemHidesMediaDescription("playlist", false, m.global.session) m.playlistOverview.text = overview m.playlistOverview.visible = true else diff --git a/components/settings/settings.bs b/components/settings/settings.bs index d7dd4a91b..0af457669 100644 --- a/components/settings/settings.bs +++ b/components/settings/settings.bs @@ -1943,7 +1943,7 @@ function reorderSettingsForFlutter(configTree as object) as object ] detailsDisplay = takeSettings(configTree, ["ui.itemdetail.style", "ui.backdrop.detailBlurAmount", "ui.itemdetail.buttonLayout", "ui.itemdetail.buttonsMaxVisible"]) - detailsContent = takeSettings(configTree, ["ui.itemdetail.metadataLayout", "ui.itemdetail.sections", "ui.itemdetail.expandedTabs", "ui.library.showTechnicalDetails", "ui.itemdetail.hideMediaDescription", "ui.itemdetail.useSeriesThumbnails"]) + detailsContent = takeSettings(configTree, ["ui.itemdetail.metadataLayout", "ui.itemdetail.sections", "ui.itemdetail.expandedTabs", "ui.library.showTechnicalDetails", "ui.itemdetail.useSeriesThumbnails"]) recommendations = takeSettings(configTree, ["ui.home.recommendationSource"]) ratingSettings = takeSettings(configTree, ["plugin.mdblist.enabled", "plugin.mdblist.ratingSources", "plugin.tmdb.episodeRatings", "plugin.mdblist.showRatingNames", "plugin.mdblist.showRatingBadges", "ui.itemdetail.showRatings"]) themeMusic = takeSettings(configTree, ["playback.thememusic.enabled", "playback.thememusic.loop"]) @@ -2118,10 +2118,13 @@ function reorderSettingsForFlutter(configTree as object) as object if isValid(detailsScreen) detailsScreen.title = "Details Page" detailsScreen.description = "Layout, buttons, sections, ratings, and theme music" + mediaDescVisibility = takeChildByTitle(detailsScreen, "Toggle Media Description Visibility") + if isValid(mediaDescVisibility) then mediaDescVisibility.clean = true detailsChildren = [settingsSection("Display")] detailsChildren.Append(detailsDisplay) detailsChildren.push(settingsSection("Media Details and Spoilers")) detailsChildren.Append(detailsContent) + pushSettingIfValid(detailsChildren, mediaDescVisibility) detailsChildren.push(settingsSection("Recommendations")) detailsChildren.Append(recommendations) detailsChildren.push(settingsSection("Ratings")) @@ -3329,6 +3332,7 @@ function settingRequirementMet(requirement as string) as boolean if requirement = "social" then return achievements.SocialAvailable() if requirement = "kidsMode" then return kidsMode.Enabled() if requirement = "notKidsMode" then return not kidsMode.Enabled() + if requirement = "seerr" then return GetSeerrConfig().enabled if Left(requirement, 8) = "setting:" for each condition in requirement.Split("&&") if not settingConditionMet(Mid(condition, 9)) then return false diff --git a/components/tvshows/SeasonEpisodeRow.bs b/components/tvshows/SeasonEpisodeRow.bs index 18f68f828..bf02536d5 100644 --- a/components/tvshows/SeasonEpisodeRow.bs +++ b/components/tvshows/SeasonEpisodeRow.bs @@ -37,7 +37,7 @@ sub itemContentChanged() unplayedCount: chainLookupReturn(itemData, "json.UserData.UnplayedItemCount", 0) } - hideMediaDesc = moonfinPlugin.ParseBoolSetting(chainLookupReturn(m.global.session, "user.settings.`ui.itemdetail.hideMediaDescription`", false), false) + hideMediaDesc = ItemHidesMediaDescription("episode", false, m.global.session) m.episodeOverview.text = (not hideMediaDesc and isValid(itemData.overview)) ? itemData.overview : "" if not isChainValid(itemData, "json") diff --git a/components/video/EpisodeBrowserOverlay.bs b/components/video/EpisodeBrowserOverlay.bs index 289e0a2e8..8c98c8fdf 100644 --- a/components/video/EpisodeBrowserOverlay.bs +++ b/components/video/EpisodeBrowserOverlay.bs @@ -42,7 +42,7 @@ sub init() m.footer.text = tr("Press BACK to close") m.palette = playbackOverlay.Palette() - m.hideOverview = toBoolean(chainLookupReturn(m.global.session, "user.settings.`ui.itemdetail.hideMediaDescription`", false)) + m.hideOverview = ItemHidesMediaDescription("episode", false, m.global.session) m.opened = false m.loaded = false m.numbers = [] diff --git a/locale/en_US/translations.ts b/locale/en_US/translations.ts index 980587cdd..241ac4bd8 100644 --- a/locale/en_US/translations.ts +++ b/locale/en_US/translations.ts @@ -6529,6 +6529,110 @@ Hide the movie or episode descriptive text. Hide the movie or episode descriptive text. + + Toggle Media Description Visibility + Toggle Media Description Visibility + + + Hide media descriptions from various detail pages. + Hide media descriptions from various detail pages. + + + Local Content + Local Content + + + Hide Movie Description + Hide Movie Description + + + Hide descriptive text on movie details pages. + Hide descriptive text on movie details pages. + + + Hide Show Description + Hide Show Description + + + Hide descriptive text on TV show details pages. + Hide descriptive text on TV show details pages. + + + Hide Season Description + Hide Season Description + + + Hide descriptive text on season details pages. + Hide descriptive text on season details pages. + + + Hide Episode Description + Hide Episode Description + + + Hide descriptive text on episode details pages. + Hide descriptive text on episode details pages. + + + Hide Collection Description + Hide Collection Description + + + Hide descriptive text on collection details pages. + Hide descriptive text on collection details pages. + + + Hide Book Description + Hide Book Description + + + Hide descriptive text on book details pages. + Hide descriptive text on book details pages. + + + Hide Person Biography + Hide Person Biography + + + Hide biographical text on person details pages. + Hide biographical text on person details pages. + + + Hide Music Description + Hide Music Description + + + Hide descriptive text on music and playlist details pages. + Hide descriptive text on music and playlist details pages. + + + Seerr Content + Seerr Content + + + Hide Seerr Movie Description + Hide Seerr Movie Description + + + Hide descriptive text on Seerr movie details pages. + Hide descriptive text on Seerr movie details pages. + + + Hide Seerr Show Description + Hide Seerr Show Description + + + Hide descriptive text on Seerr TV show details pages. + Hide descriptive text on Seerr TV show details pages. + + + Hide Seerr Collection Description + Hide Seerr Collection Description + + + Hide descriptive text on Seerr collection details pages. + Hide descriptive text on Seerr collection details pages. + How long a show stays in Next Up after you last watched it How long a show stays in Next Up after you last watched it diff --git a/settings/settings.json b/settings/settings.json index e8cdcfdcc..9f3ea5b5f 100644 --- a/settings/settings.json +++ b/settings/settings.json @@ -8381,12 +8381,112 @@ "default": "true" }, { - "title": "Hide Media Description", - "description": "Hide the movie or episode descriptive text.", - "settingName": "ui.itemdetail.hideMediaDescription", + "title": "Toggle Media Description Visibility", + "description": "Hide media descriptions from various detail pages.", "glyph": "description_outlined", - "type": "bool", - "default": "false" + "clean": true, + "children": [ + { + "title": "Local Content", + "type": "section" + }, + { + "title": "Hide Movie Description", + "description": "Hide descriptive text on movie details pages.", + "settingName": "ui.itemdetail.hideMediaDescriptionMovie", + "glyph": "movie_outlined", + "type": "bool", + "default": "false" + }, + { + "title": "Hide Show Description", + "description": "Hide descriptive text on TV show details pages.", + "settingName": "ui.itemdetail.hideMediaDescriptionShow", + "glyph": "tv", + "type": "bool", + "default": "false" + }, + { + "title": "Hide Season Description", + "description": "Hide descriptive text on season details pages.", + "settingName": "ui.itemdetail.hideMediaDescriptionSeason", + "glyph": "video_library", + "type": "bool", + "default": "false" + }, + { + "title": "Hide Episode Description", + "description": "Hide descriptive text on episode details pages.", + "settingName": "ui.itemdetail.hideMediaDescriptionEpisode", + "glyph": "tv", + "type": "bool", + "default": "false" + }, + { + "title": "Hide Collection Description", + "description": "Hide descriptive text on collection details pages.", + "settingName": "ui.itemdetail.hideMediaDescriptionBoxSet", + "glyph": "collections", + "type": "bool", + "default": "false" + }, + { + "title": "Hide Book Description", + "description": "Hide descriptive text on book details pages.", + "settingName": "ui.itemdetail.hideMediaDescriptionBook", + "glyph": "collections_bookmark", + "type": "bool", + "default": "false" + }, + { + "title": "Hide Person Biography", + "description": "Hide biographical text on person details pages.", + "settingName": "ui.itemdetail.hideMediaDescriptionPerson", + "glyph": "person", + "type": "bool", + "default": "false" + }, + { + "title": "Hide Music Description", + "description": "Hide descriptive text on music and playlist details pages.", + "settingName": "ui.itemdetail.hideMediaDescriptionMusic", + "glyph": "music_note", + "type": "bool", + "default": "false" + }, + { + "title": "Seerr Content", + "type": "section", + "requires": "seerr" + }, + { + "title": "Hide Seerr Movie Description", + "description": "Hide descriptive text on Seerr movie details pages.", + "settingName": "ui.itemdetail.hideMediaDescriptionSeerrMovie", + "glyph": "movie_outlined", + "type": "bool", + "default": "false", + "requires": "seerr" + }, + { + "title": "Hide Seerr Show Description", + "description": "Hide descriptive text on Seerr TV show details pages.", + "settingName": "ui.itemdetail.hideMediaDescriptionSeerrShow", + "glyph": "tv", + "type": "bool", + "default": "false", + "requires": "seerr" + }, + { + "title": "Hide Seerr Collection Description", + "description": "Hide descriptive text on Seerr collection details pages.", + "settingName": "ui.itemdetail.hideMediaDescriptionSeerrCollection", + "glyph": "collections", + "type": "bool", + "default": "false", + "requires": "seerr" + } + ] }, { "title": "Use Series Thumbnails", diff --git a/source/utils/SeerrUtils.bs b/source/utils/SeerrUtils.bs index 863534751..0e2528faa 100644 --- a/source/utils/SeerrUtils.bs +++ b/source/utils/SeerrUtils.bs @@ -1491,6 +1491,7 @@ sub ShowSeerrDetails(mediaItem as object) if isValidStringValue(mediaItem.mediaType) then mediaType = mediaItem.mediaType detailsScreen = CreateObject("roSGNode", SeerrDetailScreenComponent()) + detailsScreen.itemType = isStringEqual(mediaType, "tv") ? "series" : (isStringEqual(mediaType, "collection") ? "collection" : "movie") detailsScreen.seerrTarget = { tmdbId: mediaItem.tmdbId.toStr(), mediaType: mediaType diff --git a/source/utils/misc.bs b/source/utils/misc.bs index 693a1a729..d572d4ed3 100644 --- a/source/utils/misc.bs +++ b/source/utils/misc.bs @@ -1431,3 +1431,81 @@ function normalizeDetailScreenStyleToken(value as dynamic) as string return "modern" end function + +' Whether descriptive/overview text should be hidden for an item type, avoiding spoilers. +' Evaluates granular user settings with legacy fallback to ui.itemdetail.hideMediaDescription. +function ItemHidesMediaDescription(target as dynamic, isSeerr = false as boolean, sessionObj = invalid as dynamic) as boolean + if get_setting("global.kids.enabled", "false") = "true" then return true + + rawType = "" + targetIsSeerr = isSeerr + if isValid(target) + targetType = Type(target) + if targetType = "String" or targetType = "roString" + rawType = target + else if targetType = "roSGNode" or targetType = "roAssociativeArray" + if target.seerrOnly = true or target.isSeerr = true or target._seerrMediaId <> invalid + targetIsSeerr = true + end if + if isValid(target.itemType) + rawType = target.itemType + else if isValid(target.type) + rawType = target.type + else if isChainValid(target, "json.Type") + rawType = target.json.Type + else if isChainValid(target, "json.type") + rawType = target.json.type + end if + end if + end if + + resolvedSession = sessionObj + if not isValid(resolvedSession) and isValid(m) and isValid(m.global) and isValid(m.global.session) + resolvedSession = m.global.session + end if + if not isValid(resolvedSession) or not isValid(resolvedSession.user) or not isValid(resolvedSession.user.settings) + return false + end if + + legacyHide = toBoolean(chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescription`", false)) + normalizedType = LCase(rawType) + + if targetIsSeerr + if normalizedType = "movie" + movieHide = chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescriptionSeerrMovie`", invalid) + if isValid(movieHide) then return toBoolean(movieHide) + return legacyHide + else if normalizedType = "series" or normalizedType = "show" or normalizedType = "tv" + return toBoolean(chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescriptionSeerrShow`", false)) + else if normalizedType = "boxset" or normalizedType = "collection" + return toBoolean(chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescriptionSeerrCollection`", false)) + else if normalizedType = "person" + return toBoolean(chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescriptionPerson`", false)) + end if + return false + end if + + if normalizedType = "movie" + movieHide = chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescriptionMovie`", invalid) + if isValid(movieHide) then return toBoolean(movieHide) + return legacyHide + else if normalizedType = "series" or normalizedType = "show" or normalizedType = "tv" + return toBoolean(chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescriptionShow`", false)) + else if normalizedType = "season" + return toBoolean(chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescriptionSeason`", false)) + else if normalizedType = "episode" + episodeHide = chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescriptionEpisode`", invalid) + if isValid(episodeHide) then return toBoolean(episodeHide) + return legacyHide + else if normalizedType = "boxset" or normalizedType = "collection" + return toBoolean(chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescriptionBoxSet`", false)) + else if normalizedType = "book" or normalizedType = "audiobook" + return toBoolean(chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescriptionBook`", false)) + else if normalizedType = "person" + return toBoolean(chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescriptionPerson`", false)) + else if normalizedType = "musicalbum" or normalizedType = "musicartist" or normalizedType = "audio" or normalizedType = "playlist" + return toBoolean(chainLookupReturn(resolvedSession, "user.settings.`ui.itemdetail.hideMediaDescriptionMusic`", false)) + end if + + return false +end function diff --git a/source/utils/seerrDetailHost.bs b/source/utils/seerrDetailHost.bs index a064d9799..dc8fe3727 100644 --- a/source/utils/seerrDetailHost.bs +++ b/source/utils/seerrDetailHost.bs @@ -10,6 +10,7 @@ sub onSeerrTargetChanged() if not isValid(target) or not isValidAndNotEmpty(target.tmdbId) then return m.top.seerrOnly = true + m.top.itemType = isStringEqual(target.mediaType, "tv") ? "series" : (isStringEqual(target.mediaType, "collection") ? "collection" : "movie") EnsureSeerrPublicSettings() m.seerrDetailsTask = CreateObject("roSGNode", "SeerrAPITask") diff --git a/source/utils/session.bs b/source/utils/session.bs index fa00ac385..0393f098d 100644 --- a/source/utils/session.bs +++ b/source/utils/session.bs @@ -186,6 +186,21 @@ namespace session end if end for + if userSettings.doesExist("ui.itemdetail.hideMediaDescription") and toBoolean(userSettings["ui.itemdetail.hideMediaDescription"]) = true + if not userSettings.doesExist("ui.itemdetail.hideMediaDescriptionMovie") + tmpSettingArray["ui.itemdetail.hideMediaDescriptionMovie"] = true + registry_write("ui.itemdetail.hideMediaDescriptionMovie", "true", tmpSession.user.id) + end if + if not userSettings.doesExist("ui.itemdetail.hideMediaDescriptionEpisode") + tmpSettingArray["ui.itemdetail.hideMediaDescriptionEpisode"] = true + registry_write("ui.itemdetail.hideMediaDescriptionEpisode", "true", tmpSession.user.id) + end if + if not userSettings.doesExist("ui.itemdetail.hideMediaDescriptionSeerrMovie") + tmpSettingArray["ui.itemdetail.hideMediaDescriptionSeerrMovie"] = true + registry_write("ui.itemdetail.hideMediaDescriptionSeerrMovie", "true", tmpSession.user.id) + end if + end if + tmpSettingArray["serverId"] = toBoolean(m.global.session.server.id) if isValid(m.global.session.server.url) tmpSettingArray["serverUrl"] = toBoolean(LCase(m.global.session.server.url)) @@ -460,6 +475,17 @@ namespace session if configTree = invalid then return tmpSettings = m.global.session.user.settings + if toBoolean(tmpSettings["ui.itemdetail.hideMediaDescription"]) = true + if not tmpSettings.doesExist("ui.itemdetail.hideMediaDescriptionMovie") + tmpSettings["ui.itemdetail.hideMediaDescriptionMovie"] = true + end if + if not tmpSettings.doesExist("ui.itemdetail.hideMediaDescriptionEpisode") + tmpSettings["ui.itemdetail.hideMediaDescriptionEpisode"] = true + end if + if not tmpSettings.doesExist("ui.itemdetail.hideMediaDescriptionSeerrMovie") + tmpSettings["ui.itemdetail.hideMediaDescriptionSeerrMovie"] = true + end if + end if session.user.settings.CollectDefaults(configTree, tmpSettings) session.user.Update("settings", tmpSettings) diff --git a/source/utils/settingsSync.bs b/source/utils/settingsSync.bs index 36dd00d6e..c7ff51dc1 100644 --- a/source/utils/settingsSync.bs +++ b/source/utils/settingsSync.bs @@ -54,6 +54,17 @@ namespace settingsSync { pluginKey: "detailScreenStyle", rokuKey: "ui.itemdetail.style", type: "detailStyle" }, { pluginKey: "detailExpandedTabs", rokuKey: "ui.itemdetail.expandedTabs", type: "bool" }, { pluginKey: "hideDetailsMediaDescription", rokuKey: "ui.itemdetail.hideMediaDescription", type: "bool" }, + { pluginKey: "hideDetailsMediaDescriptionMovie", rokuKey: "ui.itemdetail.hideMediaDescriptionMovie", type: "bool" }, + { pluginKey: "hideDetailsMediaDescriptionShow", rokuKey: "ui.itemdetail.hideMediaDescriptionShow", type: "bool" }, + { pluginKey: "hideDetailsMediaDescriptionSeason", rokuKey: "ui.itemdetail.hideMediaDescriptionSeason", type: "bool" }, + { pluginKey: "hideDetailsMediaDescriptionEpisode", rokuKey: "ui.itemdetail.hideMediaDescriptionEpisode", type: "bool" }, + { pluginKey: "hideDetailsMediaDescriptionBoxSet", rokuKey: "ui.itemdetail.hideMediaDescriptionBoxSet", type: "bool" }, + { pluginKey: "hideDetailsMediaDescriptionBook", rokuKey: "ui.itemdetail.hideMediaDescriptionBook", type: "bool" }, + { pluginKey: "hideDetailsMediaDescriptionPerson", rokuKey: "ui.itemdetail.hideMediaDescriptionPerson", type: "bool" }, + { pluginKey: "hideDetailsMediaDescriptionMusic", rokuKey: "ui.itemdetail.hideMediaDescriptionMusic", type: "bool" }, + { pluginKey: "hideDetailsMediaDescriptionSeerrMovie", rokuKey: "ui.itemdetail.hideMediaDescriptionSeerrMovie", type: "bool" }, + { pluginKey: "hideDetailsMediaDescriptionSeerrShow", rokuKey: "ui.itemdetail.hideMediaDescriptionSeerrShow", type: "bool" }, + { pluginKey: "hideDetailsMediaDescriptionSeerrCollection", rokuKey: "ui.itemdetail.hideMediaDescriptionSeerrCollection", type: "bool" }, { pluginKey: "detailUseSeriesThumbnails", rokuKey: "ui.itemdetail.useSeriesThumbnails", type: "bool" }, { pluginKey: "hideHomeMediaDescription", rokuKey: "ui.home.hideMediaDescription", type: "bool" }, { pluginKey: "homeRowsStyle", rokuKey: "ui.home.rowsStyle", type: "direct" }, @@ -330,6 +341,22 @@ namespace settingsSync end if end for + if toBoolean(profile.hideDetailsMediaDescription) = true + userId = m.global.session.user.id + if not isValid(profile.hideDetailsMediaDescriptionMovie) and get_user_setting("ui.itemdetail.hideMediaDescriptionMovie") = invalid + tmpSettings["ui.itemdetail.hideMediaDescriptionMovie"] = true + registry_write("ui.itemdetail.hideMediaDescriptionMovie", "true", userId) + end if + if not isValid(profile.hideDetailsMediaDescriptionEpisode) and get_user_setting("ui.itemdetail.hideMediaDescriptionEpisode") = invalid + tmpSettings["ui.itemdetail.hideMediaDescriptionEpisode"] = true + registry_write("ui.itemdetail.hideMediaDescriptionEpisode", "true", userId) + end if + if not isValid(profile.hideDetailsMediaDescriptionSeerrMovie) and get_user_setting("ui.itemdetail.hideMediaDescriptionSeerrMovie") = invalid + tmpSettings["ui.itemdetail.hideMediaDescriptionSeerrMovie"] = true + registry_write("ui.itemdetail.hideMediaDescriptionSeerrMovie", "true", userId) + end if + end if + appliedThemeId = tmpSettings["ui.theme.customThemeId"] if isValidAndNotEmpty(appliedThemeId) settingsSync.ApplyThemeColorsFromId(appliedThemeId, tmpSettings)