diff --git a/ui/src/app/app.html b/ui/src/app/app.html
index 2605a78..8cf8c95 100644
--- a/ui/src/app/app.html
+++ b/ui/src/app/app.html
@@ -7,7 +7,7 @@
} @else if (!state().apiAvailable) {
API Not Available. Please ensure the mining service is running.
-
+
Retry
diff --git a/ui/src/app/app.ts b/ui/src/app/app.ts
index a4b71d7..bcb08cc 100644
--- a/ui/src/app/app.ts
+++ b/ui/src/app/app.ts
@@ -28,7 +28,7 @@ export class SniderMining {
minerService = inject(MinerService);
state = this.minerService.state;
- checkSystemState() {
- this.minerService.checkSystemState();
+ forceRefreshState() {
+ this.minerService.forceRefreshState();
}
}
diff --git a/ui/src/app/miner.service.ts b/ui/src/app/miner.service.ts
index e3d777e..8a6c8cc 100644
--- a/ui/src/app/miner.service.ts
+++ b/ui/src/app/miner.service.ts
@@ -1,9 +1,9 @@
import { Injectable, OnDestroy, signal, computed } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { of, forkJoin, Subscription, interval } from 'rxjs';
-import { switchMap, catchError, map, startWith, tap } from 'rxjs/operators';
+import { switchMap, catchError, map, tap } from 'rxjs/operators';
-// Define interfaces
+// --- Interfaces ---
export interface InstallationDetails {
is_installed: boolean;
version: string;
@@ -46,8 +46,9 @@ export interface SystemState {
})
export class MinerService implements OnDestroy {
private apiBaseUrl = 'http://localhost:9090/api/v1/mining';
+ private pollingSubscription?: Subscription;
- // State Signals
+ // --- State Signals ---
public state = signal({
needsSetup: false,
apiAvailable: true,
@@ -59,180 +60,194 @@ export class MinerService implements OnDestroy {
profiles: []
});
+ // Separate signal for hashrate history as it updates frequently
public hashrateHistory = signal