Files
PeachDeployments/lib/Peach/see/server/detail/ViewServerDetail.dart
alvocool 38881d1fe1 Add app source and tests
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-11 10:15:30 +03:00

88 lines
2.9 KiB
Dart

import '../../../about/internal/application/ServerProfile.dart';
import '../../../about/internal/application/ServiceConfig.dart';
import '../../parent/ParentViewModel.dart';
import 'ConnectServerDetail.dart';
class ViewServerDetail extends ParentViewModel {
ConnectServerDetail connection;
ViewServerDetail(super.context, this.connection);
/// Re-reads this server from storage along with the deployment history, so
/// the screen always reflects what was actually persisted.
void loadServer(String serverId) async {
try {
final servers = await getDataManager().getServers();
final history = await getDataManager().getDeployments();
final stored = servers.where((s) => s.id == serverId).firstOrNull;
if (stored == null) {
connection.onServerDeleted();
return;
}
connection.onServerLoaded(stored, history);
} catch (error) {
handleError(error, () => loadServer(serverId), () {}, "Retry");
}
}
/// Persists [server] — used after editing the connection, or after adding,
/// editing or removing one of its services.
void saveServer(ServerProfile server) async {
try {
final servers = await getDataManager().getServers();
final index = servers.indexWhere((s) => s.id == server.id);
if (index >= 0) {
servers[index] = server;
} else {
servers.add(server);
}
await getDataManager().setServers(servers);
loadServer(server.id);
} catch (error) {
handleError(error, () => saveServer(server), () {}, "Retry");
}
}
/// Adds [service] to [server] and persists.
void addService(ServerProfile server, ServiceConfig service) {
server.services.add(service);
saveServer(server);
}
/// Replaces the stored copy of [service] on [server].
void updateService(ServerProfile server, ServiceConfig service) {
final index = server.services.indexWhere((s) => s.id == service.id);
if (index >= 0) {
server.services[index] = service;
} else {
server.services.add(service);
}
saveServer(server);
}
void removeService(ServerProfile server, ServiceConfig service) {
server.services.removeWhere((s) => s.id == service.id);
saveServer(server);
}
/// Saves the order services are deployed in during a batch run.
void saveDeployOrder(ServerProfile server, List<String> ids) {
server.deployOrder = ids;
saveServer(server);
}
void deleteServer(ServerProfile server) async {
showLoading("Removing ${server.name} …");
try {
final servers = await getDataManager().getServers();
servers.removeWhere((s) => s.id == server.id);
await getDataManager().setServers(servers);
await getDataManager().deleteServerSecret(server.id);
closeLoading();
connection.onServerDeleted();
} catch (error) {
handleError(error, () => deleteServer(server), () {}, "Retry");
}
}
}