This commit is contained in:
lzx
2026-01-23 16:11:20 +08:00
parent e4e0e44555
commit efce651809
10 changed files with 276 additions and 77 deletions

View File

@@ -165,20 +165,8 @@ class ClientProvider with ChangeNotifier {
memory: gpu.memory,
)).toList(),
machineCode: machineCode,
status: ClientStatus.online,
miningInfo: _currentMiningTask != null
? MiningInfo(
coin: _currentMiningTask!.coin,
algo: _currentMiningTask!.algo,
pool: _currentMiningTask!.pool,
poolUrl: _currentMiningTask!.poolUrl,
walletAddress: _currentMiningTask!.walletAddress,
workerId: _currentMiningTask!.workerId,
pid: null, // Dart 进程管理可能需要额外处理
miner: _currentMiningTask!.miner,
endTimestamp: _currentMiningTask!.endTimestamp,
)
: null,
status: _getInitialStatus(),
miningInfo: _getMiningInfo(),
);
_isInitialized = true;
@@ -218,9 +206,16 @@ class ClientProvider with ChangeNotifier {
/// 状态变化回调
void _onStatusChanged(ClientStatus status) {
if (_clientInfo != null) {
final newStatus = status == ClientStatus.mining || _miningManager.isMining
? ClientStatus.mining
: status;
// 判断当前状态:优先显示挖矿状态
ClientStatus newStatus;
if (_miningManager.isMining) {
// 如果有租约任务,显示挖矿中;否则显示持续挖矿中
newStatus = _currentMiningTask != null
? ClientStatus.mining
: (_sustainMiner.isRunning ? ClientStatus.sustainingMining : ClientStatus.mining);
} else {
newStatus = status;
}
_clientInfo = ClientInfo(
version: _clientInfo!.version,
@@ -228,19 +223,7 @@ class ClientProvider with ChangeNotifier {
gpus: _clientInfo!.gpus,
machineCode: _clientInfo!.machineCode,
status: newStatus,
miningInfo: _currentMiningTask != null
? MiningInfo(
coin: _currentMiningTask!.coin,
algo: _currentMiningTask!.algo,
pool: _currentMiningTask!.pool,
poolUrl: _currentMiningTask!.poolUrl,
walletAddress: _currentMiningTask!.walletAddress,
workerId: _currentMiningTask!.workerId,
pid: null,
miner: _currentMiningTask!.miner,
endTimestamp: _currentMiningTask!.endTimestamp,
)
: null,
miningInfo: _getMiningInfo(),
);
notifyListeners();
}
@@ -268,6 +251,7 @@ class ClientProvider with ChangeNotifier {
await _sustainMiner.resume();
}
// 更新状态
_onStatusChanged(_clientCore.isConnected ? ClientStatus.online : ClientStatus.offline);
}
@@ -285,9 +269,15 @@ class ClientProvider with ChangeNotifier {
try {
// 只更新状态不重新获取GPU信息GPU信息只在启动时获取一次
final status = _miningManager.isMining
? ClientStatus.mining
: (_clientCore.isConnected ? ClientStatus.online : ClientStatus.offline);
ClientStatus status;
if (_miningManager.isMining) {
// 如果有租约任务,显示挖矿中;否则显示持续挖矿中
status = _currentMiningTask != null
? ClientStatus.mining
: (_sustainMiner.isRunning ? ClientStatus.sustainingMining : ClientStatus.mining);
} else {
status = _clientCore.isConnected ? ClientStatus.online : ClientStatus.offline;
}
_clientInfo = ClientInfo(
version: _clientInfo!.version,
@@ -295,19 +285,7 @@ class ClientProvider with ChangeNotifier {
gpus: _clientInfo!.gpus, // 使用已有的GPU信息不重新获取
machineCode: _clientInfo!.machineCode,
status: status,
miningInfo: _currentMiningTask != null
? MiningInfo(
coin: _currentMiningTask!.coin,
algo: _currentMiningTask!.algo,
pool: _currentMiningTask!.pool,
poolUrl: _currentMiningTask!.poolUrl,
walletAddress: _currentMiningTask!.walletAddress,
workerId: _currentMiningTask!.workerId,
pid: null,
miner: _currentMiningTask!.miner,
endTimestamp: _currentMiningTask!.endTimestamp,
)
: null,
miningInfo: _getMiningInfo(),
);
notifyListeners();
} catch (e) {
@@ -315,6 +293,51 @@ class ClientProvider with ChangeNotifier {
}
}
/// 获取初始状态
ClientStatus _getInitialStatus() {
if (_miningManager.isMining) {
return _currentMiningTask != null
? ClientStatus.mining
: (_sustainMiner.isRunning ? ClientStatus.sustainingMining : ClientStatus.mining);
}
return _clientCore.isConnected ? ClientStatus.online : ClientStatus.offline;
}
/// 获取挖矿信息(支持租约挖矿和持续挖矿)
MiningInfo? _getMiningInfo() {
if (_currentMiningTask != null) {
// 租约挖矿任务
return MiningInfo(
coin: _currentMiningTask!.coin,
algo: _currentMiningTask!.algo,
pool: _currentMiningTask!.pool,
poolUrl: _currentMiningTask!.poolUrl,
walletAddress: _currentMiningTask!.walletAddress,
workerId: _currentMiningTask!.workerId,
pid: null,
miner: _currentMiningTask!.miner,
endTimestamp: _currentMiningTask!.endTimestamp,
);
} else if (_miningManager.isMining && _sustainMiner.isRunning) {
// 持续挖矿任务
final sustainTask = _miningManager.currentTask;
if (sustainTask != null) {
return MiningInfo(
coin: sustainTask.coin,
algo: sustainTask.algo,
pool: sustainTask.pool,
poolUrl: sustainTask.poolUrl,
walletAddress: sustainTask.walletAddress,
workerId: sustainTask.workerId,
pid: null,
miner: sustainTask.miner,
endTimestamp: sustainTask.endTimestamp,
);
}
}
return null;
}
/// 重启客户端
Future<void> restart() async {
_clientCore.stop();