From bb4eec935515f5fe945b970ec2cef2b3355a4e2d Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Sat, 21 Jun 2025 12:02:44 +0200 Subject: [PATCH 1/3] add explicit --- client/components/controls/LibraryFilterSelect.vue | 5 +++++ server/utils/queries/libraryItemsBookFilters.js | 2 ++ 2 files changed, 7 insertions(+) diff --git a/client/components/controls/LibraryFilterSelect.vue b/client/components/controls/LibraryFilterSelect.vue index f5eec41a..7bfa1fe8 100644 --- a/client/components/controls/LibraryFilterSelect.vue +++ b/client/components/controls/LibraryFilterSelect.vue @@ -228,6 +228,11 @@ export default { value: 'abridged', sublist: false }, + { + text: this.$strings.LabelExplicit, + value: 'explicit', + sublist: false + }, { text: this.$strings.ButtonIssues, value: 'issues', diff --git a/server/utils/queries/libraryItemsBookFilters.js b/server/utils/queries/libraryItemsBookFilters.js index 7fa5eb41..ded712cf 100644 --- a/server/utils/queries/libraryItemsBookFilters.js +++ b/server/utils/queries/libraryItemsBookFilters.js @@ -186,6 +186,8 @@ module.exports = { mediaWhere['$series.id$'] = null } else if (group === 'abridged') { mediaWhere['abridged'] = true + } else if (group === 'explicit') { + mediaWhere['explicit'] = true } else if (['genres', 'tags', 'narrators'].includes(group)) { mediaWhere[group] = Sequelize.where(Sequelize.literal(`(SELECT count(*) FROM json_each(${group}) WHERE json_valid(${group}) AND json_each.value = :filterValue)`), { [Sequelize.Op.gte]: 1 From 5336d0525e7bd46150369f50e08d06e1145a55b3 Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Sat, 21 Jun 2025 12:29:54 +0200 Subject: [PATCH 2/3] add explicit to podcasts --- client/components/controls/LibraryFilterSelect.vue | 5 +++++ server/utils/queries/libraryItemsPodcastFilters.js | 2 ++ 2 files changed, 7 insertions(+) diff --git a/client/components/controls/LibraryFilterSelect.vue b/client/components/controls/LibraryFilterSelect.vue index 7bfa1fe8..32bb9a86 100644 --- a/client/components/controls/LibraryFilterSelect.vue +++ b/client/components/controls/LibraryFilterSelect.vue @@ -277,6 +277,11 @@ export default { value: 'languages', sublist: true }, + { + text: this.$strings.LabelExplicit, + value: 'explicit', + sublist: false + }, { text: this.$strings.ButtonIssues, value: 'issues', diff --git a/server/utils/queries/libraryItemsPodcastFilters.js b/server/utils/queries/libraryItemsPodcastFilters.js index 33bac28f..8bb5dc11 100644 --- a/server/utils/queries/libraryItemsPodcastFilters.js +++ b/server/utils/queries/libraryItemsPodcastFilters.js @@ -59,6 +59,8 @@ module.exports = { replacements.filterValue = value } else if (group === 'languages') { mediaWhere['language'] = value + } else if (group === 'explicit') { + mediaWhere['explicit'] = true } return { From af684e6a69bf4c0d58f2f3c019e9788d6e20876c Mon Sep 17 00:00:00 2001 From: advplyr Date: Sat, 21 Jun 2025 17:01:13 -0500 Subject: [PATCH 3/3] Explicit library filter not shown for users without permission --- .../controls/LibraryFilterSelect.vue | 34 +++++++++++++------ client/store/user.js | 3 ++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/client/components/controls/LibraryFilterSelect.vue b/client/components/controls/LibraryFilterSelect.vue index 32bb9a86..62a9b803 100644 --- a/client/components/controls/LibraryFilterSelect.vue +++ b/client/components/controls/LibraryFilterSelect.vue @@ -94,6 +94,9 @@ export default { userIsAdminOrUp() { return this.$store.getters['user/getIsAdminOrUp'] }, + userCanAccessExplicitContent() { + return this.$store.getters['user/getUserCanAccessExplicitContent'] + }, libraryMediaType() { return this.$store.getters['libraries/getCurrentLibraryMediaType'] }, @@ -228,11 +231,6 @@ export default { value: 'abridged', sublist: false }, - { - text: this.$strings.LabelExplicit, - value: 'explicit', - sublist: false - }, { text: this.$strings.ButtonIssues, value: 'issues', @@ -244,6 +242,15 @@ export default { sublist: false } ] + + if (this.userCanAccessExplicitContent) { + items.push({ + text: this.$strings.LabelExplicit, + value: 'explicit', + sublist: false + }) + } + if (this.userIsAdminOrUp) { items.push({ text: this.$strings.LabelShareOpen, @@ -254,7 +261,7 @@ export default { return items }, podcastItems() { - return [ + const items = [ { text: this.$strings.LabelAll, value: 'all' @@ -277,11 +284,6 @@ export default { value: 'languages', sublist: true }, - { - text: this.$strings.LabelExplicit, - value: 'explicit', - sublist: false - }, { text: this.$strings.ButtonIssues, value: 'issues', @@ -293,6 +295,16 @@ export default { sublist: false } ] + + if (this.userCanAccessExplicitContent) { + items.push({ + text: this.$strings.LabelExplicit, + value: 'explicit', + sublist: false + }) + } + + return items }, selectItems() { if (this.isSeries) return this.seriesItems diff --git a/client/store/user.js b/client/store/user.js index d5aad19b..41e12cad 100644 --- a/client/store/user.js +++ b/client/store/user.js @@ -58,6 +58,9 @@ export const getters = { getUserCanAccessAllLibraries: (state) => { return !!state.user?.permissions?.accessAllLibraries }, + getUserCanAccessExplicitContent: (state) => { + return !!state.user?.permissions?.accessExplicitContent + }, getLibrariesAccessible: (state, getters) => { if (!state.user) return [] if (getters.getUserCanAccessAllLibraries) return []