diff options
author | ByteHamster <info@bytehamster.com> | 2022-03-06 17:43:39 +0100 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2022-03-09 22:08:32 +0100 |
commit | ce8e356647734509388adef15338e535a714d90c (patch) | |
tree | 1107bb74a7024bb4da45fa73eee68cab453ac1de /parser/media/src/main/java | |
parent | dad4e405d48c13ec3c3ab90700b3969795778d3f (diff) | |
download | AntennaPod-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.java | 39 |
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; + } +} |