mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-03-19 18:08:19 +01:00
Update:Changelog shows all releases matching minor version and lower than current #3250
This commit is contained in:
parent
91dc6eebb0
commit
2f98cb9b6d
@ -6,10 +6,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div class="px-8 py-6 w-full rounded-lg bg-bg shadow-lg border border-black-300 relative overflow-y-scroll" style="max-height: 80vh">
|
<div class="px-8 py-6 w-full rounded-lg bg-bg shadow-lg border border-black-300 relative overflow-y-scroll" style="max-height: 80vh">
|
||||||
|
<template v-for="release in releasesToShow">
|
||||||
|
<div :key="release.name">
|
||||||
<p class="text-xl font-bold pb-4">
|
<p class="text-xl font-bold pb-4">
|
||||||
Changelog <a :href="currentTagUrl" target="_blank" class="hover:underline">v{{ currentVersionNumber }}</a> ({{ currentVersionPubDate }})
|
Changelog <a :href="`https://github.com/advplyr/audiobookshelf/releases/tag/${release.name}`" target="_blank" class="hover:underline">{{ release.name }}</a> ({{ $formatDate(release.pubdate, dateFormat) }})
|
||||||
</p>
|
</p>
|
||||||
<div class="custom-text" v-html="compiledMarkedown" />
|
<div class="custom-text" v-html="getChangelog(release)" />
|
||||||
|
</div>
|
||||||
|
<div v-if="release !== releasesToShow[releasesToShow.length - 1]" class="border-b border-black-300 my-8" />
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</modals-modal>
|
</modals-modal>
|
||||||
</template>
|
</template>
|
||||||
@ -37,24 +42,15 @@ export default {
|
|||||||
dateFormat() {
|
dateFormat() {
|
||||||
return this.$store.state.serverSettings.dateFormat
|
return this.$store.state.serverSettings.dateFormat
|
||||||
},
|
},
|
||||||
changelog() {
|
releasesToShow() {
|
||||||
return this.versionData?.currentVersionChangelog || 'No Changelog Available'
|
return this.versionData?.releasesToShow || []
|
||||||
},
|
}
|
||||||
compiledMarkedown() {
|
},
|
||||||
return marked.parse(this.changelog, { gfm: true, breaks: true })
|
methods: {
|
||||||
},
|
getChangelog(release) {
|
||||||
currentVersionPubDate() {
|
return marked.parse(release.changelog || 'No Changelog Available', { gfm: true, breaks: true })
|
||||||
if (!this.versionData?.currentVersionPubDate) return 'Unknown release date'
|
|
||||||
return `${this.$formatDate(this.versionData.currentVersionPubDate, this.dateFormat)}`
|
|
||||||
},
|
|
||||||
currentTagUrl() {
|
|
||||||
return this.versionData?.currentTagUrl
|
|
||||||
},
|
|
||||||
currentVersionNumber() {
|
|
||||||
return this.$config.version
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {},
|
|
||||||
mounted() {}
|
mounted() {}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -11,6 +11,7 @@ function parseSemver(ver) {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
|
name: ver,
|
||||||
total,
|
total,
|
||||||
version: groups[2],
|
version: groups[2],
|
||||||
major: Number(groups[3]),
|
major: Number(groups[3]),
|
||||||
@ -24,49 +25,60 @@ function parseSemver(ver) {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getReleases() {
|
||||||
|
return axios
|
||||||
|
.get(`https://api.github.com/repos/advplyr/audiobookshelf/releases`)
|
||||||
|
.then((res) => {
|
||||||
|
return res.data
|
||||||
|
.map((release) => {
|
||||||
|
const tagName = release.tag_name
|
||||||
|
const verObj = parseSemver(tagName)
|
||||||
|
if (verObj) {
|
||||||
|
verObj.pubdate = new Date(release.published_at)
|
||||||
|
verObj.changelog = release.body
|
||||||
|
return verObj
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
})
|
||||||
|
.filter((verObj) => verObj)
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
console.error('Failed to get releases', error)
|
||||||
|
return []
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export const currentVersion = packagejson.version
|
export const currentVersion = packagejson.version
|
||||||
|
|
||||||
export async function checkForUpdate() {
|
export async function checkForUpdate() {
|
||||||
if (!packagejson.version) {
|
if (!packagejson.version) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
var currVerObj = parseSemver('v' + packagejson.version)
|
|
||||||
if (!currVerObj) {
|
const releases = await getReleases()
|
||||||
console.error('Invalid version', packagejson.version)
|
if (!releases.length) {
|
||||||
|
console.error('No releases found')
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
var largestVer = null
|
|
||||||
await axios.get(`https://api.github.com/repos/advplyr/audiobookshelf/releases`).then((res) => {
|
|
||||||
var releases = res.data
|
|
||||||
if (releases && releases.length) {
|
|
||||||
releases.forEach((release) => {
|
|
||||||
var tagName = release.tag_name
|
|
||||||
var verObj = parseSemver(tagName)
|
|
||||||
if (verObj) {
|
|
||||||
if (!largestVer || largestVer.total < verObj.total) {
|
|
||||||
largestVer = verObj
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (verObj.version == currVerObj.version) {
|
const currentVersion = releases.find((release) => release.version == packagejson.version)
|
||||||
currVerObj.pubdate = new Date(release.published_at)
|
if (!currentVersion) {
|
||||||
currVerObj.changelog = release.body
|
console.error('Current version not found in releases')
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
if (!largestVer) {
|
|
||||||
console.error('No valid version tags to compare with')
|
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const latestVersion = releases[0]
|
||||||
|
const currentVersionMinor = currentVersion.minor
|
||||||
|
// Show all releases with the same minor version and lower or equal total version
|
||||||
|
const releasesToShow = releases.filter((release) => {
|
||||||
|
return release.minor == currentVersionMinor && release.total <= currentVersion.total
|
||||||
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
hasUpdate: largestVer.total > currVerObj.total,
|
hasUpdate: latestVersion.total > currentVersion.total,
|
||||||
latestVersion: largestVer.version,
|
latestVersion: latestVersion.version,
|
||||||
githubTagUrl: `https://github.com/advplyr/audiobookshelf/releases/tag/v${largestVer.version}`,
|
githubTagUrl: `https://github.com/advplyr/audiobookshelf/releases/tag/v${latestVersion.version}`,
|
||||||
currentVersion: currVerObj.version,
|
currentVersion: currentVersion.version,
|
||||||
currentTagUrl: `https://github.com/advplyr/audiobookshelf/releases/tag/v${currVerObj.version}`,
|
releasesToShow
|
||||||
currentVersionPubDate: currVerObj.pubdate,
|
|
||||||
currentVersionChangelog: currVerObj.changelog
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,33 +32,33 @@ export const state = () => ({
|
|||||||
})
|
})
|
||||||
|
|
||||||
export const getters = {
|
export const getters = {
|
||||||
getServerSetting: state => key => {
|
getServerSetting: (state) => (key) => {
|
||||||
if (!state.serverSettings) return null
|
if (!state.serverSettings) return null
|
||||||
return state.serverSettings[key]
|
return state.serverSettings[key]
|
||||||
},
|
},
|
||||||
getLibraryItemIdStreaming: state => {
|
getLibraryItemIdStreaming: (state) => {
|
||||||
return state.streamLibraryItem?.id || null
|
return state.streamLibraryItem?.id || null
|
||||||
},
|
},
|
||||||
getIsStreamingFromDifferentLibrary: (state, getters, rootState) => {
|
getIsStreamingFromDifferentLibrary: (state, getters, rootState) => {
|
||||||
if (!state.streamLibraryItem) return false
|
if (!state.streamLibraryItem) return false
|
||||||
return state.streamLibraryItem.libraryId !== rootState.libraries.currentLibraryId
|
return state.streamLibraryItem.libraryId !== rootState.libraries.currentLibraryId
|
||||||
},
|
},
|
||||||
getIsMediaStreaming: state => (libraryItemId, episodeId) => {
|
getIsMediaStreaming: (state) => (libraryItemId, episodeId) => {
|
||||||
if (!state.streamLibraryItem) return null
|
if (!state.streamLibraryItem) return null
|
||||||
if (!episodeId) return state.streamLibraryItem.id == libraryItemId
|
if (!episodeId) return state.streamLibraryItem.id == libraryItemId
|
||||||
return state.streamLibraryItem.id == libraryItemId && state.streamEpisodeId == episodeId
|
return state.streamLibraryItem.id == libraryItemId && state.streamEpisodeId == episodeId
|
||||||
},
|
},
|
||||||
getIsMediaQueued: state => (libraryItemId, episodeId) => {
|
getIsMediaQueued: (state) => (libraryItemId, episodeId) => {
|
||||||
return state.playerQueueItems.some(i => {
|
return state.playerQueueItems.some((i) => {
|
||||||
if (!episodeId) return i.libraryItemId === libraryItemId
|
if (!episodeId) return i.libraryItemId === libraryItemId
|
||||||
return i.libraryItemId === libraryItemId && i.episodeId === episodeId
|
return i.libraryItemId === libraryItemId && i.episodeId === episodeId
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
getBookshelfView: state => {
|
getBookshelfView: (state) => {
|
||||||
if (!state.serverSettings || isNaN(state.serverSettings.bookshelfView)) return Constants.BookshelfView.STANDARD
|
if (!state.serverSettings || isNaN(state.serverSettings.bookshelfView)) return Constants.BookshelfView.STANDARD
|
||||||
return state.serverSettings.bookshelfView
|
return state.serverSettings.bookshelfView
|
||||||
},
|
},
|
||||||
getHomeBookshelfView: state => {
|
getHomeBookshelfView: (state) => {
|
||||||
if (!state.serverSettings || isNaN(state.serverSettings.homeBookshelfView)) return Constants.BookshelfView.STANDARD
|
if (!state.serverSettings || isNaN(state.serverSettings.homeBookshelfView)) return Constants.BookshelfView.STANDARD
|
||||||
return state.serverSettings.homeBookshelfView
|
return state.serverSettings.homeBookshelfView
|
||||||
}
|
}
|
||||||
@ -69,14 +69,17 @@ export const actions = {
|
|||||||
const updatePayload = {
|
const updatePayload = {
|
||||||
...payload
|
...payload
|
||||||
}
|
}
|
||||||
return this.$axios.$patch('/api/settings', updatePayload).then((result) => {
|
return this.$axios
|
||||||
|
.$patch('/api/settings', updatePayload)
|
||||||
|
.then((result) => {
|
||||||
if (result.success) {
|
if (result.success) {
|
||||||
commit('setServerSettings', result.serverSettings)
|
commit('setServerSettings', result.serverSettings)
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}).catch((error) => {
|
})
|
||||||
|
.catch((error) => {
|
||||||
console.error('Failed to update server settings', error)
|
console.error('Failed to update server settings', error)
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
@ -96,7 +99,7 @@ export const actions = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var shouldCheckForUpdate = Date.now() - Number(lastVerCheck) > VERSION_CHECK_BUFF
|
var shouldCheckForUpdate = Date.now() - Number(lastVerCheck) > VERSION_CHECK_BUFF
|
||||||
if (!shouldCheckForUpdate && savedVersionData && savedVersionData.version !== currentVersion) {
|
if (!shouldCheckForUpdate && savedVersionData && (savedVersionData.version !== currentVersion || !savedVersionData.releasesToShow)) {
|
||||||
// Version mismatch between saved data so check for update anyway
|
// Version mismatch between saved data so check for update anyway
|
||||||
shouldCheckForUpdate = true
|
shouldCheckForUpdate = true
|
||||||
}
|
}
|
||||||
@ -180,7 +183,7 @@ export const mutations = {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
addItemToQueue(state, item) {
|
addItemToQueue(state, item) {
|
||||||
const exists = state.playerQueueItems.some(i => {
|
const exists = state.playerQueueItems.some((i) => {
|
||||||
if (!i.episodeId) return i.libraryItemId === item.libraryItemId
|
if (!i.episodeId) return i.libraryItemId === item.libraryItemId
|
||||||
return i.libraryItemId === item.libraryItemId && i.episodeId === item.episodeId
|
return i.libraryItemId === item.libraryItemId && i.episodeId === item.episodeId
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user