1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/app-update-warning/app-update-warning.ts
Alex Andreev b60893c35a Determine warning from days passed after update available
Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
2022-05-27 14:02:34 +03:00

124 lines
3.0 KiB
TypeScript

/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { makeObservable, observable } from "mobx";
import { UpdateAvailableChannel } from "../../common/ipc";
import { Singleton } from "../utils";
import type { IpcRenderer } from "electron";
interface Dependencies {
readonly ipcRenderer: IpcRenderer;
}
export class AppUpdateWarning extends Singleton {
@observable warningLevel: "high" | "medium" | "light" | "" = "";
@observable private updateAvailableDate: Date | null = null;
private interval: NodeJS.Timeout | null = null;
constructor(dependencies: Dependencies) {
super();
makeObservable(this);
dependencies.ipcRenderer.on(UpdateAvailableChannel, () => {
this.setUpdateAvailableDate();
this.setWarningLevel();
this.startRefreshLevelInterval();
});
}
setUpdateAvailableDate() {
if (!this.updateAvailableDate) {
this.updateAvailableDate = new Date();
}
}
private startRefreshLevelInterval() {
if (!this.interval) {
this.interval = setInterval(() => {
this.setWarningLevel();
}, 1000 * 60); // Once a day
}
}
private stopRefreshLevelInterval() {
if (this.interval) {
clearInterval(this.interval);
}
}
private get daysAfterUpdateAvailable() {
if (!this.updateAvailableDate) {
return 0;
}
const today = new Date();
const elapsedTime = today.getTime() - this.updateAvailableDate.getTime();
const elapsedDays = elapsedTime / (1000 * 60 * 60 * 24);
return elapsedDays;
}
get minutesAfterUpdateAvailable() {
if (!this.updateAvailableDate) {
return 0;
}
const today = new Date();
const elapsedTime = today.getTime() - this.updateAvailableDate.getTime();
const elapsedMinutes = Math.floor(elapsedTime / (1000 * 60));
return elapsedMinutes;
}
// private setHighWarningLevel(elapsedDays: number) {
// if (elapsedDays >= 25) {
// this.warningLevel = "high";
// }
// }
// private setMediumWarningLevel(elapsedDays: number) {
// if (elapsedDays >= 20 && elapsedDays < 25) {
// this.warningLevel = "medium";
// }
// }
// private setLightWarningLevel(elapsedDays: number) {
// if (elapsedDays < 20) {
// this.warningLevel = "light";
// }
// }
private setHighWarningLevel(elapsedDays: number) {
if (elapsedDays >= 6) {
this.warningLevel = "high";
}
}
private setMediumWarningLevel(elapsedDays: number) {
if (elapsedDays >= 2 && elapsedDays < 4) {
this.warningLevel = "medium";
}
}
private setLightWarningLevel(elapsedDays: number) {
if (elapsedDays < 2) {
this.warningLevel = "light";
}
}
private setWarningLevel() {
const days = this.minutesAfterUpdateAvailable;
this.setHighWarningLevel(days);
this.setMediumWarningLevel(days);
this.setLightWarningLevel(days);
}
reset() {
this.warningLevel = "";
this.updateAvailableDate = null;
this.stopRefreshLevelInterval();
}
}