diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/lyrics/AbsSynchronizedLyrics.java b/app/src/main/java/com/kabouzeid/gramophone/model/lyrics/AbsSynchronizedLyrics.java index cb7e4478..e3116bfa 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/lyrics/AbsSynchronizedLyrics.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/lyrics/AbsSynchronizedLyrics.java @@ -2,18 +2,12 @@ package com.kabouzeid.gramophone.model.lyrics; import android.util.SparseArray; -import com.kabouzeid.gramophone.model.Song; - public abstract class AbsSynchronizedLyrics extends Lyrics { private static final int TIME_OFFSET_MS = 500; // time adjustment to display line before it actually starts public final SparseArray lines = new SparseArray<>(); public int offset = 0; - AbsSynchronizedLyrics(Song song, String data) { - super(song, data); - } - public String getLine(int time) { time += offset + AbsSynchronizedLyrics.TIME_OFFSET_MS; diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/lyrics/Lyrics.java b/app/src/main/java/com/kabouzeid/gramophone/model/lyrics/Lyrics.java index 8317ab48..82fb5855 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/lyrics/Lyrics.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/lyrics/Lyrics.java @@ -2,30 +2,45 @@ package com.kabouzeid.gramophone.model.lyrics; import com.kabouzeid.gramophone.model.Song; +import java.util.ArrayList; + public class Lyrics { + private static final ArrayList> FORMATS = new ArrayList<>(); + public Song song; public String data; boolean parsed = false; boolean valid = false; - public Lyrics(Song song, String data) { + public Lyrics setData(Song song, String data) { this.song = song; this.data = data; + return this; } public static Lyrics parse(Song song, String data) { - Lyrics lyrics = new SynchronizedLyricsLRC(song, data); - if (lyrics.isValid()) { - return lyrics.parse(false); - } else { - return new Lyrics(song, data).parse(false); + for (Class format : Lyrics.FORMATS) { + try { + Lyrics lyrics = format.newInstance().setData(song, data); + if (lyrics.isValid()) return lyrics; + } catch (Exception e) { + e.printStackTrace(); + } } + return new Lyrics().setData(song, data); } public static boolean isSynchronized(String data) { - Lyrics lyrics = new SynchronizedLyricsLRC(null, data); - return lyrics.isValid(); + for (Class format : Lyrics.FORMATS) { + try { + Lyrics lyrics = format.newInstance().setData(null, data); + if (lyrics.isValid()) return true; + } catch (Exception e) { + e.printStackTrace(); + } + } + return false; } public Lyrics parse(boolean check) { @@ -46,4 +61,8 @@ public class Lyrics { public String getText() { return this.data; } + + static { + Lyrics.FORMATS.add(SynchronizedLyricsLRC.class); + } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/lyrics/SynchronizedLyricsLRC.java b/app/src/main/java/com/kabouzeid/gramophone/model/lyrics/SynchronizedLyricsLRC.java index 49bdf54f..3d1e3632 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/lyrics/SynchronizedLyricsLRC.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/lyrics/SynchronizedLyricsLRC.java @@ -1,7 +1,5 @@ package com.kabouzeid.gramophone.model.lyrics; -import com.kabouzeid.gramophone.model.Song; - import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -13,10 +11,6 @@ class SynchronizedLyricsLRC extends AbsSynchronizedLyrics { private static final float LRC_SECONDS_TO_MS_MULTIPLIER = 1000f; private static final int LRC_MINUTES_TO_MS_MULTIPLIER = 60000; - SynchronizedLyricsLRC(Song song, String data) { - super(song, data); - } - @Override public SynchronizedLyricsLRC parse(boolean check) { if (this.parsed || this.data == null || this.data.isEmpty()) {