import be.nikiroo.fanfix.output.BasicOutput;
import be.nikiroo.fanfix.output.BasicOutput.OutputType;
import be.nikiroo.fanfix.supported.BasicSupport;
-import be.nikiroo.utils.ui.Progress;
import be.nikiroo.fanfix.supported.BasicSupport.SupportType;
import be.nikiroo.fanfix.supported.InfoReader;
+import be.nikiroo.utils.Progress;
/**
* Manage a library of Stories: import, export, list.
import be.nikiroo.fanfix.reader.BasicReader.ReaderType;
import be.nikiroo.fanfix.supported.BasicSupport;
import be.nikiroo.fanfix.supported.BasicSupport.SupportType;
+import be.nikiroo.utils.Progress;
import be.nikiroo.utils.ui.UIUtils;
-import be.nikiroo.utils.ui.Progress;
/**
* Main program entry point.
}
}
- /**
- * Return an {@link URL} from this {@link String}, be it a file path or an
- * actual {@link URL}.
- *
- * @param sourceString
- * the source
- *
- * @return the corresponding {@link URL}
- *
- * @throws MalformedURLException
- * if this is neither a file nor a conventional {@link URL}
- */
- private static URL getUrl(String sourceString) throws MalformedURLException {
- if (sourceString == null || sourceString.isEmpty()) {
- throw new MalformedURLException("Empty url");
- }
-
- URL source = null;
- try {
- source = new URL(sourceString);
- } catch (MalformedURLException e) {
- File sourceFile = new File(sourceString);
- source = sourceFile.toURI().toURL();
- }
-
- return source;
- }
-
/**
* Import the given resource into the {@link Library}.
*
*/
public static int imprt(String urlString, Progress pg) {
try {
- Story story = Instance.getLibrary().imprt(getUrl(urlString), pg);
+ Story story = Instance.getLibrary().imprt(
+ BasicReader.getUrl(urlString), pg);
System.out.println(story.getMeta().getLuid() + ": \""
+ story.getMeta().getTitle() + "\" imported.");
} catch (IOException e) {
if (library) {
reader.setStory(story, null);
} else {
- reader.setStory(getUrl(story), null);
+ reader.setStory(BasicReader.getUrl(story), null);
}
if (chapString != null) {
String sourceName = urlString;
try {
- URL source = getUrl(urlString);
+ URL source = BasicReader.getUrl(urlString);
sourceName = source.toString();
if (source.toString().startsWith("file://")) {
sourceName = sourceName.substring("file://".length());
import be.nikiroo.fanfix.data.Paragraph;
import be.nikiroo.fanfix.data.Paragraph.ParagraphType;
import be.nikiroo.fanfix.data.Story;
-import be.nikiroo.utils.ui.Progress;
+import be.nikiroo.utils.Progress;
/**
* This class is the base class used by the other output classes. It can be used
package be.nikiroo.fanfix.reader;
+import java.io.File;
import java.io.IOException;
+import java.net.MalformedURLException;
import java.net.URL;
import be.nikiroo.fanfix.Instance;
import be.nikiroo.fanfix.bundles.Config;
import be.nikiroo.fanfix.data.Story;
import be.nikiroo.fanfix.supported.BasicSupport;
-import be.nikiroo.utils.ui.Progress;
+import be.nikiroo.utils.Progress;
/**
* The class that handles the different {@link Story} readers you can use.
public static void setDefaultReaderType(ReaderType defaultType) {
BasicReader.defaultType = defaultType;
}
+
+ /**
+ * Return an {@link URL} from this {@link String}, be it a file path or an
+ * actual {@link URL}.
+ *
+ * @param sourceString
+ * the source
+ *
+ * @return the corresponding {@link URL}
+ *
+ * @throws MalformedURLException
+ * if this is neither a file nor a conventional {@link URL}
+ */
+ public static URL getUrl(String sourceString) throws MalformedURLException {
+ if (sourceString == null || sourceString.isEmpty()) {
+ throw new MalformedURLException("Empty url");
+ }
+
+ URL source = null;
+ try {
+ source = new URL(sourceString);
+ } catch (MalformedURLException e) {
+ File sourceFile = new File(sourceString);
+ source = sourceFile.toURI().toURL();
+ }
+
+ return source;
+ }
}
import be.nikiroo.fanfix.bundles.UiConfig;
import be.nikiroo.fanfix.data.Story;
import be.nikiroo.fanfix.output.BasicOutput.OutputType;
-import be.nikiroo.utils.ui.Progress;
+import be.nikiroo.utils.Progress;
class LocalReader extends BasicReader {
private Library lib;
private static final int TEXT_WIDTH = COVER_WIDTH + 40;
private static final int TEXT_HEIGHT = 50;
private static final String AUTHOR_COLOR = "#888888";
-
private static final long serialVersionUID = 1L;
+
private JLabel icon;
- private JLabel tt;
+ private JLabel title;
private boolean selected;
private boolean hovered;
private Date lastClick;
if (optAuthor != null && !optAuthor.isEmpty()) {
optAuthor = "(" + optAuthor + ")";
}
- tt = new JLabel(
+ title = new JLabel(
String.format(
"<html>"
+ "<body style='width: %d px; height: %d px; text-align: center'>"
this.setLayout(new BorderLayout(10, 10));
this.add(icon, BorderLayout.CENTER);
- this.add(tt, BorderLayout.SOUTH);
+ this.add(title, BorderLayout.SOUTH);
setupListeners();
setSelected(false);
}
public void mouseClicked(MouseEvent e) {
- Date now = new Date();
- if (lastClick != null
- && now.getTime() - lastClick.getTime() < doubleClickDelay) {
- click(true);
- } else {
- click(false);
+ if (isEnabled()) {
+ Date now = new Date();
+ if (lastClick != null
+ && now.getTime() - lastClick.getTime() < doubleClickDelay) {
+ click(true);
+ } else {
+ click(false);
+ }
+ lastClick = now;
}
- lastClick = now;
}
});
}
g.fillPolygon(new Polygon(xs, ys, xs.length));
Color color = new Color(255, 255, 255, 0);
- if (selected && !hovered) {
+ if (!isEnabled()) {
+ } else if (selected && !hovered) {
color = new Color(80, 80, 100, 40);
} else if (!selected && hovered) {
color = new Color(230, 230, 255, 100);
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
import be.nikiroo.fanfix.Instance;
-import be.nikiroo.fanfix.Main;
import be.nikiroo.fanfix.bundles.UiConfig;
import be.nikiroo.fanfix.data.MetaData;
import be.nikiroo.fanfix.reader.LocalReaderBook.BookActionListener;
+import be.nikiroo.utils.Progress;
+import be.nikiroo.utils.ui.ProgressBar;
import be.nikiroo.utils.ui.WrapLayout;
class LocalReaderFrame extends JFrame {
private JPanel bookPane;
private String type;
private Color color;
+ private ProgressBar pgBar;
+ private JMenuBar bar;
public LocalReaderFrame(LocalReader reader, String type) {
super("Fanfix Library");
books = new ArrayList<LocalReaderBook>();
bookPane = new JPanel(new WrapLayout(WrapLayout.LEADING, 5, 5));
- color = null;
- String bg = Instance.getUiConfig().getString(UiConfig.BACKGROUND_COLOR);
- if (bg.startsWith("#") && bg.length() == 7) {
- try {
- color = new Color(Integer.parseInt(bg.substring(1, 3), 16),
- Integer.parseInt(bg.substring(3, 5), 16),
- Integer.parseInt(bg.substring(5, 7), 16));
- } catch (NumberFormatException e) {
- color = null; // no changes
- e.printStackTrace();
- }
- }
+ color = Instance.getUiConfig().getColor(UiConfig.BACKGROUND_COLOR);
if (color != null) {
setBackground(color);
scroll.getVerticalScrollBar().setUnitIncrement(16);
add(scroll, BorderLayout.CENTER);
+ pgBar = new ProgressBar();
+ add(pgBar, BorderLayout.SOUTH);
+
refreshBooks(type);
setJMenuBar(createMenu());
}
public void action(LocalReaderBook book) {
- try {
- File target = LocalReaderFrame.this.reader.getTarget(
- luid, null);
- Desktop.getDesktop().browse(target.toURI());
- } catch (IOException e) {
- Instance.syserr(e);
- }
+ final Progress pg = new Progress();
+ outOfUi(pg, new Runnable() {
+ public void run() {
+ try {
+ File target = LocalReaderFrame.this.reader
+ .getTarget(luid, pg);
+ Desktop.getDesktop().browse(target.toURI());
+ } catch (IOException e) {
+ Instance.syserr(e);
+ }
+ }
+ });
}
});
}
private JMenuBar createMenu() {
- JMenuBar bar = new JMenuBar();
+ bar = new JMenuBar();
JMenu file = new JMenu("File");
JMenuItem imprt = new JMenuItem("Import", KeyEvent.VK_I);
imprt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
- String url = JOptionPane.showInputDialog(LocalReaderFrame.this,
- "url of the story to import?\n" + "\n"
- + "Note: it will currently make the UI \n"
- + "unresponsive until it is downloaded...",
+ final String url = JOptionPane.showInputDialog(
+ LocalReaderFrame.this, "url of the story to import?",
"Importing from URL", JOptionPane.QUESTION_MESSAGE);
if (url != null && !url.isEmpty()) {
- if (Main.imprt(url, null) != 0) {
- JOptionPane.showMessageDialog(LocalReaderFrame.this,
- "Cannot import: " + url, "Imort error",
- JOptionPane.ERROR_MESSAGE);
- } else {
- refreshBooks(type);
- }
+ final Progress pg = new Progress("Importing " + url);
+ outOfUi(pg, new Runnable() {
+ public void run() {
+ Exception ex = null;
+ try {
+ Instance.getLibrary().imprt(
+ BasicReader.getUrl(url), pg);
+ } catch (IOException e) {
+ ex = e;
+ }
+
+ final Exception e = ex;
+
+ final boolean ok = (e == null);
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ if (!ok) {
+ JOptionPane.showMessageDialog(
+ LocalReaderFrame.this,
+ "Cannot import: " + url,
+ e.getMessage(),
+ JOptionPane.ERROR_MESSAGE);
+
+ setAllEnabled(true);
+ } else {
+ refreshBooks(type);
+ }
+ }
+ });
+ }
+ });
}
}
});
return bar;
}
+
+ private void outOfUi(final Progress pg, final Runnable run) {
+ pgBar.setProgress(pg);
+
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ setAllEnabled(false);
+ pgBar.addActioListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ pgBar.setProgress(null);
+ setAllEnabled(true);
+ }
+ });
+ }
+ });
+
+ new Thread(new Runnable() {
+ public void run() {
+ run.run();
+ if (!pg.isDone()) {
+ pg.setProgress(pg.getMax());
+ }
+ }
+ }).start();
+ }
+
+ public void setAllEnabled(boolean enabled) {
+ for (LocalReaderBook book : books) {
+ book.setEnabled(enabled);
+ book.validate();
+ book.repaint();
+ }
+ bar.setEnabled(enabled);
+ bookPane.setEnabled(enabled);
+ bookPane.validate();
+ bookPane.repaint();
+ setEnabled(enabled);
+ validate();
+ repaint();
+ }
}
import be.nikiroo.fanfix.data.Paragraph.ParagraphType;
import be.nikiroo.fanfix.data.Story;
import be.nikiroo.utils.IOUtils;
+import be.nikiroo.utils.Progress;
import be.nikiroo.utils.StringUtils;
-import be.nikiroo.utils.ui.Progress;
/**
* This class is the base class used by the other support classes. It can be
chapIn.close();
}
- pgChaps.setProgress(i);
- i++;
+ pgChaps.setProgress(i++);
}
} else {
pg.setProgress(100);
import be.nikiroo.fanfix.data.Chapter;
import be.nikiroo.fanfix.data.Paragraph;
import be.nikiroo.fanfix.data.Story;
-import be.nikiroo.utils.ui.Progress;
+import be.nikiroo.utils.Progress;
/**
* Support class for CBZ files (works better with CBZ created with this program,
import be.nikiroo.fanfix.data.Chapter;
import be.nikiroo.fanfix.data.MetaData;
import be.nikiroo.fanfix.data.Story;
+import be.nikiroo.utils.Progress;
import be.nikiroo.utils.StringUtils;
-import be.nikiroo.utils.ui.Progress;
/**
* Support class for <a href="http://e621.net/">e621.net</a> and <a