Skip to content

Commit ae10043

Browse files
authored
Pattypan 22.03
Pattypan 22.03
2 parents 5b3c5f1 + 4c33790 commit ae10043

File tree

9 files changed

+53
-39
lines changed

9 files changed

+53
-39
lines changed

lib/gson-2.8.5.jar

-236 KB
Binary file not shown.

lib/gson-2.9.0.jar

243 KB
Binary file not shown.

src/pattypan/Main.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ public static void main(String[] args) {
8585
);
8686

8787
Session.WIKI = Wiki.newSession(wiki, scriptPath, protocol);
88+
Session.WIKI.setUserAgent(Settings.USERAGENT);
89+
Session.LOGGER.log(Level.INFO, "User-Agent: {0}", Session.WIKI.getUserAgent());
8890
launch(args);
8991
}
9092
}

src/pattypan/Session.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,12 @@ public final class Session {
4646

4747
public static Logger LOGGER = new LogManager().logger;
4848

49+
public static Wiki WIKI;
50+
4951
public static String METHOD = "template";
5052
public static String TEMPLATE = "Artwork";
5153
public static String WIKICODE = "";
5254
public static ArrayList<String> VARIABLES = new ArrayList<>(Arrays.asList("path", "name"));
5355

54-
public static Wiki WIKI = Wiki.newSession("commons.wikimedia.org");
5556
public static ArrayList<UploadElement> FILES_TO_UPLOAD = new ArrayList<>();
56-
57-
static {
58-
WIKI.setUserAgent(Settings.USERAGENT);
59-
}
6057
}

src/pattypan/Settings.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public final class Settings {
4242
private Settings() {};
4343

4444
public static final String NAME = "pattypan";
45-
public static final String VERSION = "22.02";
45+
public static final String VERSION = "22.03";
4646
public static final String USERAGENT = NAME + "/" + VERSION + " (https://github.com/yarl/pattypan)";
4747

4848
public static final Map<String, String> SETTINGS = new HashMap<>();

src/pattypan/Util.java

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,17 @@
2323
*/
2424
package pattypan;
2525

26-
import edu.stanford.ejalbert.BrowserLauncher;
27-
import edu.stanford.ejalbert.exception.BrowserLaunchingInitializingException;
28-
import edu.stanford.ejalbert.exception.UnsupportedOperatingSystemException;
2926
import java.awt.Desktop;
3027
import java.awt.EventQueue;
31-
import java.io.BufferedReader;
3228
import java.io.File;
3329
import java.io.FileInputStream;
3430
import java.io.IOException;
35-
import java.io.InputStreamReader;
3631
import java.net.URI;
3732
import java.net.URISyntaxException;
3833
import java.net.URL;
34+
import java.net.http.HttpClient;
35+
import java.net.http.HttpRequest;
36+
import java.net.http.HttpResponse.BodyHandlers;
3937
import java.nio.file.DirectoryStream;
4038
import java.nio.file.Files;
4139
import java.nio.file.Path;
@@ -50,6 +48,10 @@
5048
import java.util.Set;
5149
import java.util.logging.Level;
5250
import java.util.stream.Collectors;
51+
52+
import edu.stanford.ejalbert.BrowserLauncher;
53+
import edu.stanford.ejalbert.exception.BrowserLaunchingInitializingException;
54+
import edu.stanford.ejalbert.exception.UnsupportedOperatingSystemException;
5355
import javafx.geometry.HPos;
5456
import javafx.scene.layout.ColumnConstraints;
5557

@@ -148,14 +150,24 @@ public static ColumnConstraints newColumn(int value, String unit, HPos position)
148150
"SANY", "SAM")
149151
);
150152

