summaryrefslogtreecommitdiff
path: root/parser
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2022-01-25 22:08:05 +0100
committerByteHamster <info@bytehamster.com>2022-01-25 22:08:05 +0100
commitd4d506345b222406a41ddd2a49af5c208f76e236 (patch)
treea221bd74d64a9c8837504a74405fa12c0d7f8f87 /parser
parentc376be44dd14132dafe49e311714b637e3af61fd (diff)
downloadantennapod-d4d506345b222406a41ddd2a49af5c208f76e236.zip
Move mime type guessing out of MediaType enum
Diffstat (limited to 'parser')
-rw-r--r--parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Atom.java7
-rw-r--r--parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Media.java9
-rw-r--r--parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Rss20.java7
-rw-r--r--parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/util/MimeTypeUtils.java (renamed from parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/util/SyndTypeUtils.java)32
4 files changed, 38 insertions, 17 deletions
diff --git a/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Atom.java b/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Atom.java
index 7e2f00607..a79556c2c 100644
--- a/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Atom.java
+++ b/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Atom.java
@@ -13,7 +13,7 @@ import org.xml.sax.Attributes;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.parser.feed.element.SyndElement;
-import de.danoeh.antennapod.parser.feed.util.SyndTypeUtils;
+import de.danoeh.antennapod.parser.feed.util.MimeTypeUtils;
public class Atom extends Namespace {
private static final String TAG = "NSAtom";
@@ -91,11 +91,10 @@ public class Atom extends Namespace {
} catch (NumberFormatException e) {
Log.d(TAG, "Length attribute could not be parsed.");
}
- String type = attributes.getValue(LINK_TYPE);
- String mimeType = SyndTypeUtils.getMimeType(type, href);
+ String mimeType = MimeTypeUtils.getMimeType(attributes.getValue(LINK_TYPE), href);
FeedItem currItem = state.getCurrentItem();
- if (SyndTypeUtils.isMediaFile(mimeType) && currItem != null && !currItem.hasMedia()) {
+ if (MimeTypeUtils.isMediaFile(mimeType) && currItem != null && !currItem.hasMedia()) {
currItem.setMedia(new FeedMedia(currItem, href, size, mimeType));
}
} else if (LINK_REL_PAYMENT.equals(rel)) {
diff --git a/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Media.java b/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Media.java
index 29d7d7999..85cafea84 100644
--- a/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Media.java
+++ b/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Media.java
@@ -11,7 +11,7 @@ import java.util.concurrent.TimeUnit;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.parser.feed.element.AtomText;
-import de.danoeh.antennapod.parser.feed.util.SyndTypeUtils;
+import de.danoeh.antennapod.parser.feed.util.MimeTypeUtils;
/** Processes tags from the http://search.yahoo.com/mrss/ namespace. */
public class Media extends Namespace {
@@ -43,13 +43,12 @@ public class Media extends Namespace {
Attributes attributes) {
if (CONTENT.equals(localName)) {
String url = attributes.getValue(DOWNLOAD_URL);
- String type = attributes.getValue(MIME_TYPE);
String defaultStr = attributes.getValue(DEFAULT);
String medium = attributes.getValue(MEDIUM);
boolean validTypeMedia = false;
boolean validTypeImage = false;
boolean isDefault = "true".equals(defaultStr);
- String mimeType = SyndTypeUtils.getMimeType(type, url);
+ String mimeType = MimeTypeUtils.getMimeType(attributes.getValue(MIME_TYPE), url);
if (MEDIUM_AUDIO.equals(medium)) {
validTypeMedia = true;
@@ -63,9 +62,9 @@ public class Media extends Namespace {
validTypeImage = true;
mimeType = "image/*";
} else {
- if (SyndTypeUtils.isMediaFile(mimeType)) {
+ if (MimeTypeUtils.isMediaFile(mimeType)) {
validTypeMedia = true;
- } else if (SyndTypeUtils.isImageFile(mimeType)) {
+ } else if (MimeTypeUtils.isImageFile(mimeType)) {
validTypeImage = true;
}
}
diff --git a/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Rss20.java b/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Rss20.java
index ad5eb9de8..1c1ba9f53 100644
--- a/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Rss20.java
+++ b/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Rss20.java
@@ -12,7 +12,7 @@ import org.xml.sax.Attributes;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedMedia;
-import de.danoeh.antennapod.parser.feed.util.SyndTypeUtils;
+import de.danoeh.antennapod.parser.feed.util.MimeTypeUtils;
import java.util.Locale;
@@ -46,13 +46,12 @@ public class Rss20 extends Namespace {
state.getItems().add(state.getCurrentItem());
state.getCurrentItem().setFeed(state.getFeed());
} else if (ENCLOSURE.equals(localName) && ITEM.equals(state.getTagstack().peek().getName())) {
- String type = attributes.getValue(ENC_TYPE);
String url = attributes.getValue(ENC_URL);
- String mimeType = SyndTypeUtils.getMimeType(type, url);
+ String mimeType = MimeTypeUtils.getMimeType(attributes.getValue(ENC_TYPE), url);
boolean validUrl = !TextUtils.isEmpty(url);
if (state.getCurrentItem() != null && state.getCurrentItem().getMedia() == null
- && SyndTypeUtils.isMediaFile(mimeType) && validUrl) {
+ && MimeTypeUtils.isMediaFile(mimeType) && validUrl) {
long size = 0;
try {
size = Long.parseLong(attributes.getValue(ENC_LEN));
diff --git a/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/util/SyndTypeUtils.java b/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/util/MimeTypeUtils.java
index dfd7801a5..be1048050 100644
--- a/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/util/SyndTypeUtils.java
+++ b/parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/util/MimeTypeUtils.java
@@ -4,13 +4,27 @@ import android.webkit.MimeTypeMap;
import androidx.annotation.Nullable;
import org.apache.commons.io.FilenameUtils;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* Utility class for handling MIME-Types of enclosures.
* */
-public class SyndTypeUtils {
+public class MimeTypeUtils {
public static final String OCTET_STREAM = "application/octet-stream";
- private SyndTypeUtils() {
+ // based on https://developer.android.com/guide/topics/media/media-formats
+ static final Set<String> AUDIO_FILE_EXTENSIONS = new HashSet<>(Arrays.asList(
+ "3gp", "aac", "amr", "flac", "imy", "m4a", "mid", "mkv", "mp3", "mp4", "mxmf", "oga",
+ "ogg", "ogx", "opus", "ota", "rtttl", "rtx", "wav", "xmf"
+ ));
+
+ static final Set<String> VIDEO_FILE_EXTENSIONS = new HashSet<>(Arrays.asList(
+ "3gp", "mkv", "mp4", "ogg", "ogv", "ogx", "webm"
+ ));
+
+ private MimeTypeUtils() {
}
@@ -19,7 +33,7 @@ public class SyndTypeUtils {
if (isMediaFile(type) && !OCTET_STREAM.equals(type)) {
return type;
}
- String filenameType = SyndTypeUtils.getMimeTypeFromUrl(filename);
+ String filenameType = MimeTypeUtils.getMimeTypeFromUrl(filename);
if (isMediaFile(filenameType)) {
return filenameType;
}
@@ -54,6 +68,16 @@ public class SyndTypeUtils {
return null;
}
String extension = FilenameUtils.getExtension(url);
- return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
+ String mapResult = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
+ if (mapResult != null) {
+ return mapResult;
+ }
+
+ if (AUDIO_FILE_EXTENSIONS.contains(extension)) {
+ return "audio/*";
+ } else if (VIDEO_FILE_EXTENSIONS.contains(extension)) {
+ return "video/*";
+ }
+ return null;
}
}