X-Git-Url: https://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix_swing%2FActions.java;h=5df9b2eb84f64894d15bc8c98aba84eed9096a63;hb=04eafeeaebf720196018d65a7a62b4276e26d0d1;hp=5a2a5b56f9fe6b38dc78934d12bab21a873bf2dd;hpb=6bf49e68d2e9316c61eae630d00e715fbc4940c8;p=fanfix.git diff --git a/src/be/nikiroo/fanfix_swing/Actions.java b/src/be/nikiroo/fanfix_swing/Actions.java index 5a2a5b5..5df9b2e 100644 --- a/src/be/nikiroo/fanfix_swing/Actions.java +++ b/src/be/nikiroo/fanfix_swing/Actions.java @@ -2,20 +2,30 @@ package be.nikiroo.fanfix_swing; import java.awt.BorderLayout; import java.awt.Container; +import java.awt.Toolkit; import java.awt.Window; +import java.awt.datatransfer.DataFlavor; import java.io.File; import java.io.IOException; +import java.net.URL; +import java.net.UnknownHostException; import javax.swing.JDialog; +import javax.swing.JFileChooser; import javax.swing.JLabel; +import javax.swing.JOptionPane; import javax.swing.SwingWorker; import be.nikiroo.fanfix.Instance; +import be.nikiroo.fanfix.bundles.StringIdGui; import be.nikiroo.fanfix.bundles.UiConfig; import be.nikiroo.fanfix.data.MetaData; import be.nikiroo.fanfix.data.Story; import be.nikiroo.fanfix.library.BasicLibrary; +import be.nikiroo.fanfix.library.LocalLibrary; +import be.nikiroo.fanfix.reader.BasicReader; import be.nikiroo.fanfix_swing.gui.utils.UiHelper; +import be.nikiroo.utils.Progress; public class Actions { static public void openExternal(final BasicLibrary lib, MetaData meta, final Container parent, @@ -155,4 +165,102 @@ public class Actions { } } } + + /** + * Import a {@link Story} into the main {@link LocalLibrary}. + *
+ * Should be called inside the UI thread. + * + * @param askUrl TRUE for an {@link URL}, false for a {@link File} + */ + static public void imprt(final Container parent, boolean askUrl, final Runnable onSuccess) { + JFileChooser fc = new JFileChooser(); + + Object url; + if (askUrl) { + String clipboard = ""; + try { + clipboard = ("" + Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor)) + .trim(); + } catch (Exception e) { + // No data will be handled + } + + if (clipboard == null || !(clipboard.startsWith("http://") || // + clipboard.startsWith("https://"))) { + clipboard = ""; + } + + url = JOptionPane.showInputDialog(parent, + Instance.getInstance().getTransGui().getString(StringIdGui.SUBTITLE_IMPORT_URL), + Instance.getInstance().getTransGui().getString(StringIdGui.TITLE_IMPORT_URL), + JOptionPane.QUESTION_MESSAGE, null, null, clipboard); + } else if (fc.showOpenDialog(parent) != JFileChooser.CANCEL_OPTION) { + url = fc.getSelectedFile().getAbsolutePath(); + } else { + url = null; + } + + if (url != null && !url.toString().isEmpty()) { + imprt(parent, url.toString(), null, null); + } + } + + /** + * Actually import the {@link Story} into the main {@link LocalLibrary}. + *
+ * Should be called inside the UI thread.
+ *
+ * @param url the {@link Story} to import by {@link URL}
+ * @param onSuccess Action to execute on success
+ * @param onSuccessPgName the name to use for the onSuccess progress bar
+ */
+ static public void imprt(final Container parent, final String url, final Runnable onSuccess,
+ String onSuccessPgName) {
+ final Progress pg = new Progress();
+ final Progress pgImprt = new Progress();
+ final Progress pgOnSuccess = new Progress(onSuccessPgName);
+ pg.addProgress(pgImprt, 95);
+ pg.addProgress(pgOnSuccess, 5);
+
+ new SwingWorker