mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-28 09:12:25 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import packagejson from '../package.json'
 | |
| import axios from 'axios'
 | |
| 
 | |
| function parseSemver(ver) {
 | |
|   if (!ver) return null
 | |
|   var groups = ver.match(/^v((([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)$/)
 | |
|   if (groups && groups.length > 6) {
 | |
|     var total = Number(groups[3]) * 10000 + Number(groups[4]) * 100 + Number(groups[5])
 | |
|     if (isNaN(total)) {
 | |
|       console.warn('Invalid version total', groups[3], groups[4], groups[5])
 | |
|       return null
 | |
|     }
 | |
|     return {
 | |
|       name: ver,
 | |
|       total,
 | |
|       version: groups[2],
 | |
|       major: Number(groups[3]),
 | |
|       minor: Number(groups[4]),
 | |
|       patch: Number(groups[5]),
 | |
|       preRelease: groups[6] || null
 | |
|     }
 | |
|   } else {
 | |
|     console.warn('Invalid semver string', ver)
 | |
|   }
 | |
|   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 async function checkForUpdate() {
 | |
|   if (!packagejson.version) {
 | |
|     return null
 | |
|   }
 | |
| 
 | |
|   const releases = await getReleases()
 | |
|   if (!releases.length) {
 | |
|     console.error('No releases found')
 | |
|     return null
 | |
|   }
 | |
| 
 | |
|   const currentVersion = releases.find((release) => release.version == packagejson.version)
 | |
|   if (!currentVersion) {
 | |
|     console.error('Current version not found in releases')
 | |
|     return null
 | |
|   }
 | |
| 
 | |
|   const latestVersion = releases[0]
 | |
|   const currentVersionMinor = currentVersion.minor
 | |
|   const currentVersionMajor = currentVersion.major
 | |
|   // Show all releases with the same minor version and lower or equal total version
 | |
|   const releasesToShow = releases.filter((release) => {
 | |
|     return release.major == currentVersionMajor && release.minor == currentVersionMinor && release.total <= currentVersion.total
 | |
|   })
 | |
| 
 | |
|   return {
 | |
|     hasUpdate: latestVersion.total > currentVersion.total,
 | |
|     latestVersion: latestVersion.version,
 | |
|     githubTagUrl: `https://github.com/advplyr/audiobookshelf/releases/tag/v${latestVersion.version}`,
 | |
|     currentVersion: currentVersion.version,
 | |
|     releasesToShow
 | |
|   }
 | |
| }
 |