summaryrefslogtreecommitdiff
path: root/parser/media
diff options
context:
space:
mode:
authorByteHamster <ByteHamster@users.noreply.github.com>2022-03-10 07:14:48 +0100
committerGitHub <noreply@github.com>2022-03-10 07:14:48 +0100
commit36a36e4f853259f34fc3608ed1b21d575129e274 (patch)
tree9f41f7db48e3c020001fed680f26da0f5046b586 /parser/media
parent05593a16a9d8632228370526ddf65cadf2593b55 (diff)
parentce8e356647734509388adef15338e535a714d90c (diff)
downloadAntennaPod-36a36e4f853259f34fc3608ed1b21d575129e274.zip
Merge pull request #5769 from ByteHamster/id3-comment
Extract shownotes from id3 comment field
Diffstat (limited to 'parser/media')
-rw-r--r--parser/media/src/main/java/de/danoeh/antennapod/parser/media/id3/Id3MetadataReader.java39
1 files changed, 39 insertions, 0 deletions
diff --git a/parser/media/src/main/java/de/danoeh/antennapod/parser/media/id3/Id3MetadataReader.java b/parser/media/src/main/java/de/danoeh/antennapod/parser/media/id3/Id3MetadataReader.java
new file mode 100644
index 000000000..e6cc67ee8
--- /dev/null
+++ b/parser/media/src/main/java/de/danoeh/antennapod/parser/media/id3/Id3MetadataReader.java
@@ -0,0 +1,39 @@
+package de.danoeh.antennapod.parser.media.id3;
+
+import androidx.annotation.NonNull;
+import de.danoeh.antennapod.parser.media.id3.model.FrameHeader;
+import org.apache.commons.io.input.CountingInputStream;
+
+import java.io.IOException;
+
+/**
+ * Reads general ID3 metadata like comment, which Android's MediaMetadataReceiver does not support.
+ */
+public class Id3MetadataReader extends ID3Reader {
+ public static final String FRAME_ID_COMMENT = "COMM";
+
+ private String comment = null;
+
+ public Id3MetadataReader(CountingInputStream input) {
+ super(input);
+ }
+
+ @Override
+ protected void readFrame(@NonNull FrameHeader frameHeader) throws IOException, ID3ReaderException {
+ if (FRAME_ID_COMMENT.equals(frameHeader.getId())) {
+ long frameStart = getPosition();
+ int encoding = readByte();
+ skipBytes(3); // Language
+ String shortDescription = readEncodedString(encoding, frameHeader.getSize() - 4);
+ String longDescription = readEncodedString(encoding,
+ (int) (frameHeader.getSize() - (getPosition() - frameStart)));
+ comment = shortDescription.length() > longDescription.length() ? shortDescription : longDescription;
+ } else {
+ super.readFrame(frameHeader);
+ }
+ }
+
+ public String getComment() {
+ return comment;
+ }
+}