feat: 主界面调整、日志打印

This commit is contained in:
2024-09-12 01:39:28 +08:00
parent 1f6ba2d8cc
commit ef98a76cd3
5 changed files with 161 additions and 41 deletions

View File

@ -6,6 +6,7 @@ import cn.octopusyan.alistgui.controller.MainController;
import cn.octopusyan.alistgui.controller.RootController;
import cn.octopusyan.alistgui.controller.SetupController;
import cn.octopusyan.alistgui.manager.ConfigManager;
import cn.octopusyan.alistgui.manager.ConsoleLog;
import cn.octopusyan.alistgui.util.FxmlUtil;
import javafx.application.Platform;
import javafx.beans.binding.StringBinding;
@ -112,6 +113,10 @@ public class Context {
Locale.setDefault(locale);
ConfigManager.language(locale);
LANGUAGE_RESOURCE_FACTORY.setResourceBundle(ResourceBundle.getBundle(LANGUAGE_RESOURCE_NAME, locale));
log.info("language changed to {}", locale);
if (ConsoleLog.isInit())
ConsoleLog.info(STR."language changed to \{locale}");
}
/**

View File

@ -1,7 +1,9 @@
package cn.octopusyan.alistgui.controller;
import cn.octopusyan.alistgui.base.BaseController;
import cn.octopusyan.alistgui.manager.ConsoleLog;
import javafx.fxml.FXML;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.VBox;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -16,6 +18,10 @@ public class MainController extends BaseController<VBox> {
@FXML
public VBox mainView;
@FXML
public VBox logArea;
@FXML
public ScrollPane logAreaSp;
@Override
public VBox getRootPanel() {
@ -24,7 +30,7 @@ public class MainController extends BaseController<VBox> {
@Override
public void initData() {
ConsoleLog.init(logAreaSp, logArea);
}
@Override

View File

@ -0,0 +1,103 @@
package cn.octopusyan.alistgui.manager;
import atlantafx.base.util.BBCodeParser;
import cn.hutool.core.util.StrUtil;
import javafx.application.Platform;
import javafx.scene.Node;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.VBox;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.util.Date;
/**
* 模拟控制台输出
*
* @author octopus_yan
*/
public class ConsoleLog {
public static final String format = "yyyy/MM/dd hh:mm:ss";
private volatile static ConsoleLog log;
private final ScrollPane logAreaSp;
private final VBox textArea;
private ConsoleLog(ScrollPane logAreaSp, VBox textArea) {
this.textArea = textArea;
this.logAreaSp = logAreaSp;
textArea.maxWidthProperty().bind(logAreaSp.prefWidthProperty());
textArea.heightProperty().subscribe(() -> {
logAreaSp.vvalueProperty().setValue(1);
});
}
public static ConsoleLog getInstance() {
if (log == null) {
throw new RuntimeException("are you ready ?");
}
return log;
}
public static void init(ScrollPane logAreaSp, VBox textArea) {
synchronized (ConsoleLog.class) {
log = new ConsoleLog(logAreaSp, textArea);
}
}
public static boolean isInit() {
return log != null;
}
public static void info(String message, Object... param) {
info("", message, param);
}
public static void warning(String message, Object... param) {
warning("", message, param);
}
public static void error(String message, Object... param) {
error("", message, param);
}
public static void info(String tag, String message, Object... param) {
printLog(tag, "INFO", message, param);
}
public static void warning(String tag, String message, Object... param) {
printLog(tag, "[color=-color-chart-2]WARN[/color]", message, param);
}
public static void error(String tag, String message, Object... param) {
printLog(tag, "[color=-color-chart-3]ERROR[/color]", message, param);
}
public static void msg(String message, Object... param) {
Node text = BBCodeParser.createFormattedText(STR."\{StrUtil.format(message, param)}\n\n");
Platform.runLater(() -> log.textArea.getChildren().add(text));
}
public static void printLog(String tag, String level, String message, Object... param) {
String time = DateFormatUtils.format(new Date(), format);
time = STR."[color=-color-accent-emphasis]\{time}[/color]";
String levelStr = StringUtils.substringBetween(level, "]", "[");
if (levelStr == null) levelStr = level;
level = StringUtils.replace(level, levelStr, StringUtils.center(levelStr, 5));
tag = StringUtils.isEmpty(tag) ? "" : STR."\{tag}: ";
String msg = STR."[color=-color-fg-muted]\{StrUtil.format(message, param)}[/color]";
Node text;
if (msg.contains("\n")) {
text = BBCodeParser.createLayout(STR."\{time} \{level} \{tag}\{msg}");
} else {
text = BBCodeParser.createFormattedText(STR."\{time} \{level} \{tag}\{msg}");
}
Platform.runLater(() -> log.textArea.getChildren().add(text));
}
}