Fix installer

This commit is contained in:
everoddandeven 2024-10-07 23:47:52 +02:00
parent 203fbc9968
commit eb621860b6
6 changed files with 122 additions and 86 deletions

View file

@ -40,6 +40,8 @@ function createWindow(): BrowserWindow {
icon: path.join(__dirname, 'assets/icons/favicon.ico')
});
win.webContents.openDevTools();
if (serve) {
const debug = require('electron-debug');
debug();
@ -357,7 +359,7 @@ try {
});
// Gestione IPC
ipcMain.handle('download-monero', async (event, downloadUrl: string, destination: string) => {
ipcMain.handle('download-monerod', async (event, downloadUrl: string, destination: string) => {
try {
//const fileName = path.basename(downloadUrl);
//const filePath = path.join(destination, fileName);

View file

@ -19,5 +19,11 @@ contextBridge.exposeInMainWorld('electronAPI', {
},
onMoneroVersionError: (callback) => {
ipcRenderer.on('monero-version-error', callback);
},
downloadMonerod: (downloadUrl, destination) => {
ipcRenderer.invoke('download-monerod', downloadUrl, destination);
},
onDownloadProgress: (callback) => {
ipcRenderer.on('download-progress', callback);
}
});

View file

@ -1,6 +1,6 @@
import { EventEmitter, Injectable } from '@angular/core';
import { DaemonService } from './daemon.service';
import { BlockCount, BlockHeader, Chain, DaemonInfo, MinerData, MiningStatus, NetStats, NetStatsHistory, SyncInfo } from '../../../../common';
import { BlockCount, BlockHeader, Chain, CoreIsBusyError, DaemonInfo, MinerData, MiningStatus, NetStats, NetStatsHistory, SyncInfo } from '../../../../common';
@Injectable({
providedIn: 'root'
@ -42,6 +42,7 @@ export class DaemonDataService {
private _gettingMiningStatus: boolean = false;
private _minerData?: MinerData;
private _minerDataCoreBusyError: boolean = false;
private _gettingMinerData: boolean = false;
public readonly syncStart: EventEmitter<void> = new EventEmitter<void>();
@ -131,7 +132,7 @@ export class DaemonDataService {
return this._gettingLastBlockHeader;
}
public get AltChains(): Chain[] {
public get altChains(): Chain[] {
return this._altChains;
}
@ -159,6 +160,14 @@ export class DaemonDataService {
return this._gettingMiningStatus;
}
public get minerData(): MinerData | undefined {
return this._minerData;
}
public get minerDataCoreBusyError(): boolean {
return this._minerDataCoreBusyError;
}
public get gettingMinerData(): boolean {
return this._gettingMinerData;
}
@ -186,6 +195,7 @@ export class DaemonDataService {
this.refreshInterval = undefined;
this._refreshing = false;
this._daemonRunning = false;
}
private get tooEarlyForRefresh(): boolean {
@ -214,9 +224,17 @@ export class DaemonDataService {
try {
this._minerData = await this.daemonService.getMinerData();
this._minerDataCoreBusyError = false;
}
catch (error) {
console.error(error);
if (error instanceof CoreIsBusyError) {
this._minerDataCoreBusyError = true;
}
else {
this._minerDataCoreBusyError = false;
}
}
this._gettingMinerData = false;
@ -273,7 +291,14 @@ export class DaemonDataService {
this._gettingLastBlockHeader = false;
this._gettingIsBlockchainPruned = true;
if (firstRefresh) this._isBlockchainPruned = (await this.daemonService.pruneBlockchain(true)).pruned;
//if (firstRefresh) this._isBlockchainPruned = (await this.daemonService.pruneBlockchain(true)).pruned;
const settings = await this.daemonService.getSettings();
this._isBlockchainPruned = settings.pruneBlockchain;
if (firstRefresh) {
this.daemonService.pruneBlockchain(true).then((info) => {
this._isBlockchainPruned = info.pruned;
});
}
this._gettingIsBlockchainPruned = false;
await this.refreshAltChains();

View file

@ -9,14 +9,28 @@ export class MoneroInstallerService {
public downloadMonero(downloadUrl: string, destination: string): Promise<void> {
return new Promise((resolve, reject) => {
this.electronService.ipcRenderer.invoke('download-monero', downloadUrl, destination)
if (this.electronService.isElectron) {
this.electronService.ipcRenderer.invoke('download-monero', downloadUrl, destination)
.then(() => resolve())
.catch((error) => reject(error));
this.electronService.ipcRenderer.on('download-progress', (event, { progress, status }) => {
console.log(`Progress: ${progress}% - ${status}`);
// Qui puoi aggiornare lo stato di progresso nel tuo componente
});
this.electronService.ipcRenderer.on('download-progress', (event, { progress, status }) => {
console.log(`Progress: ${progress}% - ${status}`);
// Qui puoi aggiornare lo stato di progresso nel tuo componente
});
}
else {
const wdw = (window as any);
if (wdw.electronAPI && wdw.electronAPI.onDownloadProgress && wdw.electronAPI.downloadMonerod) {
wdw.electronAPI.onDownloadProgress((event: any, progress: any) => {
console.log(`Download progress: ${progress}`);
});
wdw.electronAPI.downloadMonerod(downloadUrl, destination);
}
}
});
}
}

View file

@ -8,6 +8,7 @@ import { MineableTxBacklog } from '../../../common/MineableTxBacklog';
import { Chain } from '../../../common/Chain';
import { CoreIsBusyError } from '../../../common/error';
import { AuxPoW, BlockTemplate, GeneratedBlocks, MiningStatus } from '../../../common';
import { DaemonDataService } from '../../core/services';
@Component({
selector: 'app-mining',
@ -17,10 +18,22 @@ import { AuxPoW, BlockTemplate, GeneratedBlocks, MiningStatus } from '../../../c
export class MiningComponent implements AfterViewInit {
public readonly navbarLinks: NavbarLink[];
public coreBusy: boolean;
private minerData?: MinerData;
public miningStatus?: MiningStatus;
public miningStatusLoading?: boolean = false;
public get coreBusy(): boolean {
return this.daemonData.minerDataCoreBusyError;
}
public get miningStatus(): MiningStatus | undefined {
return this.daemonData.miningStatus;
}
public get minerData(): MinerData | undefined {
return this.daemonData.minerData;
}
public get miningStatusLoading(): boolean
{
return this.startMiningSuccess && !this.miningStatus;
}
public gettingBlockTemplate: boolean = false;
public getBlockTemplateAddress: string = '';
@ -53,17 +66,43 @@ export class MiningComponent implements AfterViewInit {
public generateBlockPrevBlock: string = '';
public generateStartingNonce: number = 0;
private majorVersion: number;
private height: number;
private prevId: string;
private seedHash: string;
private difficulty: number;
private medianWeight: number;
private alreadyGeneratedCoins: number;
private alternateChains: Chain[];
public get majorVersion(): number {
return this.minerData ? this.minerData.majorVersion : 0;
}
public get height(): number {
return this.minerData ? this.minerData.height : 0;
}
public get prevId(): string {
return this.minerData ? this.minerData.prevId : '';
}
private get seedHash(): string {
return this.minerData ? this.minerData.seedHash : '';
}
private get difficulty(): number {
return this.minerData ? this.minerData.difficulty : 0;
}
private get medianWeight(): number {
return this.minerData ? this.minerData.medianWeight : 0;
}
private get alreadyGeneratedCoins(): number {
return this.minerData ? this.minerData.alreadyGeneratedCoins : 0;
}
private get alternateChains(): Chain[] {
return this.daemonData.altChains;
}
//private txBacklog: MineableTxBacklog[]
public cards: Card[];
public daemonRunning: boolean;
public get daemonRunning(): boolean {
return this.daemonData.running;
}
public get daemonStopping(): boolean {
return this.daemonService.stopping;
}
@ -91,18 +130,8 @@ export class MiningComponent implements AfterViewInit {
return this.startMiningMinerAddress != '';
}
constructor(private router: Router, private daemonService: DaemonService, private navbarService: NavbarService, private ngZone: NgZone) {
this.majorVersion = 0;
this.height = 0;
this.prevId = '';
this.seedHash = '';
this.difficulty = 0;
this.medianWeight = 0;
this.alreadyGeneratedCoins = 0;
this.alternateChains = [];
constructor(private router: Router, private daemonService: DaemonService, private daemonData: DaemonDataService, private navbarService: NavbarService, private ngZone: NgZone) {
this.cards = [];
this.coreBusy = false;
this.navbarLinks = [
new NavbarLink('pills-mining-status-tab', '#pills-mining-status', 'mining-status', true, 'Status'),
@ -122,17 +151,9 @@ export class MiningComponent implements AfterViewInit {
}
});
this.daemonRunning = true;
this.daemonService.onDaemonStatusChanged.subscribe((running) => {
this.ngZone.run(() => {
this.daemonRunning = running;
});
});
this.daemonService.isRunning().then((value: boolean) => {
this.ngZone.run(() => {
this.daemonRunning = value;
});
});
this.daemonData.syncEnd.subscribe(() => {
this.refresh();
})
}
public ngAfterViewInit(): void {
@ -145,28 +166,17 @@ export class MiningComponent implements AfterViewInit {
$table.bootstrapTable('refreshOptions', {
classes: 'table table-bordered table-hover table-dark table-striped'
});
this.load();
this.refresh();
}, 500);
}
private onNavigationEnd(): void {
this.load().then(() => {
this.refresh().then(() => {
this.cards = this.createCards();
});
}
private async getMiningStatus(): Promise<void> {
this.miningStatusLoading = true;
try {
this.miningStatus = await this.daemonService.miningStatus();
} catch(error) {
console.error(error);
this.miningStatus = undefined;
}
this.miningStatusLoading = false;
}
public async getBlockTemplate(): Promise<void> {
this.gettingBlockTemplate = true;
@ -221,40 +231,15 @@ export class MiningComponent implements AfterViewInit {
}
}
private async load(): Promise<void> {
await this.getMiningStatus();
private async refresh(): Promise<void> {
try {
const running = await this.daemonService.isRunning();
if (!running) {
this.coreBusy = false;
throw new Error("Daemon not running");
}
this.minerData = await this.daemonService.getMinerData();
this.majorVersion = this.minerData.majorVersion;
this.height = this.minerData.height;
this.prevId = this.minerData.prevId;
this.seedHash = this.minerData.seedHash;
this.difficulty = this.minerData.difficulty;
this.medianWeight = this.minerData.medianWeight;
this.alreadyGeneratedCoins = this.minerData.alreadyGeneratedCoins;
this.alternateChains = await this.daemonService.getAlternateChains();
const $table = $('#chainsTable');
$table.bootstrapTable('load', this.getChains());
this.coreBusy = false;
this.navbarService.enableLinks();
this.cards = this.createCards();
}
catch(error) {
if (error instanceof CoreIsBusyError) {
this.coreBusy = true;
}
else {
this.navbarService.disableLinks();
}
this.navbarService.disableLinks();
}
}
@ -327,6 +312,8 @@ export class MiningComponent implements AfterViewInit {
this.startMiningError = `${error}`;
}
this.stopMiningError = '';
this.stopMiningSuccess = false;
this.startingMining = false;
}
@ -345,6 +332,8 @@ export class MiningComponent implements AfterViewInit {
this.stopMiningError = `${error};`
}
this.startMiningError = '';
this.startMiningSuccess = false;
this.stoppingMining = false;
}

View file

@ -37,8 +37,8 @@ export class SidebarComponent implements OnChanges {
new NavLink('Outputs', '/outputs', 'bi bi-circle-fill'),
new NavLink('Mining', '/mining', 'bi bi-minecart-loaded'),
new NavLink('Hard Fork Info', '/hardforkinfo', 'bi bi-signpost-split'),
new NavLink('Network', '/network', 'bi bi-hdd-network'),
new NavLink('XMRig', '/xmrig', 'icon-xr text-primary'),
new NavLink('Network', '/network', 'bi bi-hdd-network', 'bottom'),
new NavLink('Bans', '/bans', 'bi bi-ban', 'bottom'),
new NavLink('Logs', '/logs', 'bi bi-terminal', 'bottom'),
new NavLink('Version', '/version', 'bi bi-git', 'bottom'),