Add lyrics format list
This commit is contained in:
parent
c047ea96a7
commit
6086011d8d
3 changed files with 27 additions and 20 deletions
|
|
@ -2,18 +2,12 @@ package com.kabouzeid.gramophone.model.lyrics;
|
||||||
|
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
|
||||||
|
|
||||||
public abstract class AbsSynchronizedLyrics extends Lyrics {
|
public abstract class AbsSynchronizedLyrics extends Lyrics {
|
||||||
private static final int TIME_OFFSET_MS = 500; // time adjustment to display line before it actually starts
|
private static final int TIME_OFFSET_MS = 500; // time adjustment to display line before it actually starts
|
||||||
|
|
||||||
public final SparseArray<String> lines = new SparseArray<>();
|
public final SparseArray<String> lines = new SparseArray<>();
|
||||||
public int offset = 0;
|
public int offset = 0;
|
||||||
|
|
||||||
AbsSynchronizedLyrics(Song song, String data) {
|
|
||||||
super(song, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLine(int time) {
|
public String getLine(int time) {
|
||||||
time += offset + AbsSynchronizedLyrics.TIME_OFFSET_MS;
|
time += offset + AbsSynchronizedLyrics.TIME_OFFSET_MS;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,30 +2,45 @@ package com.kabouzeid.gramophone.model.lyrics;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class Lyrics {
|
public class Lyrics {
|
||||||
|
private static final ArrayList<Class<? extends Lyrics>> FORMATS = new ArrayList<>();
|
||||||
|
|
||||||
public Song song;
|
public Song song;
|
||||||
public String data;
|
public String data;
|
||||||
|
|
||||||
boolean parsed = false;
|
boolean parsed = false;
|
||||||
boolean valid = false;
|
boolean valid = false;
|
||||||
|
|
||||||
public Lyrics(Song song, String data) {
|
public Lyrics setData(Song song, String data) {
|
||||||
this.song = song;
|
this.song = song;
|
||||||
this.data = data;
|
this.data = data;
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Lyrics parse(Song song, String data) {
|
public static Lyrics parse(Song song, String data) {
|
||||||
Lyrics lyrics = new SynchronizedLyricsLRC(song, data);
|
for (Class<? extends Lyrics> format : Lyrics.FORMATS) {
|
||||||
if (lyrics.isValid()) {
|
try {
|
||||||
return lyrics.parse(false);
|
Lyrics lyrics = format.newInstance().setData(song, data);
|
||||||
} else {
|
if (lyrics.isValid()) return lyrics;
|
||||||
return new Lyrics(song, data).parse(false);
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return new Lyrics().setData(song, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSynchronized(String data) {
|
public static boolean isSynchronized(String data) {
|
||||||
Lyrics lyrics = new SynchronizedLyricsLRC(null, data);
|
for (Class<? extends Lyrics> format : Lyrics.FORMATS) {
|
||||||
return lyrics.isValid();
|
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) {
|
public Lyrics parse(boolean check) {
|
||||||
|
|
@ -46,4 +61,8 @@ public class Lyrics {
|
||||||
public String getText() {
|
public String getText() {
|
||||||
return this.data;
|
return this.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
Lyrics.FORMATS.add(SynchronizedLyricsLRC.class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.kabouzeid.gramophone.model.lyrics;
|
package com.kabouzeid.gramophone.model.lyrics;
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
|
||||||
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
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 float LRC_SECONDS_TO_MS_MULTIPLIER = 1000f;
|
||||||
private static final int LRC_MINUTES_TO_MS_MULTIPLIER = 60000;
|
private static final int LRC_MINUTES_TO_MS_MULTIPLIER = 60000;
|
||||||
|
|
||||||
SynchronizedLyricsLRC(Song song, String data) {
|
|
||||||
super(song, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SynchronizedLyricsLRC parse(boolean check) {
|
public SynchronizedLyricsLRC parse(boolean check) {
|
||||||
if (this.parsed || this.data == null || this.data.isEmpty()) {
|
if (this.parsed || this.data == null || this.data.isEmpty()) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue