content: package allen.town.podcast.parser.media.id3;
  
  import androidx.annotation.NonNull;
  import allen.town.podcast.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;
      }
  }
  