]>
Commit | Line | Data |
---|---|---|
32a18cbf C |
1 | |
2 | import { doJSONRequest } from '@server/helpers/requests' | |
3 | import { ApplicationModel } from '@server/models/application/application' | |
4 | import { compareSemVer } from '@shared/core-utils' | |
5 | import { JoinPeerTubeVersions } from '@shared/models' | |
6 | import { logger } from '../../helpers/logger' | |
7 | import { CONFIG } from '../../initializers/config' | |
8 | import { PEERTUBE_VERSION, SCHEDULER_INTERVALS_MS } from '../../initializers/constants' | |
9 | import { Notifier } from '../notifier' | |
10 | import { AbstractScheduler } from './abstract-scheduler' | |
11 | ||
12 | export class PeerTubeVersionCheckScheduler extends AbstractScheduler { | |
13 | ||
14 | private static instance: AbstractScheduler | |
15 | ||
16 | protected schedulerIntervalMs = SCHEDULER_INTERVALS_MS.checkPeerTubeVersion | |
17 | ||
18 | private constructor () { | |
19 | super() | |
20 | } | |
21 | ||
22 | protected async internalExecute () { | |
23 | return this.checkLatestVersion() | |
24 | } | |
25 | ||
26 | private async checkLatestVersion () { | |
27 | if (CONFIG.PEERTUBE.CHECK_LATEST_VERSION.ENABLED === false) return | |
28 | ||
29 | logger.info('Checking latest PeerTube version.') | |
30 | ||
31 | const { body } = await doJSONRequest<JoinPeerTubeVersions>(CONFIG.PEERTUBE.CHECK_LATEST_VERSION.URL) | |
32 | ||
33 | if (!body?.peertube?.latestVersion) { | |
34 | logger.warn('Cannot check latest PeerTube version: body is invalid.', { body }) | |
35 | return | |
36 | } | |
37 | ||
38 | const latestVersion = body.peertube.latestVersion | |
39 | const application = await ApplicationModel.load() | |
40 | ||
41 | // Already checked this version | |
42 | if (application.latestPeerTubeVersion === latestVersion) return | |
43 | ||
44 | if (compareSemVer(PEERTUBE_VERSION, latestVersion) < 0) { | |
45 | application.latestPeerTubeVersion = latestVersion | |
46 | await application.save() | |
47 | ||
48 | Notifier.Instance.notifyOfNewPeerTubeVersion(application, latestVersion) | |
49 | } | |
50 | } | |
51 | ||
52 | static get Instance () { | |
53 | return this.instance || (this.instance = new this()) | |
54 | } | |
55 | } |