diff options
Diffstat (limited to 'parser')
-rw-r--r-- | parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Atom.java | 7 | ||||
-rw-r--r-- | parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Media.java | 9 | ||||
-rw-r--r-- | parser/feed/src/main/java/de/danoeh/antennapod/parser/feed/namespace/Rss20.java | 7 | ||||
-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; } } |