summaryrefslogtreecommitdiff
path: root/parser/media/src/main/java
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2022-03-06 17:43:39 +0100
committerByteHamster <info@bytehamster.com>2022-03-09 22:08:32 +0100
commitce8e356647734509388adef15338e535a714d90c (patch)
tree1107bb74a7024bb4da45fa73eee68cab453ac1de /parser/media/src/main/java
parentdad4e405d48c13ec3c3ab90700b3969795778d3f (diff)
downloadAntennaPod-ce8e356647734509388adef15338e535a714d90c.zip
Extract shownotes from id3 comment field
Diffstat (limited to 'parser/media/src/main/java')
-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;
+ }
+}