Compare commits
65 Commits
UI
..
82391e10ea
| Author | SHA1 | Date | |
|---|---|---|---|
| 82391e10ea | |||
| 1934199ba8 | |||
| 526a24a16a | |||
| 96baeeea68 | |||
| 28995adce8 | |||
| c9ed825686 | |||
| d0b4e187c8 | |||
| 3f2cb6662a | |||
| 11513fbf13 | |||
| f2d3de82f7 | |||
| b4431702dc | |||
| cd2cf44d9c | |||
| 8939e24e69 | |||
| c0310ed573 | |||
| c96b502ad4 | |||
| bfcffdd88d | |||
| 331fc9a863 | |||
| e347c042d5 | |||
| bb564e6e9b | |||
| 6f53002266 | |||
| 9688509df5 | |||
| efc4b086d1 | |||
| 2cdc438411 | |||
| b60e414d37 | |||
| 10ec8625b9 | |||
| f24cc078c5 | |||
| adde40d921 | |||
| 6bf6c1634a | |||
| 98462ba4a3 | |||
| 11ec84fe24 | |||
| 8b56652a73 | |||
| d7a6eb760e | |||
| c6dd215e9b | |||
| a3f9871d6e | |||
| 2b6cb6b3ad | |||
| cca6ef3eca | |||
| 8733e359e6 | |||
| 89c0057759 | |||
| bf26baaf93 | |||
| 13a43a01ef | |||
| 296f564b39 | |||
| de703a4ddd | |||
| a501329956 | |||
| 5516aeb12f | |||
| 7b48ae2ab6 | |||
| 9bee361ea4 | |||
| 8cbad9af96 | |||
| 33cb7830e3 | |||
| 920330bbab | |||
| c03d7a788f | |||
| b47793b618 | |||
| 94968e8e77 | |||
| 0b4af1353d | |||
| 4edbe7e910 | |||
| 3d8313f7d2 | |||
| e21fd922ab | |||
| b29222af68 | |||
| ac3ce1800f | |||
| 2babe53e99 | |||
| 369f8c2f9d | |||
| c0a85658f4 | |||
| 7568e34d91 | |||
| 7670edbff7 | |||
| cf4a5c74e5 | |||
| 1a5336a996 |
@@ -42,21 +42,12 @@
|
|||||||
<exclude>META-INF/*.RSA</exclude>
|
<exclude>META-INF/*.RSA</exclude>
|
||||||
</excludes>
|
</excludes>
|
||||||
</filter>
|
</filter>
|
||||||
<filter>
|
|
||||||
<artifact>org.openjfx:*</artifact>
|
|
||||||
<excludes>
|
|
||||||
<exclude>**/*</exclude>
|
|
||||||
</excludes>
|
|
||||||
</filter>
|
|
||||||
</filters>
|
</filters>
|
||||||
<dependencySet>
|
<dependencySet>
|
||||||
<outputDirectory>/</outputDirectory>
|
<outputDirectory>/</outputDirectory>
|
||||||
<useProjectArtifact>false</useProjectArtifact>
|
<useProjectArtifact>false</useProjectArtifact>
|
||||||
<unpack>true</unpack>
|
<unpack>true</unpack>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
<excludes>
|
|
||||||
<exclude>org.openjfx:*</exclude>
|
|
||||||
</excludes>
|
|
||||||
</dependencySet>
|
</dependencySet>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
@@ -94,16 +85,11 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<outfile>../server/builds/ZernMCLauncher-${project.version}.exe</outfile>
|
<outfile>../server/builds/ZernMCLauncher-${project.version}.exe</outfile>
|
||||||
<jar>../server/builds/ZernMCLauncher.jar</jar>
|
<jar>../server/builds/ZernMCLauncher.jar</jar>
|
||||||
<headerType>gui</headerType>
|
<headerType>console</headerType>
|
||||||
<dontWrapJar>false</dontWrapJar>
|
<dontWrapJar>false</dontWrapJar>
|
||||||
<jre>
|
<jre>
|
||||||
<path>jre21</path>
|
<path>jre21</path>
|
||||||
<minVersion>21</minVersion>
|
<minVersion>21</minVersion>
|
||||||
<opts>
|
|
||||||
<opt>--module-path=lib-javafx</opt>
|
|
||||||
<opt>--add-modules=javafx.controls,javafx.web</opt>
|
|
||||||
<opt>--add-reads=javafx.graphics=ALL-UNNAMED</opt>
|
|
||||||
</opts>
|
|
||||||
</jre>
|
</jre>
|
||||||
<versionInfo>
|
<versionInfo>
|
||||||
<fileVersion>${project.version}.0</fileVersion>
|
<fileVersion>${project.version}.0</fileVersion>
|
||||||
@@ -119,9 +105,6 @@
|
|||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
<configuration>
|
|
||||||
<skip>${skip.launch4j}</skip>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-antrun-plugin</artifactId>
|
<artifactId>maven-antrun-plugin</artifactId>
|
||||||
@@ -138,9 +121,6 @@
|
|||||||
<copy>
|
<copy>
|
||||||
<fileset />
|
<fileset />
|
||||||
</copy>
|
</copy>
|
||||||
<copy>
|
|
||||||
<fileset />
|
|
||||||
</copy>
|
|
||||||
<zip />
|
<zip />
|
||||||
</target>
|
</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
@@ -166,22 +146,6 @@
|
|||||||
<server.url>http://87.120.187.36:1582</server.url>
|
<server.url>http://87.120.187.36:1582</server.url>
|
||||||
</properties>
|
</properties>
|
||||||
</profile>
|
</profile>
|
||||||
<profile>
|
|
||||||
<id>win</id>
|
|
||||||
<properties>
|
|
||||||
<os.suffix>win</os.suffix>
|
|
||||||
<javafx.classifier>win</javafx.classifier>
|
|
||||||
<skip.launch4j>false</skip.launch4j>
|
|
||||||
</properties>
|
|
||||||
</profile>
|
|
||||||
<profile>
|
|
||||||
<id>linux</id>
|
|
||||||
<properties>
|
|
||||||
<os.suffix>linux</os.suffix>
|
|
||||||
<javafx.classifier>linux</javafx.classifier>
|
|
||||||
<skip.launch4j>true</skip.launch4j>
|
|
||||||
</properties>
|
|
||||||
</profile>
|
|
||||||
</profiles>
|
</profiles>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -210,10 +174,7 @@
|
|||||||
<mainClass>me.sashegdev.zernmc.launcher.Main</mainClass>
|
<mainClass>me.sashegdev.zernmc.launcher.Main</mainClass>
|
||||||
<maven.compiler.source>21</maven.compiler.source>
|
<maven.compiler.source>21</maven.compiler.source>
|
||||||
<project.organization.name>ZernMC</project.organization.name>
|
<project.organization.name>ZernMC</project.organization.name>
|
||||||
<javafx.classifier>win</javafx.classifier>
|
|
||||||
<skip.launch4j>false</skip.launch4j>
|
|
||||||
<maven.compiler.target>21</maven.compiler.target>
|
<maven.compiler.target>21</maven.compiler.target>
|
||||||
<os.suffix>win</os.suffix>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.inceptionYear>2026</project.inceptionYear>
|
<project.inceptionYear>2026</project.inceptionYear>
|
||||||
</properties>
|
</properties>
|
||||||
|
|||||||
+6
-84
@@ -17,9 +17,6 @@
|
|||||||
<project.inceptionYear>2026</project.inceptionYear>
|
<project.inceptionYear>2026</project.inceptionYear>
|
||||||
<project.description>ZernMC Launcher - just a minimalistic launcher by SashegDev</project.description>
|
<project.description>ZernMC Launcher - just a minimalistic launcher by SashegDev</project.description>
|
||||||
<mainClass>me.sashegdev.zernmc.launcher.Main</mainClass>
|
<mainClass>me.sashegdev.zernmc.launcher.Main</mainClass>
|
||||||
<javafx.classifier>win</javafx.classifier>
|
|
||||||
<os.suffix>win</os.suffix>
|
|
||||||
<skip.launch4j>false</skip.launch4j>
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
@@ -77,27 +74,11 @@
|
|||||||
<groupId>org.openjfx</groupId>
|
<groupId>org.openjfx</groupId>
|
||||||
<artifactId>javafx-controls</artifactId>
|
<artifactId>javafx-controls</artifactId>
|
||||||
<version>21.0.2</version>
|
<version>21.0.2</version>
|
||||||
<classifier>win</classifier>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openjfx</groupId>
|
<groupId>org.openjfx</groupId>
|
||||||
<artifactId>javafx-web</artifactId>
|
<artifactId>javafx-web</artifactId>
|
||||||
<version>21.0.2</version>
|
<version>21.0.2</version>
|
||||||
<classifier>win</classifier>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.openjfx</groupId>
|
|
||||||
<artifactId>javafx-controls</artifactId>
|
|
||||||
<version>21.0.2</version>
|
|
||||||
<classifier>linux</classifier>
|
|
||||||
<scope>runtime</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.openjfx</groupId>
|
|
||||||
<artifactId>javafx-web</artifactId>
|
|
||||||
<version>21.0.2</version>
|
|
||||||
<classifier>linux</classifier>
|
|
||||||
<scope>runtime</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.junit.jupiter</groupId>
|
<groupId>org.junit.jupiter</groupId>
|
||||||
@@ -149,22 +130,12 @@
|
|||||||
<exclude>META-INF/*.RSA</exclude>
|
<exclude>META-INF/*.RSA</exclude>
|
||||||
</excludes>
|
</excludes>
|
||||||
</filter>
|
</filter>
|
||||||
<!-- Исключаем JavaFX из shade полностью (он будет в lib-javafx) -->
|
|
||||||
<filter>
|
|
||||||
<artifact>org.openjfx:*</artifact>
|
|
||||||
<excludes>
|
|
||||||
<exclude>**/*</exclude>
|
|
||||||
</excludes>
|
|
||||||
</filter>
|
|
||||||
</filters>
|
</filters>
|
||||||
<dependencySet>
|
<dependencySet>
|
||||||
<outputDirectory>/</outputDirectory>
|
<outputDirectory>/</outputDirectory>
|
||||||
<useProjectArtifact>false</useProjectArtifact>
|
<useProjectArtifact>false</useProjectArtifact>
|
||||||
<unpack>true</unpack>
|
<unpack>true</unpack>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
<excludes>
|
|
||||||
<exclude>org.openjfx:*</exclude>
|
|
||||||
</excludes>
|
|
||||||
</dependencySet>
|
</dependencySet>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
@@ -192,14 +163,11 @@
|
|||||||
</executions>
|
</executions>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
<!-- Launch4j для создания .exe (только для Windows) -->
|
<!-- Launch4j для создания .exe -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>com.akathist.maven.plugins.launch4j</groupId>
|
<groupId>com.akathist.maven.plugins.launch4j</groupId>
|
||||||
<artifactId>launch4j-maven-plugin</artifactId>
|
<artifactId>launch4j-maven-plugin</artifactId>
|
||||||
<version>2.5.0</version>
|
<version>2.5.0</version>
|
||||||
<configuration>
|
|
||||||
<skip>${skip.launch4j}</skip>
|
|
||||||
</configuration>
|
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<id>l4j</id>
|
<id>l4j</id>
|
||||||
@@ -210,16 +178,11 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<outfile>../server/builds/ZernMCLauncher-${project.version}.exe</outfile>
|
<outfile>../server/builds/ZernMCLauncher-${project.version}.exe</outfile>
|
||||||
<jar>../server/builds/ZernMCLauncher.jar</jar>
|
<jar>../server/builds/ZernMCLauncher.jar</jar>
|
||||||
<headerType>gui</headerType>
|
<headerType>console</headerType>
|
||||||
<dontWrapJar>false</dontWrapJar>
|
<dontWrapJar>false</dontWrapJar>
|
||||||
<jre>
|
<jre>
|
||||||
<path>jre21</path>
|
<path>jre21</path>
|
||||||
<minVersion>21</minVersion>
|
<minVersion>21</minVersion>
|
||||||
<opts>
|
|
||||||
<opt>--module-path=lib-javafx</opt>
|
|
||||||
<opt>--add-modules=javafx.controls,javafx.web</opt>
|
|
||||||
<opt>--add-reads=javafx.graphics=ALL-UNNAMED</opt>
|
|
||||||
</opts>
|
|
||||||
</jre>
|
</jre>
|
||||||
<versionInfo>
|
<versionInfo>
|
||||||
<fileVersion>${project.version}.0</fileVersion>
|
<fileVersion>${project.version}.0</fileVersion>
|
||||||
@@ -255,22 +218,11 @@
|
|||||||
<fileset dir="${user.home}/launcher/jre/jre21"/>
|
<fileset dir="${user.home}/launcher/jre/jre21"/>
|
||||||
</copy>
|
</copy>
|
||||||
|
|
||||||
<!-- Копируем JavaFX JAR в builds -->
|
<!-- Создаём zip только с .exe и jre21 (без .jar и build.version) -->
|
||||||
<copy todir="../server/builds/lib-javafx" overwrite="true">
|
<zip destfile="../server/builds/ZernMCLauncher-${project.version}.zip"
|
||||||
<fileset dir="${project.build.directory}/lib-javafx"/>
|
|
||||||
</copy>
|
|
||||||
|
|
||||||
<!-- Копируем shell script для Linux -->
|
|
||||||
<copy file="${project.basedir}/src/main/resources/launcher.sh"
|
|
||||||
todir="../server/builds"
|
|
||||||
overwrite="true"/>
|
|
||||||
<chmod file="../server/builds/launcher.sh" perm="+x"/>
|
|
||||||
|
|
||||||
<!-- Создаём zip с .exe, jre21, lib-javafx и launcher.sh (без .jar и build.version) -->
|
|
||||||
<zip destfile="../server/builds/ZernMCLauncher-${project.version}-${os.suffix}.zip"
|
|
||||||
basedir="../server/builds"
|
basedir="../server/builds"
|
||||||
includes="ZernMCLauncher.exe,ZernMCLauncher.jar,jre21/**,lib-javafx/**,launcher.sh"
|
includes="ZernMCLauncher.exe,jre21/**"
|
||||||
excludes="build.version"/>
|
excludes="*.jar,build.version"/>
|
||||||
</target>
|
</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
@@ -302,35 +254,5 @@
|
|||||||
<server.url>http://87.120.187.36:1582</server.url>
|
<server.url>http://87.120.187.36:1582</server.url>
|
||||||
</properties>
|
</properties>
|
||||||
</profile>
|
</profile>
|
||||||
|
|
||||||
<!-- ==================== WINDOWS BUILD ==================== -->
|
|
||||||
<profile>
|
|
||||||
<id>win</id>
|
|
||||||
<activation>
|
|
||||||
<os>
|
|
||||||
<family>windows</family>
|
|
||||||
</os>
|
|
||||||
</activation>
|
|
||||||
<properties>
|
|
||||||
<javafx.classifier>win</javafx.classifier>
|
|
||||||
<os.suffix>win</os.suffix>
|
|
||||||
<skip.launch4j>false</skip.launch4j>
|
|
||||||
</properties>
|
|
||||||
</profile>
|
|
||||||
|
|
||||||
<!-- ==================== LINUX BUILD ==================== -->
|
|
||||||
<profile>
|
|
||||||
<id>linux</id>
|
|
||||||
<activation>
|
|
||||||
<os>
|
|
||||||
<family>unix</family>
|
|
||||||
</os>
|
|
||||||
</activation>
|
|
||||||
<properties>
|
|
||||||
<javafx.classifier>linux</javafx.classifier>
|
|
||||||
<os.suffix>linux</os.suffix>
|
|
||||||
<skip.launch4j>true</skip.launch4j>
|
|
||||||
</properties>
|
|
||||||
</profile>
|
|
||||||
</profiles>
|
</profiles>
|
||||||
</project>
|
</project>
|
||||||
@@ -34,7 +34,6 @@ public class Main {
|
|||||||
startWebUI(args);
|
startWebUI(args);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.err.println(ZAnsi.red("UI не запустился: " + e.getMessage()));
|
System.err.println(ZAnsi.red("UI не запустился: " + e.getMessage()));
|
||||||
e.printStackTrace();
|
|
||||||
System.out.println(ZAnsi.yellow("Переключаюсь на режим TUI..."));
|
System.out.println(ZAnsi.yellow("Переключаюсь на режим TUI..."));
|
||||||
runTUI(args);
|
runTUI(args);
|
||||||
}
|
}
|
||||||
@@ -71,17 +70,13 @@ public class Main {
|
|||||||
// Даем серверу время запуститься
|
// Даем серверу время запуститься
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
|
|
||||||
// Проверяем headless перед запуском JavaFX (только для не-Windows систем)
|
// Проверяем headless перед запуском JavaFX
|
||||||
if (!System.getProperty("os.name").toLowerCase().contains("win")) {
|
if (java.awt.GraphicsEnvironment.isHeadless()) {
|
||||||
boolean isHeadless = java.awt.GraphicsEnvironment.isHeadless();
|
|
||||||
String display = System.getenv("DISPLAY");
|
|
||||||
if (isHeadless && (display == null || display.isEmpty())) {
|
|
||||||
System.out.println(ZAnsi.yellow("Дисплей недоступен, переключаюсь на TUI..."));
|
System.out.println(ZAnsi.yellow("Дисплей недоступен, переключаюсь на TUI..."));
|
||||||
WebServer.stop();
|
WebServer.stop();
|
||||||
runTUI(args);
|
runTUI(args);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Проверка обновлений лаунчера
|
// Проверка обновлений лаунчера
|
||||||
checkAndAutoUpdateLauncher();
|
checkAndAutoUpdateLauncher();
|
||||||
@@ -186,20 +181,12 @@ public class Main {
|
|||||||
try {
|
try {
|
||||||
String javaPath = System.getProperty("java.home") + "/bin/java";
|
String javaPath = System.getProperty("java.home") + "/bin/java";
|
||||||
String jarPath = getCurrentJarPath().toAbsolutePath().toString();
|
String jarPath = getCurrentJarPath().toAbsolutePath().toString();
|
||||||
String launcherDir = jarPath.substring(0, jarPath.lastIndexOf(java.io.File.separator));
|
|
||||||
String javafxPath = launcherDir + java.io.File.separator + "lib-javafx";
|
|
||||||
|
|
||||||
System.out.println(ZAnsi.brightGreen("Перезапуск лаунчера с новой версией..."));
|
System.out.println(ZAnsi.brightGreen("Перезапуск лаунчера с новой версией..."));
|
||||||
|
|
||||||
ProcessBuilder pb = new ProcessBuilder(
|
new ProcessBuilder(javaPath, "-jar", jarPath)
|
||||||
javaPath,
|
.inheritIO()
|
||||||
"--module-path=" + javafxPath,
|
.start();
|
||||||
"--add-modules=javafx.controls,javafx.web",
|
|
||||||
"--add-reads=javafx.graphics=ALL-UNNAMED",
|
|
||||||
"-jar", jarPath
|
|
||||||
);
|
|
||||||
pb.inheritIO();
|
|
||||||
pb.start();
|
|
||||||
|
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@@ -17,6 +17,11 @@ public class UIWindow extends Application {
|
|||||||
private static int port;
|
private static int port;
|
||||||
|
|
||||||
public static void start(int port) {
|
public static void start(int port) {
|
||||||
|
// Backup проверка headless
|
||||||
|
if (java.awt.GraphicsEnvironment.isHeadless()) {
|
||||||
|
throw new RuntimeException("Headless environment - no display available");
|
||||||
|
}
|
||||||
|
|
||||||
UIWindow.port = port;
|
UIWindow.port = port;
|
||||||
UIWindow.url = "http://localhost:" + port;
|
UIWindow.url = "http://localhost:" + port;
|
||||||
Application.launch(UIWindow.class);
|
Application.launch(UIWindow.class);
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
||||||
JAVA_HOME="$SCRIPT_DIR/jre21"
|
|
||||||
JAVA="$JAVA_HOME/bin/java"
|
|
||||||
|
|
||||||
JAVAFX_PATH="$SCRIPT_DIR/lib-javafx"
|
|
||||||
|
|
||||||
exec "$JAVA" \
|
|
||||||
--module-path="$JAVAFX_PATH" \
|
|
||||||
--add-modules=javafx.controls,javafx.web \
|
|
||||||
--add-reads=javafx.graphics=ALL-UNNAMED \
|
|
||||||
-jar "$SCRIPT_DIR/ZernMCLauncher.jar" "$@"
|
|
||||||
@@ -686,30 +686,6 @@ body {
|
|||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.progress-label {
|
|
||||||
margin-bottom: 8px;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
.progress-file {
|
|
||||||
font-size: 12px;
|
|
||||||
color: var(--text-muted);
|
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
|
|
||||||
.progress-fill.animated {
|
|
||||||
background: linear-gradient(90deg, var(--accent-primary), var(--accent-secondary), var(--accent-primary));
|
|
||||||
background-size: 200% 100%;
|
|
||||||
animation: progressShimmer 1.5s ease-in-out infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes progressShimmer {
|
|
||||||
0% { background-position: 200% 0; }
|
|
||||||
100% { background-position: -200% 0; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ==================== LOADING ==================== */
|
/* ==================== LOADING ==================== */
|
||||||
.loading-overlay {
|
.loading-overlay {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
|||||||
@@ -325,43 +325,7 @@ class App {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.addLog('Обновление сборки...', 'info');
|
this.addLog('Обновление сборки...', 'info');
|
||||||
this.enablePlayButton(false);
|
this.showProgress('Обновление сборки...');
|
||||||
|
|
||||||
const progressContainer = this.showAnimatedProgress('Обновление сборки...');
|
|
||||||
|
|
||||||
let eventSource = null;
|
|
||||||
let progressData = { totalFiles: 0, downloadedFiles: 0 };
|
|
||||||
|
|
||||||
try {
|
|
||||||
eventSource = new EventSource(`/api/instances/${this.currentInstance.name}/install/stream`);
|
|
||||||
eventSource.onmessage = (e) => {
|
|
||||||
try {
|
|
||||||
const data = JSON.parse(e.data);
|
|
||||||
if (data.phase === 'starting') {
|
|
||||||
progressData.totalFiles = data.totalFiles || 0;
|
|
||||||
this.updateAnimatedProgress(progressContainer, `Загрузка: 0/${progressData.totalFiles} файлов`, 5);
|
|
||||||
} else if (data.phase === 'downloading') {
|
|
||||||
progressData.downloadedFiles = data.downloadedFiles || 0;
|
|
||||||
const total = data.totalFiles || progressData.totalFiles || 1;
|
|
||||||
const percent = Math.round((progressData.downloadedFiles / total) * 100);
|
|
||||||
const fileName = data.currentFile ? data.currentFile.split('/').pop() : '';
|
|
||||||
const filePercent = data.filePercent || 0;
|
|
||||||
this.updateAnimatedProgress(progressContainer,
|
|
||||||
`Файл ${progressData.downloadedFiles}/${total} (${percent}%)`,
|
|
||||||
percent,
|
|
||||||
fileName,
|
|
||||||
filePercent
|
|
||||||
);
|
|
||||||
} else if (data.phase === 'complete') {
|
|
||||||
this.updateAnimatedProgress(progressContainer, 'Готово!', 100);
|
|
||||||
} else if (data.phase === 'error') {
|
|
||||||
this.addLog('Ошибка: ' + (data.message || 'неизвестная ошибка'), 'error');
|
|
||||||
}
|
|
||||||
} catch (err) {}
|
|
||||||
};
|
|
||||||
} catch (e) {
|
|
||||||
console.log('SSE not available, using fallback progress');
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = await this.request('/instances/zernmc/install', {
|
const result = await this.request('/instances/zernmc/install', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@@ -371,10 +335,6 @@ class App {
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
if (eventSource) {
|
|
||||||
eventSource.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.hideProgress();
|
this.hideProgress();
|
||||||
|
|
||||||
if (result.success) {
|
if (result.success) {
|
||||||
@@ -402,31 +362,6 @@ class App {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
showAnimatedProgress(text) {
|
|
||||||
const progress = document.getElementById('download-progress');
|
|
||||||
const progressText = document.getElementById('progress-text');
|
|
||||||
const progressFill = document.getElementById('progress-fill');
|
|
||||||
|
|
||||||
progress.classList.remove('hidden');
|
|
||||||
progressText.innerHTML = `<div class="progress-label">${text}</div>
|
|
||||||
<div class="progress-file"></div>`;
|
|
||||||
progressFill.style.width = '5%';
|
|
||||||
progressFill.classList.add('animated');
|
|
||||||
|
|
||||||
return { container: progress, text: progressText, fill: progressFill };
|
|
||||||
}
|
|
||||||
|
|
||||||
updateAnimatedProgress(progressContainer, text, percent, fileName = '', filePercent = 0) {
|
|
||||||
const { text: progressText, fill: progressFill } = progressContainer;
|
|
||||||
if (fileName) {
|
|
||||||
progressText.innerHTML = `<div class="progress-label">${text}</div>
|
|
||||||
<div class="progress-file">${fileName} (${filePercent}%)</div>`;
|
|
||||||
} else {
|
|
||||||
progressText.innerHTML = `<div class="progress-label">${text}</div>`;
|
|
||||||
}
|
|
||||||
progressFill.style.width = percent + '%';
|
|
||||||
}
|
|
||||||
|
|
||||||
// ==================== DOWNLOAD MODAL ====================
|
// ==================== DOWNLOAD MODAL ====================
|
||||||
async showDownloadModal() {
|
async showDownloadModal() {
|
||||||
document.getElementById('download-modal').classList.remove('hidden');
|
document.getElementById('download-modal').classList.remove('hidden');
|
||||||
|
|||||||
Reference in New Issue
Block a user