diff --git a/src/main/angular/src/app/server-list/Server.ts b/src/main/angular/src/app/server-list/Server.ts
index 45070e2..ed61c8e 100644
--- a/src/main/angular/src/app/server-list/Server.ts
+++ b/src/main/angular/src/app/server-list/Server.ts
@@ -1,39 +1,27 @@
import {Mode} from "./Mode";
-import {orNull, validateBoolean, validateNumber, validateString} from "../crud/CrudHelpers";
+import {validateBoolean, validateNumber, validateString} from "../crud/CrudHelpers";
export class Server {
constructor(
- readonly directory: string,
readonly name: string,
readonly motd: string,
readonly mode: Mode,
readonly serverPort: number,
- readonly rconPort: number,
- readonly rconPassword: string,
- readonly queryPort: number,
- readonly pid: number | null,
readonly running: boolean,
- readonly propertyFile: string,
- readonly pidFile: string,
+ readonly hasIcon: boolean,
) {
//
}
static fromJson(json: any): Server {
return new Server(
- validateString(json.directory),
validateString(json.name),
validateString(json.motd),
validateString(json.mode) as Mode,
validateNumber(json.serverPort),
- validateNumber(json.rconPort),
- validateString(json.rconPassword),
- validateNumber(json.queryPort),
- orNull(json.pid, validateNumber),
validateBoolean(json.running),
- validateString(json.propertyFile),
- validateString(json.pidFile),
+ validateBoolean(json.hasIcon),
);
}
diff --git a/src/main/angular/src/app/server-list/server-list.component.html b/src/main/angular/src/app/server-list/server-list.component.html
index b5b1132..cd954bf 100644
--- a/src/main/angular/src/app/server-list/server-list.component.html
+++ b/src/main/angular/src/app/server-list/server-list.component.html
@@ -10,7 +10,8 @@
{{ server.motd }}
diff --git a/src/main/angular/src/app/server-list/server-list.component.ts b/src/main/angular/src/app/server-list/server-list.component.ts
index 1abaa07..5634870 100644
--- a/src/main/angular/src/app/server-list/server-list.component.ts
+++ b/src/main/angular/src/app/server-list/server-list.component.ts
@@ -1,19 +1,23 @@
import {Component} from '@angular/core';
-import {NgForOf} from '@angular/common';
+import {NgForOf, NgIf} from '@angular/common';
import {Server} from './Server';
import {CrudListComponent} from '../crud/CrudListComponent';
import {ServerService} from './server.service';
+import {url} from '../crud/CrudHelpers';
@Component({
selector: 'app-server-list',
imports: [
- NgForOf
+ NgForOf,
+ NgIf
],
templateUrl: './server-list.component.html',
styleUrl: './server-list.component.less'
})
export class ServerListComponent extends CrudListComponent {
+ protected readonly url = url;
+
constructor(
crudService: ServerService,
) {
diff --git a/src/main/java/de/ph87/mc/server/Server.java b/src/main/java/de/ph87/mc/server/Server.java
index 99984e2..d596b75 100644
--- a/src/main/java/de/ph87/mc/server/Server.java
+++ b/src/main/java/de/ph87/mc/server/Server.java
@@ -1,5 +1,6 @@
package de.ph87.mc.server;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import de.ph87.mc.websocket.IWebsocketMessage;
import jakarta.annotation.Nullable;
import lombok.Data;
@@ -11,12 +12,15 @@ import java.io.File;
public class Server implements IWebsocketMessage {
@NonNull
+ @JsonIgnore
public final File directory;
@NonNull
+ @JsonIgnore
public final File propertyFile;
@NonNull
+ @JsonIgnore
public final File pidFile;
@NonNull
@@ -30,13 +34,21 @@ public class Server implements IWebsocketMessage {
public final int serverPort;
+ @JsonIgnore
public final int rconPort;
@NonNull
+ @JsonIgnore
public final String rconPassword;
+ @JsonIgnore
public final int queryPort;
+ @JsonIgnore
+ public final File iconFile;
+
+ public final boolean hasIcon;
+
@Nullable
private Long pid;
@@ -44,6 +56,7 @@ public class Server implements IWebsocketMessage {
this.directory = directory;
this.propertyFile = new File(directory, "server.properties");
this.pidFile = new File(directory, "pid");
+ this.iconFile = new File(directory, "McManagerIcon.png");
this.name = name;
this.motd = motd;
this.mode = mode;
@@ -51,6 +64,7 @@ public class Server implements IWebsocketMessage {
this.rconPort = rconPort;
this.rconPassword = rconPassword;
this.queryPort = queryPort;
+ this.hasIcon = iconFile.isFile();
}
@Override
diff --git a/src/main/java/de/ph87/mc/server/ServerController.java b/src/main/java/de/ph87/mc/server/ServerController.java
index f13dce5..619bfb9 100644
--- a/src/main/java/de/ph87/mc/server/ServerController.java
+++ b/src/main/java/de/ph87/mc/server/ServerController.java
@@ -1,5 +1,6 @@
package de.ph87.mc.server;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.CrossOrigin;
@@ -8,6 +9,8 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import java.io.FileInputStream;
+import java.io.IOException;
import java.util.List;
@CrossOrigin
@@ -35,4 +38,13 @@ public class ServerController {
return serverService.stop(name);
}
+ @GetMapping("{name}/icon")
+ public void icon(@NonNull @PathVariable final String name, @NonNull final HttpServletResponse response) throws IOException {
+ final Server server = serverRepository.getByName(name);
+ try (final FileInputStream inputStream = new FileInputStream(server.iconFile)) {
+ response.getOutputStream().write(inputStream.readAllBytes());
+ }
+ response.getOutputStream().flush();
+ }
+
}