import be.nikiroo.fanfix.data.MetaData;
import be.nikiroo.fanfix.data.Story;
import be.nikiroo.fanfix.library.BasicLibrary;
+import be.nikiroo.fanfix.supported.SupportType;
import be.nikiroo.utils.Progress;
/**
* the optional progress
*
* @return the {@link Story}
+ *
+ * @throws IOException
+ * in case of I/O error
+ *
*/
- public Story getStory(Progress pg);
+ public Story getStory(Progress pg) throws IOException;
/**
* The {@link BasicLibrary} to load the stories from (by default, takes the
/**
* Start the {@link Story} Reading.
*
+ * @param sync
+ * execute the process synchronously (wait until it is terminated
+ * before returning)
+ *
* @throws IOException
* in case of I/O error or if the {@link Story} was not
* previously set
*/
- public void read() throws IOException;
+ public void read(boolean sync) throws IOException;
/**
* The selected chapter to start reading at (starting at 1, 0 = description,
/**
* Start the reader in browse mode for the given source (or pass NULL for
* all sources).
+ * <p>
+ * Note that this must be a <b>synchronous</b> action.
*
* @param source
* the type of {@link Story} to take into account, or NULL for
* all
+ *
+ * @throws IOException
+ * in case of I/O error
+ */
+ public void browse(String source) throws IOException;
+
+ /**
+ * Display all supports that allow search operations.
+ *
+ * @param sync
+ * execute the process synchronously (wait until it is terminated
+ * before returning)
+ *
+ * @throws IOException
+ * in case of I/O error
+ */
+ public void search(boolean sync) throws IOException;
+
+ /**
+ * Search for the given terms and find stories that correspond if possible.
+ *
+ * @param searchOn
+ * the website to search on
+ * @param keywords
+ * the words to search for (cannot be NULL)
+ * @param page
+ * the page of results to show (0 = request the maximum number of
+ * pages, pages start at 1)
+ * @param item
+ * the item to select (0 = do not select a specific item but show
+ * all the page, items start at 1)
+ * @param sync
+ * execute the process synchronously (wait until it is terminated
+ * before returning)
+ *
+ * @throws IOException
+ * in case of I/O error
+ */
+ public void search(SupportType searchOn, String keywords, int page,
+ int item, boolean sync) throws IOException;
+
+ /**
+ * Search based upon a hierarchy of tags, or search for (sub)tags.
+ * <p>
+ * We use the tags <tt>DisplayName</tt>.
+ * <p>
+ * If no tag is given, the main tags will be shown.
+ * <p>
+ * If a non-leaf tag is given, the subtags will be shown.
+ * <p>
+ * If a leaf tag is given (or a full hierarchy ending with a leaf tag),
+ * stories will be shown.
+ * <p>
+ * You can select the story you want with the <tt>item</tt> number.
+ *
+ * @param searchOn
+ * the website to search on
+ * @param page
+ * the page of results to show (0 = request the maximum number of
+ * pages, pages <b>start at 1</b>)
+ * @param item
+ * the item to select (0 = do not select a specific item but show
+ * all the page, items <b>start at 1</b>)
+ * @param sync
+ * execute the process synchronously (wait until it is terminated
+ * before returning)
+ * @param tags
+ * the tags indices to search for (this is a tag
+ * <b>hierarchy</b>, <b>NOT</b> a multiple tags choice)
+ *
+ * @throws IOException
+ * in case of I/O error
*/
- public void browse(String source);
+ public void searchTag(SupportType searchOn, int page, int item,
+ boolean sync, Integer... tags) throws IOException;
/**
- * Open the {@link Story} with an external reader (the program will be
+ * Open the {@link Story} with an external reader (the program should be
* passed the main file associated with this {@link Story}).
*
* @param lib
* the {@link BasicLibrary} to select the {@link Story} from
* @param luid
* the {@link Story} LUID
+ * @param sync
+ * execute the process synchronously (wait until it is terminated
+ * before returning)
*
* @throws IOException
* in case of I/O error
*/
- public void openExternal(BasicLibrary lib, String luid) throws IOException;
+ public void openExternal(BasicLibrary lib, String luid, boolean sync)
+ throws IOException;
}