From 39c9c5b77470860759d1d71f641c40e926a43641 Mon Sep 17 00:00:00 2001 From: Harrison Date: Tue, 23 Aug 2022 21:00:55 +0800 Subject: [PATCH 1/4] =?UTF-8?q?REPORT-78877=E3=80=90=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E3=80=91=E3=80=90=E8=B5=B7=E5=A7=8B=E9=A1=B5=E3=80=91mac?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E5=8F=8C=E5=87=BB=E6=A8=A1=E6=9D=BF=E6=89=93?= =?UTF-8?q?=E4=B8=8D=E5=BC=80=E8=AE=BE=E8=AE=A1=E5=99=A8=20mac=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=8F=8C=E5=87=BB=E6=A8=A1=E6=9D=BF=E6=89=93=E5=BC=80?= =?UTF-8?q?=EF=BC=8C=E4=B9=9F=E6=94=AF=E6=8C=81=E5=9C=A8=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E9=A1=B5=E6=89=93=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/deeplink/DeepLinkCore.java | 102 +++++++++++++----- .../fr/design/deeplink/DeepLinkPrepare.java | 17 +++ .../start/common/DesignerStartupContext.java | 15 ++- .../design/deeplink/FileOpen4MacDeepLink.java | 21 +++- 4 files changed, 127 insertions(+), 28 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/deeplink/DeepLinkPrepare.java diff --git a/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkCore.java b/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkCore.java index 8fed6e80dd..c9b80ebf72 100644 --- a/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkCore.java +++ b/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkCore.java @@ -43,6 +43,8 @@ public class DeepLinkCore { } private String pendingURL; + + private final List deepLinkPrepareList = new ArrayList<>(); private final List deepLinkList = new ArrayList<>(); @@ -51,6 +53,9 @@ public class DeepLinkCore { public void register(DeepLink deepLink) { if (deepLink != null) { deepLinkList.add(deepLink); + if (deepLink instanceof DeepLinkPrepare) { + deepLinkPrepareList.add((DeepLinkPrepare) deepLink); + } } } @@ -129,6 +134,11 @@ public class DeepLinkCore { private void acceptNewURL(String url) { this.pendingURL = url; + + UrlBean urlBean = UrlBean.create(this.pendingURL); + for (DeepLinkPrepare deepLinkPrepare : deepLinkPrepareList) { + deepLinkPrepare.prepare(urlBean.getUrl(), urlBean.getHost(), urlBean.getPath(), urlBean.getParams()); + } } private boolean canConsumePendingURL() { @@ -148,32 +158,11 @@ public class DeepLinkCore { } private void consumePendingURL() { - String host = null; - String path = null; - Map params = new HashMap<>(); - - URL url = null; - try { - url = new URL(null, this.pendingURL, new URLStreamHandler() { - @Override - protected URLConnection openConnection(URL u) throws IOException { - return null; - } - }); - } catch (MalformedURLException ignored) {} - - if (url != null) { - host = url.getHost(); - path = url.getPath(); - - List pairs = URLUtils.parse(url.getQuery()); - for (NameValuePair pair: pairs) { - params.put(pair.getName(), pair.getValue()); - } - } - + + UrlBean urlBean = UrlBean.create(this.pendingURL); + FineLoggerFactory.getLogger().info("consume deep link: " + this.pendingURL); - performDeepLinks(this.pendingURL, host, path, params); + performDeepLinks(urlBean.getUrl(), urlBean.getHost(), urlBean.getPath(), urlBean.getParams()); markPendingURLConsumed(); } @@ -194,4 +183,67 @@ public class DeepLinkCore { private void markPendingURLConsumed() { this.pendingURL = null; } + + private static class UrlBean { + + private String url; + + private String host; + + private String path; + + private Map params; + + public UrlBean(String url, String host, String path, Map params) { + this.url = url; + this.host = host; + this.path = path; + this.params = params; + } + + public String getUrl() { + return url; + } + + public String getHost() { + return host; + } + + public String getPath() { + return path; + } + + public Map getParams() { + return params; + } + + public static UrlBean create(String pendingUrl) { + + String host = null; + String path = null; + Map params = new HashMap<>(); + + URL url = null; + try { + url = new URL(null, pendingUrl, new URLStreamHandler() { + @Override + protected URLConnection openConnection(URL u) throws IOException { + return null; + } + }); + } catch (MalformedURLException ignored) { + } + + if (url != null) { + host = url.getHost(); + path = url.getPath(); + + List pairs = URLUtils.parse(url.getQuery()); + for (NameValuePair pair : pairs) { + params.put(pair.getName(), pair.getValue()); + } + } + return new UrlBean(pendingUrl, host, path, params); + } + } } diff --git a/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkPrepare.java b/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkPrepare.java new file mode 100644 index 0000000000..e74d99d8b7 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkPrepare.java @@ -0,0 +1,17 @@ +package com.fr.design.deeplink; + +import java.util.Map; + +/** + * created by Harrison on 2022/08/23 + **/ +public interface DeepLinkPrepare { + + /** + * 准备 + * + * @param url 链接 + * @return 成功/失败 + */ + boolean prepare(String url, String host, String path, Map params); +} diff --git a/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java b/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java index c78469b450..7874329f5f 100644 --- a/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java +++ b/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java @@ -20,6 +20,11 @@ import java.util.Iterator; **/ public class DesignerStartupContext { + /** + * 可以启动 + */ + private boolean enabled = true; + /** * 启动参数 */ @@ -79,6 +84,14 @@ public class DesignerStartupContext { return StartupContextHolder.INSTANCE; } + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + private static class StartupContextHolder { private static final DesignerStartupContext INSTANCE = new DesignerStartupContext(); } @@ -114,7 +127,7 @@ public class DesignerStartupContext { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); Iterator envNameIterator = envManager.getEnvNameIterator(); ArrayList envs = Lists.newArrayList(envNameIterator); - return !startupArgs.isDemo() && DesignerStartupUtil.convertArgs2FILE(startupArgs.get()) == null && !envs.isEmpty() && envManager.isStartupPageEnabled(); + return !startupArgs.isDemo() && DesignerStartupUtil.convertArgs2FILE(startupArgs.get()) == null && !envs.isEmpty() && envManager.isStartupPageEnabled() && enabled; } /* 预热相关 */ diff --git a/designer-realize/src/main/java/com/fr/design/deeplink/FileOpen4MacDeepLink.java b/designer-realize/src/main/java/com/fr/design/deeplink/FileOpen4MacDeepLink.java index 6eb3ea366c..ce69e0823c 100644 --- a/designer-realize/src/main/java/com/fr/design/deeplink/FileOpen4MacDeepLink.java +++ b/designer-realize/src/main/java/com/fr/design/deeplink/FileOpen4MacDeepLink.java @@ -4,6 +4,7 @@ import com.fr.design.mainframe.DesignerContext; import com.fr.file.FileFILE; import com.fr.stable.StringUtils; import com.fr.stable.os.OperatingSystem; +import com.fr.start.common.DesignerStartupContext; import com.fr.start.common.DesignerStartupUtil; import java.io.File; @@ -14,10 +15,11 @@ import java.util.Map; * @version 1.0 * Created by Starryi on 2022/1/13 */ -public class FileOpen4MacDeepLink extends DeepLink { +public class FileOpen4MacDeepLink extends DeepLink implements DeepLinkPrepare{ @Override public boolean accept(String url, String host, String path, Map params) { - return OperatingSystem.isMacos() && StringUtils.isEmpty(host) && StringUtils.isEmpty(path) && params.isEmpty(); + + return support(url, host, path, params); } @Override @@ -30,4 +32,19 @@ public class FileOpen4MacDeepLink extends DeepLink { DesignerContext.getDesignerFrame().openTemplate(new FileFILE(file)); } } + + @Override + public boolean prepare(String url, String host, String path, Map params) { + + if (support(url, host, path, params)) { + DesignerStartupContext.getInstance().setEnabled(false); + return true; + } + return false; + } + + public static boolean support(String url, String host, String path, Map params) { + + return OperatingSystem.isMacos() && StringUtils.isEmpty(host) && StringUtils.isEmpty(path) && params.isEmpty(); + } } From 4e71b4a560b33d937d647c2e4db73edd7cf07523 Mon Sep 17 00:00:00 2001 From: Harrison Date: Tue, 23 Aug 2022 21:10:52 +0800 Subject: [PATCH 2/4] =?UTF-8?q?REPORT-78881=E3=80=90=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E3=80=91=E3=80=90=E8=B5=B7=E5=A7=8B=E9=A1=B5=E3=80=91=E5=85=88?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E4=B8=80=E4=B8=AA=E4=BC=9A=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=9A=84=E5=B7=A5=E4=BD=9C=E7=9B=AE=E5=BD=95=EF=BC=8C=E5=86=8D?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=9C=AC=E5=9C=B0=E7=9B=AE=E5=BD=95=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=EF=BC=8C=E9=A2=84=E8=A7=88=E6=A8=A1=E6=9D=BF=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=20=E6=B7=BB=E5=8A=A0=E9=AA=8C=E8=AF=81=E6=96=B9?= =?UTF-8?q?=E6=A1=88=EF=BC=8C=E7=A1=AE=E8=AE=A4=E6=9C=89=E6=95=88=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/start/common/DesignerStartupContext.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java b/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java index 7874329f5f..2c2508dd2e 100644 --- a/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java +++ b/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java @@ -141,7 +141,12 @@ public class DesignerStartupContext { String curEnvName = DesignerEnvManager.getEnvManager().getCurEnvName(); DesignerWorkspaceInfo workspaceInfo = DesignerEnvManager.getEnvManager().getWorkspaceInfo(curEnvName); - return workspaceInfo.getType() == DesignerWorkspaceType.Local; + boolean valid = false; + try { + valid = workspaceInfo.checkValid(); + } catch (Exception ignore) { + } + return workspaceInfo.getType() == DesignerWorkspaceType.Local && valid; } public void setStartupPageModel(StartupPageModel startupPageModel) { From 9163788f7b5434f56e438ab1b32977287c72c646 Mon Sep 17 00:00:00 2001 From: Harrison Date: Tue, 23 Aug 2022 22:22:26 +0800 Subject: [PATCH 3/4] =?UTF-8?q?REPORT-78881=E3=80=90=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E3=80=91=E3=80=90=E8=B5=B7=E5=A7=8B=E9=A1=B5=E3=80=91=E5=85=88?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E4=B8=80=E4=B8=AA=E4=BC=9A=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=9A=84=E5=B7=A5=E4=BD=9C=E7=9B=AE=E5=BD=95=EF=BC=8C=E5=86=8D?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E6=9C=AC=E5=9C=B0=E7=9B=AE=E5=BD=95=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=EF=BC=8C=E9=A2=84=E8=A7=88=E6=A8=A1=E6=9D=BF=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=20=E8=AE=A9=E5=86=85=E7=BD=AE=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E6=99=9A=E7=82=B9=E5=90=AF=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/start/common/DesignerStartupContext.java | 3 ++- .../src/main/java/com/fr/start/module/DesignerStartup.java | 3 ++- .../start/module/optimized/DesignerStartupPageActivator.java | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java b/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java index 2c2508dd2e..9c8b986341 100644 --- a/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java +++ b/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java @@ -22,6 +22,7 @@ public class DesignerStartupContext { /** * 可以启动 + * 当遇到 mac 双击启动时,需要将这里置为 false, 见 {@link FileOpen4MacDeepLink} */ private boolean enabled = true; @@ -127,7 +128,7 @@ public class DesignerStartupContext { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); Iterator envNameIterator = envManager.getEnvNameIterator(); ArrayList envs = Lists.newArrayList(envNameIterator); - return !startupArgs.isDemo() && DesignerStartupUtil.convertArgs2FILE(startupArgs.get()) == null && !envs.isEmpty() && envManager.isStartupPageEnabled() && enabled; + return !startupArgs.isDemo() && DesignerStartupUtil.convertArgs2FILE(startupArgs.get()) == null && !envs.isEmpty() && (envs.size() != 1) && envManager.isStartupPageEnabled() && enabled; } /* 预热相关 */ diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java b/designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java index ff7962f61a..4a4fbac2b0 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java @@ -33,6 +33,7 @@ import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; import com.fr.start.DesignerProcessType; import com.fr.start.ServerStarter; +import com.fr.start.common.DesignerStartupContext; import com.fr.start.event.LazyStartupEvent; import com.fr.start.preload.PreLoadService; import com.fr.start.server.FineEmbedServer; @@ -120,7 +121,7 @@ public class DesignerStartup extends Activator { || FineEmbedServer.isRunning()) { return; } - if (DaoSelectorFactory.getDaoSelector().useCacheDao()) { + if (DaoSelectorFactory.getDaoSelector().useCacheDao() || DesignerStartupContext.getInstance().isOnStartup()) { listenEvent(LazyStartupEvent.INSTANCE, new Listener(Integer.MIN_VALUE) { @Override public void on(Event event, Null param) { diff --git a/designer-realize/src/main/java/com/fr/start/module/optimized/DesignerStartupPageActivator.java b/designer-realize/src/main/java/com/fr/start/module/optimized/DesignerStartupPageActivator.java index 9e590a3e1d..568b512938 100644 --- a/designer-realize/src/main/java/com/fr/start/module/optimized/DesignerStartupPageActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/optimized/DesignerStartupPageActivator.java @@ -1,6 +1,7 @@ package com.fr.start.module.optimized; import com.fr.design.DesignerEnvManager; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.ui.util.UIUtil; import com.fr.log.FineLoggerFactory; import com.fr.module.Activator; @@ -110,6 +111,9 @@ public class DesignerStartupPageActivator extends Activator { // 将选中的环境设置为当前环境 StartupWorkspaceBean selectWorkspaceInfo = model.getSelectWorkspaceInfo(); DesignerEnvManager.getEnvManager().setCurEnvName(selectWorkspaceInfo.getName()); + UIUtil.invokeLaterIfNeeded(() -> { + DesignerContext.getDesignerFrame().setTitle(); + }); } private void launchAfterWarmup(DesignerPreWarmTask warmTask) { From d19dc922019f61f0b4ec38925f62d9a7ab1f7f38 Mon Sep 17 00:00:00 2001 From: Harrison Date: Tue, 23 Aug 2022 22:25:36 +0800 Subject: [PATCH 4/4] =?UTF-8?q?REPORT-78886=E3=80=90=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E3=80=91=E3=80=90=E8=B5=B7=E5=A7=8B=E9=A1=B5=E3=80=91=E8=B5=B7?= =?UTF-8?q?=E5=A7=8B=E9=A1=B5=E9=85=8D=E7=BD=AE=E9=97=AE=E9=A2=98=201?= =?UTF-8?q?=E3=80=81=E5=85=BC=E5=AE=B9=201107=202=E3=80=81=E8=B5=B7?= =?UTF-8?q?=E5=A7=8B=E9=A1=B5=E9=80=BB=E8=BE=91=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/start/common/DesignerStartupConfig.java | 9 +++++++-- .../fr/start/common/DesignerStartupContext.java | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/start/common/DesignerStartupConfig.java b/designer-base/src/main/java/com/fr/start/common/DesignerStartupConfig.java index d8caf035d3..6afef4f3b6 100644 --- a/designer-base/src/main/java/com/fr/start/common/DesignerStartupConfig.java +++ b/designer-base/src/main/java/com/fr/start/common/DesignerStartupConfig.java @@ -12,6 +12,11 @@ public class DesignerStartupConfig implements XMLable { private static final DesignerStartupConfig INSTANCE = new DesignerStartupConfig(); + /** + * 加上版本,不然回滚到 1107 会有兼容问题 + */ + private static final String TAG_ENABLED = "isEnabled1108"; + public static DesignerStartupConfig getInstance() { return INSTANCE; @@ -40,14 +45,14 @@ public class DesignerStartupConfig implements XMLable { @Override public void readXML(XMLableReader reader) { if (reader.isAttr()) { - this.setEnabled(reader.getAttrAsBoolean("isEnabled", true)); + this.setEnabled(reader.getAttrAsBoolean(TAG_ENABLED, true)); } } @Override public void writeXML(XMLPrintWriter writer) { writer.startTAG(XML_TAG); - writer.attr("isEnabled", this.isEnabled()); + writer.attr(TAG_ENABLED, this.isEnabled()); writer.end(); } diff --git a/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java b/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java index 9c8b986341..b42a6c65bd 100644 --- a/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java +++ b/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java @@ -117,7 +117,7 @@ public class DesignerStartupContext { /** * 展示启动页 - * 1. 判断当前的工作目录数量 + * 1. 判断当前的工作目录数量为空或者为1 * 2. 判断是否是 demo、还是打开目标文件 * 3. 功能是否开启 * @@ -125,10 +125,20 @@ public class DesignerStartupContext { */ public boolean isShowStartupPage() { + DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); + return !startupArgs.isDemo() && DesignerStartupUtil.convertArgs2FILE(startupArgs.get()) == null + // 见该 field 的注释 + && enabled + && isWorkspaceValid() + && envManager.isStartupPageEnabled(); + } + + private boolean isWorkspaceValid() { + DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); Iterator envNameIterator = envManager.getEnvNameIterator(); ArrayList envs = Lists.newArrayList(envNameIterator); - return !startupArgs.isDemo() && DesignerStartupUtil.convertArgs2FILE(startupArgs.get()) == null && !envs.isEmpty() && (envs.size() != 1) && envManager.isStartupPageEnabled() && enabled; + return !envs.isEmpty() && (envs.size() != 1); } /* 预热相关 */