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 {
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/home.dart';
import 'package:servermanager/pages/snapshots.dart';
import 'package:servermanager/structs/credentials.dart';
import 'package:servermanager/structs/settings.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");
} else {
print("Login not valid");

View file

@ -353,16 +353,6 @@ class C2SUploadSettingsPacket implements IPacket {
if (!performRestart) {
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

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:servermanager/structs/discordHookHelper.dart';
import '../structs/mod.dart';
import '../structs/settings.dart';
@ -26,22 +27,25 @@ class ModManagerState extends State<ModManager> {
onPressed: () {
for (Mod M in settings.inst!.mods) {
M.enabled = false;
settings.loggedInUser!
.sendDiscordActionLog("${M.mod_name} was disabled");
;
}
setState(() {
settings.restartRequired = true;
});
setState(() {});
},
icon: Icon(Icons.swipe_down)),
IconButton(
onPressed: () {
for (Mod M in settings.inst!.mods) {
M.enabled = true;
settings.loggedInUser!
.sendDiscordActionLog("${M.mod_name} was enabled");
}
setState(() {
settings.restartRequired = true;
});
setState(() {});
},
icon: Icon(Icons.swipe_up))
],
@ -60,7 +64,8 @@ class ModManagerState extends State<ModManager> {
} while (i < end - oldIndex);
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) {
//From bottom to top
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[newIndex] = item;
settings.loggedInUser!.sendDiscordActionLog(
"Reordered Mod List\n\n${item.mod_name} is now in load order ${newIndex}");
}
setState(() {
settings.Write();
settings.restartRequired = true;
});
},
itemBuilder: (ctx, idx) {
@ -98,15 +105,18 @@ class ModManagerState extends State<ModManager> {
ModEditReturnArgs MERA = reply as ModEditReturnArgs;
if (MERA.delete) {
setState(() {
settings.loggedInUser!.sendDiscordActionLog(
"Deleted Mod: ${settings.inst!.mods[idx].mod_name}");
settings.inst!.mods.removeAt(idx);
settings.restartRequired = true;
});
return;
}
setState(() {
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(() {
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();
upload.srvSettings = settings.serialize();
upload.performRestart =
requireRestart || settings.restartRequired;
upload.performRestart = requireRestart;
await settings.client!.send(upload,
settings.restartRequired ? false : !requireRestart);
await settings.client!.send(upload, !requireRestart);
Settings.Clear();
setState(() {});
@ -143,7 +141,7 @@ class HomePageState extends State<HomePage> {
},
),
SwitchListTile(
value: requireRestart || settings.restartRequired,
value: requireRestart,
onChanged: (V) {
setState(() {
requireRestart = V;
@ -151,7 +149,7 @@ class HomePageState extends State<HomePage> {
},
title: Text("Perform Restart"),
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();
bool restartRequired = false;
factory Settings() {
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
# 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.
version: 1.1.112324+1636
version: 1.1.112324+1707
environment:
sdk: ">=3.1.4 <4.0.0"