mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-08-03 11:26:38 -04:00
Merge 77a5dea74561abe894309c032473c4c84341d245 into 9969dc60c5278340b6b9a4d7facdde620e99d1f5
This commit is contained in:
commit
65daaeae1c
@ -43,7 +43,13 @@ import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.AbstractMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
import static org.jackhuang.hmcl.setting.ConfigHolder.config;
|
||||
import static org.jackhuang.hmcl.util.Lang.thread;
|
||||
@ -122,23 +128,47 @@ public final class SettingsPage extends SettingsView {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onExportLogs() {
|
||||
// We cannot determine which file is JUL using.
|
||||
// So we write all the logs to a new file.
|
||||
protected void onExportRecentLogs() {
|
||||
thread(() -> {
|
||||
Path logFile = Paths.get("hmcl-exported-logs-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH-mm-ss")) + ".log").toAbsolutePath();
|
||||
Path logDir = LOG.getLogFile().getParent();
|
||||
Path zipFile = Paths.get("hmcl-exported-logs-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH-mm-ss")) + ".zip");
|
||||
|
||||
LOG.info("Exporting logs to " + logFile);
|
||||
try (OutputStream output = Files.newOutputStream(logFile)) {
|
||||
LOG.exportLogs(output);
|
||||
LOG.info("Exporting recent logs to " + zipFile);
|
||||
try {
|
||||
// Get 5 most recent files
|
||||
List<Path> recentFiles = Files.walk(logDir)
|
||||
.filter(path -> !Files.isDirectory(path))
|
||||
.map(path -> {
|
||||
try {
|
||||
return new AbstractMap.SimpleEntry<>(path, Files.getLastModifiedTime(path).toMillis());
|
||||
} catch (IOException e) {
|
||||
return new AbstractMap.SimpleEntry<>(path, 0L);
|
||||
}
|
||||
})
|
||||
.sorted((a, b) -> Long.compare(b.getValue(), a.getValue())) // Sort by newest first
|
||||
.limit(5)
|
||||
.map(Map.Entry::getKey)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
try (OutputStream os = Files.newOutputStream(zipFile);
|
||||
ZipOutputStream zos = new ZipOutputStream(os)) {
|
||||
|
||||
for (Path path : recentFiles) {
|
||||
String zipEntryName = logDir.relativize(path).toString();
|
||||
zos.putNextEntry(new ZipEntry(zipEntryName));
|
||||
Files.copy(path, zos);
|
||||
zos.closeEntry();
|
||||
}
|
||||
}
|
||||
|
||||
Platform.runLater(() -> {
|
||||
Controllers.dialog(i18n("settings.launcher.launcher_log.export.success", zipFile));
|
||||
FXUtils.showFileInExplorer(zipFile);
|
||||
});
|
||||
} catch (IOException e) {
|
||||
Platform.runLater(() -> Controllers.dialog(i18n("settings.launcher.launcher_log.export.failed") + "\n" + StringUtils.getStackTrace(e), null, MessageType.ERROR));
|
||||
LOG.warning("Failed to export logs", e);
|
||||
return;
|
||||
LOG.warning("Failed to export recent logs", e);
|
||||
}
|
||||
|
||||
Platform.runLater(() -> Controllers.dialog(i18n("settings.launcher.launcher_log.export.success", logFile)));
|
||||
FXUtils.showFileInExplorer(logFile);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -198,13 +198,15 @@ public abstract class SettingsView extends StackPane {
|
||||
if (LOG.getLogFile() == null)
|
||||
openLogFolderButton.setDisable(true);
|
||||
|
||||
JFXButton logButton = new JFXButton(i18n("settings.launcher.launcher_log.export"));
|
||||
logButton.setOnAction(e -> onExportLogs());
|
||||
logButton.getStyleClass().add("jfx-button-border");
|
||||
JFXButton exportRecentLogsButton = new JFXButton(i18n("settings.launcher.launcher_log.export_recent"));
|
||||
exportRecentLogsButton.setOnAction(e -> onExportRecentLogs());
|
||||
exportRecentLogsButton.getStyleClass().add("jfx-button-border");
|
||||
if (LOG.getLogFile() == null)
|
||||
exportRecentLogsButton.setDisable(true);
|
||||
|
||||
HBox buttonBox = new HBox();
|
||||
buttonBox.setSpacing(10);
|
||||
buttonBox.getChildren().addAll(openLogFolderButton, logButton);
|
||||
buttonBox.getChildren().addAll(openLogFolderButton, exportRecentLogsButton);
|
||||
BorderPane.setAlignment(buttonBox, Pos.CENTER_RIGHT);
|
||||
debugPane.setRight(buttonBox);
|
||||
|
||||
@ -223,9 +225,9 @@ public abstract class SettingsView extends StackPane {
|
||||
|
||||
protected abstract void onUpdate();
|
||||
|
||||
protected abstract void onExportLogs();
|
||||
|
||||
protected abstract void onSponsor();
|
||||
|
||||
protected abstract void clearCacheDirectory();
|
||||
|
||||
protected abstract void onExportRecentLogs();
|
||||
}
|
||||
|
@ -1334,6 +1334,7 @@ settings.launcher.font.anti_aliasing.lcd=Sub-pixel
|
||||
settings.launcher.general=General
|
||||
settings.launcher.language=Language (Applies After Restart)
|
||||
settings.launcher.launcher_log.export=Export Launcher Logs
|
||||
settings.launcher.launcher_log.export_recent=Export Recent Launcher Logs
|
||||
settings.launcher.launcher_log.export.failed=Failed to export logs.
|
||||
settings.launcher.launcher_log.export.success=Logs have been exported to "%s".
|
||||
settings.launcher.launcher_log.reveal=Reveal Logs in File Manager
|
||||
|
@ -1334,6 +1334,7 @@ settings.launcher.font=Fuente
|
||||
settings.launcher.general=General
|
||||
settings.launcher.language=Idioma
|
||||
settings.launcher.launcher_log.export=Exportar registros del launcher
|
||||
settings.launcher.launcher_log.export_recent=Exportar registros recientes del launcher
|
||||
settings.launcher.launcher_log.export.failed=No se han podido exportar los registros
|
||||
settings.launcher.launcher_log.export.success=Los registros se han exportado a «%s»
|
||||
settings.launcher.launcher_log.reveal=Abrir directorio de registro
|
||||
|
@ -848,6 +848,7 @@ settings.launcher.font=フォント
|
||||
settings.launcher.general=全般的
|
||||
settings.launcher.language=言語
|
||||
settings.launcher.launcher_log.export=ランチャーログのエクスポート
|
||||
settings.launcher.launcher_log.export_recent=最近のランチャーログをエクスポート
|
||||
settings.launcher.launcher_log.export.failed=ログのエクスポートに失敗しました
|
||||
settings.launcher.launcher_log.export.success=ログが %s にエクスポートされました
|
||||
settings.launcher.launcher_log.reveal=ファイルマネージャーでログを表示する
|
||||
|
@ -1334,6 +1334,7 @@ settings.launcher.font=Шрифт
|
||||
settings.launcher.general=Общие
|
||||
settings.launcher.language=Язык (Применится после перезапуска)
|
||||
settings.launcher.launcher_log.export=Экспорт логов лаунчера
|
||||
settings.launcher.launcher_log.export_recent=Экспортировать недавние логи лаунчера
|
||||
settings.launcher.launcher_log.export.failed=Не удалось экспортировать логи
|
||||
settings.launcher.launcher_log.export.success=Логи экспортированы в %s
|
||||
settings.launcher.launcher_log.reveal=Открыть папку журнала
|
||||
|
@ -1131,6 +1131,7 @@ settings.launcher.font.anti_aliasing.lcd=子像素
|
||||
settings.launcher.general=一般
|
||||
settings.launcher.language=語言 (重啟後生效)
|
||||
settings.launcher.launcher_log.export=匯出啟動器日誌
|
||||
settings.launcher.launcher_log.export_recent=匯出最近的啟動器日誌
|
||||
settings.launcher.launcher_log.export.failed=無法匯出日誌。
|
||||
settings.launcher.launcher_log.export.success=日誌已儲存到「%s」。
|
||||
settings.launcher.launcher_log.reveal=開啟日誌目錄
|
||||
|
@ -1141,6 +1141,7 @@ settings.launcher.font.anti_aliasing.lcd=子像素
|
||||
settings.launcher.general=通用
|
||||
settings.launcher.language=语言 (重启后生效)
|
||||
settings.launcher.launcher_log.export=导出启动器日志
|
||||
settings.launcher.launcher_log.export_recent=导出最近的启动器日志
|
||||
settings.launcher.launcher_log.export.failed=无法导出日志
|
||||
settings.launcher.launcher_log.export.success=日志已保存到“%s”
|
||||
settings.launcher.launcher_log.reveal=打开日志文件夹
|
||||
|
Loading…
x
Reference in New Issue
Block a user