From c64f00a1f9a91cb82bd1b8308e0c9b29ef5de76f Mon Sep 17 00:00:00 2001
From: Hunter0x7c7 <1125607007@qq.com>
Date: 星期五, 08 九月 2023 09:24:21 +0800
Subject: [PATCH] 版本v1.0.1(2)发布。
---
src/main/java/com/github/hunter0x7c7/sync/model/global/Parameters.java | 9 +-
src/main/java/com/github/hunter0x7c7/sync/utils/DateUtils.java | 2
readme.md | 8 +
src/main/java/com/github/hunter0x7c7/sync/utils/PathUtil.java | 5
src/main/java/com/github/hunter0x7c7/sync/ctrls/Controller.java | 200 +++++++++++++++++++++++++++++++-------------------
5 files changed, 138 insertions(+), 86 deletions(-)
diff --git a/readme.md b/readme.md
index 8ea819a..9d3c4c8 100644
--- a/readme.md
+++ b/readme.md
@@ -2,17 +2,19 @@
鏍规嵁鐩爣鏁版嵁搴撲腑鐨勪紶鎰熷櫒鏁版嵁鍒楄〃锛屽埌鎬昏〃涓煡鎵炬渶鏂扮殑鏁版嵁鍊�
-灏唅dea涓殑JavaFX椤圭洰鎵撳寘鎴愬彲鎵ц鐨別xe搴旂敤
+ - 灏唅dea涓殑JavaFX椤圭洰鎵撳寘鎴愬彲鎵ц鐨別xe搴旂敤
https://blog.csdn.net/qq_29428909/article/details/122103131
-JavaFx 鑷畾涔夌郴缁熸墭鐩�
+ - JavaFx 鑷畾涔夌郴缁熸墭鐩�
https://www.jianshu.com/p/6058e7a48f0b
-~~~~
+
+```
.ico鏂囦欢鍦ㄧ嚎杞崲
http://www.ico51.cn
.icns鏂囦欢鍦ㄧ嚎杞崲
https://www.alltoall.net/png_icns
https://cloudconvert.com/png-to-icns
+```
## 瑙e喅绯荤粺鎵樼洏涔辩爜闂
1. 杩愯涔辩爜锛孯un->Edit Configurations->Modify options->Add VM options->杈撳叆鈥�-Dfile.encoding=GBK鈥�
diff --git a/src/main/java/com/github/hunter0x7c7/sync/ctrls/Controller.java b/src/main/java/com/github/hunter0x7c7/sync/ctrls/Controller.java
index b0fd516..d3eb8d5 100644
--- a/src/main/java/com/github/hunter0x7c7/sync/ctrls/Controller.java
+++ b/src/main/java/com/github/hunter0x7c7/sync/ctrls/Controller.java
@@ -7,11 +7,13 @@
import com.github.hunter0x7c7.sync.model.storage.Session;
import com.github.hunter0x7c7.sync.utils.*;
import io.reactivex.Observable;
-import io.reactivex.ObservableSource;
+import io.reactivex.Observer;
+import io.reactivex.*;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
+import io.reactivex.functions.Predicate;
import io.reactivex.schedulers.Schedulers;
import javafx.application.Platform;
import javafx.event.ActionEvent;
@@ -177,7 +179,7 @@
public void accept(Object o) throws Exception {
//娣诲姞鍒扮郴缁熸墭鐩�
Stage primaryStage = Session.getInstance().getPrimaryStage();
- String tooltip = String.format("%s v%s", AppName, VersionName);//SyncTools v1.0
+ //String tooltip = String.format("%s v%s", AppName, VersionName);//SyncTools v1.0
String mipmap = "mipmap/ic_chinese_cabbage_16.png";
MenuItem show = new MenuItem("鏄剧ず");//鏄剧ずShow
//缁戝畾绯荤粺鎵樼洏浜嬩欢
@@ -197,78 +199,109 @@
}
};
//娣诲姞鍒扮郴缁熸墭鐩�
- TrayUtil.getInstance().addSystemTray(primaryStage, AppNameString, mipmap, callback, show);
+ TrayUtil.getInstance().addSystemTray(primaryStage, AppName_zh_rCN, mipmap, callback, show);
}
- }).doOnNext(new Consumer<Object>() {
+ }).concatMap(new Function<Object, Observable<ConfigBean>>() {//鍑嗗鍒濆鍖栫殑閰嶇疆鏁版嵁
@Override
- public void accept(Object o) throws Exception {
+ public Observable<ConfigBean> apply(Object o) throws Exception {
//鍒濆鍖栧凡淇濆瓨鐨勯厤缃俊鎭�
- ConfigBean cb = getSaveConfig();
- if (cb != null) {
- //UI绾跨▼
- Platform.runLater(new Runnable() {
- @Override
- public void run() {
- setInputText(tvInputSrcHost, cb.getSrcHost());
- setInputText(tvInputSrcName, cb.getSrcName());
- setInputText(tvInputSrcPwd, getDecryptData(cb.getSrcPwd()));
- setInputText(tvInputSrcDbName, cb.getSrcDbName());
- setInputText(tvInputTargetHost, cb.getTargetHost());
- setInputText(tvInputTargetName, cb.getTargetName());
- setInputText(tvInputTargetPwd, getDecryptData(cb.getTargetPwd()));
- setInputText(tvInputTargetDbName, cb.getTargetDbName());
- setInputText(tvInputFreq, cb.getFreqValue());
- cbSelectFreqUnit.getSelectionModel().select(cb.getFreqUnit());
-
- //榛樿鍚姩鍚屾鍔熻兘
- if (cb.isStartSync()) {
- startSync(); //鍚姩鍚屾鍔熻兘
+ final ConfigBean configBean = getSaveConfig();
+ return Observable.just(configBean != null)
+ .subscribeOn(Schedulers.io())
+ .filter(new Predicate<Boolean>() {
+ @Override
+ public boolean test(Boolean aBoolean) throws Exception {
+ //return false杩囨护, true涓嶈繃婊ゃ�俧alse绔嬪埢鎵цswitchIfEmpty
+ return aBoolean != null && aBoolean;
}
- }
- });
+ }).map(new Function<Boolean, ConfigBean>() {
+ @Override
+ public ConfigBean apply(Boolean aBoolean) throws Exception {
+ return configBean;
+ }
+ }).switchIfEmpty(new Observable<ConfigBean>() {
+ @Override
+ protected void subscribeActual(Observer<? super ConfigBean> observer) {
+ //濡傛灉鏄疍ebug鐜鎵嶅垵濮嬪寲娴嬭瘯鏁版嵁
+ if (BuildType.equals(BuildTypeEnum.DEBUG)) {
+ String srcHost = ConfigProperties.SRC_HOST;
+ String srcName = ConfigProperties.SRC_NAME;
+ String srcPwd = ConfigProperties.SRC_PWD;
+ String srcDbName = ConfigProperties.SRC_DB_NAME;
- } else if (BuildType.equals(BuildTypeEnum.DEBUG)) {
- try {
- String srcHost = ConfigProperties.SRC_HOST;
- String srcName = ConfigProperties.SRC_NAME;
- String srcPwd = ConfigProperties.SRC_PWD;
- String srcDbName = ConfigProperties.SRC_DB_NAME;
+ String targetHost = ConfigProperties.TARGET_HOST;
+ String targetName = ConfigProperties.TARGET_NAME;
+ String targetPwd = ConfigProperties.TARGET_PWD;
+ String targetDbName = ConfigProperties.TARGET_DB_NAME;
- String targetHost = ConfigProperties.TARGET_HOST;
- String targetName = ConfigProperties.TARGET_NAME;
- String targetPwd = ConfigProperties.TARGET_PWD;
- String targetDbName = ConfigProperties.TARGET_DB_NAME;
+ String freqValue = "5";
+ int freqUnitIndex = 1;//绉�
+ ConfigBean cb = new ConfigBean(srcHost, srcName, srcPwd, srcDbName, targetHost, targetName, targetPwd, targetDbName, freqValue, freqUnitIndex, false);
+
+ if (observer != null) {
+ observer.onNext(cb);
+ observer.onComplete();
+ }
+ } else {
+ if (observer != null) {
+ observer.onNext(new ConfigBean());
+ observer.onComplete();
+ }
+ }
+ }
+ });
+ }
+ }).concatMap(new Function<ConfigBean, ObservableSource<ConfigBean>>() {//鏇存柊閰嶇疆鏁版嵁鍒扮晫闈�
+ @Override
+ public ObservableSource<ConfigBean> apply(final ConfigBean cb) throws Exception {
+ //鏁版嵁涓虹┖锛屼笉鏇存柊鐣岄潰
+ if (cb == null) {
+ return Observable.just(new ConfigBean());
+ }
+ //鏇存柊鐣岄潰
+ return Observable.create(new ObservableOnSubscribe<ConfigBean>() {
+ @Override
+ public void subscribe(ObservableEmitter<ConfigBean> emitter) throws Exception {
//UI绾跨▼
Platform.runLater(new Runnable() {
@Override
public void run() {
- setInputText(tvInputSrcHost, srcHost);
- setInputText(tvInputSrcName, srcName);
- setInputText(tvInputSrcPwd, srcPwd);
- setInputText(tvInputSrcDbName, srcDbName);
- setInputText(tvInputTargetHost, targetHost);
- setInputText(tvInputTargetName, targetName);
- setInputText(tvInputTargetPwd, targetPwd);
- setInputText(tvInputTargetDbName, targetDbName);
- setInputText(tvInputFreq, "10");
- cbSelectFreqUnit.getSelectionModel().select(1);
+ //鏇存柊鐣岄潰鏁版嵁
+ setInputText(tvInputSrcHost, cb.getSrcHost());
+ setInputText(tvInputSrcName, cb.getSrcName());
+ setInputText(tvInputSrcPwd, getDecryptData(cb.getSrcPwd()));
+ setInputText(tvInputSrcDbName, cb.getSrcDbName());
+ setInputText(tvInputTargetHost, cb.getTargetHost());
+ setInputText(tvInputTargetName, cb.getTargetName());
+ setInputText(tvInputTargetPwd, getDecryptData(cb.getTargetPwd()));
+ setInputText(tvInputTargetDbName, cb.getTargetDbName());
+ setInputText(tvInputFreq, cb.getFreqValue());
+ cbSelectFreqUnit.getSelectionModel().select(cb.getFreqUnit());
+
+ if (emitter != null) {
+ emitter.onNext(cb);
+ emitter.onComplete();
+ }
}
});
- } catch (Exception e) {
- throw new RuntimeException(e);
}
- }
+ });
}
- }).subscribe(new Consumer<Object>() {
+ }).subscribe(new Consumer<ConfigBean>() {
@Override
- public void accept(Object o) throws Exception {
+ public void accept(ConfigBean cb) throws Exception {
//UI绾跨▼
Platform.runLater(new Runnable() {
@Override
public void run() {
updateResult("鏁版嵁鍚屾宸ュ叿");
+
+ //榛樿鍚姩鍚屾鍔熻兘
+ if (cb != null && cb.isStartSync()) {
+ startSync(); //鍚姩鍚屾鍔熻兘
+ }
}
});
}
@@ -599,12 +632,12 @@
operate.setAlignment(Pos.CENTER_RIGHT);
operate.setSpacing(8);
// operate.setStyle("-fx-background-color: #F0F0F0");
- operate.setPadding(new Insets(12, 20, 8, 20));
+ operate.setPadding(new Insets(12, 20, 12, 20));
operate.getChildren().addAll(defButton, cancelButton);
VBox vBox = new VBox();
vBox.setSpacing(0);
- vBox.setPadding(getInsets());
+ //vBox.setPadding(getInsets());
vBox.getChildren().addAll(content, operate);
stage.setScene(new Scene(vBox));
@@ -654,7 +687,7 @@
VBox vBox = new VBox();
- vBox.setPadding(new Insets(20, 20, 4, 20));
+ vBox.setPadding(new Insets(20, 20, 10, 20));
vBox.getChildren().addAll(label1, label2, label3, label4);
stage.setScene(new Scene(vBox));
@@ -814,9 +847,9 @@
}
}
})
- .concatMap(new Function<Integer, ObservableSource<String>>() {
+ .concatMap(new Function<Integer, ObservableSource<Object>>() {
@Override
- public ObservableSource<String> apply(Integer freq) throws Exception {
+ public ObservableSource<Object> apply(Integer freq) throws Exception {
int delay = freq > 0 ? freq : 10;
TimeUnit timeUnit = ListUtil.getDataByList(mFreqUnitList, freqSelect);
@@ -824,16 +857,37 @@
//System.out.println("delay:" + delay + " unit:" + unit);
return Observable.timer(delay, unit)
- /*.doOnNext(new Consumer<Long>() {
+ .doOnNext(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
- startSync(srcHost, srcName, srcPwd, srcDbName, targetHost, targetName, targetPwd, targetDbName);
+ //濡傛灉涓�旀煇娆℃墽琛屽け璐ワ紝涓嶈兘瀵艰嚧鏁翠釜璁″垝鐨勫け璐�
+ addSubscribe(getStartSyncObservable(srcHost, srcName, srcPwd, srcDbName, targetHost, targetName, targetPwd, targetDbName)
+ .subscribe(new Consumer<Object>() {
+ @Override
+ public void accept(Object o) throws Exception {
+ //鍚屾鎴愬姛锛�
+ setSyncing(true);
+ mSyncCount++;
+ if (mSyncCount >= Integer.MAX_VALUE) {
+ mSyncCount = 0;
+ }
+ setInputText(txLastSyncTime, DateUtils.formatDate(new Date()));
+ setInputText(txSyncCount, String.valueOf(mSyncCount));
+ updateResult("鍚屾鎴愬姛锛�");
+ }
+ }, new Consumer<Throwable>() {
+ @Override
+ public void accept(Throwable e) throws Exception {
+ e.printStackTrace();
+ //鎵ц澶辫触
+ updateResult(e.getMessage());
+ }
+ }));
}
- })*/
- .concatMap(new Function<Long, ObservableSource<String>>() {
+ }).map(new Function<Long, Object>() {
@Override
- public ObservableSource<String> apply(Long o) throws Exception {
- return getStartSyncObservable(srcHost, srcName, srcPwd, srcDbName, targetHost, targetName, targetPwd, targetDbName);
+ public Object apply(Long aLong) throws Exception {
+ return String.valueOf(aLong);
}
}).repeat();
}
@@ -842,21 +896,14 @@
.subscribe(new Consumer<Object>() {
@Override
public void accept(Object o) throws Exception {
- setSyncing(true);
- mSyncCount++;
- if (mSyncCount >= Integer.MAX_VALUE) {
- mSyncCount = 0;
- }
- setInputText(txLastSyncTime, DateUtils.formatDate(new Date()));
- setInputText(txSyncCount, String.valueOf(mSyncCount));
- updateResult("鍚屾鎴愬姛锛�");
+ //娴佺▼鎵ц瀹屾瘯
}
}, new Consumer<Throwable>() {
@Override
- public void accept(Throwable throwable) throws Exception {
- throwable.printStackTrace();
-
- updateResult(throwable.getMessage());
+ public void accept(Throwable e) throws Exception {
+ e.printStackTrace();
+ //鎵ц澶辫触
+ updateResult(e.getMessage());
}
}));
}
@@ -1054,7 +1101,8 @@
}
private void updateResult(String str) {
- System.out.println(str);
+ //杈撳嚭缁撴灉甯︽椂闂�
+ System.out.printf("%s\t%s%n", DateUtils.formatDate(new Date()), str);
setInputText(txOutResult, str);
}
diff --git a/src/main/java/com/github/hunter0x7c7/sync/model/global/Parameters.java b/src/main/java/com/github/hunter0x7c7/sync/model/global/Parameters.java
index 317e50d..0169d49 100644
--- a/src/main/java/com/github/hunter0x7c7/sync/model/global/Parameters.java
+++ b/src/main/java/com/github/hunter0x7c7/sync/model/global/Parameters.java
@@ -2,18 +2,19 @@
import com.github.hunter0x7c7.sync.utils.StringUtil;
+//鍙傛暟璁剧疆
public class Parameters {
public static final int VersionCode = 2;
public static final String VersionName = "1.0.1";
- public static final String BuildDate = "230812";
+ public static final String BuildDate = "230818";
public static final BuildTypeEnum BuildType = BuildTypeEnum.RELEASE;
-
public static final String AppName = "SyncTools";
- //鏁版嵁鍚屾宸ュ叿(浼犳劅鍣�) v1.0.1
- public static final String AppNameString = String.format("鏁版嵁鍚屾宸ュ叿(浼犳劅鍣�) v%s", VersionName);
+ public static final String AppName_zh_rCN = "鏁版嵁鍚屾宸ュ叿(浼犳劅鍣�)";
+ //鏁版嵁鍚屾宸ュ叿(浼犳劅鍣�) v1.0.1 - SyncTools
+ public static final String AppNameString = String.format("%s v%s - %s", AppName_zh_rCN, VersionName, AppName);
public static final String Author = "Hunter";
public static final String APPID = "com.github.hunter0x7c7.SyncTools";
diff --git a/src/main/java/com/github/hunter0x7c7/sync/utils/DateUtils.java b/src/main/java/com/github/hunter0x7c7/sync/utils/DateUtils.java
index aa4f0fe..abaa116 100644
--- a/src/main/java/com/github/hunter0x7c7/sync/utils/DateUtils.java
+++ b/src/main/java/com/github/hunter0x7c7/sync/utils/DateUtils.java
@@ -7,7 +7,7 @@
import java.util.*;
public final class DateUtils {
- public static final String PATTERN_Def = "yyyy-MM-dd HH:mm:ss";
+ public static final String PATTERN_Def = "yyyy.MM.dd HH:mm:ss";
public static final String PATTERN_RFC1123 = "EEE, dd MMM yyyy HH:mm:ss zzz";
public static final String PATTERN_RFC1036 = "EEE, dd-MMM-yy HH:mm:ss zzz";
public static final String PATTERN_ASCTIME = "EEE MMM d HH:mm:ss yyyy";
diff --git a/src/main/java/com/github/hunter0x7c7/sync/utils/PathUtil.java b/src/main/java/com/github/hunter0x7c7/sync/utils/PathUtil.java
index bf9c364..9ea1f2c 100644
--- a/src/main/java/com/github/hunter0x7c7/sync/utils/PathUtil.java
+++ b/src/main/java/com/github/hunter0x7c7/sync/utils/PathUtil.java
@@ -2,6 +2,7 @@
import java.io.File;
import java.net.URL;
+import java.net.URLDecoder;
public class PathUtil {
/**
@@ -27,7 +28,7 @@
URL url = PathUtil.class.getProtectionDomain().getCodeSource().getLocation();
String filePath = null;
try {
- filePath = java.net.URLDecoder.decode(url.getPath(), "utf-8");
+ filePath = URLDecoder.decode(url.getPath(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
@@ -64,7 +65,7 @@
File file = new File(realPath);
realPath = file.getAbsolutePath();//鍘绘帀浜嗘渶鍓嶉潰鐨勬枩鏉�/
try {
- realPath = java.net.URLDecoder.decode(realPath, "utf-8");
+ realPath = URLDecoder.decode(realPath, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
--
Gitblit v1.9.1