Fix --help messages, fix trans step 1/2
authorNiki Roo <niki@nikiroo.be>
Sun, 26 Nov 2017 09:10:20 +0000 (10:10 +0100)
committerNiki Roo <niki@nikiroo.be>
Sun, 26 Nov 2017 09:10:20 +0000 (10:10 +0100)
src/be/nikiroo/fanfix/Instance.java
src/be/nikiroo/fanfix/Main.java
src/be/nikiroo/fanfix/bundles/StringId.java
src/be/nikiroo/fanfix/bundles/resources.properties
src/be/nikiroo/fanfix/library/BasicLibrary.java
src/be/nikiroo/fanfix/library/RemoteLibrary.java
src/be/nikiroo/fanfix/reader/GuiReaderFrame.java

index 14977822bec55ca032a26e266ac35445ca96c570..a06c975420419c00d2998214438e3356101ab397 100644 (file)
@@ -6,6 +6,7 @@ import java.util.Date;
 
 import be.nikiroo.fanfix.bundles.Config;
 import be.nikiroo.fanfix.bundles.ConfigBundle;
+import be.nikiroo.fanfix.bundles.StringId;
 import be.nikiroo.fanfix.bundles.StringIdBundle;
 import be.nikiroo.fanfix.bundles.UiConfig;
 import be.nikiroo.fanfix.bundles.UiConfigBundle;
@@ -104,11 +105,16 @@ public class Instance {
                } catch (IOException e) {
                        syserr(e);
                }
