Brand new Angular client
This commit is contained in:
245
client/src/app/_services/storage.service.ts
Normal file
245
client/src/app/_services/storage.service.ts
Normal file
@ -0,0 +1,245 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
import { ServerDto } from '../_dto/ServerDto';
|
||||
import { StoredDataDto } from '../_dto/StoredDataDto';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class StorageService {
|
||||
|
||||
//BehaviorSubjects for latest settings values
|
||||
public widerViewportSubject = new BehaviorSubject<boolean>(false);
|
||||
|
||||
constructor() {
|
||||
this.initializeLocalStorage();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize settings
|
||||
*/
|
||||
private initializeLocalStorage(): void {
|
||||
//If undefined, initialize localStorage
|
||||
if (typeof window.localStorage["WebConsole"] === 'undefined') {
|
||||
//Create empty object
|
||||
var storageObj: StoredDataDto = {
|
||||
servers: [],
|
||||
language: "",
|
||||
settings: {
|
||||
dateTimePrefix: true,
|
||||
retrieveLogFile: true,
|
||||
blurryUri: false,
|
||||
widerViewport: false
|
||||
}
|
||||
};
|
||||
|
||||
//Save to WebStorage
|
||||
window.localStorage["WebConsole"] = JSON.stringify(storageObj);
|
||||
}
|
||||
|
||||
//Initialize BehaviorSubjects
|
||||
this.widerViewportSubject.next(this.getSetting(SettingsEnum.WiderViewport));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of all saved servers
|
||||
* @returns List of all servers saved
|
||||
*/
|
||||
public getAllServers(): ServerDto[] {
|
||||
var storageObj = JSON.parse(window.localStorage["WebConsole"]) as StoredDataDto;
|
||||
return storageObj.servers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get server info given its name
|
||||
* @param serverName Server name
|
||||
* @returns Server details, null if not found
|
||||
*/
|
||||
public getServer(serverName: string): ServerDto | undefined {
|
||||
return this.getAllServers().find(e => e.serverName == serverName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a new server or, in case a server with same name already exists, update it.
|
||||
* @param serverName Name of the server to add or update
|
||||
* @param serverUri URI of the server
|
||||
*/
|
||||
public saveServer(serverName: string, serverUri: string, serverPassword?: string): void {
|
||||
//Get all saved servers
|
||||
let servers = this.getAllServers();
|
||||
|
||||
let server = servers.find(e => e.serverName == serverName);
|
||||
if (server) {
|
||||
//If server exists, update it
|
||||
(server as ServerDto).serverURI = serverUri;
|
||||
if (serverPassword)
|
||||
(server as ServerDto).serverPassword = serverPassword;
|
||||
else if (serverPassword == null)
|
||||
(server as ServerDto).serverPassword = undefined;
|
||||
} else {
|
||||
//If it does not exist, add to the array
|
||||
const serverToSave: ServerDto = {
|
||||
serverName: serverName,
|
||||
serverURI: serverUri,
|
||||
serverPassword: serverPassword
|
||||
}
|
||||
|
||||
servers.push(serverToSave);
|
||||
}
|
||||
|
||||
//Overwrite array
|
||||
this.replaceAllServers(servers);
|
||||
}
|
||||
|
||||
moveServerToIndex(serverName: string, newIndex: number): void {
|
||||
//Prevent moving if index is not valid
|
||||
const listOfServers: ServerDto[] = this.getAllServers();
|
||||
if (newIndex < 0 || newIndex >= listOfServers.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
//Prevent moving if server does not exist
|
||||
const serverIndex = listOfServers.findIndex(e => e.serverName == serverName);
|
||||
if (serverIndex === -1)
|
||||
return;
|
||||
|
||||
//Move server
|
||||
const serverToMove: ServerDto = listOfServers.find(e => e.serverName == serverName) as ServerDto;
|
||||
listOfServers.splice(serverIndex, 1); //Remove element from its current position
|
||||
listOfServers.splice(newIndex, 0, serverToMove); //Inject element in new position
|
||||
this.replaceAllServers(listOfServers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a server given its name
|
||||
* @param serverName Name of the server
|
||||
*/
|
||||
public deleteServer(serverName: string): void {
|
||||
//Get all servers
|
||||
var servers = this.getAllServers();
|
||||
|
||||
//Delete it
|
||||
servers = servers.filter(e => e.serverName != serverName)
|
||||
|
||||
//Save to LocalStorage
|
||||
this.replaceAllServers(servers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save to persistence a new default language
|
||||
* @param lang Language to set
|
||||
*/
|
||||
public setLanguage(lang: string): void {
|
||||
//Retrieve saved data
|
||||
var storageObj = JSON.parse(window.localStorage["WebConsole"]) as StoredDataDto;
|
||||
storageObj.language = lang;
|
||||
|
||||
//Save to WebStorage
|
||||
window.localStorage["WebConsole"] = JSON.stringify(storageObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get saved language
|
||||
* @returns Language saved
|
||||
*/
|
||||
public getLanguage(): string {
|
||||
var storageObj = JSON.parse(window.localStorage["WebConsole"]) as StoredDataDto;
|
||||
if (!storageObj.language)
|
||||
return "en_US";
|
||||
return storageObj.language;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace ALL servers with the provided server list
|
||||
* @param newServerList New server list
|
||||
*/
|
||||
private replaceAllServers(newServerList: ServerDto[]) {
|
||||
//Retrieve saved data
|
||||
let storageObj = JSON.parse(window.localStorage["WebConsole"]) as StoredDataDto;
|
||||
storageObj.servers = newServerList;
|
||||
|
||||
//Save to WebStorage
|
||||
window.localStorage["WebConsole"] = JSON.stringify(storageObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update setting value
|
||||
* @param setting Setting to set
|
||||
* @param value Value to set
|
||||
*/
|
||||
public setSetting(setting: SettingsEnum, value: any) {
|
||||
let currentSettings = JSON.parse(window.localStorage["WebConsole"]) as StoredDataDto;
|
||||
|
||||
switch (setting) {
|
||||
case SettingsEnum.DateTimePrefix:
|
||||
currentSettings.settings.dateTimePrefix = value;
|
||||
break;
|
||||
case SettingsEnum.RetrieveLogFile:
|
||||
currentSettings.settings.retrieveLogFile = value;
|
||||
break;
|
||||
case SettingsEnum.BlurryUri:
|
||||
currentSettings.settings.blurryUri = value;
|
||||
break;
|
||||
case SettingsEnum.WiderViewport:
|
||||
currentSettings.settings.widerViewport = value;
|
||||
this.widerViewportSubject.next(value);
|
||||
break;
|
||||
}
|
||||
|
||||
//Save all
|
||||
let storageObj = JSON.parse(window.localStorage["WebConsole"]);
|
||||
storageObj.settings = currentSettings.settings;
|
||||
window.localStorage["WebConsole"] = JSON.stringify(storageObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a setting
|
||||
* @param setting Setting to get
|
||||
* @returns Settings value
|
||||
*/
|
||||
public getSetting(setting: SettingsEnum) {
|
||||
let currentSettings = JSON.parse(window.localStorage["WebConsole"]) as StoredDataDto;
|
||||
|
||||
switch (setting) {
|
||||
case SettingsEnum.DateTimePrefix:
|
||||
return currentSettings.settings.dateTimePrefix;
|
||||
case SettingsEnum.RetrieveLogFile:
|
||||
return currentSettings.settings.retrieveLogFile;
|
||||
case SettingsEnum.BlurryUri:
|
||||
return currentSettings.settings.blurryUri;
|
||||
case SettingsEnum.WiderViewport:
|
||||
return currentSettings.settings.widerViewport;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Import settings from a Base64-encoded JSON
|
||||
* @param base64settings Encoded settings
|
||||
* @returns True if imported successfully, false otherwise
|
||||
*/
|
||||
public importSettings(base64settings: string): boolean {
|
||||
try {
|
||||
const decodedJsonSettings = atob(base64settings);
|
||||
window.localStorage["WebConsole"] = decodedJsonSettings;
|
||||
return true;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Export settings
|
||||
* @returns A Base64-encoded JSON containing settings
|
||||
*/
|
||||
public getExportString(): string {
|
||||
return btoa(window.localStorage["WebConsole"]);
|
||||
}
|
||||
}
|
||||
|
||||
export enum SettingsEnum {
|
||||
DateTimePrefix,
|
||||
RetrieveLogFile,
|
||||
BlurryUri,
|
||||
WiderViewport
|
||||
}
|
Reference in New Issue
Block a user