diff --git a/designer/src/com/fr/design/mainframe/bbs/BBSDialog.java b/designer/src/com/fr/design/mainframe/bbs/BBSDialog.java index 856e9264a..bedbc8d3c 100644 --- a/designer/src/com/fr/design/mainframe/bbs/BBSDialog.java +++ b/designer/src/com/fr/design/mainframe/bbs/BBSDialog.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe.bbs; import com.fr.design.dialog.UIDialog; +import com.fr.design.extra.PluginWebBridge; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; @@ -19,8 +20,6 @@ import netscape.javascript.JSObject; import javax.swing.*; import java.awt.*; -import java.io.IOException; -import java.net.URI; /** * @author richie @@ -53,7 +52,7 @@ public class BBSDialog extends UIDialog { } private void disableLink(final WebEngine eng) { - try{ + try { // webView端不跳转 虽然webView可以指定本地浏览器打开某个链接,但是当本地浏览器跳转到指定链接的同时,webView也做了跳转, // 为了避免出现在一个600*400的资讯框里加载整个网页的情况,webView不跳转到新网页 Platform.runLater(new Runnable() { @@ -62,16 +61,17 @@ public class BBSDialog extends UIDialog { eng.executeScript("history.go(0)"); } }); - }catch(Exception e){ + } catch (Exception e) { FRLogger.getLogger().error(e.getMessage()); } } /** * 打开资讯框 + * * @param url 资讯链接 */ - public void showWindow(final String url){ + public void showWindow(final String url) { GUICoreUtils.centerWindow(this); this.setResizable(false); Platform.runLater(new Runnable() { @@ -92,20 +92,19 @@ public class BBSDialog extends UIDialog { root.getChildren().add(view); eng.locationProperty().addListener(new ChangeListener() { @Override - public void changed(ObservableValue observable, final String oldValue, String newValue) - { - disableLink(eng); - // webView好像默认以手机版显示网页,浏览器里过滤掉这个跳转 - if(ComparatorUtils.equals(newValue, url) || ComparatorUtils.equals(newValue, BBSConstants.BBS_MOBILE_MOD)){ - return; - } - openUrlAtLocalWebBrowser(eng,newValue); - } - }); + public void changed(ObservableValue observable, final String oldValue, String newValue) { + disableLink(eng); + // webView好像默认以手机版显示网页,浏览器里过滤掉这个跳转 + if (ComparatorUtils.equals(newValue, url) || ComparatorUtils.equals(newValue, BBSConstants.BBS_MOBILE_MOD)) { + return; + } + PluginWebBridge.getHelper().openUrlAtLocalWebBrowser(eng, newValue); + } + }); eng.getLoadWorker().stateProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Worker.State oldValue, Worker.State newValue) { - if (newValue == Worker.State.SUCCEEDED){ + if (newValue == Worker.State.SUCCEEDED) { JSObject obj = (JSObject) eng.executeScript("window"); obj.setMember("BBSWebBridge", BBSDialog.this); setVisible(true); @@ -116,29 +115,6 @@ public class BBSDialog extends UIDialog { }); } - // 在本地浏览器里打开url - private void openUrlAtLocalWebBrowser(WebEngine eng,String url){ - if(Desktop.isDesktopSupported()){ - try{ - //创建一个URI实例,注意不是URL - URI uri = URI.create(url); - //获取当前系统桌面扩展 - Desktop desktop = Desktop.getDesktop(); - //判断系统桌面是否支持要执行的功能 - if(desktop.isSupported(Desktop.Action.BROWSE)){ - //获取系统默认浏览器打开链接 - desktop.browse(uri); - } - }catch(NullPointerException e){ - //此为uri为空时抛出异常 - FRLogger.getLogger().error(e.getMessage()); - }catch(IOException e){ - //此为无法获取系统默认浏览器 - FRLogger.getLogger().error(e.getMessage()); - } - } - } - /** * 提供给web页面调用的关闭窗口 */ @@ -146,6 +122,7 @@ public class BBSDialog extends UIDialog { this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); this.setVisible(false); } + /** * 略 */ diff --git a/designer_base/src/com/fr/design/actions/server/PluginManagerAction.java b/designer_base/src/com/fr/design/actions/server/PluginManagerAction.java index b6e3e25c0..d88fdf992 100644 --- a/designer_base/src/com/fr/design/actions/server/PluginManagerAction.java +++ b/designer_base/src/com/fr/design/actions/server/PluginManagerAction.java @@ -2,11 +2,10 @@ package com.fr.design.actions.server; import com.fr.base.BaseUtils; import com.fr.design.actions.UpdateAction; -import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.UIDialog; import com.fr.design.extra.PluginManagerPane; import com.fr.design.extra.PluginWebBridge; -import com.fr.design.extra.ShopDialog; +import com.fr.design.extra.PluginShopDialog; import com.fr.design.mainframe.DesignerContext; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; @@ -31,7 +30,7 @@ public class PluginManagerAction extends UpdateAction { @Override public void actionPerformed(ActionEvent e) { final PluginManagerPane managerPane = new PluginManagerPane(); - UIDialog dlg = new ShopDialog(DesignerContext.getDesignerFrame(),managerPane); + UIDialog dlg = new PluginShopDialog(DesignerContext.getDesignerFrame(),managerPane); PluginWebBridge.getHelper().setDialogHandle(dlg); dlg.setVisible(true); } diff --git a/designer_base/src/com/fr/design/extra/PluginManagerPane.java b/designer_base/src/com/fr/design/extra/PluginManagerPane.java index d2e267ed0..f1209a6ea 100644 --- a/designer_base/src/com/fr/design/extra/PluginManagerPane.java +++ b/designer_base/src/com/fr/design/extra/PluginManagerPane.java @@ -2,23 +2,10 @@ package com.fr.design.extra; import com.fr.design.dialog.BasicPane; import com.fr.design.gui.frpane.UITabbedPane; -import com.fr.general.FRLogger; import com.fr.general.Inter; import com.fr.stable.StableUtils; -import javafx.beans.value.ChangeListener; -import javafx.beans.value.ObservableValue; -import javafx.concurrent.Worker; -import javafx.scene.web.WebEngine; -import javax.script.Bindings; -import javax.script.ScriptContext; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; -import javax.swing.*; import java.awt.*; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; import java.net.URL; /** diff --git a/designer_base/src/com/fr/design/extra/ShopDialog.java b/designer_base/src/com/fr/design/extra/PluginShopDialog.java similarity index 74% rename from designer_base/src/com/fr/design/extra/ShopDialog.java rename to designer_base/src/com/fr/design/extra/PluginShopDialog.java index e394c0c1f..5d04401b2 100644 --- a/designer_base/src/com/fr/design/extra/ShopDialog.java +++ b/designer_base/src/com/fr/design/extra/PluginShopDialog.java @@ -9,11 +9,11 @@ import java.awt.*; /** * Created by vito on 16/4/18. */ -public class ShopDialog extends UIDialog{ - private static final Dimension DEFAULT_SHOP = new Dimension(900, 760); +public class PluginShopDialog extends UIDialog { + private static final Dimension DEFAULT_SHOP = new Dimension(900, 710); - public ShopDialog(Frame frame, BasicPane pane) { - super(frame, pane,false); + public PluginShopDialog(Frame frame, BasicPane pane) { + super(frame, pane, false); setSize(DEFAULT_SHOP); GUICoreUtils.centerWindow(this); setResizable(false); @@ -21,6 +21,5 @@ public class ShopDialog extends UIDialog{ @Override public void checkValid() throws Exception { - } } diff --git a/designer_base/src/com/fr/design/extra/PluginStatusCheckCompletePane.java b/designer_base/src/com/fr/design/extra/PluginStatusCheckCompletePane.java index cf772d5d6..46f55d40b 100644 --- a/designer_base/src/com/fr/design/extra/PluginStatusCheckCompletePane.java +++ b/designer_base/src/com/fr/design/extra/PluginStatusCheckCompletePane.java @@ -67,8 +67,8 @@ public abstract class PluginStatusCheckCompletePane extends PluginAbstractViewPa public void setProgress(double percent) { progressBar.setVisible(true); - progressBar.setValue((int)percent); - progressBar.setString((int)percent + "%"); + progressBar.setValue((int) percent); + progressBar.setString((int) percent + "%"); progressBar.repaint(); } diff --git a/designer_base/src/com/fr/design/extra/PluginTask.java b/designer_base/src/com/fr/design/extra/PluginTask.java index a86e088b3..5efcdd1d4 100644 --- a/designer_base/src/com/fr/design/extra/PluginTask.java +++ b/designer_base/src/com/fr/design/extra/PluginTask.java @@ -27,7 +27,7 @@ public class PluginTask extends Task { messageProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, String oldValue, String newValue) { - String fun = "(" + callback + ")('" + newValue + "')"; + String fun = "(" + callback + ")(\"" + newValue + "\")"; try { webEngine.executeScript(fun); } catch (Exception e) { @@ -49,7 +49,7 @@ public class PluginTask extends Task { @Override public void process(String s) { if (StringUtils.isNotBlank(s)) { - updateMessage(s); + updateMessage(changText(s)); } } }); @@ -59,6 +59,18 @@ public class PluginTask extends Task { @Override protected void done() { - updateMessage(executor.getTaskFinishMessage()); + updateMessage(changText(executor.getTaskFinishMessage())); + } + + /** + * 转换掉一些会造成错误的特殊字符 + * 1 ""中的""必须转义 + * 2 js字符串中的\n会导致js字符串变成多行,而js字符创不支持多行拼接 + * + * @param old 原始字符串 + * @return 处理之后的字符串 + */ + private String changText(String old) { + return old.replaceAll("\"", "\\\\\"").replaceAll("\n", ""); } } diff --git a/designer_base/src/com/fr/design/extra/PluginUpdatePane.java b/designer_base/src/com/fr/design/extra/PluginUpdatePane.java index 33d976372..e0b3ada35 100644 --- a/designer_base/src/com/fr/design/extra/PluginUpdatePane.java +++ b/designer_base/src/com/fr/design/extra/PluginUpdatePane.java @@ -25,7 +25,7 @@ public class PluginUpdatePane extends PluginAbstractLoadingViewPane(){ + if (StringUtils.isNotEmpty(DesignerEnvManager.getEnvManager().getBBSName())) { + new SwingWorker() { @Override protected Void doInBackground() throws Exception { @@ -181,7 +183,7 @@ public class PluginUpdatePane extends PluginAbstractLoadingViewPane() { + PluginHelper.downloadPluginFile(id, username, password, new Process() { @Override public void process(Double integer) { publish(integer); @@ -264,12 +266,14 @@ public class PluginUpdatePane extends PluginAbstractLoadingViewPane alert = new Dialog<>(); -// alert.getDialogPane().setContentText(message); -// alert.getDialogPane().getButtonTypes().add(ButtonType.OK); -// alert.showAndWait(); } } diff --git a/designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java b/designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java new file mode 100644 index 000000000..030b22f21 --- /dev/null +++ b/designer_base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java @@ -0,0 +1,61 @@ +package com.fr.design.extra.exe; + +import com.fr.design.extra.PluginWebBridge; +import com.fr.design.extra.Process; +import com.fr.general.FRLogger; +import com.fr.general.http.HttpClient; +import com.fr.stable.StringUtils; + +/** + * Created by vito on 16/4/18. + * 获取插件分类信息 + */ +public class GetPluginFromStoreExecutor implements Executor { + private String result = "[]"; + private String category; + private String seller; + private String fee; + + public GetPluginFromStoreExecutor(String category, String seller, String fee) { + this.category = category; + this.seller = seller; + this.fee = fee; + } + + @Override + public String getTaskFinishMessage() { + return result; + } + + @Override + public Command[] getCommands() { + return new Command[]{ + new Command() { + @Override + public String getExecuteMessage() { + return StringUtils.EMPTY; + } + + @Override + public void run(Process process) { + StringBuilder url = new StringBuilder(PluginWebBridge.PLUGIN_SHOP); + if (StringUtils.isNotBlank(category)) { + url.append("&cid=").append(category.split("-")[1]); + } + if (StringUtils.isNotBlank(seller)) { + url.append("&seller=").append(seller.split("-")[1]); + } + if (StringUtils.isNotBlank(fee)) { + url.append("&fee=").append(fee.split("-")[1]); + } + try { + HttpClient httpClient = new HttpClient(url.toString()); + result = httpClient.getResponseText(); + } catch (Exception e) { + FRLogger.getLogger().error(e.getMessage()); + } + } + } + }; + } +} diff --git a/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java b/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java index c3fb43262..c544858dd 100644 --- a/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java @@ -34,6 +34,7 @@ public class ModifyStatusExecutor implements Executor { public String getExecuteMessage() { return StringUtils.EMPTY; } + @Override public void run(Process process) { plugin = PluginLoader.getLoader().getPluginById(pluginID); diff --git a/designer_base/src/com/fr/design/extra/exe/UpdateOnlineExecutor.java b/designer_base/src/com/fr/design/extra/exe/UpdateOnlineExecutor.java index 4621dc3db..f1c3b0f04 100644 --- a/designer_base/src/com/fr/design/extra/exe/UpdateOnlineExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/UpdateOnlineExecutor.java @@ -81,7 +81,7 @@ public class UpdateOnlineExecutor implements Executor { }; } - private void updateFileFromDisk(File fileOnDisk){ + private void updateFileFromDisk(File fileOnDisk) { try { Plugin plugin = PluginHelper.readPlugin(fileOnDisk); if (plugin == null) { @@ -92,10 +92,10 @@ public class UpdateOnlineExecutor implements Executor { if (oldPlugin != null) { String[] files = PluginHelper.uninstallPlugin(FRContext.getCurrentEnv(), oldPlugin); PluginHelper.installPluginFromUnzippedTempDir(FRContext.getCurrentEnv(), plugin, new After() { - @Override - public void done() { - } - }); + @Override + public void done() { + } + }); } else { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Cannot_Update_Not_Install"), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); }