From 3929813c5a44ca2ddd5ea1718f94956471ac12fc Mon Sep 17 00:00:00 2001 From: cyian-1756 Date: Sun, 28 Oct 2018 09:06:15 -0400 Subject: [PATCH] Changed up name sanitization a bit --- .../ripme/ripper/DownloadFileThread.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java b/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java index 54619a28..639902a0 100644 --- a/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java +++ b/src/main/java/com/rarchives/ripme/ripper/DownloadFileThread.java @@ -20,7 +20,7 @@ import org.jsoup.HttpStatusException; import com.rarchives.ripme.ui.RipStatusMessage.STATUS; import com.rarchives.ripme.utils.Utils; -import com.rarchives.ripme.ripper.AbstractRipper; +import static java.lang.Math.toIntExact; /** * Thread for downloading files. @@ -62,11 +62,6 @@ class DownloadFileThread extends Thread { this.cookies = cookies; } - public File sanitizeSaveAs(File fileToSan) { - String fileName = fileToSan.getName().replaceAll("[\\\\/:*?\"<>|]", "_"); - return new File(saveAs.getParentFile().getAbsolutePath() + File.separator + fileName); - } - /** * Attempts to download the file. Retries as needed. @@ -74,7 +69,7 @@ class DownloadFileThread extends Thread { */ public void run() { // First thing we make sure the file name doesn't have any illegal chars in it - saveAs = sanitizeSaveAs(saveAs); + saveAs = new File(saveAs.getParentFile().getAbsolutePath() + File.separator + Utils.sanitizeSaveAs(saveAs.getName())); long fileSize = 0; int bytesTotal = 0; int bytesDownloaded = 0; @@ -222,14 +217,16 @@ class DownloadFileThread extends Thread { String[] saveAsSplit = saveAs.getName().split("\\."); // Get the file extension so when we shorten the file name we don't cut off the file extension String fileExt = saveAsSplit[saveAsSplit.length - 1]; - // The max limit for filenames on Linux with Ext3/4 is 255 bytes, on windows it's 256 chars so rather than - // bother with code with both platforms we just cut the file name down to 254 chars + // The max limit for filenames on Linux with Ext3/4 is 255 bytes logger.info(saveAs.getName().substring(0, 254 - fileExt.length()) + fileExt); String filename = saveAs.getName().substring(0, 254 - fileExt.length()) + "." + fileExt; // We can't just use the new file name as the saveAs because the file name doesn't include the // users save path, so we get the user save path from the old saveAs - saveAs = new File(saveAs.getParentFile().getAbsolutePath() + "/" + filename); + saveAs = new File(saveAs.getParentFile().getAbsolutePath() + File.separator + filename); fos = new FileOutputStream(saveAs); + } else if (saveAs.getAbsolutePath().length() > 259 && Utils.isWindows()) { + // This if is for when the file path has gone above 260 chars which windows does not allow + fos = new FileOutputStream(Utils.shortenSaveAsWindows(saveAs.getParentFile().getPath(), saveAs.getName())); } } }