diff options
author | ByteHamster <ByteHamster@users.noreply.github.com> | 2022-03-10 07:14:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-10 07:14:48 +0100 |
commit | 36a36e4f853259f34fc3608ed1b21d575129e274 (patch) | |
tree | 9f41f7db48e3c020001fed680f26da0f5046b586 /parser/media | |
parent | 05593a16a9d8632228370526ddf65cadf2593b55 (diff) | |
parent | ce8e356647734509388adef15338e535a714d90c (diff) | |
download | AntennaPod-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.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; + } +} |