Browse Source

REPORT-78877【迭代】【起始页】mac直接双击模板打不开设计器

mac 支持双击模板打开,也支持在启动页打开
feature/x
Harrison 2 years ago
parent
commit
39c9c5b774
  1. 102
      designer-base/src/main/java/com/fr/design/deeplink/DeepLinkCore.java
  2. 17
      designer-base/src/main/java/com/fr/design/deeplink/DeepLinkPrepare.java
  3. 15
      designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java
  4. 21
      designer-realize/src/main/java/com/fr/design/deeplink/FileOpen4MacDeepLink.java

102
designer-base/src/main/java/com/fr/design/deeplink/DeepLinkCore.java

@ -43,6 +43,8 @@ public class DeepLinkCore {
}
private String pendingURL;
private final List<DeepLinkPrepare> deepLinkPrepareList = new ArrayList<>();
private final List<DeepLink> 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<String, Object> 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<NameValuePair> 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<String, Object> params;
public UrlBean(String url, String host, String path, Map<String, Object> 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<String, Object> getParams() {
return params;
}
public static UrlBean create(String pendingUrl) {
String host = null;
String path = null;
Map<String, Object> 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<NameValuePair> pairs = URLUtils.parse(url.getQuery());
for (NameValuePair pair : pairs) {
params.put(pair.getName(), pair.getValue());
}
}
return new UrlBean(pendingUrl, host, path, params);
}
}
}

17
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<String, Object> params);
}

15
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<String> envNameIterator = envManager.getEnvNameIterator();
ArrayList<String> 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;
}
/* 预热相关 */

21
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<String, Object> 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<String, Object> 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<String, Object> params) {
return OperatingSystem.isMacos() && StringUtils.isEmpty(host) && StringUtils.isEmpty(path) && params.isEmpty();
}
}

Loading…
Cancel
Save