改进 HiPer 支持 (#1763)
* Disable start hiper button when token is empty * Use gsudo start hiper * Automatically request administrator privileges on Windows and Linux * Automatically start hiper with sudo on mac * Update I18N * Prompt user to chown unwritable files * Update HiPer file verification failed prompt * Log other hiper exceptions * temporarily disable gsudo * Detect admin rights with 'net session' * Hide the hint pane when running with administrator privileges * Prompt user when starting HMCL with sudo * Fix ClassNotFoundException when no JavaFX * Update the prompt when the permission cannot be obtained * Add support for saving multiple HiPer configurations * update link close Glavo/HMCL#3 * Detect RISC-V 32 * Save original hiper authorization information * Add support for importing and exporting license files * Set initial license file name * Complement the missing message * Handling gsudo failure to obtain permission
This commit is contained in:
@@ -67,6 +67,9 @@ public final class Logging {
|
||||
});
|
||||
|
||||
try {
|
||||
if (Files.isRegularFile(logFolder))
|
||||
Files.delete(logFolder);
|
||||
|
||||
Files.createDirectories(logFolder);
|
||||
FileHandler fileHandler = new FileHandler(logFolder.resolve("hmcl.log").toAbsolutePath().toString());
|
||||
fileHandler.setLevel(Level.FINEST);
|
||||
@@ -74,7 +77,7 @@ public final class Logging {
|
||||
fileHandler.setEncoding("UTF-8");
|
||||
LOG.addHandler(fileHandler);
|
||||
} catch (IOException e) {
|
||||
System.err.println("Unable to create hmcl.log, " + e.getMessage());
|
||||
System.err.println("Unable to create hmcl.log\n" + StringUtils.getStackTrace(e));
|
||||
}
|
||||
|
||||
ConsoleHandler consoleHandler = new ConsoleHandler();
|
||||
|
||||
@@ -260,6 +260,16 @@ public final class StringUtils {
|
||||
return US_ASCII_ENCODER.canEncode(cs);
|
||||
}
|
||||
|
||||
public static boolean isAlphabeticOrNumber(String str) {
|
||||
int length = str.length();
|
||||
for (int i = 0; i < length; i++) {
|
||||
char ch = str.charAt(i);
|
||||
if (!(ch >= '0' && ch <= '9') && !(ch >= 'a' && ch <= 'z') && !(ch >= 'A' && ch <= 'Z'))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Class for computing the longest common subsequence between strings.
|
||||
*/
|
||||
|
||||
@@ -46,7 +46,8 @@ public enum Architecture {
|
||||
PPC64LE(BIT_64, "PowerPC-64 (Little-Endian)"),
|
||||
S390(BIT_32),
|
||||
S390X(BIT_64, "S390x"),
|
||||
RISCV(BIT_64, "RISC-V"),
|
||||
RISCV32(BIT_32, "RISC-V (32 Bit)"),
|
||||
RISCV64(BIT_64, "RISC-V"),
|
||||
LOONGARCH32(BIT_32, "LoongArch32"),
|
||||
LOONGARCH64_OW(BIT_64, "LoongArch64 (old world)"),
|
||||
LOONGARCH64(BIT_64, "LoongArch64"),
|
||||
@@ -140,7 +141,8 @@ public enum Architecture {
|
||||
return MIPSEL;
|
||||
case "riscv":
|
||||
case "risc-v":
|
||||
return RISCV;
|
||||
case "riscv64":
|
||||
return RISCV64;
|
||||
case "ia64":
|
||||
case "ia64w":
|
||||
case "itanium64":
|
||||
|
||||
@@ -131,11 +131,11 @@ public class ManagedProcess {
|
||||
}
|
||||
|
||||
public synchronized void pumpInputStream(Consumer<String> onLogLine) {
|
||||
addRelatedThread(Lang.thread(new StreamPump(process.getInputStream(), onLogLine), "ProcessInputStreamPump", true));
|
||||
addRelatedThread(Lang.thread(new StreamPump(process.getInputStream(), onLogLine, OperatingSystem.NATIVE_CHARSET), "ProcessInputStreamPump", true));
|
||||
}
|
||||
|
||||
public synchronized void pumpErrorStream(Consumer<String> onLogLine) {
|
||||
addRelatedThread(Lang.thread(new StreamPump(process.getErrorStream(), onLogLine), "ProcessErrorStreamPump", true));
|
||||
addRelatedThread(Lang.thread(new StreamPump(process.getErrorStream(), onLogLine, OperatingSystem.NATIVE_CHARSET), "ProcessErrorStreamPump", true));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user