mirror of
https://github.com/everoddandeven/monerod-gui.git
synced 2025-01-03 17:39:49 +00:00
Sync period implementation
This commit is contained in:
parent
245cc59394
commit
f237d43557
5 changed files with 81 additions and 2 deletions
|
@ -201,7 +201,6 @@ function isConnectedToWiFi(): Promise<boolean> {
|
||||||
// Check if the output indicates a connected status
|
// Check if the output indicates a connected status
|
||||||
if (stdout) {
|
if (stdout) {
|
||||||
const components: string[] = stdout.split("\n");
|
const components: string[] = stdout.split("\n");
|
||||||
console.log(components);
|
|
||||||
|
|
||||||
components.forEach((component: string) => {
|
components.forEach((component: string) => {
|
||||||
if (component.includes('wifi') && !component.includes('--')) {
|
if (component.includes('wifi') && !component.includes('--')) {
|
||||||
|
|
|
@ -250,6 +250,8 @@ export class DaemonDataService {
|
||||||
throw new Error("Loop already started");
|
throw new Error("Loop already started");
|
||||||
}
|
}
|
||||||
this._firstRefresh = true;
|
this._firstRefresh = true;
|
||||||
|
this.syncDisabledByPeriodPolicy = false;
|
||||||
|
this.syncDisabledByWifiPolicy = false;
|
||||||
|
|
||||||
this.refresh().then(() => {
|
this.refresh().then(() => {
|
||||||
this.refreshInterval = setInterval(() => {
|
this.refreshInterval = setInterval(() => {
|
||||||
|
@ -327,6 +329,40 @@ export class DaemonDataService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public syncDisabledByWifiPolicy: boolean = false;
|
||||||
|
public syncDisabledByPeriodPolicy: boolean = false;
|
||||||
|
|
||||||
|
private isInTimeRange(fromHours: string, toHours: string): boolean {
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
|
// Estraiamo l'ora e i minuti dalla stringa in formato hh:mm
|
||||||
|
const [fromHour, fromMinute] = fromHours.split(":").map(Number);
|
||||||
|
const [toHour, toMinute] = toHours.split(":").map(Number);
|
||||||
|
|
||||||
|
// Otteniamo l'ora corrente in ore e minuti
|
||||||
|
const currentHour = now.getHours();
|
||||||
|
const currentMinute = now.getMinutes();
|
||||||
|
|
||||||
|
// Creiamo oggetti Date per le ore 'from', 'to', e l'ora attuale
|
||||||
|
const currentTime = new Date();
|
||||||
|
currentTime.setHours(currentHour, currentMinute, 0, 0);
|
||||||
|
|
||||||
|
const fromTime = new Date();
|
||||||
|
fromTime.setHours(fromHour, fromMinute, 0, 0);
|
||||||
|
|
||||||
|
const toTime = new Date();
|
||||||
|
toTime.setHours(toHour, toMinute, 0, 0);
|
||||||
|
|
||||||
|
// Gestione del caso in cui la fascia oraria attraversi la mezzanotte
|
||||||
|
if (fromTime > toTime) {
|
||||||
|
// Se l'ora attuale è dopo 'fromTime' o prima di 'toTime'
|
||||||
|
return currentTime >= fromTime || currentTime <= toTime;
|
||||||
|
} else {
|
||||||
|
// Caso normale: la fascia oraria è nello stesso giorno
|
||||||
|
return currentTime >= fromTime && currentTime <= toTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async refresh(): Promise<void> {
|
private async refresh(): Promise<void> {
|
||||||
if (this.refreshing || this.tooEarlyForRefresh) {
|
if (this.refreshing || this.tooEarlyForRefresh) {
|
||||||
return;
|
return;
|
||||||
|
@ -351,6 +387,7 @@ export class DaemonDataService {
|
||||||
if (wifiConnected) {
|
if (wifiConnected) {
|
||||||
console.log("Disabling sync ...");
|
console.log("Disabling sync ...");
|
||||||
await this.daemonService.disableSync();
|
await this.daemonService.disableSync();
|
||||||
|
this.syncDisabledByWifiPolicy = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!settings.noSync && syncAlreadyDisabled && !settings.syncOnWifi) {
|
else if (!settings.noSync && syncAlreadyDisabled && !settings.syncOnWifi) {
|
||||||
|
@ -360,8 +397,23 @@ export class DaemonDataService {
|
||||||
console.log("Enabling sync ...");
|
console.log("Enabling sync ...");
|
||||||
|
|
||||||
await this.daemonService.enableSync();
|
await this.daemonService.enableSync();
|
||||||
|
this.syncDisabledByWifiPolicy = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.syncDisabledByWifiPolicy = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.syncDisabledByWifiPolicy = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!syncAlreadyDisabled && !this.syncDisabledByPeriodPolicy && settings.syncPeriodEnabled && !this.isInTimeRange(settings.syncPeriodFrom, settings.syncPeriodTo)) {
|
||||||
|
await this.daemonService.disableSync();
|
||||||
|
this.syncDisabledByPeriodPolicy = true;
|
||||||
|
}
|
||||||
|
else if (syncAlreadyDisabled && this.syncDisabledByPeriodPolicy && settings.syncPeriodEnabled && this.isInTimeRange(settings.syncPeriodFrom, settings.syncPeriodTo)) {
|
||||||
|
await this.daemonService.enableSync();
|
||||||
|
this.syncDisabledByPeriodPolicy = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.syncStart.emit({ first: this._firstRefresh });
|
this.syncStart.emit({ first: this._firstRefresh });
|
||||||
|
|
|
@ -12,6 +12,19 @@
|
||||||
</div>
|
</div>
|
||||||
<app-daemon-not-running></app-daemon-not-running>
|
<app-daemon-not-running></app-daemon-not-running>
|
||||||
|
|
||||||
|
<div *ngIf="daemonRunning && syncDisabledByWifiPolicy" class="alert alert-warning d-flex align-items-center justify-content-center text-center" role="alert">
|
||||||
|
<h4><i class="bi bi-exclamation-triangle m-2"></i></h4>
|
||||||
|
<div>
|
||||||
|
Sync on wifi is disabled
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="daemonRunning && syncDisabledByPeriodPolicy" class="alert alert-warning d-flex align-items-center justify-content-center text-center" role="alert">
|
||||||
|
<h4><i class="bi bi-exclamation-triangle m-2"></i></h4>
|
||||||
|
<div>
|
||||||
|
Sync disabled from {{ syncDisabledTo }} to {{ syncDisabledFrom }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div *ngIf="daemonRunning && !stoppingDaemon" class="tab-content" id="pills-tabContent">
|
<div *ngIf="daemonRunning && !stoppingDaemon" class="tab-content" id="pills-tabContent">
|
||||||
<div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab" tabindex="0">
|
<div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab" tabindex="0">
|
||||||
|
|
|
@ -28,6 +28,21 @@ export class DetailComponent implements AfterViewInit, OnDestroy {
|
||||||
|
|
||||||
public readonly navbarLinks: NavbarLink[];
|
public readonly navbarLinks: NavbarLink[];
|
||||||
|
|
||||||
|
public get syncDisabledByWifiPolicy(): boolean {
|
||||||
|
return this.daemonData.syncDisabledByWifiPolicy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get syncDisabledByPeriodPolicy(): boolean {
|
||||||
|
return this.daemonData.syncDisabledByPeriodPolicy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get syncDisabledFrom(): string {
|
||||||
|
return this.daemonService.settings.syncPeriodFrom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get syncDisabledTo(): string {
|
||||||
|
return this.daemonService.settings.syncPeriodTo;
|
||||||
|
}
|
||||||
//#region Sync Info
|
//#region Sync Info
|
||||||
|
|
||||||
private get height(): number {
|
private get height(): number {
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<ul class="navbar-nav flex-row">
|
<ul class="navbar-nav flex-row">
|
||||||
<li *ngIf="!running && !stopping && !starting" class="nav-item text-nowrap">
|
<li *ngIf="!running && !stopping && !starting && !restarting" class="nav-item text-nowrap">
|
||||||
<button class="btn btn-outline-secondary px-3 text-white" type="button" data-bs-toggle="collapse" aria-expanded="false" aria-label="Start daemon" (click)="startDaemon()">
|
<button class="btn btn-outline-secondary px-3 text-white" type="button" data-bs-toggle="collapse" aria-expanded="false" aria-label="Start daemon" (click)="startDaemon()">
|
||||||
<i class="bi bi-play-fill"></i>
|
<i class="bi bi-play-fill"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
Loading…
Reference in a new issue