diff --git a/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java b/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java index 98121ed1..9b515d1d 100644 --- a/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java +++ b/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java @@ -5,6 +5,7 @@ import java.net.HttpURLConnection; import java.net.SocketTimeoutException; import java.net.URL; import java.net.URLConnection; +import java.nio.file.Paths; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -79,7 +80,7 @@ class DownloadFileThread extends Thread { return; } if (saveAs.exists() && !observer.tryResumeDownload() && !getFileExtFromMIME - || Utils.fuzzyExists(new File(saveAs.getParent()), saveAs.getName()) && getFileExtFromMIME + || Utils.fuzzyExistsBetter(Paths.get(saveAs.getParent()), saveAs.getName()) && getFileExtFromMIME && !observer.tryResumeDownload()) { if (Utils.getConfigBoolean("file.overwrite", false)) { logger.info("[!] " + Utils.getLocalizedString("deleting.existing.file") + prettySaveAs); diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/RedgifsRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/RedgifsRipper.java index 17105ee4..04442abf 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/RedgifsRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/RedgifsRipper.java @@ -55,12 +55,12 @@ public class RedgifsRipper extends AbstractHTMLRipper { } public Matcher isProfile() { - Pattern p = Pattern.compile("^https?://[wm.]*redgifs\\.com/users/([a-zA-Z0-9_-]+).*$"); + Pattern p = Pattern.compile("^https?://[wm.]*redgifs\\.com/users/([a-zA-Z0-9_.-]+).*$"); return p.matcher(url.toExternalForm()); } public Matcher isSearch() { - Pattern p = Pattern.compile("^https?://[wm.]*redgifs\\.com/gifs/browse/([a-zA-Z0-9_-]+).*$"); + Pattern p = Pattern.compile("^https?://[wm.]*redgifs\\.com/gifs/browse/([a-zA-Z0-9_.-]+).*$"); return p.matcher(url.toExternalForm()); } @@ -131,7 +131,7 @@ public class RedgifsRipper extends AbstractHTMLRipper { .ignoreContentType().get(); return (hasURLs(d).isEmpty()) ? null : d; } else { - if (cursor.equals("")) { + if (cursor.equals("") || cursor.equals("null")) { return null; } else { Document d = Http.url(new URL("https://napi.redgifs.com/v1/users/" + username + "/gfycats?count=" + count + "&cursor=" + cursor)).ignoreContentType().get(); @@ -170,7 +170,7 @@ public class RedgifsRipper extends AbstractHTMLRipper { for (int i = 0; i < content.length(); i++) { result.add(content.getJSONObject(i).getString("mp4Url")); } - cursor = page.getString("cursor"); + cursor = page.get("cursor").toString(); return result; } diff --git a/src/main/java/com/rarchives/ripme/utils/Utils.java b/src/main/java/com/rarchives/ripme/utils/Utils.java index 842d3e0a..947d7ef7 100644 --- a/src/main/java/com/rarchives/ripme/utils/Utils.java +++ b/src/main/java/com/rarchives/ripme/utils/Utils.java @@ -880,6 +880,10 @@ public class Utils { return false; } + public static boolean fuzzyExistsBetter(Path folder, String filename) { + return Files.exists(folder.resolve(filename)); + } + public static String sanitizeSaveAs(String fileNameToSan) { return fileNameToSan.replaceAll("[\\\\/:*?\"<>|]", "_"); } diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/RedditRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/RedditRipperTest.java index f4dbe327..8ad6fd09 100644 --- a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/RedditRipperTest.java +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/RedditRipperTest.java @@ -60,6 +60,17 @@ public class RedditRipperTest extends RippersTest { testRipper(ripper); } + /** + * GFYCAT TEST Tests a gfycat URL with the gifdeliverynetwork/redgifs hosted video + * + * @throws IOException + */ + @Test + public void testRedditGfycatRedirectURL() throws IOException { + RedditRipper ripper = new RedditRipper( + new URL("https://www.reddit.com/r/NSFW_GIF/comments/ennwsa/gorgeous_tits/")); + } + @Test @Tag("flaky") public void testRedditGallery() throws IOException{