From a9e12657f572d4ac1ef9b27d09ae1137f6f9f7c0 Mon Sep 17 00:00:00 2001 From: meek2100 Date: Thu, 26 Feb 2026 14:29:28 -0800 Subject: [PATCH 1/4] Add autocomplete attributes to login and setup fields for password manager support --- client/components/ui/TextInput.vue | 5 +++-- client/components/ui/TextInputWithLabel.vue | 5 +++-- client/pages/login.vue | 10 +++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/client/components/ui/TextInput.vue b/client/components/ui/TextInput.vue index dd0eaa738..cd3bc6d2d 100644 --- a/client/components/ui/TextInput.vue +++ b/client/components/ui/TextInput.vue @@ -1,6 +1,6 @@ @@ -26,7 +26,8 @@ export default { disabled: Boolean, inputClass: String, showCopy: Boolean, - trimWhitespace: Boolean + trimWhitespace: Boolean, + autocomplete: String }, data() { return {} diff --git a/client/pages/login.vue b/client/pages/login.vue index 8e5cde098..cec150e71 100644 --- a/client/pages/login.vue +++ b/client/pages/login.vue @@ -17,9 +17,9 @@

Create Root User

- - - + + +

Directory Paths

@@ -51,10 +51,10 @@ - + - +
{{ processing ? 'Checking...' : $strings.ButtonSubmit }}
From f47bbc7886689ecbd8f0ed7c5be5cfa8104d0b2d Mon Sep 17 00:00:00 2001 From: na3shkw <48012204+na3shkw@users.noreply.github.com> Date: Sat, 25 Apr 2026 15:56:16 +0000 Subject: [PATCH 2/4] Add Japanese language and Japan podcast search region --- client/plugins/i18n.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/plugins/i18n.js b/client/plugins/i18n.js index 0184ca9e5..a56fbd267 100644 --- a/client/plugins/i18n.js +++ b/client/plugins/i18n.js @@ -21,6 +21,7 @@ const languageCodeMap = { he: { label: 'עברית', dateFnsLocale: 'he' }, hr: { label: 'Hrvatski', dateFnsLocale: 'hr' }, it: { label: 'Italiano', dateFnsLocale: 'it' }, + ja: { label: '日本語', dateFnsLocale: 'ja' }, lt: { label: 'Lietuvių', dateFnsLocale: 'lt' }, hu: { label: 'Magyar', dateFnsLocale: 'hu' }, ko: { label: '한국어', dateFnsLocale: 'ko' }, @@ -60,6 +61,7 @@ const podcastSearchRegionMap = { hr: { label: 'Hrvatska' }, il: { label: 'ישראל / إسرائيل' }, it: { label: 'Italia' }, + jp: { label: '日本' }, lu: { label: 'Luxembourg / Luxemburg / Lëtezebuerg' }, hu: { label: 'Magyarország' }, nl: { label: 'Nederland' }, From 92df92ec99fd8b53006ba24d53e887b044494aff Mon Sep 17 00:00:00 2001 From: advplyr Date: Sun, 26 Apr 2026 16:51:08 -0500 Subject: [PATCH 3/4] Fix recent episodes endpoint cache not being cleared when updating media progress #5159 --- server/managers/ApiCacheManager.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/managers/ApiCacheManager.js b/server/managers/ApiCacheManager.js index 8a67e4898..e34e4c055 100644 --- a/server/managers/ApiCacheManager.js +++ b/server/managers/ApiCacheManager.js @@ -42,11 +42,14 @@ class ApiCacheManager { } clearUserProgressSlices(modelName, hook) { - const removedPersonalized = this.modelsInvalidatingPersonalized.has(modelName) ? this.clearByUrlPattern(/^\/libraries\/[^/]+\/personalized/) : 0 + let removedPersonalized = 0 + let removedRecentEpisodes = 0 + if (this.modelsInvalidatingPersonalized.has(modelName)) { + removedPersonalized = this.clearByUrlPattern(/^\/libraries\/[^/]+\/personalized/) + removedRecentEpisodes = this.clearByUrlPattern(/^\/libraries\/[^/]+\/recent-episodes/) + } const removedMe = this.modelsInvalidatingMe.has(modelName) ? this.clearByUrlPattern(/^\/me(\/|\?|$)/) : 0 - Logger.debug( - `[ApiCacheManager] ${modelName}.${hook}: cleared user-progress cache slices (personalized=${removedPersonalized}, me=${removedMe})` - ) + Logger.debug(`[ApiCacheManager] ${modelName}.${hook}: cleared user-progress cache slices (personalized=${removedPersonalized}, recentEpisodes=${removedRecentEpisodes}, me=${removedMe})`) } clear(model, hook) { From 62d7097e23dbabb6da3def612622ed4b6a3123af Mon Sep 17 00:00:00 2001 From: advplyr Date: Sun, 26 Apr 2026 16:51:39 -0500 Subject: [PATCH 4/4] Add ApiCacheManager test for should remove recent-episodes cache entries --- test/server/managers/ApiCacheManager.test.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/server/managers/ApiCacheManager.test.js b/test/server/managers/ApiCacheManager.test.js index 19bbeecf6..2e9ad5b77 100644 --- a/test/server/managers/ApiCacheManager.test.js +++ b/test/server/managers/ApiCacheManager.test.js @@ -1,6 +1,7 @@ // Import dependencies and modules for testing const { expect } = require('chai') const sinon = require('sinon') +const { LRUCache } = require('lru-cache') const ApiCacheManager = require('../../../server/managers/ApiCacheManager') describe('ApiCacheManager', () => { @@ -94,4 +95,17 @@ describe('ApiCacheManager', () => { expect(res.originalSend.calledWith(body)).to.be.true }) }) + + describe('clear on mediaProgress', () => { + it('should remove recent-episodes cache entries', () => { + const key = JSON.stringify({ user: 'u', url: '/libraries/abc-123/recent-episodes?limit=50&page=0' }) + const cache = new LRUCache({ max: 10 }) + cache.set(key, { body: '[]', headers: {}, statusCode: 200 }) + const manager = new ApiCacheManager(cache) + + manager.clear({ name: 'mediaProgress' }, 'afterUpdate') + + expect(cache.get(key)).to.be.undefined + }) + }) })