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 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 server/lib/schedulers/peertube-version-check-scheduler.ts (limited to 'server/lib/schedulers/peertube-version-check-scheduler.ts') 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()) + } +} -- cgit v1.2.3