diff --git a/components/modals/OrderModal.vue b/components/modals/OrderModal.vue index c1f364b4..79d7e23e 100644 --- a/components/modals/OrderModal.vue +++ b/components/modals/OrderModal.vue @@ -39,6 +39,10 @@ export default { text: 'Author (Last, First)', value: 'media.metadata.authorNameLF' }, + { + text: 'Published Year', + value: 'media.metadata.publishedYear' + }, { text: 'Added At', value: 'addedAt' diff --git a/store/libraries.js b/store/libraries.js index 08b62fa9..af868897 100644 --- a/store/libraries.js +++ b/store/libraries.js @@ -22,7 +22,7 @@ export const getters = { } export const actions = { - fetch({ state, commit, rootState }, libraryId) { + fetch({ state, commit, dispatch, rootState }, libraryId) { if (!rootState.user || !rootState.user.user) { console.error('libraries/fetch - User not set') return false @@ -35,6 +35,8 @@ export const actions = { var filterData = data.filterdata var issues = data.issues || 0 + dispatch('user/checkUpdateLibrarySortFilter', library.mediaType, { root: true }) + commit('addUpdate', library) commit('setLibraryIssues', issues) commit('setLibraryFilterData', filterData) diff --git a/store/user.js b/store/user.js index 4f76dfb2..7ae96ebd 100644 --- a/store/user.js +++ b/store/user.js @@ -48,6 +48,36 @@ export const getters = { } export const actions = { + // When changing libraries make sure sort and filter is still valid + checkUpdateLibrarySortFilter({ state, dispatch, commit }, mediaType) { + var settingsUpdate = {} + if (mediaType == 'podcast') { + if (state.settings.mobileOrderBy == 'media.metadata.authorName' || state.settings.mobileOrderBy == 'media.metadata.authorNameLF') { + settingsUpdate.mobileOrderBy = 'media.metadata.author' + } + if (state.settings.mobileOrderBy == 'media.duration') { + settingsUpdate.mobileOrderBy = 'media.numTracks' + } + if (state.settings.mobileOrderBy == 'media.metadata.publishedYear') { + settingsUpdate.mobileOrderBy = 'media.metadata.title' + } + var invalidFilters = ['series', 'authors', 'narrators', 'languages', 'progress', 'issues'] + var filterByFirstPart = (state.settings.mobileFilterBy || '').split('.').shift() + if (invalidFilters.includes(filterByFirstPart)) { + settingsUpdate.filterBy = 'all' + } + } else { + if (state.settings.mobileOrderBy == 'media.metadata.author') { + settingsUpdate.mobileOrderBy = 'media.metadata.authorName' + } + if (state.settings.mobileOrderBy == 'media.numTracks') { + settingsUpdate.mobileOrderBy = 'media.duration' + } + } + if (Object.keys(settingsUpdate).length) { + dispatch('updateUserSettings', settingsUpdate) + } + }, async updateUserSettings({ state, commit }, payload) { if (state.serverConnectionConfig) { var updatePayload = {