Fixes some UI desync

This commit is contained in:
zontreck 2024-11-23 17:08:22 -07:00
parent dd37c07485
commit c06176c900
7 changed files with 41 additions and 32 deletions

View file

@ -1,3 +1,3 @@
class Consts { class Consts {
static const VERSION = "1.1.112324.1636"; static const VERSION = "1.1.112324.1707";
} }

View file

@ -9,6 +9,7 @@ import 'package:servermanager/pages/ModManager.dart';
import 'package:servermanager/pages/autorestart.dart'; import 'package:servermanager/pages/autorestart.dart';
import 'package:servermanager/pages/home.dart'; import 'package:servermanager/pages/home.dart';
import 'package:servermanager/pages/snapshots.dart'; import 'package:servermanager/pages/snapshots.dart';
import 'package:servermanager/structs/credentials.dart';
import 'package:servermanager/structs/settings.dart'; import 'package:servermanager/structs/settings.dart';
import 'pages/ServerSettings.dart'; import 'pages/ServerSettings.dart';
@ -106,6 +107,17 @@ class ServerPage extends StatelessWidget {
} }
} }
// Make a temporary fake user for action logging
if (login.username == settings.superuser.name) {
settings.loggedInUser = settings.superuser;
} else {
for (User usr in settings.inst!.admins) {
if (usr.name == login.username) {
settings.loggedInUser = usr;
}
}
}
Navigator.pushNamed(context, "/home"); Navigator.pushNamed(context, "/home");
} else { } else {
print("Login not valid"); print("Login not valid");

View file

@ -353,16 +353,6 @@ class C2SUploadSettingsPacket implements IPacket {
if (!performRestart) { if (!performRestart) {
return PacketResponse.nil; return PacketResponse.nil;
} else {
// Send a webhook with all the mods listed
String modListText = "";
for (var entry in settings.inst!.mods) {
modListText += "${entry.mod_name}\n";
}
modListText = modListText.trim();
DiscordHookHelper.sendWebHook(settings.inst!.discord,
DiscordHookProps.INACTIVE, "Mod List Updated", modListText);
} }
// Check if server is running, if not, stop immediately // Check if server is running, if not, stop immediately

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:servermanager/structs/discordHookHelper.dart';
import '../structs/mod.dart'; import '../structs/mod.dart';
import '../structs/settings.dart'; import '../structs/settings.dart';
@ -26,22 +27,25 @@ class ModManagerState extends State<ModManager> {
onPressed: () { onPressed: () {
for (Mod M in settings.inst!.mods) { for (Mod M in settings.inst!.mods) {
M.enabled = false; M.enabled = false;
settings.loggedInUser!
.sendDiscordActionLog("${M.mod_name} was disabled");
;
} }
setState(() { setState(() {});
settings.restartRequired = true;
});
}, },
icon: Icon(Icons.swipe_down)), icon: Icon(Icons.swipe_down)),
IconButton( IconButton(
onPressed: () { onPressed: () {
for (Mod M in settings.inst!.mods) { for (Mod M in settings.inst!.mods) {
M.enabled = true; M.enabled = true;
settings.loggedInUser!
.sendDiscordActionLog("${M.mod_name} was enabled");
} }
setState(() { setState(() {});
settings.restartRequired = true;
});
}, },
icon: Icon(Icons.swipe_up)) icon: Icon(Icons.swipe_up))
], ],
@ -60,7 +64,8 @@ class ModManagerState extends State<ModManager> {
} while (i < end - oldIndex); } while (i < end - oldIndex);
settings.inst!.mods[end] = item; settings.inst!.mods[end] = item;
settings.restartRequired = true; settings.loggedInUser!.sendDiscordActionLog(
"Reordered Mod List\n\n${item.mod_name} is now in load order ${end}");
} else if (oldIndex > newIndex) { } else if (oldIndex > newIndex) {
//From bottom to top //From bottom to top
Mod item = settings.inst!.mods[oldIndex]; Mod item = settings.inst!.mods[oldIndex];
@ -68,10 +73,12 @@ class ModManagerState extends State<ModManager> {
settings.inst!.mods[i] = settings.inst!.mods[i - 1]; settings.inst!.mods[i] = settings.inst!.mods[i - 1];
} }
settings.inst!.mods[newIndex] = item; settings.inst!.mods[newIndex] = item;
settings.loggedInUser!.sendDiscordActionLog(
"Reordered Mod List\n\n${item.mod_name} is now in load order ${newIndex}");
} }
setState(() { setState(() {
settings.Write(); settings.Write();
settings.restartRequired = true;
}); });
}, },
itemBuilder: (ctx, idx) { itemBuilder: (ctx, idx) {
@ -98,15 +105,18 @@ class ModManagerState extends State<ModManager> {
ModEditReturnArgs MERA = reply as ModEditReturnArgs; ModEditReturnArgs MERA = reply as ModEditReturnArgs;
if (MERA.delete) { if (MERA.delete) {
setState(() { setState(() {
settings.loggedInUser!.sendDiscordActionLog(
"Deleted Mod: ${settings.inst!.mods[idx].mod_name}");
settings.inst!.mods.removeAt(idx); settings.inst!.mods.removeAt(idx);
settings.restartRequired = true;
}); });
return; return;
} }
setState(() { setState(() {
settings.inst!.mods[idx] = MERA.mod!; settings.inst!.mods[idx] = MERA.mod!;
settings.restartRequired = true; settings.loggedInUser!.sendDiscordActionLog(
"Edited Mod: ${MERA.mod!.mod_name}");
}); });
} }
}, },
@ -127,9 +137,10 @@ class ModManagerState extends State<ModManager> {
setState(() { setState(() {
settings.inst!.mods.add(MERA.mod!); settings.inst!.mods.add(MERA.mod!);
settings.restartRequired = true;
}); });
settings.loggedInUser!
.sendDiscordActionLog("Added Mod: ${MERA.mod!.mod_name}");
} }
}, },
), ),

