mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-09-18 16:26:05 -04:00
在 Linux/FreeBSD 平台读取 os-release (#3314)
* 简化 OperatingSystem.getPhysicalMemoryStatus * Read os-release * update * update
This commit is contained in:
parent
26224ae366
commit
4c1e607b8e
@ -222,7 +222,9 @@ public final class Launcher extends Application {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
LOG.info("*** " + Metadata.TITLE + " ***");
|
LOG.info("*** " + Metadata.TITLE + " ***");
|
||||||
LOG.info("Operating System: " + OperatingSystem.SYSTEM_NAME + ' ' + OperatingSystem.SYSTEM_VERSION);
|
LOG.info("Operating System: " + (OperatingSystem.OS_RELEASE_PRETTY_NAME == null
|
||||||
|
? OperatingSystem.SYSTEM_NAME + ' ' + OperatingSystem.SYSTEM_VERSION
|
||||||
|
: OperatingSystem.OS_RELEASE_PRETTY_NAME + " (" + OperatingSystem.SYSTEM_NAME + ' ' + OperatingSystem.SYSTEM_VERSION + ')'));
|
||||||
LOG.info("System Architecture: " + Architecture.SYSTEM_ARCH_NAME);
|
LOG.info("System Architecture: " + Architecture.SYSTEM_ARCH_NAME);
|
||||||
LOG.info("Java Architecture: " + Architecture.CURRENT_ARCH_NAME);
|
LOG.info("Java Architecture: " + Architecture.CURRENT_ARCH_NAME);
|
||||||
LOG.info("Java Version: " + System.getProperty("java.version") + ", " + System.getProperty("java.vendor"));
|
LOG.info("Java Version: " + System.getProperty("java.version") + ", " + System.getProperty("java.vendor"));
|
||||||
|
@ -396,7 +396,7 @@ public class HMCLGameRepository extends DefaultGameRepository {
|
|||||||
.setOverrideJavaArguments(StringUtils.tokenize(vs.getJavaArgs()))
|
.setOverrideJavaArguments(StringUtils.tokenize(vs.getJavaArgs()))
|
||||||
.setMaxMemory(vs.isNoJVMArgs() && vs.isAutoMemory() ? null : (int)(getAllocatedMemory(
|
.setMaxMemory(vs.isNoJVMArgs() && vs.isAutoMemory() ? null : (int)(getAllocatedMemory(
|
||||||
vs.getMaxMemory() * 1024L * 1024L,
|
vs.getMaxMemory() * 1024L * 1024L,
|
||||||
OperatingSystem.getPhysicalMemoryStatus().orElse(OperatingSystem.PhysicalMemoryStatus.INVALID).getAvailable(),
|
OperatingSystem.getPhysicalMemoryStatus().getAvailable(),
|
||||||
vs.isAutoMemory()
|
vs.isAutoMemory()
|
||||||
) / 1024 / 1024))
|
) / 1024 / 1024))
|
||||||
.setMinMemory(vs.getMinMemory())
|
.setMinMemory(vs.getMinMemory())
|
||||||
|
@ -20,8 +20,6 @@ package org.jackhuang.hmcl.ui;
|
|||||||
import com.jfoenix.controls.JFXButton;
|
import com.jfoenix.controls.JFXButton;
|
||||||
import javafx.beans.property.BooleanProperty;
|
import javafx.beans.property.BooleanProperty;
|
||||||
import javafx.beans.property.SimpleBooleanProperty;
|
import javafx.beans.property.SimpleBooleanProperty;
|
||||||
import javafx.beans.property.SimpleStringProperty;
|
|
||||||
import javafx.beans.property.StringProperty;
|
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
@ -43,6 +41,7 @@ import org.jackhuang.hmcl.setting.Theme;
|
|||||||
import org.jackhuang.hmcl.task.Schedulers;
|
import org.jackhuang.hmcl.task.Schedulers;
|
||||||
import org.jackhuang.hmcl.task.Task;
|
import org.jackhuang.hmcl.task.Task;
|
||||||
import org.jackhuang.hmcl.ui.construct.TwoLineListItem;
|
import org.jackhuang.hmcl.ui.construct.TwoLineListItem;
|
||||||
|
import org.jackhuang.hmcl.util.Lang;
|
||||||
import org.jackhuang.hmcl.util.Log4jLevel;
|
import org.jackhuang.hmcl.util.Log4jLevel;
|
||||||
import org.jackhuang.hmcl.util.logging.Logger;
|
import org.jackhuang.hmcl.util.logging.Logger;
|
||||||
import org.jackhuang.hmcl.util.Pair;
|
import org.jackhuang.hmcl.util.Pair;
|
||||||
@ -77,8 +76,6 @@ public class GameCrashWindow extends Stage {
|
|||||||
private final String total_memory;
|
private final String total_memory;
|
||||||
private final String java;
|
private final String java;
|
||||||
private final LibraryAnalyzer analyzer;
|
private final LibraryAnalyzer analyzer;
|
||||||
private final StringProperty os = new SimpleStringProperty(OperatingSystem.SYSTEM_NAME);
|
|
||||||
private final StringProperty arch = new SimpleStringProperty(Architecture.SYSTEM_ARCH.getDisplayName());
|
|
||||||
private final TextFlow reasonTextFlow = new TextFlow(new Text(i18n("game.crash.reason.unknown")));
|
private final TextFlow reasonTextFlow = new TextFlow(new Text(i18n("game.crash.reason.unknown")));
|
||||||
private final BooleanProperty loading = new SimpleBooleanProperty();
|
private final BooleanProperty loading = new SimpleBooleanProperty();
|
||||||
private final TextFlow feedbackTextFlow = new TextFlow();
|
private final TextFlow feedbackTextFlow = new TextFlow();
|
||||||
@ -356,12 +353,12 @@ public class GameCrashWindow extends Stage {
|
|||||||
TwoLineListItem os = new TwoLineListItem();
|
TwoLineListItem os = new TwoLineListItem();
|
||||||
os.getStyleClass().setAll("two-line-item-second-large");
|
os.getStyleClass().setAll("two-line-item-second-large");
|
||||||
os.setTitle(i18n("system.operating_system"));
|
os.setTitle(i18n("system.operating_system"));
|
||||||
os.subtitleProperty().bind(GameCrashWindow.this.os);
|
os.setSubtitle(Lang.requireNonNullElse(OperatingSystem.OS_RELEASE_NAME, OperatingSystem.SYSTEM_NAME));
|
||||||
|
|
||||||
TwoLineListItem arch = new TwoLineListItem();
|
TwoLineListItem arch = new TwoLineListItem();
|
||||||
arch.getStyleClass().setAll("two-line-item-second-large");
|
arch.getStyleClass().setAll("two-line-item-second-large");
|
||||||
arch.setTitle(i18n("system.architecture"));
|
arch.setTitle(i18n("system.architecture"));
|
||||||
arch.subtitleProperty().bind(GameCrashWindow.this.arch);
|
arch.setSubtitle(Architecture.SYSTEM_ARCH.getDisplayName());
|
||||||
|
|
||||||
infoPane.getChildren().setAll(launcher, version, total_memory, memory, java, os, arch);
|
infoPane.getChildren().setAll(launcher, version, total_memory, memory, java, os, arch);
|
||||||
}
|
}
|
||||||
|
@ -457,7 +457,7 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initialize() {
|
private void initialize() {
|
||||||
memoryStatus.set(OperatingSystem.getPhysicalMemoryStatus().orElse(OperatingSystem.PhysicalMemoryStatus.INVALID));
|
memoryStatus.set(OperatingSystem.getPhysicalMemoryStatus());
|
||||||
enableSpecificSettings.addListener((a, b, newValue) -> {
|
enableSpecificSettings.addListener((a, b, newValue) -> {
|
||||||
if (versionId == null) return;
|
if (versionId == null) return;
|
||||||
|
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.jackhuang.hmcl.util.platform;
|
package org.jackhuang.hmcl.util.platform;
|
||||||
|
|
||||||
|
import org.jackhuang.hmcl.util.KeyValuePairProperties;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -28,8 +30,9 @@ import java.nio.file.Files;
|
|||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Optional;
|
import java.util.Map;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@ -118,6 +121,9 @@ public enum OperatingSystem {
|
|||||||
*/
|
*/
|
||||||
public static final String SYSTEM_VERSION;
|
public static final String SYSTEM_VERSION;
|
||||||
|
|
||||||
|
public static final String OS_RELEASE_NAME;
|
||||||
|
public static final String OS_RELEASE_PRETTY_NAME;
|
||||||
|
|
||||||
public static final Pattern INVALID_RESOURCE_CHARACTERS;
|
public static final Pattern INVALID_RESOURCE_CHARACTERS;
|
||||||
private static final String[] INVALID_RESOURCE_BASENAMES;
|
private static final String[] INVALID_RESOURCE_BASENAMES;
|
||||||
private static final String[] INVALID_RESOURCE_FULLNAMES;
|
private static final String[] INVALID_RESOURCE_FULLNAMES;
|
||||||
@ -144,7 +150,7 @@ public enum OperatingSystem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (UnsupportedCharsetException e) {
|
} catch (UnsupportedCharsetException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace(System.err);
|
||||||
}
|
}
|
||||||
NATIVE_CHARSET = nativeCharset;
|
NATIVE_CHARSET = nativeCharset;
|
||||||
|
|
||||||
@ -187,9 +193,24 @@ public enum OperatingSystem {
|
|||||||
SYSTEM_BUILD_NUMBER = -1;
|
SYSTEM_BUILD_NUMBER = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
TOTAL_MEMORY = getPhysicalMemoryStatus()
|
Map<String, String> osRelease = Collections.emptyMap();
|
||||||
.map(physicalMemoryStatus -> (int) (physicalMemoryStatus.getTotal() / 1024 / 1024))
|
if (CURRENT_OS == LINUX || CURRENT_OS == FREEBSD) {
|
||||||
.orElse(1024);
|
Path osReleaseFile = Paths.get("/etc/os-release");
|
||||||
|
if (Files.exists(osReleaseFile)) {
|
||||||
|
try {
|
||||||
|
osRelease = KeyValuePairProperties.load(osReleaseFile);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace(System.err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
OS_RELEASE_NAME = osRelease.get("NAME");
|
||||||
|
OS_RELEASE_PRETTY_NAME = osRelease.get("PRETTY_NAME");
|
||||||
|
|
||||||
|
PhysicalMemoryStatus physicalMemoryStatus = getPhysicalMemoryStatus();
|
||||||
|
TOTAL_MEMORY = physicalMemoryStatus != PhysicalMemoryStatus.INVALID
|
||||||
|
? (int) (physicalMemoryStatus.getTotal() / 1024 / 1024)
|
||||||
|
: 1024;
|
||||||
|
|
||||||
SUGGESTED_MEMORY = TOTAL_MEMORY >= 32768 ? 8192 : (int) (Math.round(1.0 * TOTAL_MEMORY / 4.0 / 128.0) * 128);
|
SUGGESTED_MEMORY = TOTAL_MEMORY >= 32768 ? 8192 : (int) (Math.round(1.0 * TOTAL_MEMORY / 4.0 / 128.0) * 128);
|
||||||
|
|
||||||
@ -256,7 +277,7 @@ public enum OperatingSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public static Optional<PhysicalMemoryStatus> getPhysicalMemoryStatus() {
|
public static PhysicalMemoryStatus getPhysicalMemoryStatus() {
|
||||||
if (CURRENT_OS == LINUX) {
|
if (CURRENT_OS == LINUX) {
|
||||||
try {
|
try {
|
||||||
long free = 0, available = 0, total = 0;
|
long free = 0, available = 0, total = 0;
|
||||||
@ -277,10 +298,10 @@ public enum OperatingSystem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (total > 0) {
|
if (total > 0) {
|
||||||
return Optional.of(new PhysicalMemoryStatus(total, available > 0 ? available : free));
|
return new PhysicalMemoryStatus(total, available > 0 ? available : free);
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace(System.err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,11 +311,11 @@ public enum OperatingSystem {
|
|||||||
com.sun.management.OperatingSystemMXBean sunBean =
|
com.sun.management.OperatingSystemMXBean sunBean =
|
||||||
(com.sun.management.OperatingSystemMXBean)
|
(com.sun.management.OperatingSystemMXBean)
|
||||||
java.lang.management.ManagementFactory.getOperatingSystemMXBean();
|
java.lang.management.ManagementFactory.getOperatingSystemMXBean();
|
||||||
return Optional.of(new PhysicalMemoryStatus(sunBean.getTotalPhysicalMemorySize(), sunBean.getFreePhysicalMemorySize()));
|
return new PhysicalMemoryStatus(sunBean.getTotalPhysicalMemorySize(), sunBean.getFreePhysicalMemorySize());
|
||||||
}
|
}
|
||||||
} catch (NoClassDefFoundError ignored) {
|
} catch (NoClassDefFoundError ignored) {
|
||||||
}
|
}
|
||||||
return Optional.empty();
|
return PhysicalMemoryStatus.INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("removal")
|
@SuppressWarnings("removal")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user