mirror of
https://github.com/octopusYan/dayz-mod-translator.git
synced 2024-11-21 19:56:42 +08:00
chore: 整理
This commit is contained in:
parent
943056168f
commit
1dc7a64833
@ -71,9 +71,6 @@ public class Application extends javafx.application.Application {
|
|||||||
|
|
||||||
Context.setApplication(this);
|
Context.setApplication(this);
|
||||||
|
|
||||||
// 初始化弹窗工具
|
|
||||||
AlertUtil.initOwner(primaryStage);
|
|
||||||
|
|
||||||
// 全局异常处理
|
// 全局异常处理
|
||||||
Thread.setDefaultUncaughtExceptionHandler(this::showErrorDialog);
|
Thread.setDefaultUncaughtExceptionHandler(this::showErrorDialog);
|
||||||
Thread.currentThread().setUncaughtExceptionHandler(this::showErrorDialog);
|
Thread.currentThread().setUncaughtExceptionHandler(this::showErrorDialog);
|
||||||
@ -86,13 +83,11 @@ public class Application extends javafx.application.Application {
|
|||||||
Scene scene = Context.initScene();
|
Scene scene = Context.initScene();
|
||||||
primaryStage.setScene(scene);
|
primaryStage.setScene(scene);
|
||||||
primaryStage.show();
|
primaryStage.show();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showErrorDialog(Thread t, Throwable e) {
|
private void showErrorDialog(Thread t, Throwable e) {
|
||||||
logger.error("未知异常", e);
|
logger.error("未知异常", e);
|
||||||
Platform.runLater(() -> AlertUtil.exception(new Exception(e)).show());
|
Platform.runLater(() -> AlertUtil.getInstance(primaryStage).exception(new Exception(e)).show());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -51,7 +51,8 @@ public abstract class BaseBuilder<T extends BaseBuilder<T, ?>, D extends Dialog<
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void close() {
|
public void close() {
|
||||||
if (dialog.isShowing())
|
Platform.runLater(() -> {
|
||||||
dialog.close();
|
if (dialog.isShowing()) dialog.close();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,6 @@ import javafx.fxml.FXML;
|
|||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import lombok.Getter;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -29,7 +28,6 @@ import java.util.ResourceBundle;
|
|||||||
*/
|
*/
|
||||||
public abstract class BaseController<VM extends BaseViewModel> implements Initializable {
|
public abstract class BaseController<VM extends BaseViewModel> implements Initializable {
|
||||||
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
|
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||||
@Getter
|
|
||||||
protected final VM viewModel;
|
protected final VM viewModel;
|
||||||
|
|
||||||
public BaseController() {
|
public BaseController() {
|
||||||
@ -97,7 +95,7 @@ public abstract class BaseController<VM extends BaseViewModel> implements Initia
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Stage getWindow() {
|
public Stage getWindow() {
|
||||||
try {
|
try {
|
||||||
return (Stage) getRootPanel().getScene().getWindow();
|
return (Stage) getRootPanel().getScene().getWindow();
|
||||||
} catch (Throwable _) {
|
} catch (Throwable _) {
|
||||||
|
@ -8,7 +8,7 @@ import lombok.Setter;
|
|||||||
* @author octopus_yan
|
* @author octopus_yan
|
||||||
*/
|
*/
|
||||||
@Setter
|
@Setter
|
||||||
public abstract class BaseViewModel<VM extends BaseViewModel<VM, T>, T extends BaseController<VM>> {
|
public abstract class BaseViewModel<T extends BaseController> {
|
||||||
|
|
||||||
protected T controller;
|
protected T controller;
|
||||||
|
|
||||||
|
@ -60,17 +60,6 @@ public class Context {
|
|||||||
Context.application = application;
|
Context.application = application;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 有此类所在路径决定相对路径
|
|
||||||
*
|
|
||||||
* @param path 资源文件相对路径
|
|
||||||
* @return 资源文件路径
|
|
||||||
*/
|
|
||||||
// 加载资源文件
|
|
||||||
public static URL load(String path) {
|
|
||||||
return Context.class.getResource(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化场景
|
* 初始化场景
|
||||||
*
|
*
|
||||||
|
@ -224,6 +224,11 @@ public class ConfigManager {
|
|||||||
getProxyInfo().setPort(port);
|
getProxyInfo().setPort(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 端口检查
|
||||||
|
*
|
||||||
|
* @param consumer 检查结果,信息
|
||||||
|
*/
|
||||||
public static void checkProxy(BiConsumer<Boolean, String> consumer) {
|
public static void checkProxy(BiConsumer<Boolean, String> consumer) {
|
||||||
if (ProxySetup.SYSTEM.equals(proxySetup())) {
|
if (ProxySetup.SYSTEM.equals(proxySetup())) {
|
||||||
consumer.accept(true, "");
|
consumer.accept(true, "");
|
||||||
|
@ -1,12 +1,20 @@
|
|||||||
package cn.octopusyan.dmt.common.util;
|
package cn.octopusyan.dmt.common.util;
|
||||||
|
|
||||||
import cn.octopusyan.dmt.Application;
|
import cn.octopusyan.dmt.Application;
|
||||||
|
import cn.octopusyan.dmt.common.manager.ConfigManager;
|
||||||
|
import cn.octopusyan.dmt.view.alert.AlertUtil;
|
||||||
|
import javafx.fxml.FXMLLoader;
|
||||||
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
|
import javafx.stage.Modality;
|
||||||
import javafx.stage.Screen;
|
import javafx.stage.Screen;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
import javafx.stage.StageStyle;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工具
|
* 工具
|
||||||
@ -55,6 +63,35 @@ public class ViewUtil {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void openDecorated(String title, String fxml) {
|
||||||
|
Stage open = Objects.requireNonNull(open(StageStyle.DECORATED, title, fxml));
|
||||||
|
open.setResizable(false);
|
||||||
|
open.showAndWait();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Stage open(StageStyle style, String title, String fxml) {
|
||||||
|
FXMLLoader load = FxmlUtil.load(fxml);
|
||||||
|
try {
|
||||||
|
return open(style, title, (Pane) load.load());
|
||||||
|
} catch (IOException e) {
|
||||||
|
AlertUtil.getInstance().exception(e).show();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Stage open(StageStyle style, String title, Pane pane) {
|
||||||
|
Stage stage = new Stage();
|
||||||
|
stage.initOwner(Application.getPrimaryStage());
|
||||||
|
stage.initStyle(style);
|
||||||
|
stage.initModality(Modality.WINDOW_MODAL);
|
||||||
|
stage.setTitle(title);
|
||||||
|
Scene scene = new Scene(pane);
|
||||||
|
scene.setUserAgentStylesheet(ConfigManager.theme().getUserAgentStylesheet());
|
||||||
|
stage.setScene(scene);
|
||||||
|
stage.sizeToScene();
|
||||||
|
return stage;
|
||||||
|
}
|
||||||
|
|
||||||
public static Stage getStage() {
|
public static Stage getStage() {
|
||||||
return Application.getPrimaryStage();
|
return Application.getPrimaryStage();
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import cn.octopusyan.dmt.common.config.Context;
|
|||||||
import cn.octopusyan.dmt.common.manager.ConfigManager;
|
import cn.octopusyan.dmt.common.manager.ConfigManager;
|
||||||
import cn.octopusyan.dmt.common.util.ClipUtil;
|
import cn.octopusyan.dmt.common.util.ClipUtil;
|
||||||
import cn.octopusyan.dmt.common.util.FxmlUtil;
|
import cn.octopusyan.dmt.common.util.FxmlUtil;
|
||||||
|
import cn.octopusyan.dmt.common.util.ViewUtil;
|
||||||
import cn.octopusyan.dmt.controller.component.WordEditController;
|
import cn.octopusyan.dmt.controller.component.WordEditController;
|
||||||
import cn.octopusyan.dmt.model.WordItem;
|
import cn.octopusyan.dmt.model.WordItem;
|
||||||
import cn.octopusyan.dmt.task.TranslateTask;
|
import cn.octopusyan.dmt.task.TranslateTask;
|
||||||
@ -95,12 +96,13 @@ public class MainController extends BaseController<MainViewModel> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initData() {
|
public void initData() {
|
||||||
|
// 信息
|
||||||
|
ConsoleLog.init(logArea);
|
||||||
// 界面样式
|
// 界面样式
|
||||||
List<MenuItem> list = ConfigManager.THEME_LIST.stream().map(this::createViewStyleItem).toList();
|
List<MenuItem> list = ConfigManager.THEME_LIST.stream().map(this::createViewStyleItem).toList();
|
||||||
viewStyle.getItems().addAll(list);
|
viewStyle.getItems().addAll(list);
|
||||||
|
|
||||||
// 信息
|
fileNameLabel.textProperty().bind(viewModel.fileNameProperty());
|
||||||
ConsoleLog.init(logArea);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -202,23 +204,15 @@ public class MainController extends BaseController<MainViewModel> {
|
|||||||
/**
|
/**
|
||||||
* 打开代理设置
|
* 打开代理设置
|
||||||
*/
|
*/
|
||||||
public void openSetupProxy() throws IOException {
|
public void openSetupProxy() {
|
||||||
FXMLLoader load = FxmlUtil.load("setup/proxy-view");
|
ViewUtil.openDecorated("网络代理设置", "setup/proxy-view");
|
||||||
AlertUtil.builder(false)
|
|
||||||
.title("网络代理设置")
|
|
||||||
.content((Pane) load.load())
|
|
||||||
.show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 打开翻译设置
|
* 打开翻译设置
|
||||||
*/
|
*/
|
||||||
public void openSetupTranslate() throws IOException {
|
public void openSetupTranslate() {
|
||||||
FXMLLoader load = FxmlUtil.load("setup/translate-view");
|
ViewUtil.openDecorated("翻译设置", "setup/translate-view");
|
||||||
AlertUtil.builder(false)
|
|
||||||
.title("翻译设置")
|
|
||||||
.content((Pane) load.load())
|
|
||||||
.show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFileName(String name) {
|
public void setFileName(String name) {
|
||||||
@ -288,7 +282,7 @@ public class MainController extends BaseController<MainViewModel> {
|
|||||||
FileUtils.copyFile(packFile, file);
|
FileUtils.copyFile(packFile, file);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
consoleLog.error("保存文件失败!", e);
|
consoleLog.error("保存文件失败!", e);
|
||||||
Platform.runLater(() -> AlertUtil.exception(e).content("保存文件失败!").show());
|
Platform.runLater(() -> AlertUtil.getInstance(getWindow()).exception(e).content("保存文件失败!").show());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ public class WordEditController extends BaseController<WordEditViewModel> {
|
|||||||
String result = TranslateFactoryImpl.getInstance().translate(ConfigManager.translateApi(), original.getText());
|
String result = TranslateFactoryImpl.getInstance().translate(ConfigManager.translateApi(), original.getText());
|
||||||
Platform.runLater(() -> chinese.setText(result));
|
Platform.runLater(() -> chinese.setText(result));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Platform.runLater(() -> AlertUtil.exception(e).show());
|
Platform.runLater(() -> AlertUtil.getInstance(getWindow()).exception(e).show());
|
||||||
}
|
}
|
||||||
Platform.runLater(() -> progress.setVisible(false));
|
Platform.runLater(() -> progress.setVisible(false));
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package cn.octopusyan.dmt.controller;
|
package cn.octopusyan.dmt.controller.setup;
|
||||||
|
|
||||||
import cn.octopusyan.dmt.common.base.BaseController;
|
import cn.octopusyan.dmt.common.base.BaseController;
|
||||||
import cn.octopusyan.dmt.common.enums.ProxySetup;
|
import cn.octopusyan.dmt.common.enums.ProxySetup;
|
@ -1,4 +1,4 @@
|
|||||||
package cn.octopusyan.dmt.controller;
|
package cn.octopusyan.dmt.controller.setup;
|
||||||
|
|
||||||
import cn.octopusyan.dmt.common.base.BaseController;
|
import cn.octopusyan.dmt.common.base.BaseController;
|
||||||
import cn.octopusyan.dmt.common.manager.ConfigManager;
|
import cn.octopusyan.dmt.common.manager.ConfigManager;
|
||||||
@ -81,7 +81,8 @@ public class TranslateController extends BaseController<TranslateViewModel> {
|
|||||||
ConfigManager.translateQps(source, qps);
|
ConfigManager.translateQps(source, qps);
|
||||||
if (source.needApiKey()) {
|
if (source.needApiKey()) {
|
||||||
if (StringUtils.isBlank(apikey) || StringUtils.isBlank(appid)) {
|
if (StringUtils.isBlank(apikey) || StringUtils.isBlank(appid)) {
|
||||||
AlertUtil.error("认证信息不能为空");
|
AlertUtil.getInstance(getWindow()).error("认证信息不能为空").show();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigManager.translateApikey(source, apikey);
|
ConfigManager.translateApikey(source, apikey);
|
@ -22,7 +22,7 @@ public abstract class DefaultTaskListener implements Listener {
|
|||||||
* 加载弹窗
|
* 加载弹窗
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
final ProgressBuilder progress = AlertUtil.progress();
|
final ProgressBuilder progress = AlertUtil.getInstance().progress();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否展示加载弹窗
|
* 是否展示加载弹窗
|
||||||
|
@ -1,13 +1,10 @@
|
|||||||
package cn.octopusyan.dmt.translate;
|
package cn.octopusyan.dmt.translate;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API 密钥配置
|
* API 密钥配置
|
||||||
*
|
*
|
||||||
* @author octopus_yan@foxmail.com
|
* @author octopus_yan@foxmail.com
|
||||||
*/
|
*/
|
||||||
@Getter
|
|
||||||
public record ApiKey(String appid, String apiKey) {
|
public record ApiKey(String appid, String apiKey) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.octopusyan.dmt.view.alert;
|
package cn.octopusyan.dmt.view.alert;
|
||||||
|
|
||||||
|
import cn.octopusyan.dmt.Application;
|
||||||
import cn.octopusyan.dmt.view.alert.builder.*;
|
import cn.octopusyan.dmt.view.alert.builder.*;
|
||||||
import javafx.scene.control.Alert;
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.ButtonType;
|
import javafx.scene.control.ButtonType;
|
||||||
@ -12,44 +13,56 @@ import javafx.stage.Window;
|
|||||||
* @author octopus_yan@foxmail.com
|
* @author octopus_yan@foxmail.com
|
||||||
*/
|
*/
|
||||||
public class AlertUtil {
|
public class AlertUtil {
|
||||||
private static Window mOwner;
|
private final Window mOwner;
|
||||||
|
private static volatile AlertUtil alertUtil;
|
||||||
|
|
||||||
public static void initOwner(Stage stage) {
|
private AlertUtil(Window mOwner) {
|
||||||
AlertUtil.mOwner = stage;
|
this.mOwner = mOwner;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DefaultBuilder builder() {
|
public static synchronized AlertUtil getInstance() {
|
||||||
|
if (alertUtil == null) {
|
||||||
|
alertUtil = new AlertUtil(Application.getPrimaryStage());
|
||||||
|
}
|
||||||
|
return alertUtil;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AlertUtil getInstance(Stage stage) {
|
||||||
|
return new AlertUtil(stage);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DefaultBuilder builder() {
|
||||||
return new DefaultBuilder(mOwner, true);
|
return new DefaultBuilder(mOwner, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DefaultBuilder builder(boolean transparent) {
|
public DefaultBuilder builder(boolean transparent) {
|
||||||
return new DefaultBuilder(mOwner, transparent);
|
return new DefaultBuilder(mOwner, transparent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AlertBuilder info(String content) {
|
public AlertBuilder info(String content) {
|
||||||
return info().content(content).header(null);
|
return info().content(content).header(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AlertBuilder info() {
|
public AlertBuilder info() {
|
||||||
return alert(Alert.AlertType.INFORMATION);
|
return alert(Alert.AlertType.INFORMATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AlertBuilder error(String message) {
|
public AlertBuilder error(String message) {
|
||||||
return alert(Alert.AlertType.ERROR).header(null).content(message);
|
return alert(Alert.AlertType.ERROR).header(null).content(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AlertBuilder warning() {
|
public AlertBuilder warning() {
|
||||||
return alert(Alert.AlertType.WARNING);
|
return alert(Alert.AlertType.WARNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AlertBuilder exception(Exception ex) {
|
public AlertBuilder exception(Exception ex) {
|
||||||
return alert(Alert.AlertType.ERROR).exception(ex);
|
return alert(Alert.AlertType.ERROR).exception(ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 确认对话框
|
* 确认对话框
|
||||||
*/
|
*/
|
||||||
public static AlertBuilder confirm() {
|
public AlertBuilder confirm() {
|
||||||
return alert(Alert.AlertType.CONFIRMATION);
|
return alert(Alert.AlertType.CONFIRMATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,32 +71,32 @@ public class AlertUtil {
|
|||||||
*
|
*
|
||||||
* @param buttons <code>"Cancel"</code> OR <code>"取消"</code> 为取消按钮
|
* @param buttons <code>"Cancel"</code> OR <code>"取消"</code> 为取消按钮
|
||||||
*/
|
*/
|
||||||
public static AlertBuilder confirm(String... buttons) {
|
public AlertBuilder confirm(String... buttons) {
|
||||||
return confirm().buttons(buttons);
|
return confirm().buttons(buttons);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AlertBuilder confirm(ButtonType... buttons) {
|
public AlertBuilder confirm(ButtonType... buttons) {
|
||||||
return confirm().buttons(buttons);
|
return confirm().buttons(buttons);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AlertBuilder alert(Alert.AlertType type) {
|
public AlertBuilder alert(Alert.AlertType type) {
|
||||||
return new AlertBuilder(mOwner, type);
|
return new AlertBuilder(mOwner, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TextInputBuilder input(String content) {
|
public TextInputBuilder input(String content) {
|
||||||
return new TextInputBuilder(mOwner);
|
return new TextInputBuilder(mOwner);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TextInputBuilder input(String content, String defaultResult) {
|
public TextInputBuilder input(String content, String defaultResult) {
|
||||||
return new TextInputBuilder(mOwner, defaultResult).content(content);
|
return new TextInputBuilder(mOwner, defaultResult).content(content);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public static <T> ChoiceBuilder<T> choices(String hintText, T... choices) {
|
public final <T> ChoiceBuilder<T> choices(String hintText, T... choices) {
|
||||||
return new ChoiceBuilder<>(mOwner, choices).content(hintText);
|
return new ChoiceBuilder<>(mOwner, choices).content(hintText);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ProgressBuilder progress() {
|
public ProgressBuilder progress() {
|
||||||
return new ProgressBuilder(mOwner);
|
return new ProgressBuilder(mOwner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.octopusyan.dmt.viewModel;
|
package cn.octopusyan.dmt.viewModel;
|
||||||
|
|
||||||
|
import atlantafx.base.theme.Styles;
|
||||||
import cn.octopusyan.dmt.common.base.BaseViewModel;
|
import cn.octopusyan.dmt.common.base.BaseViewModel;
|
||||||
import cn.octopusyan.dmt.controller.MainController;
|
import cn.octopusyan.dmt.controller.MainController;
|
||||||
import cn.octopusyan.dmt.model.WordItem;
|
import cn.octopusyan.dmt.model.WordItem;
|
||||||
@ -11,6 +12,8 @@ import cn.octopusyan.dmt.translate.DelayWord;
|
|||||||
import cn.octopusyan.dmt.translate.TranslateUtil;
|
import cn.octopusyan.dmt.translate.TranslateUtil;
|
||||||
import cn.octopusyan.dmt.view.ConsoleLog;
|
import cn.octopusyan.dmt.view.ConsoleLog;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
|
import javafx.beans.property.StringProperty;
|
||||||
import javafx.concurrent.Worker;
|
import javafx.concurrent.Worker;
|
||||||
import javafx.scene.control.ProgressIndicator;
|
import javafx.scene.control.ProgressIndicator;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@ -28,7 +31,7 @@ import java.util.regex.Pattern;
|
|||||||
*
|
*
|
||||||
* @author octopus_yan
|
* @author octopus_yan
|
||||||
*/
|
*/
|
||||||
public class MainViewModel extends BaseViewModel<MainViewModel, MainController> {
|
public class MainViewModel extends BaseViewModel<MainController> {
|
||||||
private static final ConsoleLog consoleLog = ConsoleLog.getInstance(MainViewModel.class);
|
private static final ConsoleLog consoleLog = ConsoleLog.getInstance(MainViewModel.class);
|
||||||
/**
|
/**
|
||||||
* 解包任务
|
* 解包任务
|
||||||
@ -38,9 +41,7 @@ public class MainViewModel extends BaseViewModel<MainViewModel, MainController>
|
|||||||
* 翻译任务
|
* 翻译任务
|
||||||
*/
|
*/
|
||||||
private TranslateTask translateTask;
|
private TranslateTask translateTask;
|
||||||
|
|
||||||
private DelayQueue<DelayWord> delayQueue;
|
private DelayQueue<DelayWord> delayQueue;
|
||||||
|
|
||||||
private String unpackPath;
|
private String unpackPath;
|
||||||
private int total;
|
private int total;
|
||||||
|
|
||||||
@ -48,13 +49,19 @@ public class MainViewModel extends BaseViewModel<MainViewModel, MainController>
|
|||||||
FontIcon pauseIcon = new FontIcon(Feather.PAUSE);
|
FontIcon pauseIcon = new FontIcon(Feather.PAUSE);
|
||||||
private List<WordItem> wordItems;
|
private List<WordItem> wordItems;
|
||||||
|
|
||||||
|
private final StringProperty fileName = new SimpleStringProperty();
|
||||||
|
|
||||||
|
public StringProperty fileNameProperty() {
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加载PBO文件
|
* 加载PBO文件
|
||||||
*/
|
*/
|
||||||
public void selectFile(File pboFile) {
|
public void selectFile(File pboFile) {
|
||||||
if (pboFile == null) return;
|
if (pboFile == null) return;
|
||||||
|
|
||||||
controller.setFileName(pboFile.getAbsolutePath());
|
fileName.setValue(pboFile.getAbsolutePath());
|
||||||
|
|
||||||
unpackTask = new UnpackTask(pboFile);
|
unpackTask = new UnpackTask(pboFile);
|
||||||
}
|
}
|
||||||
@ -185,6 +192,7 @@ public class MainViewModel extends BaseViewModel<MainViewModel, MainController>
|
|||||||
private void resetProgress() {
|
private void resetProgress() {
|
||||||
translateTask = null;
|
translateTask = null;
|
||||||
controller.translate.setGraphic(startIcon);
|
controller.translate.setGraphic(startIcon);
|
||||||
|
Styles.toggleStyleClass(controller.translateProgress, Styles.SMALL);
|
||||||
controller.translateProgress.progressProperty().unbind();
|
controller.translateProgress.progressProperty().unbind();
|
||||||
controller.translateProgress.setProgress(0);
|
controller.translateProgress.setProgress(0);
|
||||||
controller.translateProgress.setVisible(false);
|
controller.translateProgress.setVisible(false);
|
||||||
|
@ -4,7 +4,7 @@ import cn.octopusyan.dmt.common.base.BaseViewModel;
|
|||||||
import cn.octopusyan.dmt.common.enums.ProxySetup;
|
import cn.octopusyan.dmt.common.enums.ProxySetup;
|
||||||
import cn.octopusyan.dmt.common.manager.ConfigManager;
|
import cn.octopusyan.dmt.common.manager.ConfigManager;
|
||||||
import cn.octopusyan.dmt.common.manager.http.HttpUtil;
|
import cn.octopusyan.dmt.common.manager.http.HttpUtil;
|
||||||
import cn.octopusyan.dmt.controller.ProxyController;
|
import cn.octopusyan.dmt.controller.setup.ProxyController;
|
||||||
import cn.octopusyan.dmt.task.ProxyCheckTask;
|
import cn.octopusyan.dmt.task.ProxyCheckTask;
|
||||||
import cn.octopusyan.dmt.task.listener.DefaultTaskListener;
|
import cn.octopusyan.dmt.task.listener.DefaultTaskListener;
|
||||||
import cn.octopusyan.dmt.view.alert.AlertUtil;
|
import cn.octopusyan.dmt.view.alert.AlertUtil;
|
||||||
@ -16,20 +16,22 @@ import javafx.beans.property.SimpleStringProperty;
|
|||||||
import javafx.beans.property.StringProperty;
|
import javafx.beans.property.StringProperty;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置
|
* 设置
|
||||||
*
|
*
|
||||||
* @author octopus_yan
|
* @author octopus_yan
|
||||||
*/
|
*/
|
||||||
public class ProxyViewModel extends BaseViewModel<ProxyViewModel, ProxyController> {
|
public class ProxyViewModel extends BaseViewModel<ProxyController> {
|
||||||
private final StringProperty proxyHost = new SimpleStringProperty(ConfigManager.proxyHost());
|
private final StringProperty proxyHost = new SimpleStringProperty(ConfigManager.proxyHost());
|
||||||
private final StringProperty proxyPort = new SimpleStringProperty(ConfigManager.proxyPort());
|
private final StringProperty proxyPort = new SimpleStringProperty(ConfigManager.proxyPort());
|
||||||
private final ObjectProperty<ProxySetup> proxySetup = new SimpleObjectProperty<>(ConfigManager.proxySetup());
|
private final ObjectProperty<ProxySetup> proxySetup = new SimpleObjectProperty<>(ConfigManager.proxySetup());
|
||||||
private final StringProperty proxyTestUrl = new SimpleStringProperty(ConfigManager.proxyTestUrl());
|
private final AlertUtil alertUtil = AlertUtil.getInstance();
|
||||||
|
|
||||||
public ProxyViewModel() {
|
public ProxyViewModel() {
|
||||||
|
|
||||||
proxySetup.addListener((_, _, newValue) -> ConfigManager.proxySetup(newValue));
|
proxySetup.addListener((_, _, newValue) -> ConfigManager.proxySetup(newValue));
|
||||||
proxyTestUrl.addListener((_, _, newValue) -> ConfigManager.proxyTestUrl(newValue));
|
|
||||||
proxyHost.addListener((_, _, newValue) -> {
|
proxyHost.addListener((_, _, newValue) -> {
|
||||||
ConfigManager.proxyHost(newValue);
|
ConfigManager.proxyHost(newValue);
|
||||||
setProxy();
|
setProxy();
|
||||||
@ -53,30 +55,43 @@ public class ProxyViewModel extends BaseViewModel<ProxyViewModel, ProxyControlle
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void proxyTest() {
|
public void proxyTest() {
|
||||||
var checkUrl = AlertUtil.input("URL :", proxyTestUrl.getValue())
|
var checkUrl = alertUtil.input("URL :", ConfigManager.proxyTestUrl())
|
||||||
.title("检查代理设置")
|
.title("检查代理设置")
|
||||||
.header("请输入您要检查的任何URL:")
|
.header("请输入您要检查的任何URL:")
|
||||||
.getInput();
|
.getInput();
|
||||||
|
|
||||||
if (StringUtils.isEmpty(checkUrl)) return;
|
if (StringUtils.isEmpty(checkUrl)) return;
|
||||||
|
|
||||||
proxyTestUrl.setValue(checkUrl);
|
// 检查URL格式
|
||||||
|
if (!checkUrl(checkUrl)) return;
|
||||||
|
|
||||||
ProgressBuilder progress = AlertUtil.progress();
|
ConfigManager.proxyTestUrl(checkUrl);
|
||||||
|
|
||||||
|
ProgressBuilder progress = alertUtil.progress();
|
||||||
progress.show();
|
progress.show();
|
||||||
ConfigManager.checkProxy((success, msg) -> {
|
ConfigManager.checkProxy((success, msg) -> {
|
||||||
Platform.runLater(progress::close);
|
Platform.runLater(progress::close);
|
||||||
if (!success) {
|
if (!success) {
|
||||||
final var tmp = "连接问题: ";
|
final var tmp = "连接问题: ";
|
||||||
AlertUtil.error(STR."\{tmp}\{msg}").show();
|
alertUtil.error(STR."\{tmp}\{msg}").show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpUtil.getInstance().proxy(ConfigManager.proxySetup(), ConfigManager.getProxyInfo());
|
HttpUtil.getInstance().proxy(ConfigManager.proxySetup(), ConfigManager.getProxyInfo());
|
||||||
|
// 代理检查任务
|
||||||
getProxyCheckTask(checkUrl).execute();
|
getProxyCheckTask(checkUrl).execute();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean checkUrl(String checkUrl) {
|
||||||
|
try {
|
||||||
|
//noinspection ResultOfMethodCallIgnored
|
||||||
|
URI.create(checkUrl);
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void setProxy() {
|
private void setProxy() {
|
||||||
ConfigManager.checkProxy((success, msg) -> {
|
ConfigManager.checkProxy((success, msg) -> {
|
||||||
if (!success) {
|
if (!success) {
|
||||||
@ -87,19 +102,19 @@ public class ProxyViewModel extends BaseViewModel<ProxyViewModel, ProxyControlle
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ProxyCheckTask getProxyCheckTask(String checkUrl) {
|
private ProxyCheckTask getProxyCheckTask(String checkUrl) {
|
||||||
var task = new ProxyCheckTask(checkUrl);
|
var task = new ProxyCheckTask(checkUrl);
|
||||||
task.onListen(new DefaultTaskListener(true) {
|
task.onListen(new DefaultTaskListener(true) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSucceed() {
|
public void onSucceed() {
|
||||||
AlertUtil.info("连接成功").show();
|
alertUtil.info("连接成功").show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailed(Throwable throwable) {
|
public void onFailed(Throwable throwable) {
|
||||||
super.onFailed(throwable);
|
super.onFailed(throwable);
|
||||||
AlertUtil.exception(new Exception(throwable)).show();
|
alertUtil.exception(new Exception(throwable)).show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return task;
|
return task;
|
||||||
|
@ -2,7 +2,7 @@ package cn.octopusyan.dmt.viewModel;
|
|||||||
|
|
||||||
import cn.octopusyan.dmt.common.base.BaseViewModel;
|
import cn.octopusyan.dmt.common.base.BaseViewModel;
|
||||||
import cn.octopusyan.dmt.common.manager.ConfigManager;
|
import cn.octopusyan.dmt.common.manager.ConfigManager;
|
||||||
import cn.octopusyan.dmt.controller.TranslateController;
|
import cn.octopusyan.dmt.controller.setup.TranslateController;
|
||||||
import cn.octopusyan.dmt.translate.TranslateApi;
|
import cn.octopusyan.dmt.translate.TranslateApi;
|
||||||
import javafx.beans.property.*;
|
import javafx.beans.property.*;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@ -13,7 +13,7 @@ import lombok.Getter;
|
|||||||
* @author octopus_yan
|
* @author octopus_yan
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
public class TranslateViewModel extends BaseViewModel<TranslateViewModel, TranslateController> {
|
public class TranslateViewModel extends BaseViewModel<TranslateController> {
|
||||||
|
|
||||||
private final ObjectProperty<TranslateApi> source = new SimpleObjectProperty<>(ConfigManager.translateApi()) {
|
private final ObjectProperty<TranslateApi> source = new SimpleObjectProperty<>(ConfigManager.translateApi()) {
|
||||||
{
|
{
|
||||||
|
@ -15,7 +15,7 @@ import lombok.EqualsAndHashCode;
|
|||||||
*/
|
*/
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class WordEditViewModel extends BaseViewModel<WordEditViewModel, WordEditController> {
|
public class WordEditViewModel extends BaseViewModel<WordEditController> {
|
||||||
private WordItem data;
|
private WordItem data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -24,5 +24,7 @@ module cn.octopusyan.dmt {
|
|||||||
opens cn.octopusyan.dmt.common.base to javafx.fxml;
|
opens cn.octopusyan.dmt.common.base to javafx.fxml;
|
||||||
opens cn.octopusyan.dmt.controller to javafx.fxml;
|
opens cn.octopusyan.dmt.controller to javafx.fxml;
|
||||||
opens cn.octopusyan.dmt.controller.component to javafx.fxml;
|
opens cn.octopusyan.dmt.controller.component to javafx.fxml;
|
||||||
|
opens cn.octopusyan.dmt.controller.setup to javafx.fxml;
|
||||||
|
opens cn.octopusyan.dmt.controller.help to javafx.fxml;
|
||||||
opens cn.octopusyan.dmt.view.filemanager to javafx.fxml;
|
opens cn.octopusyan.dmt.view.filemanager to javafx.fxml;
|
||||||
}
|
}
|
@ -5,7 +5,7 @@
|
|||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
<?import javafx.scene.control.*?>
|
<?import javafx.scene.control.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
<?import org.kordamp.ikonli.javafx.FontIcon?>
|
<?import org.kordamp.ikonli.javafx.*?>
|
||||||
<StackPane xmlns="http://javafx.com/javafx/11.0.14-internal" xmlns:fx="http://javafx.com/fxml/1"
|
<StackPane xmlns="http://javafx.com/javafx/11.0.14-internal" xmlns:fx="http://javafx.com/fxml/1"
|
||||||
fx:id="root" prefHeight="800.0" prefWidth="1000.0"
|
fx:id="root" prefHeight="800.0" prefWidth="1000.0"
|
||||||
fx:controller="cn.octopusyan.dmt.controller.MainController">
|
fx:controller="cn.octopusyan.dmt.controller.MainController">
|
||||||
@ -55,7 +55,7 @@
|
|||||||
<Button text="打包" onAction="#startPack"/>
|
<Button text="打包" onAction="#startPack"/>
|
||||||
</ToolBar>
|
</ToolBar>
|
||||||
<VBox prefHeight="${root.height}">
|
<VBox prefHeight="${root.height}">
|
||||||
<ProgressBar fx:id="translateProgress" styleClass="small" prefWidth="Infinity" progress="0" visible="false"/>
|
<ProgressBar fx:id="translateProgress" prefWidth="Infinity" progress="0" visible="false"/>
|
||||||
<SplitPane dividerPositions="0.25" prefWidth="Infinity" VBox.vgrow="ALWAYS">
|
<SplitPane dividerPositions="0.25" prefWidth="Infinity" VBox.vgrow="ALWAYS">
|
||||||
<DirectoryTree fx:id="treeFileBox" maxWidth="420" minWidth="40"/>
|
<DirectoryTree fx:id="treeFileBox" maxWidth="420" minWidth="40"/>
|
||||||
<StackPane GridPane.columnIndex="1" minWidth="40">
|
<StackPane GridPane.columnIndex="1" minWidth="40">
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<?import javafx.scene.control.*?>
|
<?import javafx.scene.control.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"
|
<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"
|
||||||
fx:controller="cn.octopusyan.dmt.controller.ProxyController"
|
fx:controller="cn.octopusyan.dmt.controller.setup.ProxyController"
|
||||||
fx:id="root" prefHeight="400.0" prefWidth="600.0" spacing="10">
|
fx:id="root" prefHeight="400.0" prefWidth="600.0" spacing="10">
|
||||||
|
|
||||||
<padding>
|
<padding>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<?import javafx.scene.control.*?>
|
<?import javafx.scene.control.*?>
|
||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"
|
<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"
|
||||||
fx:controller="cn.octopusyan.dmt.controller.TranslateController"
|
fx:controller="cn.octopusyan.dmt.controller.setup.TranslateController"
|
||||||
fx:id="root" prefHeight="400.0" prefWidth="600.0">
|
fx:id="root" prefHeight="400.0" prefWidth="600.0">
|
||||||
|
|
||||||
<padding>
|
<padding>
|
||||||
|
Loading…
Reference in New Issue
Block a user