View file

@ -128,11 +128,9 @@ class HomePageState extends State<HomePage> {
C2SUploadSettingsPacket upload = C2SUploadSettingsPacket(); C2SUploadSettingsPacket upload = C2SUploadSettingsPacket();
upload.srvSettings = settings.serialize(); upload.srvSettings = settings.serialize();
upload.performRestart = upload.performRestart = requireRestart;
requireRestart || settings.restartRequired;
await settings.client!.send(upload, await settings.client!.send(upload, !requireRestart);
settings.restartRequired ? false : !requireRestart);
Settings.Clear(); Settings.Clear();
setState(() {}); setState(() {});
@ -143,7 +141,7 @@ class HomePageState extends State<HomePage> {
}, },
), ),
SwitchListTile( SwitchListTile(
value: requireRestart || settings.restartRequired, value: requireRestart,
onChanged: (V) { onChanged: (V) {
setState(() { setState(() {
requireRestart = V; requireRestart = V;
@ -151,7 +149,7 @@ class HomePageState extends State<HomePage> {
}, },
title: Text("Perform Restart"), title: Text("Perform Restart"),
subtitle: Text( subtitle: Text(
"Whether a immediate server restart should be performed in combination with this wrapper settings update${settings.restartRequired ? "\n** A RESTART IS REQUIRED DUE TO MOD LIST CHANGES" : ""}"), "Whether a immediate server restart should be performed in combination with this wrapper settings update"),
) )
], ],
)), )),

View file

@ -45,8 +45,6 @@ class Settings {
StateMachine subsys = StateMachine(); StateMachine subsys = StateMachine();
bool restartRequired = false;
factory Settings() { factory Settings() {
return Instance; return Instance;
} }

View file

@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts # In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix. # of the product and file versions while build-number is used as the build suffix.
version: 1.1.112324+1636 version: 1.1.112324+1707
environment: environment:
sdk: ">=3.1.4 <4.0.0" sdk: ">=3.1.4 <4.0.0"