-               try {
-                       trans = new StringIdBundle(getLang());
-                       trans.updateFile(configDir);
-               } catch (IOException e) {
-                       syserr(e);
+
+               // No updateFile for this one! (we do not want the user to have custom
+               // translations that won't accept updates from newer versions)
+               trans = new StringIdBundle(getLang());
+
+               // Fix an old bug (we used to store custom translation files by
+               // default):
+               if (trans.getString(StringId.INPUT_DESC_CBZ) == null) {
+                       // TODO: create the deleteFile method
+                       // trans.deleteFile(configDir);
                }
 
                Bundles.setDirectory(configDir);
index 9ac48845ce87d4bc57416bfd2daf7e7f30fa4364..99ac119dd3a864d1e77e486a839f99083727789a 100644 (file)
@@ -253,12 +253,30 @@ public class Main {
                                updates.ok(); // we consider it read
                                break;
                        case LIST:
+                               if (BasicReader.getReader() == null) {
+                                       Instance.syserr(new Exception(
+                                                       "No reader type has been configured"));
+                                       exitCode = 10;
+                                       break;
+                               }
                                exitCode = list(sourceString);
                                break;
                        case READ:
+                               if (BasicReader.getReader() == null) {
+                                       Instance.syserr(new Exception(
+                                                       "No reader type has been configured"));
+                                       exitCode = 10;
+                                       break;
+                               }
                                exitCode = read(luid, chapString, true);
                                break;
                        case READ_URL:
+                               if (BasicReader.getReader() == null) {
+                                       Instance.syserr(new Exception(
+                                                       "No reader type has been configured"));
+                                       exitCode = 10;
+                                       break;
+                               }
                                exitCode = read(urlString, chapString, false);
                                break;
                        case HELP:
@@ -277,6 +295,12 @@ public class Main {
                                updates.ok(); // we consider it read
                                break;
                        case START:
+                               if (BasicReader.getReader() == null) {
+                                       Instance.syserr(new Exception(
+                                                       "No reader type has been configured"));
+                                       exitCode = 10;
+                                       break;
+                               }
                                BasicReader.getReader().browse(null);
                                break;
                        case SERVER:
@@ -293,7 +317,7 @@ public class Main {
                                }
                                return;
                        case REMOTE:
-                               exitCode = 255;
+                               exitCode = 255; // should not be reachable (REMOTE -> START)
                                break;
                        }
                }
index 6ccb7725ac3e853df83f327ad90a362b01e2ca05..96c67e2b11d373e0ca962ac5a717dc080aaadea7 100644 (file)
@@ -81,6 +81,12 @@ public enum StringId {
        INPUT_DESC_E621, //
        @Meta(description = "Description of this input type")
        INPUT_DESC_E_HENTAI, //
+       @Meta(description = "Description of this input type")
+       INPUT_DESC_YIFFSTAR, //
+       @Meta(description = "Description of this input type")
+       INPUT_DESC_CBZ, //
+       @Meta(description = "Description of this input type")
+       INPUT_DESC_HTML, //
        @Meta(info = "%s = type", description = "Default description when the type is not known by i18n")
        OUTPUT_DESC, //
        @Meta(description = "Description of this output type")
index a63fbd3e47f5782bd6bb562623bbfad944d320d1..bdbb75405509368a6c4c0a33d3591ef9c553b4d6 100644 (file)
@@ -14,9 +14,13 @@ HELP_SYNTAX = Valid options:\n\
 \t--export [id] [output_type] [target]: export story to target\n\
 \t--convert [URL] [output_type] [target] (+info): convert URL into target\n\
 \t--read [id] ([chapter number]): read the given story from the library\n\
-\t--read-url [URL] ([chapter number]): convert on the fly and read the story, without saving it\n\
+\t--read-url [URL] ([chapter number]): convert on the fly and read the \n\
+\t\tstory, without saving it\n\
 \t--list: list the stories present in the library\n\
-\t--set-reader [reader type]: set the reader type to CLI, TUI or GUI for this command\n\
+\t--set-reader [reader type]: set the reader type to CLI, TUI or GUI for \n\
+\t\tthis command\n\
+\t--remote [host] [port]: select this remote server to get \n\
+\t\t(or update or...) the stories from\n\
 \t--help: this help message\n\
 \t--version: return the version of the program\n\
 \n\
@@ -29,7 +33,7 @@ Supported output types:\n\
 ERR_SYNTAX = Syntax error (try "--help")
 # an input or output support type description
 # (FORMAT: STRING) %s = support name, %s = support desc
-ERR_SYNTAX_TYPE = %s: %s
+ERR_SYNTAX_TYPE = %s: %s
 # Error when retrieving data
 # (FORMAT: STRING) %s = input string
 ERR_LOADING = Error when retrieving data from: %s
@@ -77,30 +81,49 @@ INPUT_DESC = Unknown type: %s
 INPUT_DESC_EPUB = EPUB files created by this program (we do not support "all" EPUB files)
 # Description of this input type
 # (FORMAT: STRING) 
-INPUT_DESC_TEXT = Support class for local stories encoded in textual format, with a few rules :\n\
+INPUT_DESC_TEXT = Support class for local stories encoded in textual format, with a few \n\
+rules :\n\
 \tthe title must be on the first line, \n\
-\tthe author (preceded by nothing, "by " or "©") must be on the second line, possibly with the publication date in parenthesis (i.e., "By Unknown (3rd October 1998)"), \n\
-\tchapters must be declared with "Chapter x" or "Chapter x: NAME OF THE CHAPTER", where "x" is the chapter number,\n\
+\tthe author (preceded by nothing, "by " or "©") must be on the second \n\
+\t\tline, possibly with the publication date in parenthesis\n\
+\t\t(i.e., "By Unknown (3rd October 1998)"), \n\
+\tchapters must be declared with "Chapter x" or "Chapter x: NAME OF THE \n\
+\t\tCHAPTER", where "x" is the chapter number,\n\
 \ta description of the story must be given as chapter number 0,\n\
-\ta cover image may be present with the same filename but a PNG, JPEG or JPG extension.
+\ta cover image may be present with the same filename but a PNG, \n\
+\t\tJPEG or JPG extension.
 # Description of this input type
 # (FORMAT: STRING) 
-INPUT_DESC_INFO_TEXT = Contains the same information as the TEXT format, but with a companion ".info" file to store some metadata
+INPUT_DESC_INFO_TEXT = Contains the same information as the TEXT format, but with a \n\
+\tcompanion ".info" file to store some metadata
 # Description of this input type
 # (FORMAT: STRING) 
-INPUT_DESC_FANFICTION = Fan fictions of many, many different universes, from TV shows to novels to games.
+INPUT_DESC_FANFICTION = Fan fictions of many, many different universes, from TV shows to \n\
+\tnovels to games.
 # Description of this input type
 # (FORMAT: STRING) 
 INPUT_DESC_FIMFICTION = Fanfictions devoted to the My Little Pony show
 # Description of this input type
 # (FORMAT: STRING) 
-INPUT_DESC_MANGAFOX = A well filled repository of mangas, or, as their website states: Most popular manga scanlations read online for free at mangafox, as well as a close-knit community to chat and make friends.
+INPUT_DESC_MANGAFOX = A well filled repository of mangas, or, as their website states: \n\
+\tMost popular manga scanlations read online for free at mangafox, \n\
+\tas well as a close-knit community to chat and make friends.
 # Description of this input type
 # (FORMAT: STRING) 
 INPUT_DESC_E621 = Furry website supporting comics, including MLP
 # Description of this input type
 # (FORMAT: STRING) 
-INPUT_DESC_E_HENTAI = Website offering many comics/manga, mostly but not always NSFW (hence 'Hentai'); MLP comics can be found there, too
+INPUT_DESC_E_HENTAI = Website offering many comics/manga, mostly but not always NSFW \n\n
+\t(hence Hentai); MLP comics can be found there, too
+# Description of this input type
+# (FORMAT: STRING) 
+INPUT_DESC_YIFFSTAR = A Furry website, story-oriented
+# Description of this input type
+# (FORMAT: STRING) 
+INPUT_DESC_CBZ = CBZ files coming from this very program
+# Description of this input type
+# (FORMAT: STRING) 
+INPUT_DESC_HTML = HTML files coming from this very program
 # Default description when the type is not known by i18n
 # (FORMAT: STRING) %s = type
 OUTPUT_DESC = Unknown type: %s
@@ -111,16 +134,22 @@ OUTPUT_DESC_EPUB = Standard EPUB file working on most e-book readers and viewers
 # (FORMAT: STRING) 
 OUTPUT_DESC_TEXT = Local stories encoded in textual format, with a few rules :\n\
 \tthe title must be on the first line, \n\
-\tthe author (preceded by nothing, "by " or "©") must be on the second line, possibly with the publication date in parenthesis (i.e., "By Unknown (3rd October 1998)"), \n\
-\tchapters must be declared with "Chapter x" or "Chapter x: NAME OF THE CHAPTER", where "x" is the chapter number,\n\
+\tthe author (preceded by nothing, "by " or "©") must be on the second \n\
+\t\tline, possibly with the publication date in parenthesis \n\
+\t\t(i.e., "By Unknown (3rd October 1998)"), \n\
+\tchapters must be declared with "Chapter x" or "Chapter x: NAME OF THE \n\
+\t\tCHAPTER", where "x" is the chapter number,\n\
 \ta description of the story must be given as chapter number 0,\n\
-\ta cover image may be present with the same filename but a PNG, JPEG or JPG extension.
+\ta cover image may be present with the same filename but a PNG, JPEG \n\
+\t\tor JPG extension.
 # Description of this output type
 # (FORMAT: STRING) 
-OUTPUT_DESC_INFO_TEXT = Contains the same information as the TEXT format, but with a companion ".info" file to store some metadata
+OUTPUT_DESC_INFO_TEXT = Contains the same information as the TEXT format, but with a \n\
+\tcompanion ".info" file to store some metadata
 # Description of this output type
 # (FORMAT: STRING) 
-OUTPUT_DESC_CBZ = CBZ file (basically a ZIP file containing images -- we store the images in PNG format)
+OUTPUT_DESC_CBZ = CBZ file (basically a ZIP file containing images -- we store the images \n\
+\tin PNG format by default)
 # Description of this output type
 # (FORMAT: STRING) 
 OUTPUT_DESC_HTML = HTML files (a directory containing the resources and "index.html")
index cf17a2bef49fce8591150c6e93eb50eb9b41a30b..328ef656e444fbe4686dca82e08fafa204590d0d 100644 (file)
@@ -29,6 +29,17 @@ import be.nikiroo.utils.Progress;
  * @author niki
  */
 abstract public class BasicLibrary {
+       /**
+        * Return a name for this library (the UI may display this).
+        * <p>
+        * Must not be NULL.
+        * 
+        * @return the name, or an empty {@link String} if none
+        */
+       public String getLibraryName() {
+               return "";
+       }
+
        /**
         * Retrieve the main {@link File} corresponding to the given {@link Story},
         * which can be passed to an external reader or instance.
index 513849e3ce44a5ede2ec0c1869b909a939daaedf..337e13fe7394c36f4d089f0e25700e487ed6c4d6 100644 (file)
@@ -48,6 +48,11 @@ public class RemoteLibrary extends BasicLibrary {
                                OutputType.CBZ);
        }
 
+       @Override
+       public String getLibraryName() {
+               return host + ":" + port;
+       }
+
        @Override
        protected List<MetaData> getMetas(Progress pg) {
                // TODO: progress
index 87d7075ab0a744d13fce7faa512d4312a62de7d4..39db588bee8ff225974663a0f445ffb642f70610 100644 (file)
@@ -22,6 +22,7 @@ import java.util.Map.Entry;
 import javax.swing.BoxLayout;
 import javax.swing.JFileChooser;
 import javax.swing.JFrame;
+import javax.swing.JLabel;
 import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
@@ -29,6 +30,7 @@ import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
 import javax.swing.JScrollPane;
+import javax.swing.SwingConstants;
 import javax.swing.SwingUtilities;
 import javax.swing.filechooser.FileFilter;
 import javax.swing.filechooser.FileNameExtensionFilter;
@@ -112,6 +114,12 @@ class GuiReaderFrame extends JFrame {
                scroll.getVerticalScrollBar().setUnitIncrement(16);
                add(scroll, BorderLayout.CENTER);
 
+               String message = reader.getLibrary().getLibraryName();
+               if (!message.isEmpty()) {
+                       JLabel name = new JLabel(message, SwingConstants.CENTER);
+                       add(name, BorderLayout.NORTH);
+               }
+
                pgBar = new ProgressBar();
                add(pgBar, BorderLayout.SOUTH);