Added update checker

This commit is contained in:
RemixDev
2022-01-13 01:33:29 +01:00
parent 018b008915
commit b9e2fd298e
9 changed files with 152 additions and 71 deletions

View File

@@ -9,6 +9,8 @@ import { wss } from './app'
import { Settings } from './types'
import { NotLoggedIn } from './helpers/errors'
import { GUI_PACKAGE } from './helpers/paths'
const Downloader = deemix.downloader.Downloader
const { Single, Collection, Convertable } = deemix.types.downloadObjects
export const defaultSettings: Settings = deemix.settings.DEFAULTS
@@ -20,7 +22,10 @@ export const getAccessToken = deemix.utils.deezer.getAccessToken
export const getArlFromAccessToken = deemix.utils.deezer.getArlFromAccessToken
export const deemixVersion = require('../node_modules/deemix/package.json').version
const currentVersionTemp = JSON.parse(String(fs.readFileSync(GUI_PACKAGE))).version
export const currentVersion = currentVersionTemp === '0.0.0' ? 'continuous' : currentVersionTemp
let deezerAvailable: boolean | null = null
let latestVersion: string | null = null
export async function isDeezerAvailable(): Promise<boolean> {
if (deezerAvailable === null) {
@@ -44,6 +49,54 @@ export async function isDeezerAvailable(): Promise<boolean> {
return deezerAvailable
}
export async function getLatestVersion(force = false): Promise<string | null> {
if ((latestVersion === null || force) && !settings.disableUpdateCheck) {
let response
try {
response = await got.get('https://deemix.app/gui/latest', {
https: {
rejectUnauthorized: false
}
})
} catch (e) {
console.trace(e)
latestVersion = 'NotFound'
return latestVersion
}
latestVersion = response.body.trim()
}
return latestVersion
}
function parseVersion(version: string | null): any {
if (version === null || version === 'continuous' || version === 'NotFound') return null
try {
const matchResult = version.match(/(\d+)\.(\d+)\.(\d+)-r(\d)+\.(.+)/) || []
return {
year: parseInt(matchResult[1]),
month: parseInt(matchResult[2]),
day: parseInt(matchResult[3]),
revision: parseInt(matchResult[4]),
commit: matchResult[5] || ''
}
} catch (e) {
console.trace(e)
return null
}
}
export function isUpdateAvailable(): boolean {
const currentVersionObj: any = parseVersion(currentVersion)
const latestVersionObj: any = parseVersion(latestVersion)
if (currentVersionObj === null || latestVersionObj === null) return false
if (latestVersionObj.year > currentVersionObj.year) return true
if (latestVersionObj.month > currentVersionObj.month) return true
if (latestVersionObj.day > currentVersionObj.day) return true
if (latestVersionObj.revision > currentVersionObj.revision) return true
if (latestVersionObj.commit !== currentVersionObj.commit) return true
return false
}
export const plugins: any = {
// eslint-disable-next-line new-cap
spotify: new deemix.plugins.spotify()

View File

@@ -0,0 +1,16 @@
import { ApiHandler } from '../../../types'
import { getLatestVersion, isUpdateAvailable } from '../../../main'
const path: ApiHandler['path'] = '/checkForUpdates'
const handler: ApiHandler['handler'] = async (_, res) => {
const latestCommit = await getLatestVersion()
res.send({
latestCommit,
updateAvailable: isUpdateAvailable()
})
}
const apiHandler: ApiHandler = { path, handler }
export default apiHandler

View File

@@ -16,6 +16,7 @@ import getUserSpotifyPlaylists from './getUserSpotifyPlaylists'
import getUserFavorites from './getUserFavorites'
import getQueue from './getQueue'
import spotifyStatus from './spotifyStatus'
import checkForUpdates from './checkForUpdates'
export default [
albumSearch,
@@ -35,5 +36,6 @@ export default [
getUserSpotifyPlaylists,
getUserFavorites,
getQueue,
spotifyStatus
spotifyStatus,
checkForUpdates
]

View File

@@ -1,9 +1,8 @@
import fs from 'fs'
import express from 'express'
// @ts-expect-error
import { Deezer } from 'deezer-js'
import { GUI_PACKAGE } from '../helpers/paths'
import { sessionDZ, getQueue, deemixVersion, isDeezerAvailable, plugins } from '../main'
import { consoleInfo } from '../helpers/errors'
import { sessionDZ, getQueue, deemixVersion, currentVersion, isDeezerAvailable, plugins, getSettings } from '../main'
const router = express.Router()
let update: any = null
@@ -13,12 +12,10 @@ router.get('/connect', async (req, res) => {
const dz = sessionDZ[req.session.id]
if (!update) {
const currentVersion = JSON.parse(String(fs.readFileSync(GUI_PACKAGE))).version
console.log(currentVersion)
consoleInfo(`Currently running deemix-gui version ${currentVersion}`)
consoleInfo(`deemix-lib version ${deemixVersion}`)
update = {
currentCommit: currentVersion === '0.0.0' ? 'continuous' : currentVersion,
latestCommit: null,
updateAvailable: false,
currentCommit: currentVersion,
deemixVersion
}
}
@@ -28,9 +25,12 @@ router.get('/connect', async (req, res) => {
autologin: !dz.logged_in,
currentUser: dz.current_user,
deezerAvailable: await isDeezerAvailable(),
spotifyEnabled: plugins.spotify.enabled
spotifyEnabled: plugins.spotify.enabled,
settingsData: getSettings()
}
if (result.settingsData.settings.autoCheckForUpdates) result.checkForUpdates = true
const queue = getQueue()
if (Object.keys(queue.queue).length > 0) {