Optimize get version

This commit is contained in:
everoddandeven 2025-01-05 11:45:40 +01:00
parent 44677c3666
commit f617af9c31
3 changed files with 52 additions and 7 deletions

View file

@ -206,6 +206,8 @@ export class DaemonService {
}
}
this.version = undefined;
const db = await this.openDbPromise;
await db.put(this.storeName, { id: 1, ...settings });
@ -332,6 +334,8 @@ export class DaemonService {
return;
}
this.version = undefined;
this.starting = true;
console.log("Starting daemon");
@ -682,7 +686,13 @@ export class DaemonService {
return SyncInfo.parse(response.result);
}
public async getLatestVersion(): Promise<DaemonVersion> {
private mLatestVersion?: DaemonVersion;
public async getLatestVersion(force: boolean = false): Promise<DaemonVersion> {
if (!force && this.mLatestVersion) {
return this.mLatestVersion;
}
const response = await this.get(this.versionApiUrl);
if (typeof response.tag_name != 'string') {
@ -701,15 +711,20 @@ export class DaemonService {
const name = nameComponents[0];
return new DaemonVersion(0, true, `Monero '${name}' (${response.tag_name}-release)`);
this.mLatestVersion = new DaemonVersion(0, true, `Monero '${name}' (${response.tag_name}-release)`);
return this.mLatestVersion;
}
public version?: DaemonVersion;
public async getVersion(dontUseRpc: boolean = false): Promise<DaemonVersion> {
if(!dontUseRpc && this.daemonRunning) {
const response = await this.callRpc(new GetVersionRequest());
return DaemonVersion.parse(response.result);
}
else if (this.version) return this.version;
else if (dontUseRpc) {
const monerodPath: string = (await this.getSettings()).monerodPath;
@ -732,7 +747,8 @@ export class DaemonService {
window.electronAPI.getMoneroVersion(monerodPath);
return await promise;
this.version = await promise;
return this.version;
}
throw new Error("Daemon not running");

View file

@ -57,10 +57,15 @@
<hr class="my-4">
<button *ngIf="!loading && !upgrading && !installing" class="w-100 btn btn-primary btn-lg" type="submit" (click)="upgrade()" [disabled]="buttonDisabled">{{ buttonTitle }}</button>
<button *ngIf="!loading && !upgrading && !installing && !buttonDisabled" class="w-100 btn btn-primary btn-lg" type="submit" (click)="upgrade()" [disabled]="buttonDisabled">{{ buttonTitle }}</button>
<button *ngIf="!loading && !upgrading && !installing && buttonDisabled && !checkingLatestVersion" class="w-100 btn btn-primary btn-lg" type="submit" (click)="checkLatestVersion()">{{ buttonTitle }}</button>
<button *ngIf="!loading && upgrading || installing" class="w-100 btn btn-primary btn-lg" type="button" disabled>
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
{{ upgrading ? 'Upgrading' : 'Installing' }} monerod {{ downloadProgress }}
</button>
<button *ngIf="!loading && !upgrading && !installing && checkingLatestVersion" class="w-100 btn btn-primary btn-lg" type="button" disabled>
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
Checking Updates
</button>
</div>
</div>

View file

@ -18,6 +18,10 @@ export class VersionComponent implements AfterViewInit {
public latestVersion?: DaemonVersion;
public settings: DaemonSettings = new DaemonSettings();
public get configured(): boolean {
return this.settings.monerodPath != '';
}
public get buttonDisabled(): boolean {
const title = this.buttonTitle;
@ -48,7 +52,7 @@ export class VersionComponent implements AfterViewInit {
return 'Install';
}
return 'Upgrade';
return 'Check Updates';
}
constructor(private daemonData: DaemonDataService, private daemonService: DaemonService, private electronService: ElectronService, private moneroInstaller: MoneroInstallerService, private ngZone: NgZone) {
@ -97,9 +101,9 @@ export class VersionComponent implements AfterViewInit {
}
}
private async refreshLatestVersion(): Promise<void> {
private async refreshLatestVersion(force: boolean = false): Promise<void> {
try {
this.latestVersion = await this.daemonService.getLatestVersion();
this.latestVersion = await this.daemonService.getLatestVersion(force);
}
catch(error: any) {
console.error(error);
@ -107,6 +111,15 @@ export class VersionComponent implements AfterViewInit {
}
}
private refreshCards(error: boolean = false): void {
if (error) {
this.cards = this.createErrorCards();
return;
}
this.cards = this.createCards();
}
public async load(): Promise<void> {
await this.ngZone.run(async () => {
this.loading = true;
@ -125,6 +138,17 @@ export class VersionComponent implements AfterViewInit {
});
}
public checkingLatestVersion: boolean = false;
public async checkLatestVersion(): Promise<void> {
if (this.checkingLatestVersion) return;
this.checkingLatestVersion = true;
await this.refreshLatestVersion(true);
setTimeout(() => { this.checkingLatestVersion = false; this.refreshCards() }, 500);
}
public get upgrading(): boolean {
return this.moneroInstaller.upgrading;
}