From ff3258c34a1797e75538b83baa1e867d0ea07ceb Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 27 Feb 2022 12:12:24 +0100 Subject: Move database to its own module --- .../antennapod/parser/media/id3/ChapterReader.java | 5 +- .../antennapod/parser/media/id3/ID3Chapter.java | 33 -------- .../parser/media/vorbis/VorbisCommentChapter.java | 88 ---------------------- .../media/vorbis/VorbisCommentChapterReader.java | 65 ++++++++++++++-- .../parser/media/id3/ChapterReaderTest.java | 2 +- 5 files changed, 65 insertions(+), 128 deletions(-) delete mode 100644 parser/media/src/main/java/de/danoeh/antennapod/parser/media/id3/ID3Chapter.java delete mode 100644 parser/media/src/main/java/de/danoeh/antennapod/parser/media/vorbis/VorbisCommentChapter.java (limited to 'parser/media/src') diff --git a/parser/media/src/main/java/de/danoeh/antennapod/parser/media/id3/ChapterReader.java b/parser/media/src/main/java/de/danoeh/antennapod/parser/media/id3/ChapterReader.java index ac79432b5..62322e7b2 100644 --- a/parser/media/src/main/java/de/danoeh/antennapod/parser/media/id3/ChapterReader.java +++ b/parser/media/src/main/java/de/danoeh/antennapod/parser/media/id3/ChapterReader.java @@ -50,7 +50,10 @@ public class ChapterReader extends ID3Reader { String elementId = readIsoStringNullTerminated(100); long startTime = readInt(); skipBytes(12); // Ignore end time, start offset, end offset - ID3Chapter chapter = new ID3Chapter(elementId, startTime); + + Chapter chapter = new Chapter(); + chapter.setStart(startTime); + chapter.setChapterId(elementId); // Read sub-frames while (getPosition() < chapterStartedPosition + frameHeader.getSize()) { diff --git a/parser/media/src/main/java/de/danoeh/antennapod/parser/media/id3/ID3Chapter.java b/parser/media/src/main/java/de/danoeh/antennapod/parser/media/id3/ID3Chapter.java deleted file mode 100644 index 5396025e9..000000000 --- a/parser/media/src/main/java/de/danoeh/antennapod/parser/media/id3/ID3Chapter.java +++ /dev/null @@ -1,33 +0,0 @@ -package de.danoeh.antennapod.parser.media.id3; - -import de.danoeh.antennapod.model.feed.Chapter; - -public class ID3Chapter extends Chapter { - public static final int CHAPTERTYPE_ID3CHAPTER = 2; - - /** - * Identifies the chapter in its ID3 tag. This attribute does not have to be - * store in the DB and is only used for parsing. - */ - private String id3ID; - - public ID3Chapter(String id3ID, long start) { - super(start); - this.id3ID = id3ID; - } - - public ID3Chapter(long start, String title, String link, String imageUrl) { - super(start, title, link, imageUrl); - } - - @Override - public String toString() { - return "ID3Chapter [id3ID=" + id3ID + ", title=" + getTitle() + ", start=" - + getStart() + ", url=" + getLink() + "]"; - } - - @Override - public int getChapterType() { - return CHAPTERTYPE_ID3CHAPTER; - } -} diff --git a/parser/media/src/main/java/de/danoeh/antennapod/parser/media/vorbis/VorbisCommentChapter.java b/parser/media/src/main/java/de/danoeh/antennapod/parser/media/vorbis/VorbisCommentChapter.java deleted file mode 100644 index 88ee7fef9..000000000 --- a/parser/media/src/main/java/de/danoeh/antennapod/parser/media/vorbis/VorbisCommentChapter.java +++ /dev/null @@ -1,88 +0,0 @@ -package de.danoeh.antennapod.parser.media.vorbis; - -import java.util.concurrent.TimeUnit; - -import de.danoeh.antennapod.model.feed.Chapter; - -public class VorbisCommentChapter extends Chapter { - public static final int CHAPTERTYPE_VORBISCOMMENT_CHAPTER = 3; - - private static final int CHAPTERXXX_LENGTH = "chapterxxx".length(); - - private int vorbisCommentId; - - public VorbisCommentChapter(int vorbisCommentId) { - this.vorbisCommentId = vorbisCommentId; - } - - public VorbisCommentChapter(long start, String title, String link, String imageUrl) { - super(start, title, link, imageUrl); - } - - @Override - public String toString() { - return "VorbisCommentChapter [id=" + getId() + ", title=" + getTitle() - + ", link=" + getLink() + ", start=" + getStart() + "]"; - } - - public static long getStartTimeFromValue(String value) - throws VorbisCommentReaderException { - String[] parts = value.split(":"); - if (parts.length >= 3) { - try { - long hours = TimeUnit.MILLISECONDS.convert( - Long.parseLong(parts[0]), TimeUnit.HOURS); - long minutes = TimeUnit.MILLISECONDS.convert( - Long.parseLong(parts[1]), TimeUnit.MINUTES); - if (parts[2].contains("-->")) { - parts[2] = parts[2].substring(0, parts[2].indexOf("-->")); - } - long seconds = TimeUnit.MILLISECONDS.convert( - ((long) Float.parseFloat(parts[2])), TimeUnit.SECONDS); - return hours + minutes + seconds; - } catch (NumberFormatException e) { - throw new VorbisCommentReaderException(e); - } - } else { - throw new VorbisCommentReaderException("Invalid time string"); - } - } - - /** - * Return the id of a vorbiscomment chapter from a string like CHAPTERxxx* - * - * @return the id of the chapter key or -1 if the id couldn't be read. - * @throws VorbisCommentReaderException - * */ - public static int getIDFromKey(String key) throws VorbisCommentReaderException { - if (key.length() >= CHAPTERXXX_LENGTH) { // >= CHAPTERxxx - try { - String strId = key.substring(8, 10); - return Integer.parseInt(strId); - } catch (NumberFormatException e) { - throw new VorbisCommentReaderException(e); - } - } - throw new VorbisCommentReaderException("key is too short (" + key + ")"); - } - - /** - * Get the string that comes after 'CHAPTERxxx', for example 'name' or - * 'url'. - */ - public static String getAttributeTypeFromKey(String key) { - if (key.length() > CHAPTERXXX_LENGTH) { - return key.substring(CHAPTERXXX_LENGTH); - } - return null; - } - - @Override - public int getChapterType() { - return CHAPTERTYPE_VORBISCOMMENT_CHAPTER; - } - - public int getVorbisCommentId() { - return vorbisCommentId; - } -} diff --git a/parser/media/src/main/java/de/danoeh/antennapod/parser/media/vorbis/VorbisCommentChapterReader.java b/parser/media/src/main/java/de/danoeh/antennapod/parser/media/vorbis/VorbisCommentChapterReader.java index 82455d180..e3b91a0e7 100644 --- a/parser/media/src/main/java/de/danoeh/antennapod/parser/media/vorbis/VorbisCommentChapterReader.java +++ b/parser/media/src/main/java/de/danoeh/antennapod/parser/media/vorbis/VorbisCommentChapterReader.java @@ -4,6 +4,7 @@ import android.util.Log; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; import de.danoeh.antennapod.model.feed.Chapter; import de.danoeh.antennapod.parser.media.BuildConfig; @@ -14,6 +15,7 @@ public class VorbisCommentChapterReader extends VorbisCommentReader { private static final String CHAPTER_KEY = "chapter\\d\\d\\d.*"; private static final String CHAPTER_ATTRIBUTE_TITLE = "name"; private static final String CHAPTER_ATTRIBUTE_LINK = "url"; + private static final int CHAPTERXXX_LENGTH = "chapterxxx".length(); private List chapters; @@ -41,14 +43,15 @@ public class VorbisCommentChapterReader extends VorbisCommentReader { if (BuildConfig.DEBUG) { Log.d(TAG, "Key: " + key + ", value: " + value); } - String attribute = VorbisCommentChapter.getAttributeTypeFromKey(key); - int id = VorbisCommentChapter.getIDFromKey(key); + String attribute = getAttributeTypeFromKey(key); + int id = getIdFromKey(key); Chapter chapter = getChapterById(id); if (attribute == null) { if (getChapterById(id) == null) { // new chapter - long start = VorbisCommentChapter.getStartTimeFromValue(value); - chapter = new VorbisCommentChapter(id); + long start = getStartTimeFromValue(value); + chapter = new Chapter(); + chapter.setChapterId("" + id); chapter.setStart(start); chapters.add(chapter); } else { @@ -80,13 +83,65 @@ public class VorbisCommentChapterReader extends VorbisCommentReader { private Chapter getChapterById(long id) { for (Chapter c : chapters) { - if (((VorbisCommentChapter) c).getVorbisCommentId() == id) { + if (("" + id).equals(c.getChapterId())) { return c; } } return null; } + public static long getStartTimeFromValue(String value) + throws VorbisCommentReaderException { + String[] parts = value.split(":"); + if (parts.length >= 3) { + try { + long hours = TimeUnit.MILLISECONDS.convert( + Long.parseLong(parts[0]), TimeUnit.HOURS); + long minutes = TimeUnit.MILLISECONDS.convert( + Long.parseLong(parts[1]), TimeUnit.MINUTES); + if (parts[2].contains("-->")) { + parts[2] = parts[2].substring(0, parts[2].indexOf("-->")); + } + long seconds = TimeUnit.MILLISECONDS.convert( + ((long) Float.parseFloat(parts[2])), TimeUnit.SECONDS); + return hours + minutes + seconds; + } catch (NumberFormatException e) { + throw new VorbisCommentReaderException(e); + } + } else { + throw new VorbisCommentReaderException("Invalid time string"); + } + } + + /** + * Return the id of a vorbiscomment chapter from a string like CHAPTERxxx* + * + * @return the id of the chapter key or -1 if the id couldn't be read. + * @throws VorbisCommentReaderException + * */ + private static int getIdFromKey(String key) throws VorbisCommentReaderException { + if (key.length() >= CHAPTERXXX_LENGTH) { // >= CHAPTERxxx + try { + String strId = key.substring(8, 10); + return Integer.parseInt(strId); + } catch (NumberFormatException e) { + throw new VorbisCommentReaderException(e); + } + } + throw new VorbisCommentReaderException("key is too short (" + key + ")"); + } + + /** + * Get the string that comes after 'CHAPTERxxx', for example 'name' or + * 'url'. + */ + private static String getAttributeTypeFromKey(String key) { + if (key.length() > CHAPTERXXX_LENGTH) { + return key.substring(CHAPTERXXX_LENGTH); + } + return null; + } + public List getChapters() { return chapters; } diff --git a/parser/media/src/test/java/de/danoeh/antennapod/parser/media/id3/ChapterReaderTest.java b/parser/media/src/test/java/de/danoeh/antennapod/parser/media/id3/ChapterReaderTest.java index f87764c7f..d7321f766 100644 --- a/parser/media/src/test/java/de/danoeh/antennapod/parser/media/id3/ChapterReaderTest.java +++ b/parser/media/src/test/java/de/danoeh/antennapod/parser/media/id3/ChapterReaderTest.java @@ -96,7 +96,7 @@ public class ChapterReaderTest { FrameHeader header = new FrameHeader(ChapterReader.FRAME_ID_TITLE, titleSubframeContent.length, (short) 0); CountingInputStream inputStream = new CountingInputStream(new ByteArrayInputStream(titleSubframeContent)); ChapterReader reader = new ChapterReader(inputStream); - Chapter chapter = new ID3Chapter("", 0); + Chapter chapter = new Chapter(); reader.readChapterSubFrame(header, chapter); assertEquals("A", chapter.getTitle()); -- cgit v1.2.3