2385 Only allow very limited set of characters in file names
This commit is contained in:
parent
5310264961
commit
1972c2d44e
|
@ -34,6 +34,16 @@ public class FilenameGeneratorTest extends AndroidTestCase {
|
||||||
createFiles(result);
|
createFiles(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testFeedTitleContainsApostrophe() {
|
||||||
|
String result = FileNameGenerator.generateFileName("Feed's Title ...");
|
||||||
|
assertEquals("Feeds Title", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testFeedTitleContainsDash() {
|
||||||
|
String result = FileNameGenerator.generateFileName("Left - Right");
|
||||||
|
assertEquals("Left Right", result);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests if files can be created.
|
* Tests if files can be created.
|
||||||
*
|
*
|
||||||
|
|
|
@ -345,9 +345,7 @@ public class DownloadRequester {
|
||||||
// Try to generate the filename by the item title
|
// Try to generate the filename by the item title
|
||||||
if (media.getItem() != null && media.getItem().getTitle() != null) {
|
if (media.getItem() != null && media.getItem().getTitle() != null) {
|
||||||
String title = media.getItem().getTitle();
|
String title = media.getItem().getTitle();
|
||||||
// Delete reserved characters
|
titleBaseFilename = FileNameGenerator.generateFileName(title);
|
||||||
titleBaseFilename = title.replaceAll("[^a-zA-Z0-9 ._()-]", "");
|
|
||||||
titleBaseFilename = titleBaseFilename.trim();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String URLBaseFilename = URLUtil.guessFileName(media.getDownload_url(),
|
String URLBaseFilename = URLUtil.guessFileName(media.getDownload_url(),
|
||||||
|
|
|
@ -1,18 +1,21 @@
|
||||||
package de.danoeh.antennapod.core.util;
|
package de.danoeh.antennapod.core.util;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/** Generates valid filenames for a given string. */
|
/** Generates valid filenames for a given string. */
|
||||||
public class FileNameGenerator {
|
public class FileNameGenerator {
|
||||||
|
|
||||||
private static final char[] ILLEGAL_CHARACTERS = { '/', '\\', '?', '%',
|
private static final char[] validChars = (
|
||||||
'*', ':', '|', '"', '<', '>', '\n' };
|
"abcdefghijklmnopqrstuvwxyz" +
|
||||||
static {
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
|
||||||
Arrays.sort(ILLEGAL_CHARACTERS);
|
"0123456789" +
|
||||||
}
|
" _-").toCharArray();
|
||||||
|
|
||||||
private FileNameGenerator() {
|
private FileNameGenerator() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -20,17 +23,17 @@ public class FileNameGenerator {
|
||||||
* characters of the given string.
|
* characters of the given string.
|
||||||
*/
|
*/
|
||||||
public static String generateFileName(String string) {
|
public static String generateFileName(String string) {
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder buf = new StringBuilder();
|
||||||
for (int i = 0; i < string.length(); i++) {
|
for (int i = 0; i < string.length(); i++) {
|
||||||
char c = string.charAt(i);
|
char c = string.charAt(i);
|
||||||
if (Arrays.binarySearch(ILLEGAL_CHARACTERS, c) < 0) {
|
if(Character.isSpaceChar(c) && (buf.length() == 0 || Character.isSpaceChar(buf.charAt(buf.length()-1)))) {
|
||||||
builder.append(c);
|
continue;
|
||||||
|
}
|
||||||
|
if (ArrayUtils.contains(validChars, c)) {
|
||||||
|
buf.append(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return builder.toString().replaceFirst(" *$","");
|
return buf.toString().trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static long generateLong(final String str) {
|
|
||||||
return str.hashCode();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue