Server ID:
@@ -68,21 +74,29 @@
@switch (Console.ServerState)
{
case ServerState.Offline:
-
Offline
+
+ Offline
+
break;
case ServerState.Starting:
-
Starting
+
+ Starting
+
(@(Formatter.FormatUptime(Console.Resource.Uptime)))
break;
case ServerState.Stopping:
-
Stopping
+
+ Stopping
+
(@(Formatter.FormatUptime(Console.Resource.Uptime)))
break;
case ServerState.Running:
-
Online
+
+ Online
+
(@(Formatter.FormatUptime(Console.Resource.Uptime)))
break;
}
@@ -110,7 +124,9 @@
- Console
+
+ Console
+
@@ -118,7 +134,9 @@
- Files
+
+ Files
+
@@ -126,7 +144,9 @@
- Backups
+
+ Backups
+
@@ -134,7 +154,9 @@
- Network
+
+ Network
+
@@ -142,7 +164,9 @@
- Addons
+
+ Addons
+
@@ -150,7 +174,9 @@
- Settings
+
+ Settings
+
@@ -169,7 +195,7 @@
{
[CascadingParameter]
public Server CurrentServer { get; set; }
-
+
[CascadingParameter]
public User User { get; set; }
diff --git a/Moonlight/Shared/Views/Servers/Index.razor b/Moonlight/Shared/Views/Servers/Index.razor
index e6340547..4df99d73 100644
--- a/Moonlight/Shared/Views/Servers/Index.razor
+++ b/Moonlight/Shared/Views/Servers/Index.razor
@@ -221,6 +221,8 @@
{
ServerGroups = (JsonConvert.DeserializeObject
(
User.ServerListLayoutJson) ?? Array.Empty()).ToList();
+
+ await CheckServerGroups();
}
foreach (var server in AllServers)
@@ -256,8 +258,8 @@
private async Task RemoveGroup(ServerGroup group)
{
ServerGroups.Remove(group);
- await EnsureAllServersInGroups();
-
+
+ await CheckServerGroups();
await InvokeAsync(StateHasChanged);
await JsRuntime.InvokeVoidAsync("moonlight.serverList.init");
@@ -266,11 +268,10 @@
private async Task SetEditMode(bool toggle)
{
EditMode = toggle;
- await InvokeAsync(StateHasChanged);
if (EditMode)
{
- await EnsureAllServersInGroups();
+ await CheckServerGroups();
await InvokeAsync(StateHasChanged);
await JsRuntime.InvokeVoidAsync("moonlight.serverList.init");
@@ -278,6 +279,9 @@
else
{
var json = JsonConvert.SerializeObject(await GetGroupsFromClient());
+
+ await CheckServerGroups();
+
User.ServerListLayoutJson = json;
UserRepository.Update(User);
@@ -289,7 +293,7 @@
{
var serverGroups = await JsRuntime.InvokeAsync("moonlight.serverList.getData");
- // Check user data to prevent users from doing stupid stuff
+ // Check user data to prevent users from doing stupid stuff
foreach (var serverGroup in serverGroups)
{
if (serverGroup.Name.Length > 30)
@@ -297,53 +301,78 @@
Logger.Verbose("Server list group lenght too long");
return Array.Empty();
}
-
- if (serverGroup.Servers.Any(x => AllServers.All(y => y.Id.ToString() != x)))
- {
- Logger.Verbose("User tried to add a server in his server list which he has no access to");
- return Array.Empty();
- }
}
return serverGroups;
}
- private Task EnsureAllServersInGroups()
+ private Task CheckServerGroups()
{
- var presentInGroup = new List();
+ var result = new List();
+ // Reconstruct the data with checking for invalid server ids
foreach (var group in ServerGroups)
+ {
+ var checkedGroup = new ServerGroup()
+ {
+ Name = group.Name
+ };
+
+ foreach (var server in group.Servers)
+ {
+ var s = AllServers.FirstOrDefault(x => x.Id.ToString() == server);
+
+ if (s != null) // This is a check for invalid server ids
+ {
+ checkedGroup.Servers.Add(s.Id.ToString());
+ }
+ }
+
+ result.Add(checkedGroup);
+ }
+
+ var presentInGroup = new List();
+
+ // Copy all servers to preset in group if they are in the users servers
+ foreach (var group in result)
{
foreach (var id in group.Servers)
- presentInGroup.Add(AllServers.First(x => x.Id.ToString() == id));
+ {
+ var s = AllServers.First(x => x.Id.ToString() == id);
+ presentInGroup.Add(s);
+ }
}
var serversMissing = new List();
+ // Make a list of missing servers
foreach (var server in AllServers)
{
if (presentInGroup.All(x => x.Id != server.Id))
serversMissing.Add(server);
}
+ // Add all missing servers into the default group
if (serversMissing.Any())
{
- var defaultGroup = ServerGroups.FirstOrDefault(x => x.Name == "");
+ var defaultGroup = result.FirstOrDefault(x => x.Name == "");
- if (defaultGroup == null)
+ if (defaultGroup == null) // If group does not exist, create it
{
defaultGroup = new ServerGroup()
{
Name = ""
};
- ServerGroups.Add(defaultGroup);
+ result.Add(defaultGroup);
}
foreach (var server in serversMissing)
defaultGroup.Servers.Add(server.Id.ToString());
}
+ ServerGroups = result;
+
return Task.CompletedTask;
}
@@ -351,8 +380,11 @@
{
lock (StatusCache)
{
- StatusCache.Add(server, status);
- InvokeAsync(StateHasChanged);
+ if (!StatusCache.ContainsKey(server))
+ {
+ StatusCache.Add(server, status);
+ InvokeAsync(StateHasChanged);
+ }
}
}
}
\ No newline at end of file