From 32a18cbf33a7cdbbe3d4885d32e4b67e19cdc1cf Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 11 Mar 2021 16:54:52 +0100 Subject: Add new plugin/peertube version notifs --- .../schedulers/peertube-version-check-scheduler.ts | 55 ++++++++++++++++++++++ server/lib/schedulers/plugins-check-scheduler.ts | 6 +++ 2 files changed, 61 insertions(+) create mode 100644 server/lib/schedulers/peertube-version-check-scheduler.ts (limited to 'server/lib/schedulers') diff --git a/server/lib/schedulers/peertube-version-check-scheduler.ts b/server/lib/schedulers/peertube-version-check-scheduler.ts new file mode 100644 index 000000000..c8960465c --- /dev/null +++ b/server/lib/schedulers/peertube-version-check-scheduler.ts @@ -0,0 +1,55 @@ + +import { doJSONRequest } from '@server/helpers/requests' +import { ApplicationModel } from '@server/models/application/application' +import { compareSemVer } from '@shared/core-utils' +import { JoinPeerTubeVersions } from '@shared/models' +import { logger } from '../../helpers/logger' +import { CONFIG } from '../../initializers/config' +import { PEERTUBE_VERSION, SCHEDULER_INTERVALS_MS } from '../../initializers/constants' +import { Notifier } from '../notifier' +import { AbstractScheduler } from './abstract-scheduler' + +export class PeerTubeVersionCheckScheduler extends AbstractScheduler { + + private static instance: AbstractScheduler + + protected schedulerIntervalMs = SCHEDULER_INTERVALS_MS.checkPeerTubeVersion + + private constructor () { + super() + } + + protected async internalExecute () { + return this.checkLatestVersion() + } + + private async checkLatestVersion () { + if (CONFIG.PEERTUBE.CHECK_LATEST_VERSION.ENABLED === false) return + + logger.info('Checking latest PeerTube version.') + + const { body } = await doJSONRequest(CONFIG.PEERTUBE.CHECK_LATEST_VERSION.URL) + + if (!body?.peertube?.latestVersion) { + logger.warn('Cannot check latest PeerTube version: body is invalid.', { body }) + return + } + + const latestVersion = body.peertube.latestVersion + const application = await ApplicationModel.load() + + // Already checked this version + if (application.latestPeerTubeVersion === latestVersion) return + + if (compareSemVer(PEERTUBE_VERSION, latestVersion) < 0) { + application.latestPeerTubeVersion = latestVersion + await application.save() + + Notifier.Instance.notifyOfNewPeerTubeVersion(application, latestVersion) + } + } + + static get Instance () { + return this.instance || (this.instance = new this()) + } +} diff --git a/server/lib/schedulers/plugins-check-scheduler.ts b/server/lib/schedulers/plugins-check-scheduler.ts index 014993e94..9a1ae3ec5 100644 --- a/server/lib/schedulers/plugins-check-scheduler.ts +++ b/server/lib/schedulers/plugins-check-scheduler.ts @@ -6,6 +6,7 @@ import { PluginModel } from '../../models/server/plugin' import { chunk } from 'lodash' import { getLatestPluginsVersion } from '../plugins/plugin-index' import { compareSemVer } from '../../../shared/core-utils/miscs/miscs' +import { Notifier } from '../notifier' export class PluginsCheckScheduler extends AbstractScheduler { @@ -53,6 +54,11 @@ export class PluginsCheckScheduler extends AbstractScheduler { plugin.latestVersion = result.latestVersion await plugin.save() + // Notify if there is an higher plugin version available + if (compareSemVer(plugin.version, result.latestVersion) < 0) { + Notifier.Instance.notifyOfNewPluginVersion(plugin) + } + logger.info('Plugin %s has a new latest version %s.', result.npmName, plugin.latestVersion) } } -- cgit v1.2.3