import be.nikiroo.fanfix.supported.SupportType;
import be.nikiroo.utils.Progress;
import be.nikiroo.utils.Version;
+import be.nikiroo.utils.VersionCheck;
import be.nikiroo.utils.serial.server.ServerObject;
/**
if (exitCode == 0) {
switch (action) {
case IMPORT:
- if (updates != null)
- updates.ok(); // we consider it read
+ if (updates != null) {
+ // we consider it read
+ Instance.getInstance().setVersionChecked();
+ }
try {
exitCode = imprt(BasicReader.getUrl(urlString), pg);
break;
case EXPORT:
- if (updates != null)
- updates.ok(); // we consider it read
+ if (updates != null) {
+ // we consider it read
+ Instance.getInstance().setVersionChecked();
+ }
OutputType exportType = OutputType.valueOfNullOkUC(sourceString, null);
if (exportType == null) {
break;
case CONVERT:
- if (updates != null)
- updates.ok(); // we consider it read
+ if (updates != null) {
+ // we consider it read
+ Instance.getInstance().setVersionChecked();
+ }
OutputType convertType = OutputType.valueOfAllOkUC(sourceString, null);
if (convertType == null) {
exitCode = 0;
break;
case VERSION:
- if (updates != null)
- updates.ok(); // we consider it read
+ if (updates != null) {
+ // we consider it read
+ Instance.getInstance().setVersionChecked();
+ }
System.out
.println(String.format("Fanfix version %s"
* @return the newer version information or NULL if nothing new
*/
protected VersionCheck checkUpdates(String githubProject) {
- VersionCheck updates = VersionCheck.check(githubProject);
- if (updates.isNewVersionAvailable()) {
- notifyUpdates(updates);
- return updates;
+ try {
+ VersionCheck updates = VersionCheck.check(githubProject,
+ Instance.getInstance().getTrans().getLocale());
+ if (updates.isNewVersionAvailable()) {
+ notifyUpdates(updates);
+ return updates;
+ }
+ } catch (IOException e) {
+ // Maybe no internet. Do not report any update.
}
-
+
return null;
}
* <p>
* Will only be called when a version is available.
* <p>
- * Note that you can call {@link VersionCheck#ok()} on it if the user has
- * read the information (by default, it is marked read only on certain other
- * actions).
+ * Note that you can call {@link Instance#setVersionChecked()} on it if the
+ * user has read the information (by default, it is marked read only on
+ * certain other actions).
*
* @param updates
* the new version information
+++ /dev/null
-package be.nikiroo.fanfix;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import be.nikiroo.utils.Version;
-
-/**
- * Version checker: can check the current version of the program against a
- * remote changelog, and list the missed updates and their description.
- *
- * @author niki
- */
-public class VersionCheck {
- private static final String base = "https://github.com/${PROJECT}/raw/master/changelog${LANG}.md";
-
- private Version current;
- private List<Version> newer;
- private Map<Version, List<String>> changes;
-
- /**
- * Create a new {@link VersionCheck}.
- *
- * @param current
- * the current version of the program
- * @param newer
- * the list of available {@link Version}s newer the current one
- * @param changes
- * the list of changes
- */
- private VersionCheck(Version current, List<Version> newer,
- Map<Version, List<String>> changes) {
- this.current = current;
- this.newer = newer;
- this.changes = changes;
- }
-
- /**
- * Check if there are more recent {@link Version}s of this program
- * available.
- *
- * @return TRUE if there is at least one
- */
- public boolean isNewVersionAvailable() {
- return !newer.isEmpty();
- }
-
- /**
- * The current {@link Version} of the program.
- *
- * @return the current {@link Version}
- */
- public Version getCurrentVersion() {
- return current;
- }
-
- /**
- * The list of available {@link Version}s newer than the current one.
- *
- * @return the newer {@link Version}s
- */
- public List<Version> getNewer() {
- return newer;
- }
-
- /**
- * The list of changes for each available {@link Version} newer than the
- * current one.
- *
- * @return the list of changes
- */
- public Map<Version, List<String>> getChanges() {
- return changes;
- }
-
- /**
- * Ignore the check result.
- */
- public void ignore() {
-
- }
-
- /**
- * Accept the information, and do not check again until the minimum wait
- * time has elapsed.
- */
- public void ok() {
- Instance.getInstance().setVersionChecked();
- }
-
- /**
- * Check if there are available {@link Version}s of this program more recent
- * than the current one.
- *
- * @param githubProject
- * the GitHub project to check on, for instance "nikiroo/fanfix"
- *
- * @return a {@link VersionCheck}
- */
- public static VersionCheck check(String githubProject) {
- Version current = Version.getCurrentVersion();
- List<Version> newer = new ArrayList<Version>();
- Map<Version, List<String>> changes = new HashMap<Version, List<String>>();
-
- if (Instance.getInstance().isVersionCheckNeeded()) {
- try {
- // Use the right project:
- String base = VersionCheck.base.replace("${PROJECT}",
- githubProject);
-
- // Prepare the URLs according to the user's language:
- Locale lang = Instance.getInstance().getTrans().getLocale();
- String fr = lang.getLanguage();
- String BE = lang.getCountry().replace(".UTF8", "");
- String urlFrBE = base.replace("${LANG}", "-" + fr + "_" + BE);
- String urlFr = base.replace("${LANG}", "-" + fr);
- String urlDefault = base.replace("${LANG}", "");
-
- InputStream in = null;
- for (String url : new String[] { urlFrBE, urlFr, urlDefault }) {
- try {
- in = Instance.getInstance().getCache().openNoCache(
- new URL(url), null, null, null, null);
- break;
- } catch (IOException e) {
- }
- }
-
- if (in == null) {
- throw new IOException("No changelog found");
- }
-
- BufferedReader reader = new BufferedReader(
- new InputStreamReader(in, "UTF-8"));
- try {
- Version version = new Version();
- for (String line = reader.readLine(); line != null; line = reader
- .readLine()) {
- if (line.startsWith("## Version ")) {
- version = new Version(line.substring("## Version "
- .length()));
- if (version.isNewerThan(current)) {
- newer.add(version);
- changes.put(version, new ArrayList<String>());
- } else {
- version = new Version();
- }
- } else if (!version.isEmpty() && !newer.isEmpty()
- && !line.isEmpty()) {
- List<String> ch = changes.get(newer.get(newer
- .size() - 1));
- if (!ch.isEmpty() && !line.startsWith("- ")) {
- int i = ch.size() - 1;
- ch.set(i, ch.get(i) + " " + line.trim());
- } else {
- ch.add(line.substring("- ".length()).trim());
- }
- }
- }
- } finally {
- reader.close();
- }
- } catch (IOException e) {
- Instance.getInstance().getTraceHandler()
- .error(new IOException("Cannot download latest changelist on github.com", e));
- }
- }
-
- return new VersionCheck(current, newer, changes);
- }
-}