mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01: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
 | 
						|
  }
 | 
						|
}
 |