Added update checker
This commit is contained in:
@@ -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()
|
||||
|
||||
16
server/src/routes/api/get/checkForUpdates.ts
Normal file
16
server/src/routes/api/get/checkForUpdates.ts
Normal 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
|
||||
@@ -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
|
||||
]
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user