From 8909ec0cf1f4d8bc912e53b114bb2b0c64f83119 Mon Sep 17 00:00:00 2001 From: abbe98 Date: Wed, 3 Jan 2018 15:35:28 +0100 Subject: [PATCH 01/21] Rewrote logging --- src/pattypan/LogManager.java | 36 ++++++++++++++++++++++++++ src/pattypan/Main.java | 8 ++---- src/pattypan/Session.java | 6 ++++- src/pattypan/Settings.java | 13 +++++----- src/pattypan/UploadElement.java | 6 +---- src/pattypan/Util.java | 7 +++-- src/pattypan/panes/CheckPane.java | 3 +-- src/pattypan/panes/CreateFilePane.java | 9 +++---- src/pattypan/panes/StartPane.java | 5 ++-- src/pattypan/panes/UploadPane.java | 7 ++--- 10 files changed, 61 insertions(+), 39 deletions(-) create mode 100644 src/pattypan/LogManager.java diff --git a/src/pattypan/LogManager.java b/src/pattypan/LogManager.java new file mode 100644 index 0000000..02756eb --- /dev/null +++ b/src/pattypan/LogManager.java @@ -0,0 +1,36 @@ +package pattypan; + +import java.io.IOException; +import java.lang.SecurityException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.logging.ConsoleHandler; +import java.util.logging.FileHandler; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; + +public class LogManager { + public Logger logger = Logger.getLogger(Main.class.getName()); + + public LogManager() { + try { + Path logFileLocation = Paths.get(System.getProperty("user.home") + "/.PattyPan"); + if (!Files.exists(logFileLocation)) { + Files.createDirectories(logFileLocation); + } + + FileHandler fh = new FileHandler(logFileLocation.toString() + "/pattypan.log", true); + fh.setFormatter(new SimpleFormatter()); + logger.addHandler(fh); + logger.addHandler(new ConsoleHandler()); + logger.setUseParentHandlers(false); // remove console prefix for privacy + logger.log(Level.WARNING, "Logger 3"); + } catch (SecurityException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/pattypan/Main.java b/src/pattypan/Main.java index d85d3b1..364141c 100644 --- a/src/pattypan/Main.java +++ b/src/pattypan/Main.java @@ -24,7 +24,6 @@ package pattypan; import java.util.logging.Level; -import java.util.logging.Logger; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.image.Image; @@ -34,9 +33,6 @@ import pattypan.panes.StartPane; public class Main extends Application { - - private static final Logger LOGGER = Logger.getLogger(Main.class.getName()); - @Override public void start(Stage stage) { Settings.readProperties(); @@ -75,11 +71,11 @@ public static void main(String[] args) { } } - LOGGER.log(Level.INFO, + Session.LOGGER.log(Level.INFO, "Wiki set as: {0}\nProtocol set as: {1}\nScript path set as: {2}", new String[]{wiki, protocol, scriptPath} ); - + Session.WIKI = new Wiki(wiki, scriptPath, protocol); launch(args); } diff --git a/src/pattypan/Session.java b/src/pattypan/Session.java index 7299887..839a572 100644 --- a/src/pattypan/Session.java +++ b/src/pattypan/Session.java @@ -30,6 +30,8 @@ import java.util.Map; import javafx.scene.Scene; import org.wikipedia.Wiki; +import pattypan.LogManager; +import java.util.logging.Logger; public final class Session { @@ -41,7 +43,9 @@ public final class Session { public static File FILE; public static ArrayList FILES = new ArrayList<>(); - + + public static Logger LOGGER = new LogManager().logger; + public static String METHOD = "template"; public static String TEMPLATE = "Artwork"; public static String WIKICODE = ""; diff --git a/src/pattypan/Settings.java b/src/pattypan/Settings.java index 9e0464d..5222609 100644 --- a/src/pattypan/Settings.java +++ b/src/pattypan/Settings.java @@ -34,14 +34,13 @@ import java.util.Map; import java.util.Properties; import java.util.logging.Level; -import java.util.logging.Logger; public final class Settings { private Settings() {}; public static final String NAME = "pattypan"; - public static final String VERSION = "17.12"; + public static final String VERSION = "17.05"; public static final String USERAGENT = NAME + "/" + VERSION + " (https://github.com/yarl/pattypan)"; public static final Map SETTINGS = new HashMap<>(); @@ -392,15 +391,15 @@ public static void readProperties() { }); } catch (FileNotFoundException ex) { - Logger.getLogger(Settings.class.getName()).log(Level.INFO, "Settings file not found, use default"); + Session.LOGGER.log(Level.INFO, "Settings file not found, use default"); } catch (IOException ex) { - Logger.getLogger(Settings.class.getName()).log(Level.SEVERE, null, ex); + Session.LOGGER.log(Level.SEVERE, null, ex); } finally { if (input != null) { try { input.close(); } catch (IOException ex) { - Logger.getLogger(Settings.class.getName()).log(Level.SEVERE, null, ex); + Session.LOGGER.log(Level.SEVERE, null, ex); } } } @@ -422,13 +421,13 @@ public static void saveProperties() { }); prop.store(output, null); } catch (IOException ex) { - Logger.getLogger(Settings.class.getName()).log(Level.SEVERE, null, ex); + Session.LOGGER.log(Level.SEVERE, null, ex); } finally { if (output != null) { try { output.close(); } catch (IOException ex) { - Logger.getLogger(Settings.class.getName()).log(Level.SEVERE, null, ex); + Session.LOGGER.log(Level.SEVERE, null, ex); } } } diff --git a/src/pattypan/UploadElement.java b/src/pattypan/UploadElement.java index 5eaa490..85f233f 100644 --- a/src/pattypan/UploadElement.java +++ b/src/pattypan/UploadElement.java @@ -28,12 +28,9 @@ import java.net.MalformedURLException; import java.util.Map; import java.util.logging.Level; -import java.util.logging.Logger; public final class UploadElement { - private static final Logger LOGGER = Logger.getLogger(UploadElement.class.getName()); - private Map data; private String wikicode; @@ -66,7 +63,7 @@ public URL getUrl() { try { return new URL(getData("path")); } catch(MalformedURLException e) { - LOGGER.log(Level.SEVERE, null, e); + Session.LOGGER.log(Level.SEVERE, null, e); return null; } @@ -95,5 +92,4 @@ public UploadElement setWikicode(String wikicode) { this.wikicode = wikicode; return this; } - } diff --git a/src/pattypan/Util.java b/src/pattypan/Util.java index 58973c7..652c088 100644 --- a/src/pattypan/Util.java +++ b/src/pattypan/Util.java @@ -46,7 +46,6 @@ import java.util.ResourceBundle; import java.util.Set; import java.util.logging.Level; -import java.util.logging.Logger; import java.util.stream.Collectors; import javafx.geometry.HPos; import javafx.scene.layout.ColumnConstraints; @@ -91,9 +90,9 @@ public static void openUrl(String url) { new BrowserLauncher().openURLinBrowser(url); } } catch (BrowserLaunchingInitializingException | UnsupportedOperatingSystemException ex) { - Logger.getLogger(Util.class.getName()).log(Level.WARNING, null, ex); + Session.LOGGER.log(Level.WARNING, null, ex); } catch (URISyntaxException | IOException ex) { - Logger.getLogger(Util.class.getName()).log(Level.WARNING, null, ex); + Session.LOGGER.log(Level.WARNING, null, ex); } } @@ -126,7 +125,7 @@ public static ColumnConstraints newColumn(int value, String unit, HPos position) private final static ArrayList allowedExtentionImage = new ArrayList<>( Arrays.asList("djvu", "flac", "gif", "jpg", "jpeg", "mid", "oga", "ogg","ogv", "opus", "pdf", "png", "svg", "tiff", - "tif", "wav", "webm", "webp", "xcf", "mp3") + "tif", "wav", "webm", "webp", "xcf") ); // https://commons.wikimedia.org/wiki/MediaWiki:Filename-prefix-blacklist diff --git a/src/pattypan/panes/CheckPane.java b/src/pattypan/panes/CheckPane.java index 525c14b..96389dc 100644 --- a/src/pattypan/panes/CheckPane.java +++ b/src/pattypan/panes/CheckPane.java @@ -27,7 +27,6 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.logging.Level; -import java.util.logging.Logger; import javafx.scene.Node; import javafx.scene.control.Hyperlink; import javafx.scene.control.Tooltip; @@ -151,7 +150,7 @@ private void setDetails(UploadElement ue, Hyperlink label) { + "&wpInput=" + URLEncoder.encode(ue.getWikicode(), "UTF-8") + "&wpContextTitle=" + URLEncoder.encode(ue.getData("name"), "UTF-8")); } catch (UnsupportedEncodingException ex) { - Logger.getLogger(CheckPane.class.getName()).log(Level.SEVERE, null, ex); + Session.LOGGER.log(Level.SEVERE, null, ex); } }); diff --git a/src/pattypan/panes/CreateFilePane.java b/src/pattypan/panes/CreateFilePane.java index d6e770d..25771e8 100644 --- a/src/pattypan/panes/CreateFilePane.java +++ b/src/pattypan/panes/CreateFilePane.java @@ -35,7 +35,6 @@ import java.util.Date; import java.util.TimeZone; import java.util.logging.Level; -import java.util.logging.Logger; import javafx.scene.control.Hyperlink; import javafx.scene.layout.Region; import javafx.scene.text.TextAlignment; @@ -59,8 +58,6 @@ import pattypan.elements.WikiTextField; public class CreateFilePane extends WikiPane { - - private static final Logger LOGGER = Logger.getLogger(CreateFilePane.class.getName()); Stage stage; @@ -108,7 +105,7 @@ private WikiPane setActions() { Settings.saveProperties(); } catch (IOException | BiffException | WriteException ex) { addElement(new WikiLabel("create-file-error")); - LOGGER.log(Level.WARNING, + Session.LOGGER.log(Level.WARNING, "Error occurred during creation of spreadsheet file: {0}", new String[]{ex.getLocalizedMessage()} ); @@ -127,7 +124,7 @@ private void showOpenFileButton() { try { Desktop.getDesktop().open(Session.FILE); } catch (IOException ex) { - LOGGER.log(Level.WARNING, + Session.LOGGER.log(Level.WARNING, "Cannot open file: {0}", new String[]{ex.getLocalizedMessage()} ); @@ -236,7 +233,7 @@ private String getExifDate(File file) { return ""; } } catch (ImageProcessingException | IOException ex) { - LOGGER.log(Level.INFO, + Session.LOGGER.log(Level.INFO, "Exif error for {0}: {1}", new String[]{file.getName(), ex.getLocalizedMessage()} ); diff --git a/src/pattypan/panes/StartPane.java b/src/pattypan/panes/StartPane.java index 9b563f8..ecdb068 100644 --- a/src/pattypan/panes/StartPane.java +++ b/src/pattypan/panes/StartPane.java @@ -32,7 +32,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.logging.Level; -import java.util.logging.Logger; import javafx.geometry.Pos; import javafx.scene.control.Hyperlink; import javafx.scene.layout.GridPane; @@ -131,9 +130,9 @@ private void checkVersion() { } } } catch (UnknownHostException ex) { - Logger.getLogger(StartPane.class.getName()).log(Level.INFO, "No internet connection found"); + Session.LOGGER.log(Level.INFO, "No internet connection found"); } catch (Exception ex) { - Logger.getLogger(StartPane.class.getName()).log(Level.SEVERE, null, ex); + Session.LOGGER.log(Level.SEVERE, null, ex); } } diff --git a/src/pattypan/panes/UploadPane.java b/src/pattypan/panes/UploadPane.java index 980a318..89f85b1 100644 --- a/src/pattypan/panes/UploadPane.java +++ b/src/pattypan/panes/UploadPane.java @@ -28,7 +28,6 @@ import java.util.ArrayList; import java.util.Map; import java.util.logging.Level; -import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; import javafx.beans.value.ChangeListener; @@ -52,8 +51,6 @@ public class UploadPane extends WikiPane { - private static final Logger LOGGER = Logger.getLogger(UploadPane.class.getName()); - Stage stage; volatile boolean stopRq = false; @@ -224,13 +221,13 @@ private boolean isFileNameTaken(String name) { Map map = Session.WIKI.getPageInfo("File:" + name); return (boolean) map.get("exists"); } catch (UnknownHostException ex) { - LOGGER.log(Level.WARNING, + Session.LOGGER.log(Level.WARNING, "Error occurred during file name check: {0}", new String[]{"no internet connection"} ); return false; } catch (IOException ex) { - LOGGER.log(Level.WARNING, + Session.LOGGER.log(Level.WARNING, "Error occurred during file name check: {0}", new String[]{ex.getLocalizedMessage()} ); From 065e15a33b05de2fc10eb76dfeaec51c19da6b96 Mon Sep 17 00:00:00 2001 From: abbe98 Date: Wed, 3 Jan 2018 16:17:31 +0100 Subject: [PATCH 02/21] add link to view log file --- src/pattypan/LogManager.java | 1 - src/pattypan/Util.java | 8 ++++++++ src/pattypan/panes/StartPane.java | 8 +++++++- src/pattypan/text/messages.properties | 1 + 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/pattypan/LogManager.java b/src/pattypan/LogManager.java index 02756eb..2eb3cc0 100644 --- a/src/pattypan/LogManager.java +++ b/src/pattypan/LogManager.java @@ -26,7 +26,6 @@ public LogManager() { logger.addHandler(fh); logger.addHandler(new ConsoleHandler()); logger.setUseParentHandlers(false); // remove console prefix for privacy - logger.log(Level.WARNING, "Logger 3"); } catch (SecurityException e) { e.printStackTrace(); } catch (IOException e) { diff --git a/src/pattypan/Util.java b/src/pattypan/Util.java index 652c088..8f0276d 100644 --- a/src/pattypan/Util.java +++ b/src/pattypan/Util.java @@ -96,6 +96,14 @@ public static void openUrl(String url) { } } + public static void openDirectory(Path path) { + try { + Desktop.getDesktop().open(new File(path.toString())); + } catch (IllegalArgumentException | IOException ex) { + Session.LOGGER.log(Level.WARNING, null, ex); + } + } + /* row and column utils */ public static ColumnConstraints newColumn(int value) { return newColumn(value, "%", HPos.CENTER); diff --git a/src/pattypan/panes/StartPane.java b/src/pattypan/panes/StartPane.java index ecdb068..cf7f1f1 100644 --- a/src/pattypan/panes/StartPane.java +++ b/src/pattypan/panes/StartPane.java @@ -28,6 +28,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.net.UnknownHostException; +import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; @@ -53,6 +54,7 @@ public class StartPane extends GridPane { Hyperlink link = new Hyperlink(Util.text("start-bug-report")); Hyperlink downloadLink = new Hyperlink(Util.text("start-new-version-available-download")); + Hyperlink logFile = new Hyperlink(Util.text("log-file")); public StartPane(Stage stage) { this.stage = stage; @@ -78,6 +80,10 @@ private void setActions() { downloadLink.setOnAction(event -> { Util.openUrl("https://github.com/yarl/pattypan/releases"); }); + + logFile.setOnAction(event -> { + Util.openDirectory(Paths.get(System.getProperty("user.home") + "/.PattyPan")); + }); } private GridPane setContent() { @@ -106,7 +112,7 @@ private GridPane setContent() { String year = new SimpleDateFormat("yyyy").format(new Date()); this.addRow(40, new WikiLabel(year + " // Pawel Marynowski").setClass("muted")); - TextFlow flow = new TextFlow(new Text(Util.text("start-bug-found")), link); + TextFlow flow = new TextFlow(new Text(Util.text("start-bug-found")), link, new Text("("), logFile, new Text(")")); flow.setTextAlignment(TextAlignment.CENTER); this.addRow(41, flow); diff --git a/src/pattypan/text/messages.properties b/src/pattypan/text/messages.properties index 00f81fc..7bfc9df 100644 --- a/src/pattypan/text/messages.properties +++ b/src/pattypan/text/messages.properties @@ -32,6 +32,7 @@ generic-next=Next generic-summary=Summary login-2fa=Click here if you enabled two-factor authentication. login-failed=Login failed +log-file=Log file login-intro=Please login to your upload account. login-load=Logging in... login-login-button=Log in From f7de9c612fec49f26c473c75ac0f31aff411fb92 Mon Sep 17 00:00:00 2001 From: abbe98 Date: Wed, 3 Jan 2018 16:34:14 +0100 Subject: [PATCH 03/21] add github issue template --- .github/ISSUE_TEMPLATE.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..6f4010a --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,7 @@ +If you are reporting a bug please: + + - Check the bug has already been reported (https://github.com/yarl/pattypan/issues). + - Explain the current issue. + - Describe the expected behavior. + - Add the problematic spreadsheet and a example media file (drag & drop here). + - Add the PattyPan log file (drag & drop here). You find a link to the PattyPan log at the application start screen. From a0d3818eaa4aa152a9bf88e939391d15b759b897 Mon Sep 17 00:00:00 2001 From: abbe98 Date: Wed, 3 Jan 2018 16:37:21 +0100 Subject: [PATCH 04/21] link directly to issue template for bug reports --- src/pattypan/panes/StartPane.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pattypan/panes/StartPane.java b/src/pattypan/panes/StartPane.java index cf7f1f1..17c6294 100644 --- a/src/pattypan/panes/StartPane.java +++ b/src/pattypan/panes/StartPane.java @@ -52,7 +52,7 @@ public class StartPane extends GridPane { String css = getClass().getResource("/pattypan/style/style.css").toExternalForm(); Stage stage; - Hyperlink link = new Hyperlink(Util.text("start-bug-report")); + Hyperlink bugLink = new Hyperlink(Util.text("start-bug-report")); Hyperlink downloadLink = new Hyperlink(Util.text("start-new-version-available-download")); Hyperlink logFile = new Hyperlink(Util.text("log-file")); @@ -73,8 +73,8 @@ public GridPane getContent() { } private void setActions() { - link.setOnAction(event -> { - Util.openUrl("https://github.com/yarl/pattypan/issues"); + bugLink.setOnAction(event -> { + Util.openUrl("https://github.com/yarl/pattypan/issues/new"); }); downloadLink.setOnAction(event -> { @@ -112,7 +112,7 @@ private GridPane setContent() { String year = new SimpleDateFormat("yyyy").format(new Date()); this.addRow(40, new WikiLabel(year + " // Pawel Marynowski").setClass("muted")); - TextFlow flow = new TextFlow(new Text(Util.text("start-bug-found")), link, new Text("("), logFile, new Text(")")); + TextFlow flow = new TextFlow(new Text(Util.text("start-bug-found")), bugLink, new Text("("), logFile, new Text(")")); flow.setTextAlignment(TextAlignment.CENTER); this.addRow(41, flow); From 6954371985b8c98e897e7caf9f21746fe9923f40 Mon Sep 17 00:00:00 2001 From: abbe98 Date: Wed, 3 Jan 2018 16:43:31 +0100 Subject: [PATCH 05/21] Log OS and PattyPan version --- src/pattypan/Main.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/pattypan/Main.java b/src/pattypan/Main.java index 364141c..d2e40ec 100644 --- a/src/pattypan/Main.java +++ b/src/pattypan/Main.java @@ -76,6 +76,13 @@ public static void main(String[] args) { new String[]{wiki, protocol, scriptPath} ); + String os = System.getProperty("os.name"); + + Session.LOGGER.log(Level.INFO, + "Operating System: {0}\nPattyPan Version: {1}", + new String[]{os, Settings.VERSION} + ); + Session.WIKI = new Wiki(wiki, scriptPath, protocol); launch(args); } From c29600b327de9c8427f8811eaf3c439d2fd11238 Mon Sep 17 00:00:00 2001 From: abbe98 Date: Wed, 3 Jan 2018 17:01:03 +0100 Subject: [PATCH 06/21] minor clean up --- src/pattypan/Session.java | 12 ++++++------ src/pattypan/Template.java | 16 +++++++--------- src/pattypan/UploadElement.java | 13 ++++++------- src/pattypan/Util.java | 2 +- src/pattypan/panes/CheckPane.java | 4 ++-- src/pattypan/panes/CreateFilePane.java | 4 ++-- src/pattypan/panes/LoginPane.java | 2 +- 7 files changed, 25 insertions(+), 28 deletions(-) diff --git a/src/pattypan/Session.java b/src/pattypan/Session.java index 839a572..6ae27a4 100644 --- a/src/pattypan/Session.java +++ b/src/pattypan/Session.java @@ -34,14 +34,14 @@ import java.util.logging.Logger; public final class Session { - + private Session() {}; - + public static Map SCENES = new HashMap<>(); - + public static File DIRECTORY; public static File FILE; - + public static ArrayList FILES = new ArrayList<>(); public static Logger LOGGER = new LogManager().logger; @@ -50,10 +50,10 @@ public final class Session { public static String TEMPLATE = "Artwork"; public static String WIKICODE = ""; public static ArrayList VARIABLES = new ArrayList<>(Arrays.asList("path", "name")); - + public static Wiki WIKI = new Wiki("commons.wikimedia.org"); public static ArrayList FILES_TO_UPLOAD = new ArrayList<>(); - + static { WIKI.setUserAgent(Settings.USERAGENT); } diff --git a/src/pattypan/Template.java b/src/pattypan/Template.java index 23d2556..6072a7a 100644 --- a/src/pattypan/Template.java +++ b/src/pattypan/Template.java @@ -29,7 +29,7 @@ import java.util.regex.Pattern; public class Template { - + public String name; public TemplateField[] variables; public String wikicode; @@ -37,13 +37,13 @@ public class Template { public Template(String name) { this.name = name; } - + public Template(String name, TemplateField[] variables, String wikicode) { this.name = name; this.variables = variables; this.wikicode = wikicode; } - + /** * Returns list of variables * @@ -52,8 +52,7 @@ public Template(String name, TemplateField[] variables, String wikicode) { public ArrayList getVariables() { return new ArrayList<>(Arrays.asList(variables)); } - - + /** * Returns selected template variables with additional "path" and "name" vars * @@ -70,8 +69,7 @@ public ArrayList getComputedVariables() { return vars; } - - + /** * Gets "raw" wikicode, removes variables set as "No" and sets constant * strings for variables set as "Cont" @@ -92,7 +90,7 @@ public String getComputedWikicode() { return text; } - + /** * * @@ -102,7 +100,7 @@ public String getComputedWikicode() { public static ArrayList getComputedVariablesFromString(String text) { final Pattern pattern = Pattern.compile("\\$\\{(.*?)\\}"); Matcher m = pattern.matcher(text); - + ArrayList results = new ArrayList<>(); results.add("path"); results.add("name"); diff --git a/src/pattypan/UploadElement.java b/src/pattypan/UploadElement.java index 85f233f..acdad50 100644 --- a/src/pattypan/UploadElement.java +++ b/src/pattypan/UploadElement.java @@ -45,16 +45,16 @@ public UploadElement(Map data, String wikicode) { private void addNameExtention() { String pathExt = Util.getExtFromFilename(getData("path")); String nameExt = Util.getExtFromFilename(getData("name")); - + if (!pathExt.equals(nameExt) && !Util.validUrl(getData("path"))) { setData("name", getData("name") + "." + pathExt); } } - + public Map getData() { return data; } - + public File getFile() { return new File(getData("path")); } @@ -66,23 +66,22 @@ public URL getUrl() { Session.LOGGER.log(Level.SEVERE, null, e); return null; } - } public String getData(String key) { return data.get(key); } - + public String getWikicode() { return wikicode + "\n[[Category:Uploaded with pattypan]]"; } - + public UploadElement setData(Map data) { this.data = data; addNameExtention(); return this; } - + public UploadElement setData(String key, String data) { this.data.put(key, data); return this; diff --git a/src/pattypan/Util.java b/src/pattypan/Util.java index 8f0276d..0a1b13d 100644 --- a/src/pattypan/Util.java +++ b/src/pattypan/Util.java @@ -133,7 +133,7 @@ public static ColumnConstraints newColumn(int value, String unit, HPos position) private final static ArrayList allowedExtentionImage = new ArrayList<>( Arrays.asList("djvu", "flac", "gif", "jpg", "jpeg", "mid", "oga", "ogg","ogv", "opus", "pdf", "png", "svg", "tiff", - "tif", "wav", "webm", "webp", "xcf") + "tif", "wav", "webm", "webp", "xcf", "mp3") ); // https://commons.wikimedia.org/wiki/MediaWiki:Filename-prefix-blacklist diff --git a/src/pattypan/panes/CheckPane.java b/src/pattypan/panes/CheckPane.java index 96389dc..c87508a 100644 --- a/src/pattypan/panes/CheckPane.java +++ b/src/pattypan/panes/CheckPane.java @@ -153,13 +153,13 @@ private void setDetails(UploadElement ue, Hyperlink label) { Session.LOGGER.log(Level.SEVERE, null, ex); } }); - + pathURL.setOnAction(event -> { Util.openUrl(ue.getData("path")); }); detailsContainer.getChildren().clear(); - + if (ue.getData("path").startsWith("https://") || ue.getData("path").startsWith("http://")) { detailsContainer.getChildren().addAll(title, pathURL, preview, wikitext); } else { diff --git a/src/pattypan/panes/CreateFilePane.java b/src/pattypan/panes/CreateFilePane.java index 25771e8..2dd9759 100644 --- a/src/pattypan/panes/CreateFilePane.java +++ b/src/pattypan/panes/CreateFilePane.java @@ -58,7 +58,7 @@ import pattypan.elements.WikiTextField; public class CreateFilePane extends WikiPane { - + Stage stage; WikiLabel descLabel; @@ -130,7 +130,7 @@ private void showOpenFileButton() { ); } }); - + nextButton.linkTo("StartPane", stage, true).setText(Util.text("create-file-back-to-start")); nextButton.setVisible(true); } diff --git a/src/pattypan/panes/LoginPane.java b/src/pattypan/panes/LoginPane.java index 0a3b17c..a03a0c5 100644 --- a/src/pattypan/panes/LoginPane.java +++ b/src/pattypan/panes/LoginPane.java @@ -72,7 +72,7 @@ private void setActions() { link.setOnAction(event -> { Util.openUrl("https://commons.wikimedia.org/wiki/Commons:Pattypan/Two-factor_authentication"); }); - + passwordText.setOnKeyPressed((KeyEvent event) -> { if (event.getCode().equals(KeyCode.ENTER)) { logIn(); From 4b5fc22e9e82919c606695d71235a07108c8e681 Mon Sep 17 00:00:00 2001 From: abbe98 Date: Sat, 6 Jan 2018 11:34:50 +0100 Subject: [PATCH 07/21] bump version --- src/pattypan/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pattypan/Settings.java b/src/pattypan/Settings.java index 5222609..6a83027 100644 --- a/src/pattypan/Settings.java +++ b/src/pattypan/Settings.java @@ -40,7 +40,7 @@ public final class Settings { private Settings() {}; public static final String NAME = "pattypan"; - public static final String VERSION = "17.05"; + public static final String VERSION = "17.12"; public static final String USERAGENT = NAME + "/" + VERSION + " (https://github.com/yarl/pattypan)"; public static final Map SETTINGS = new HashMap<>(); From d74aae17e2f7e4f68f41e3875fe29e2080816a2b Mon Sep 17 00:00:00 2001 From: abbe98 Date: Sat, 6 Jan 2018 11:56:04 +0100 Subject: [PATCH 08/21] Use one directory for both settings and logs --- src/pattypan/LogManager.java | 4 +++- src/pattypan/Settings.java | 29 +++++------------------------ src/pattypan/Util.java | 21 +++++++++++++++++++++ src/pattypan/panes/StartPane.java | 2 +- 4 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/pattypan/LogManager.java b/src/pattypan/LogManager.java index 2eb3cc0..6d6ba9b 100644 --- a/src/pattypan/LogManager.java +++ b/src/pattypan/LogManager.java @@ -11,12 +11,14 @@ import java.util.logging.Logger; import java.util.logging.SimpleFormatter; +import pattypan.Util; + public class LogManager { public Logger logger = Logger.getLogger(Main.class.getName()); public LogManager() { try { - Path logFileLocation = Paths.get(System.getProperty("user.home") + "/.PattyPan"); + Path logFileLocation = Paths.get(Util.getApplicationDirectory() + "/logs"); if (!Files.exists(logFileLocation)) { Files.createDirectories(logFileLocation); } diff --git a/src/pattypan/Settings.java b/src/pattypan/Settings.java index 6a83027..d94ab61 100644 --- a/src/pattypan/Settings.java +++ b/src/pattypan/Settings.java @@ -35,6 +35,8 @@ import java.util.Properties; import java.util.logging.Level; +import pattypan.Util; + public final class Settings { private Settings() {}; @@ -343,27 +345,6 @@ public final class Settings { */ } - /** - * Gets directory for local user settings - * - * @source http://stackoverflow.com/a/16660314/1418878 - * @return path to local Pattypan directory - */ - private static String getPropertiesDirectiry() { - String dir; - String OS = (System.getProperty("os.name")).toUpperCase(); - - if (OS.contains("WIN")) { - dir = System.getenv("AppData") + "/Pattypan"; - } else if (OS.contains("NUX")) { - dir = System.getProperty("user.home") + "/.pattypan"; - } else { - dir = System.getProperty("user.home"); - dir += "/Library/Application Support/Pattypan"; - } - return dir; - } - public static String getSetting(String key) { return SETTINGS.get(key) != null ? SETTINGS.get(key) : ""; } @@ -380,7 +361,7 @@ public static void readProperties() { InputStream input = null; try { - File f = new File(getPropertiesDirectiry() + "/config.properties"); + File f = new File(Util.getApplicationDirectory() + "/config.properties"); input = new FileInputStream(f); prop.load(input); @@ -413,8 +394,8 @@ public static void saveProperties() { OutputStream output = null; try { - new File(getPropertiesDirectiry()).mkdirs(); - File f = new File(getPropertiesDirectiry() + "/config.properties"); + new File(Util.getApplicationDirectory()).mkdirs(); + File f = new File(Util.getApplicationDirectory() + "/config.properties"); output = new FileOutputStream(f); SETTINGS.forEach((key, value) -> { prop.setProperty(key, value); diff --git a/src/pattypan/Util.java b/src/pattypan/Util.java index 0a1b13d..26665ea 100644 --- a/src/pattypan/Util.java +++ b/src/pattypan/Util.java @@ -290,4 +290,25 @@ public static Set getKeysByValue(Map map, E value) { .map(Map.Entry::getKey) .collect(Collectors.toSet()); } + + /** + * Gets directory for local application files + * + * @source http://stackoverflow.com/a/16660314/1418878 + * @return path to local Pattypan directory + */ + public static String getApplicationDirectory() { + String dir; + String OS = (System.getProperty("os.name")).toUpperCase(); + + if (OS.contains("WIN")) { + dir = System.getenv("AppData") + "/Pattypan"; + } else if (OS.contains("NUX")) { + dir = System.getProperty("user.home") + "/.pattypan"; + } else { + dir = System.getProperty("user.home"); + dir += "/Library/Application Support/Pattypan"; + } + return dir; + } } diff --git a/src/pattypan/panes/StartPane.java b/src/pattypan/panes/StartPane.java index 17c6294..c9cde71 100644 --- a/src/pattypan/panes/StartPane.java +++ b/src/pattypan/panes/StartPane.java @@ -82,7 +82,7 @@ private void setActions() { }); logFile.setOnAction(event -> { - Util.openDirectory(Paths.get(System.getProperty("user.home") + "/.PattyPan")); + Util.openDirectory(Paths.get(Util.getApplicationDirectory() + "/logs")); }); } From 44f3da8da6c45cfd34758161e2aba43208e13911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Marynowski?= Date: Sat, 13 Jan 2018 17:03:21 +0100 Subject: [PATCH 09/21] fix(ChooseColumnsPane): add min height fot wikicode textarea Relates to #57. Needs some proper solution. --- src/pattypan/panes/ChooseColumnsPane.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pattypan/panes/ChooseColumnsPane.java b/src/pattypan/panes/ChooseColumnsPane.java index 286e8a0..c4ed5dc 100644 --- a/src/pattypan/panes/ChooseColumnsPane.java +++ b/src/pattypan/panes/ChooseColumnsPane.java @@ -147,7 +147,10 @@ private WikiPane setContent() { ); addElementRow(templatePane, 10, - new Node[]{new WikiScrollPane(rightContainer).setWidth(150), new WikiScrollPane(templateDescContainer)}, + new Node[]{ + new WikiScrollPane(rightContainer).setWidth(150), + new WikiScrollPane(templateDescContainer) + }, new Priority[]{Priority.NEVER, Priority.ALWAYS} ); addElement(templatePane); @@ -162,6 +165,7 @@ private WikiPane setContent() { }); wikicodeText.getStyleClass().add("mw-ui-input"); + wikicodeText.setMinHeight(250); wikicodeText.setText(Session.WIKICODE); wikicodePane.getChildren().addAll(templateBox, wikicodeText); return this; From eba23e884950ba773d892fade8ac92904ce53155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Marynowski?= Date: Thu, 18 Jan 2018 21:20:16 +0400 Subject: [PATCH 10/21] fix(Settings): fix template field typo Relates to #58 --- src/pattypan/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pattypan/Settings.java b/src/pattypan/Settings.java index 9e0464d..931921d 100644 --- a/src/pattypan/Settings.java +++ b/src/pattypan/Settings.java @@ -95,7 +95,7 @@ public final class Settings { new TemplateField("medium", "Medium"), new TemplateField("dimensions", "Dimensions"), new TemplateField("institution", "Institution"), - new TemplateField("departament", "Departament"), + new TemplateField("department", "Department"), new TemplateField("place_of_discovery", "Place of discovery"), new TemplateField("object_history", "Object history"), new TemplateField("exhibition_history", "Exhibition history"), From 2c55c773ff8619ed7841a5e3df27f210c05b09bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Marynowski?= Date: Fri, 19 Jan 2018 01:16:13 +0400 Subject: [PATCH 11/21] fix(LogManager): small log manager cleanup --- src/pattypan/LogManager.java | 6 +----- src/pattypan/Main.java | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/pattypan/LogManager.java b/src/pattypan/LogManager.java index 6d6ba9b..c8ba808 100644 --- a/src/pattypan/LogManager.java +++ b/src/pattypan/LogManager.java @@ -1,20 +1,16 @@ package pattypan; import java.io.IOException; -import java.lang.SecurityException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.logging.ConsoleHandler; import java.util.logging.FileHandler; -import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; -import pattypan.Util; - public class LogManager { - public Logger logger = Logger.getLogger(Main.class.getName()); + public static final Logger logger = Logger.getLogger(Main.class.getName()); public LogManager() { try { diff --git a/src/pattypan/Main.java b/src/pattypan/Main.java index d2e40ec..d4db0e5 100644 --- a/src/pattypan/Main.java +++ b/src/pattypan/Main.java @@ -79,7 +79,7 @@ public static void main(String[] args) { String os = System.getProperty("os.name"); Session.LOGGER.log(Level.INFO, - "Operating System: {0}\nPattyPan Version: {1}", + "Operating System: {0}\nPattypan Version: {1}", new String[]{os, Settings.VERSION} ); From e19a907043c44381834aef517bc5498744aa106e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Marynowski?= Date: Fri, 19 Jan 2018 01:18:34 +0400 Subject: [PATCH 12/21] fix(StartPane): change parenthesis to bullet --- src/pattypan/panes/StartPane.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/pattypan/panes/StartPane.java b/src/pattypan/panes/StartPane.java index c9cde71..579ba4c 100644 --- a/src/pattypan/panes/StartPane.java +++ b/src/pattypan/panes/StartPane.java @@ -102,8 +102,12 @@ private GridPane setContent() { } this.addRow(20, new HBox(20, - new WikiButton("start-generate-button", "primary").setWidth(300).linkTo("ChooseDirectoryPane", stage), - new WikiButton("start-validate-button").setWidth(300).linkTo("LoadPane", stage))); + new WikiButton("start-generate-button", "primary") + .setWidth(300) + .linkTo("ChooseDirectoryPane", stage), + new WikiButton("start-validate-button") + .setWidth(300) + .linkTo("LoadPane", stage))); this.addRow(22, new HBox(20, new WikiLabel("start-generate-description").setWidth(300), @@ -112,7 +116,9 @@ private GridPane setContent() { String year = new SimpleDateFormat("yyyy").format(new Date()); this.addRow(40, new WikiLabel(year + " // Pawel Marynowski").setClass("muted")); - TextFlow flow = new TextFlow(new Text(Util.text("start-bug-found")), bugLink, new Text("("), logFile, new Text(")")); + TextFlow flow = new TextFlow( + new Text(Util.text("start-bug-found")), bugLink, + new Text(" • "), logFile); flow.setTextAlignment(TextAlignment.CENTER); this.addRow(41, flow); From 7292803dfb7a2df631d0ca896bca5b7f2aa04bca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Marynowski?= Date: Fri, 19 Jan 2018 01:19:30 +0400 Subject: [PATCH 13/21] feat(text): add Polish translation --- src/pattypan/text/messages_pl_PL.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pattypan/text/messages_pl_PL.properties b/src/pattypan/text/messages_pl_PL.properties index 78970a5..d5e9dd3 100644 --- a/src/pattypan/text/messages_pl_PL.properties +++ b/src/pattypan/text/messages_pl_PL.properties @@ -62,3 +62,4 @@ validate-file-select=Wybierz plik validate-file-type=pliki XLS (*.xls) validate-intro=Wybierz arkusz kalkulacyjny z opisami plik\u00f3w gotowych do przes\u0142ania. Kliknij "Przegl\u0105daj" aby wybra\u0107 plik. validate-name=Za\u0142aduj +log-file=Plik logu From 302075267557cefbaabbeb489f72b187ebede68d Mon Sep 17 00:00:00 2001 From: abbe98 Date: Sun, 11 Feb 2018 18:48:29 +0100 Subject: [PATCH 14/21] clear log when Pattypan has been updated --- src/pattypan/LogManager.java | 5 +++++ src/pattypan/Main.java | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/pattypan/LogManager.java b/src/pattypan/LogManager.java index c8ba808..fa5f3a9 100644 --- a/src/pattypan/LogManager.java +++ b/src/pattypan/LogManager.java @@ -8,6 +8,7 @@ import java.util.logging.FileHandler; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; +import pattypan.Settings; public class LogManager { public static final Logger logger = Logger.getLogger(Main.class.getName()); @@ -19,6 +20,10 @@ public LogManager() { Files.createDirectories(logFileLocation); } + if (!Settings.getSetting("version").equals(Settings.VERSION)) { + Files.deleteIfExists(Paths.get(logFileLocation.toString() + "/pattypan.log")); + } + FileHandler fh = new FileHandler(logFileLocation.toString() + "/pattypan.log", true); fh.setFormatter(new SimpleFormatter()); logger.addHandler(fh); diff --git a/src/pattypan/Main.java b/src/pattypan/Main.java index d4db0e5..f44ce93 100644 --- a/src/pattypan/Main.java +++ b/src/pattypan/Main.java @@ -35,7 +35,6 @@ public class Main extends Application { @Override public void start(Stage stage) { - Settings.readProperties(); Image logo = new Image(getClass().getResourceAsStream("/pattypan/resources/logo.png")); Scene scene = new Scene(new StartPane(stage), Settings.getSettingInt("windowWidth"), Settings.getSettingInt("windowHeight")); @@ -48,6 +47,7 @@ public void start(Stage stage) { stage.setOnCloseRequest((WindowEvent we) -> { Settings.setSetting("windowWidth", (int) scene.getWidth() + ""); Settings.setSetting("windowHeight", (int) scene.getHeight() + ""); + Settings.setSetting("version", Settings.VERSION); Settings.saveProperties(); }); } @@ -59,7 +59,6 @@ public static void main(String[] args) { String wiki = "commons.wikimedia.org"; String protocol = "https://"; String scriptPath = "/w"; - for (String arg : args) { String[] pair = arg.split("="); if (pair[0].contains("wiki")) { @@ -71,6 +70,8 @@ public static void main(String[] args) { } } + Settings.readProperties(); + Session.LOGGER.log(Level.INFO, "Wiki set as: {0}\nProtocol set as: {1}\nScript path set as: {2}", new String[]{wiki, protocol, scriptPath} From 99bfa67993992be9e5ee29e6b480de78a51747b1 Mon Sep 17 00:00:00 2001 From: abbe98 Date: Mon, 12 Feb 2018 21:09:07 +0100 Subject: [PATCH 15/21] Give the wikicode pane a dynamic height --- src/pattypan/elements/WikiScrollPane.java | 3 +-- src/pattypan/panes/ChooseColumnsPane.java | 8 +++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/pattypan/elements/WikiScrollPane.java b/src/pattypan/elements/WikiScrollPane.java index a0cdb73..ed525e2 100644 --- a/src/pattypan/elements/WikiScrollPane.java +++ b/src/pattypan/elements/WikiScrollPane.java @@ -31,9 +31,8 @@ public class WikiScrollPane extends ScrollPane { public WikiScrollPane(Node content) { this.setFitToWidth(true); this.setContent(content); - this.setPrefHeight(600); } - + public WikiScrollPane setWidth(int width) { this.setMaxWidth(width); this.setMinWidth(width); diff --git a/src/pattypan/panes/ChooseColumnsPane.java b/src/pattypan/panes/ChooseColumnsPane.java index c4ed5dc..a8890e4 100644 --- a/src/pattypan/panes/ChooseColumnsPane.java +++ b/src/pattypan/panes/ChooseColumnsPane.java @@ -23,6 +23,7 @@ */ package pattypan.panes; +import java.util.logging.Level; import javafx.event.Event; import javafx.scene.Node; import javafx.scene.control.ComboBox; @@ -165,9 +166,14 @@ private WikiPane setContent() { }); wikicodeText.getStyleClass().add("mw-ui-input"); - wikicodeText.setMinHeight(250); + wikicodeText.setPrefHeight(this.stage.getHeight() - 350); wikicodeText.setText(Session.WIKICODE); wikicodePane.getChildren().addAll(templateBox, wikicodeText); + + this.stage.heightProperty().addListener((obs, oldVal, newVal) -> { + wikicodeText.setPrefHeight(this.stage.getHeight() - 350); + }); + return this; } From d24ffbe72f4e3f6afdcb0df035eb522c9ebbd695 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Marynowski?= Date: Tue, 13 Feb 2018 20:25:56 +0400 Subject: [PATCH 16/21] fix(Settings): fix template field typo --- src/pattypan/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pattypan/Settings.java b/src/pattypan/Settings.java index aca0165..1abd62e 100644 --- a/src/pattypan/Settings.java +++ b/src/pattypan/Settings.java @@ -122,7 +122,7 @@ public final class Settings { + " |medium = ${medium}\n" + " |dimensions = ${dimensions}\n" + " |institution = ${institution}\n" - + " |department = ${departament}\n" + + " |department = ${department}\n" + " |place of discovery = ${place_of_discovery}\n" + " |object history = ${object_history}\n" + " |exhibition history = ${exhibition_history}\n" From 6132dc08c36691f21d3f2e4f333a23e66e966e98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Marynowski?= Date: Tue, 13 Feb 2018 22:17:28 +0400 Subject: [PATCH 17/21] feat(Settings): add {{Map}} template Related to #62. --- src/pattypan/Settings.java | 77 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/src/pattypan/Settings.java b/src/pattypan/Settings.java index 1abd62e..94b2c24 100644 --- a/src/pattypan/Settings.java +++ b/src/pattypan/Settings.java @@ -226,6 +226,83 @@ public final class Settings { + "" ) ); + TEMPLATES.put("Map", + new Template("Map", + new TemplateField[]{ + new TemplateField("title", "Title"), + new TemplateField("description", "Description"), + new TemplateField("legend", "Legend"), + new TemplateField("author", "Author"), + new TemplateField("date", "Date"), + new TemplateField("source", "Source"), + new TemplateField("permission", "Permission"), + new TemplateField("map_date", "Map date"), + new TemplateField("location", "Location"), + new TemplateField("projection", "Projection"), + new TemplateField("scale", "Scale"), + new TemplateField("heading", "Heading"), + new TemplateField("latitude", "Latitude"), + new TemplateField("longitude", "Longitude"), + new TemplateField("warp_status", "Warp status"), + new TemplateField("set", "Set"), + new TemplateField("sheet", "Sheet"), + new TemplateField("type", "Type"), + new TemplateField("language", "Language"), + new TemplateField("publisher", "Publisher"), + new TemplateField("printer", "Printer"), + new TemplateField("print_date", "Print date"), + new TemplateField("institution", "Institution"), + new TemplateField("accession_number", "Accession number"), + new TemplateField("dimensions", "Dimensions"), + new TemplateField("medium", "Medium"), + new TemplateField("inscriptions", "Inscriptions"), + new TemplateField("notes", "Notes"), + new TemplateField("other_versions", "Other versions"), + new TemplateField("license", "License"), + new TemplateField("partnership", "Partnership") + }, "=={{int:filedesc}}==\n" + + "{{Map\n" + + " |title = ${title}\n" + + " |description = ${description}\n" + + " |legend = ${legend}\n" + + " |author = ${author}\n" + + " |date = ${date}\n" + + " |source = ${source}\n" + + " |permission = ${permission}\n" + + " |map date = ${map_date}\n" + + " |location = ${location}\n" + + " |projection = ${projection}\n" + + " |scale = ${scale}\n" + + " |heading = ${heading}\n" + + " |latitude = ${latitude}\n" + + " |longitude = ${longitude}\n" + + " |warp status = ${warp_status}\n" + + " |set = ${set}\n" + + " |sheet = ${sheet}\n" + + " |type = ${type}\n" + + " |language = ${language}\n" + + " |publisher = ${publisher}\n" + + " |printer = ${printer}\n" + + " |print date = ${print_date}\n" + + " |institution = ${institution}\n" + + " |accession number = ${accession_number}\n" + + " |dimensions = ${dimensions}\n" + + " |medium = ${medium}\n" + + " |inscriptions = ${inscriptions}\n" + + " |notes = ${notes}\n" + + " |other versions = ${other_versions}\n" + + "}}\n\n" + + "=={{int:license-header}}==\n" + + "${license}${partnership}" + + "\n\n" + + "<#if categories ? has_content>\n" + + "<#list categories ? split(\";\") as category>\n" + + "[[Category:${category?trim}]]\n" + + "\n" + + "<#else>{{subst:unc}}\n" + + "" + ) + ); TEMPLATES.put("Musical work", new Template("Musical work", new TemplateField[]{ From 4de12105e79d142bdaeadb92288ff74c89c38e5c Mon Sep 17 00:00:00 2001 From: abbe98 Date: Wed, 14 Feb 2018 20:57:21 +0100 Subject: [PATCH 18/21] clear scenes in navigation step --- src/pattypan/elements/WikiButton.java | 13 +++++++------ src/pattypan/panes/ChooseColumnsPane.java | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/pattypan/elements/WikiButton.java b/src/pattypan/elements/WikiButton.java index 559608c..1fe1bd7 100644 --- a/src/pattypan/elements/WikiButton.java +++ b/src/pattypan/elements/WikiButton.java @@ -84,22 +84,23 @@ private Pane getPaneByPaneName(String name, Stage stage) { public WikiButton linkTo(String paneName, Stage stage) { this.setOnAction((ActionEvent event) -> { - goTo(paneName, stage); + goTo(paneName, stage, false); }); return this; } public WikiButton linkTo(String paneName, Stage stage, boolean clearScenes) { this.setOnAction((ActionEvent event) -> { - if(clearScenes) { - Session.SCENES = new HashMap<>(); - } - goTo(paneName, stage); + goTo(paneName, stage, clearScenes); }); return this; } - public void goTo(String paneName, Stage stage) { + public void goTo(String paneName, Stage stage, boolean clearScenes) { + if (clearScenes) { + Session.SCENES = new HashMap<>(); + } + Scene scene = Session.SCENES.containsKey(paneName) ? Session.SCENES.get(paneName) : new Scene(getPaneByPaneName(paneName, stage), Util.WINDOW_WIDTH, Util.WINDOW_HEIGHT); diff --git a/src/pattypan/panes/ChooseColumnsPane.java b/src/pattypan/panes/ChooseColumnsPane.java index a8890e4..fad27d8 100644 --- a/src/pattypan/panes/ChooseColumnsPane.java +++ b/src/pattypan/panes/ChooseColumnsPane.java @@ -103,7 +103,7 @@ private WikiPane setActions() { } } - nextButton.goTo("CreateFilePane", stage); + nextButton.goTo("CreateFilePane", stage, true); }); showTemplateFields(Session.TEMPLATE); return this; From 373505cd8693ecc5707a8f81f9b5214c56ebdea5 Mon Sep 17 00:00:00 2001 From: abbe98 Date: Sun, 18 Feb 2018 21:37:35 +0100 Subject: [PATCH 19/21] stl support --- src/pattypan/Util.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pattypan/Util.java b/src/pattypan/Util.java index 26665ea..8c11636 100644 --- a/src/pattypan/Util.java +++ b/src/pattypan/Util.java @@ -133,7 +133,7 @@ public static ColumnConstraints newColumn(int value, String unit, HPos position) private final static ArrayList allowedExtentionImage = new ArrayList<>( Arrays.asList("djvu", "flac", "gif", "jpg", "jpeg", "mid", "oga", "ogg","ogv", "opus", "pdf", "png", "svg", "tiff", - "tif", "wav", "webm", "webp", "xcf", "mp3") + "tif", "wav", "webm", "webp", "xcf", "mp3", "stl") ); // https://commons.wikimedia.org/wiki/MediaWiki:Filename-prefix-blacklist From 875d16a7da04060d4dc25c36d91742762a436069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Marynowski?= Date: Fri, 23 Feb 2018 23:09:19 +0400 Subject: [PATCH 20/21] feat(Util): add normalizing commons file name Relates to #67. --- src/pattypan/Util.java | 4 +++ src/pattypan/panes/CheckPane.java | 20 ++++++++++----- src/pattypan/panes/ChooseColumnsPane.java | 30 +++++++++++++++++------ src/pattypan/panes/UploadPane.java | 16 ++++++------ 4 files changed, 50 insertions(+), 20 deletions(-) diff --git a/src/pattypan/Util.java b/src/pattypan/Util.java index 8c11636..07266c0 100644 --- a/src/pattypan/Util.java +++ b/src/pattypan/Util.java @@ -206,6 +206,10 @@ public static Map getFilesByExtention(File[] files) { } return map; } + + public static String getNormalizedName(String name) { + return name.trim().replaceAll(" +", " "); + } public static boolean isFileAllowedToUpload(String name) { return allowedExtentionImage.indexOf(getExtFromFilename(name)) > -1; diff --git a/src/pattypan/panes/CheckPane.java b/src/pattypan/panes/CheckPane.java index c87508a..6dcaa04 100644 --- a/src/pattypan/panes/CheckPane.java +++ b/src/pattypan/panes/CheckPane.java @@ -68,7 +68,7 @@ private void setContent() { addElement("check-intro", 40); Session.FILES_TO_UPLOAD.stream().map(uploadElement -> { - String name = uploadElement.getData("name"); + String name = Util.getNormalizedName(uploadElement.getData("name")); Hyperlink label = new Hyperlink(name); label.setTooltip(new Tooltip(name)); @@ -81,11 +81,17 @@ private void setContent() { }); addElementRow(10, - new Node[]{new WikiScrollPane(fileListContainer).setWidth(250), new WikiScrollPane(detailsContainer)}, + new Node[]{ + new WikiScrollPane(fileListContainer).setWidth(250), + new WikiScrollPane(detailsContainer) + }, new Priority[]{Priority.SOMETIMES, Priority.SOMETIMES} ); - setDetails(Session.FILES_TO_UPLOAD.get(0), (Hyperlink) fileListContainer.getChildren().get(0)); + setDetails( + Session.FILES_TO_UPLOAD.get(0), + (Hyperlink) fileListContainer.getChildren().get(0) + ); prevButton.linkTo("LoadPane", stage); nextButton.linkTo("LoginPane", stage); @@ -132,8 +138,9 @@ private ImageView getScaledThumbnail(File file) { * @param ue */ private void setDetails(UploadElement ue, Hyperlink label) { + String name = Util.getNormalizedName(ue.getData("name")); - WikiLabel title = new WikiLabel(ue.getData("name")).setClass("header").setAlign("left"); + WikiLabel title = new WikiLabel(name).setClass("header").setAlign("left"); WikiLabel path = new WikiLabel(ue.getData("path")).setAlign("left"); Hyperlink pathURL = new Hyperlink(ue.getData("path")); Hyperlink preview = new Hyperlink(Util.text("check-preview")); @@ -145,10 +152,11 @@ private void setDetails(UploadElement ue, Hyperlink label) { preview.setOnAction(event -> { try { - Util.openUrl(Session.WIKI.getProtocol() + Session.WIKI.getDomain() + "/wiki/Special:ExpandTemplates" + Util.openUrl(Session.WIKI.getProtocol() + Session.WIKI.getDomain() + + "/wiki/Special:ExpandTemplates" + "?wpRemoveComments=true" + "&wpInput=" + URLEncoder.encode(ue.getWikicode(), "UTF-8") - + "&wpContextTitle=" + URLEncoder.encode(ue.getData("name"), "UTF-8")); + + "&wpContextTitle=" + URLEncoder.encode(name, "UTF-8")); } catch (UnsupportedEncodingException ex) { Session.LOGGER.log(Level.SEVERE, null, ex); } diff --git a/src/pattypan/panes/ChooseColumnsPane.java b/src/pattypan/panes/ChooseColumnsPane.java index fad27d8..0cca500 100644 --- a/src/pattypan/panes/ChooseColumnsPane.java +++ b/src/pattypan/panes/ChooseColumnsPane.java @@ -23,7 +23,6 @@ */ package pattypan.panes; -import java.util.logging.Level; import javafx.event.Event; import javafx.scene.Node; import javafx.scene.control.ComboBox; @@ -160,7 +159,10 @@ private WikiPane setContent() { ComboBox templateBox = new ComboBox(); templateBox.getItems().addAll(Settings.TEMPLATES.keySet().toArray()); templateBox.setOnAction((Event ev) -> { - String templateName = templateBox.getSelectionModel().getSelectedItem().toString(); + String templateName = templateBox + .getSelectionModel() + .getSelectedItem() + .toString(); Template t = Settings.TEMPLATES.get(templateName); wikicodeText.setText(t.wikicode); }); @@ -198,16 +200,30 @@ private boolean showTemplateFields(String templateName) { templateDescContainer.getChildren().clear(); templateDescContainer.getChildren().add(new HBox(10, - new WikiLabel("{{" + template.name + "}}").setClass("header").setAlign("left"), + new WikiLabel("{{" + template.name + "}}") + .setClass("header") + .setAlign("left"), docLink )); - templateDescContainer.getChildren().add(new WikiLabel("choose-columns-template-intro").setAlign("left").setHeight(70)); + templateDescContainer.getChildren().add( + new WikiLabel("choose-columns-template-intro") + .setAlign("left") + .setHeight(70)); HBox headersContainer = new HBox(10); headersContainer.getChildren().addAll( - new WikiLabel("choose-columns-fields-name").setClass("bold").setWidth(200, 495).setHeight(35), - new WikiLabel("choose-columns-radio-buttons").setClass("bold").setWidth(150).setHeight(35), - new WikiLabel("choose-columns-value").setClass("bold").setWidth(50, 500).setHeight(35)); + new WikiLabel("choose-columns-fields-name") + .setClass("bold") + .setWidth(200, 495) + .setHeight(35), + new WikiLabel("choose-columns-radio-buttons") + .setClass("bold") + .setWidth(150) + .setHeight(35), + new WikiLabel("choose-columns-value") + .setClass("bold") + .setWidth(50, 500) + .setHeight(35)); templateDescContainer.getChildren().add(headersContainer); for (TemplateField tf : template.variables) { diff --git a/src/pattypan/panes/UploadPane.java b/src/pattypan/panes/UploadPane.java index 89f85b1..5054ae0 100644 --- a/src/pattypan/panes/UploadPane.java +++ b/src/pattypan/panes/UploadPane.java @@ -244,16 +244,18 @@ protected Object call() { // for (UploadElement ue : Session.FILES_TO_UPLOAD) { for (; current < fileList.size(); current++) { UploadElement ue = fileList.get(current); + String name = Util.getNormalizedName(ue.getData("name")); + if (!stopRq) { updateMessage(String.format( "UPLOAD_START | %s | %s", - current + 1, ue.getData("name") + current + 1, name )); try { - if (isFileNameTaken(ue.getData("name"))) { + if (isFileNameTaken(name)) { updateMessage(String.format( "UPLOAD_NAME_TAKEN | %s | %s", - current + 1, ue.getData("name") + current + 1, name )); Thread.sleep(500); skipped++; @@ -261,21 +263,21 @@ protected Object call() { } if (ue.getData("path").startsWith("https://") || ue.getData("path").startsWith("http://")) { - Session.WIKI.upload(ue.getUrl(), ue.getData("name"), ue.getWikicode(), summary); + Session.WIKI.upload(ue.getUrl(), name, ue.getWikicode(), summary); } else { - Session.WIKI.upload(ue.getFile(), ue.getData("name"), ue.getWikicode(), summary); + Session.WIKI.upload(ue.getFile(), name, ue.getWikicode(), summary); } Thread.sleep(500); updateMessage(String.format( "UPLOAD_SUCCESS | %s | %s", - current + 1, ue.getData("name") + current + 1, name )); uploaded++; } catch (InterruptedException | IOException | LoginException ex) { updateMessage(String.format( "UPLOAD_ERROR | %s | %s | %s", - current + 1, ue.getData("name"), getMediaWikiError(ex) + current + 1, name, getMediaWikiError(ex) )); try { Thread.sleep(500); From f9ebd66e2e0d2dc795aabcc666eadd4d751c317e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Marynowski?= Date: Fri, 23 Feb 2018 23:13:59 +0400 Subject: [PATCH 21/21] version 18.02 --- src/pattypan/Settings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pattypan/Settings.java b/src/pattypan/Settings.java index 94b2c24..8988e1c 100644 --- a/src/pattypan/Settings.java +++ b/src/pattypan/Settings.java @@ -42,7 +42,7 @@ public final class Settings { private Settings() {}; public static final String NAME = "pattypan"; - public static final String VERSION = "17.12"; + public static final String VERSION = "18.02"; public static final String USERAGENT = NAME + "/" + VERSION + " (https://github.com/yarl/pattypan)"; public static final Map SETTINGS = new HashMap<>();