151-
public static boolean stringHasValidFileExtension(String string) {
153+
// https://www.mediawiki.org/wiki/Manual:Page_title
154+
private final static ArrayList<String> invalidFilenameCharacters = new ArrayList<>(
155+
Arrays.asList("#", "<", ">", "[", "]", "|", "{", "}")
156+
);
157+
158+
159+
public static boolean hasValidFileExtension(String string) {
152160
return allowedFileExtension.parallelStream().anyMatch(string::endsWith);
153161
}
154162

155-
public static boolean isPossibleBadFilename(String name) {
163+
public static boolean hasPossibleBadFilenamePrefix(String name) {
156164
return filenamePrefixBlacklist.parallelStream().anyMatch(name::startsWith);
157165
}
158166

167+
public static boolean hasInvalidFilenameCharacters(String name) {
168+
return invalidFilenameCharacters.parallelStream().anyMatch(name::contains);
169+
}
170+
159171
public static String getNameFromFilename(String filename) {
160172
int pos = filename.lastIndexOf(".");
161173
if (pos > 0) {
@@ -192,9 +204,10 @@ public static File[] getFilesAllowedToUpload(File directory, boolean includeSubd
192204
}
193205

194206
public static File[] getFilesAllowedToUpload(File directory, String ext) {
195-
return directory.listFiles((File dir, String name)
196-
-> name.toLowerCase().endsWith(ext)
197-
);
207+
File[] files = directory.listFiles((File dir, String name) -> name.toLowerCase().endsWith(ext));
208+
Arrays.sort(files);
209+
return files;
210+
198211
}
199212

200213
public static Map<String, Integer> getFilesByExtention(File[] files) {
@@ -254,22 +267,18 @@ public static String getFileChecksum(MessageDigest digest, File file) throws IOE
254267
}
255268

256269
public static String readUrl(String urlString) throws Exception {
257-
BufferedReader reader = null;
258270
try {
259-
URL url = new URL(urlString);
260-
reader = new BufferedReader(new InputStreamReader(url.openStream()));
261-
StringBuilder buffer = new StringBuilder();
262-
int read;
263-
char[] chars = new char[1024];
264-
while ((read = reader.read(chars)) != -1) {
265-
buffer.append(chars, 0, read);
266-
}
271+
HttpClient client = HttpClient.newHttpClient();
267272

268-
return buffer.toString();
269-
} finally {
270-
if (reader != null) {
271-
reader.close();
272-
}
273+
HttpRequest request = HttpRequest.newBuilder(
274+
URI.create(urlString))
275+
.header("user-agent", Settings.USERAGENT)
276+
.build();
277+
278+
var response = client.send(request, BodyHandlers.ofString());
279+
return response.body();
280+
} catch (Exception e) {
281+
throw new Exception("Error while getting JSON from " + urlString);
273282
}
274283
}
275284

src/pattypan/panes/ChooseColumnsPane.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ private boolean showTemplateFields(String templateName) {
195195
Hyperlink docLink = new Hyperlink(Util.text("choose-columns-template-doc"));
196196
docLink.setMinHeight(25);
197197
docLink.setOnAction(event -> {
198-
Util.openUrl("https://commons.wikimedia.org/wiki/Template:" + template.name + "/doc");
198+
Util.openUrl("https://commons.wikimedia.org/wiki/Template:" + template.name.replace(" ", "_") + "/doc");
199199
});
200200

201201
templateDescContainer.getChildren().clear();

src/pattypan/panes/LoadPane.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ private void addFilesToUpload(ArrayList<Map<String, String>> descriptions, Templ
163163
}
164164

165165
// when uploaded from URL the extension is not automatically added
166-
if (!Util.stringHasValidFileExtension(description.get("name"))) {
166+
if (!Util.hasValidFileExtension(description.get("name"))) {
167167
throw new Exception("filename does not include a valid file extension");
168168
}
169169
} else {
@@ -172,8 +172,12 @@ private void addFilesToUpload(ArrayList<Map<String, String>> descriptions, Templ
172172
}
173173
}
174174

175-
if (Util.isPossibleBadFilename(description.get("name"))) {
176-
warnings.add(description.get("name") + ": filename shouldn't have name from camera (DSC, DSCF, etc");
175+
if (Util.hasPossibleBadFilenamePrefix(description.get("name"))) {
176+
warnings.add(description.get("name") + ": filename shouldn't have name from camera (DSC, DSCF, etc)");
177+
}
178+
179+
if (Util.hasInvalidFilenameCharacters(description.get("name"))) {
180+
throw new Exception(description.get("name") + ": filename shouldn't contain invalid characters (#, ], {, etc)");
177181
}
178182

179183
Set<String> keys = Util.getKeysByValue(description, "");

src/pattypan/panes/StartPane.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,18 @@
2323
*/
2424
package pattypan.panes;
2525

26-
import com.google.gson.JsonArray;
27-
import com.google.gson.JsonElement;
28-
import com.google.gson.JsonObject;
29-
import com.google.gson.JsonParser;
3026
import java.net.UnknownHostException;
3127
import java.nio.file.Paths;
3228
import java.text.SimpleDateFormat;
3329
import java.util.ArrayList;
3430
import java.util.Date;
3531
import java.util.logging.Level;
32+
33+
import com.google.gson.JsonArray;
34+
import com.google.gson.JsonElement;
35+
import com.google.gson.JsonObject;
36+
import com.google.gson.JsonParser;
37+
3638
import javafx.geometry.Pos;
3739
import javafx.scene.control.Hyperlink;
3840
import javafx.scene.layout.GridPane;
@@ -158,7 +160,7 @@ public ArrayList<String> getVersions() throws Exception {
158160
ArrayList<String> versions = new ArrayList<>();
159161
String json = Util.readUrl("https://api.github.com/repos/yarl/pattypan/releases");
160162

161-
JsonArray releases = new JsonParser().parse(json).getAsJsonArray();
163+
JsonArray releases = JsonParser.parseString(json).getAsJsonArray();
162164
for (JsonElement element : releases) {
163165
JsonObject release = element.getAsJsonObject();
164166
boolean draft = release.get("draft").getAsBoolean();

0 commit comments

Comments
 (0)