feat: add methods and types to support version checking with local storage storage
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
export * from './components/sysinfo.element.js';
|
||||
export * from './modals/index.js';
|
||||
export * from './repository/index.js';
|
||||
export type * from './types.js';
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import type { UmbServerConfiguration, UmbServerUpgradeCheck } from '../types.js';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository';
|
||||
import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';
|
||||
import { tryExecute, tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';
|
||||
import { ServerService } from '@umbraco-cms/backoffice/external/backend-api';
|
||||
|
||||
export class UmbSysinfoRepository extends UmbRepositoryBase {
|
||||
#serverConfiguration?: UmbServerConfiguration;
|
||||
|
||||
constructor(host: UmbControllerHost) {
|
||||
super(host, 'Umb.Repository.Sysinfo');
|
||||
}
|
||||
@@ -17,4 +20,86 @@ export class UmbSysinfoRepository extends UmbRepositoryBase {
|
||||
const { data } = await tryExecuteAndNotify(this, ServerService.getServerInformation());
|
||||
return data;
|
||||
}
|
||||
|
||||
async requestServerConfiguration() {
|
||||
const { data } = await tryExecute(ServerService.getServerConfiguration());
|
||||
return data;
|
||||
}
|
||||
|
||||
async #getVersionCheckPeriod(): Promise<number> {
|
||||
if (!this.#serverConfiguration) {
|
||||
this.#serverConfiguration = await this.requestServerConfiguration();
|
||||
}
|
||||
|
||||
return this.#serverConfiguration?.versionCheckPeriod ?? 7;
|
||||
}
|
||||
|
||||
getStoredServerUpgradeCheck(lastCheck: Date): UmbServerUpgradeCheck | null {
|
||||
const storedCheck = localStorage.getItem('umb:serverUpgradeCheck');
|
||||
if (storedCheck) {
|
||||
const upgradeCheck = JSON.parse(storedCheck) as UmbServerUpgradeCheck;
|
||||
// Check that the stored check is not older than the last check
|
||||
const expiresAt = new Date(upgradeCheck.expires);
|
||||
if (expiresAt.getTime() > lastCheck.getTime()) {
|
||||
if (upgradeCheck.type.toLowerCase() !== 'none') {
|
||||
return upgradeCheck;
|
||||
}
|
||||
} else {
|
||||
localStorage.removeItem('umb:serverUpgradeCheck');
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
async serverUpgradeCheck(): Promise<UmbServerUpgradeCheck | null> {
|
||||
// Check if we are allowed to check again
|
||||
const versionCheckPeriod = await this.#getVersionCheckPeriod();
|
||||
|
||||
if (versionCheckPeriod <= 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let shouldCheck = true;
|
||||
|
||||
const lastCheck = localStorage.getItem('umb:lastUpgradeCheck');
|
||||
const now = new Date();
|
||||
localStorage.setItem('umb:lastUpgradeCheck', now.toISOString());
|
||||
if (lastCheck) {
|
||||
const lastCheckDate = new Date(lastCheck);
|
||||
const diff = now.getTime() - lastCheckDate.getTime();
|
||||
const diffDays = diff / (1000 * 3600 * 24);
|
||||
|
||||
if (diffDays < versionCheckPeriod) {
|
||||
shouldCheck = false;
|
||||
}
|
||||
|
||||
// If we should not check, then return what we have stored if it is still valid
|
||||
if (!shouldCheck) {
|
||||
return this.getStoredServerUpgradeCheck(lastCheckDate);
|
||||
}
|
||||
}
|
||||
|
||||
if (!shouldCheck) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Check the server
|
||||
const { data } = await tryExecute(ServerService.getServerUpgradeCheck());
|
||||
|
||||
if (data) {
|
||||
// Save the last check date including the data received
|
||||
const expiresAt = new Date();
|
||||
expiresAt.setDate(expiresAt.getDate() + versionCheckPeriod);
|
||||
const upgradeCheck = { ...data, expires: expiresAt.toISOString() } satisfies UmbServerUpgradeCheck;
|
||||
localStorage.setItem('umb:serverUpgradeCheck', JSON.stringify(upgradeCheck));
|
||||
|
||||
// Only return if we have a valid type
|
||||
if (data.type.toLowerCase() !== 'none') {
|
||||
return upgradeCheck;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
7
src/Umbraco.Web.UI.Client/src/packages/sysinfo/types.ts
Normal file
7
src/Umbraco.Web.UI.Client/src/packages/sysinfo/types.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import type {
|
||||
ServerConfigurationResponseModel,
|
||||
UpgradeCheckResponseModel,
|
||||
} from '@umbraco-cms/backoffice/external/backend-api';
|
||||
|
||||
export type UmbServerConfiguration = ServerConfigurationResponseModel;
|
||||
export type UmbServerUpgradeCheck = UpgradeCheckResponseModel & { expires: string };
|
||||
Reference in New Issue
Block a user