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.mode}} + {{server.mode}} + {{server.mode}}
{{ 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(); + } + }