RhythmBox/lib/services/lyrics.dart

73 lines
1.5 KiB
Dart
Raw Normal View History

import 'package:lrc/lrc.dart';
class SubtitleSimple {
Uri uri;
String name;
List<LyricSlice> lyrics;
int rating;
String provider;
SubtitleSimple({
required this.uri,
required this.name,
required this.lyrics,
required this.rating,
required this.provider,
});
factory SubtitleSimple.fromJson(Map<String, dynamic> json) {
return SubtitleSimple(
uri: Uri.parse(json['uri'] as String),
name: json['name'] as String,
lyrics: (json['lyrics'] as List<dynamic>)
.map((e) => LyricSlice.fromJson(e as Map<String, dynamic>))
.toList(),
rating: json['rating'] as int,
provider: json['provider'] as String? ?? 'unknown',
);
}
Map<String, dynamic> toJson() {
return {
'uri': uri.toString(),
'name': name,
'lyrics': lyrics.map((e) => e.toJson()).toList(),
'rating': rating,
'provider': provider,
};
}
}
class LyricSlice {
Duration time;
String text;
LyricSlice({required this.time, required this.text});
factory LyricSlice.fromLrcLine(LrcLine line) {
return LyricSlice(
time: line.timestamp,
text: line.lyrics.trim(),
);
}
factory LyricSlice.fromJson(Map<String, dynamic> json) {
return LyricSlice(
time: Duration(milliseconds: json['time']),
text: json['text'] as String,
);
}
Map<String, dynamic> toJson() {
return {
'time': time.inMilliseconds,
'text': text,
};
}
@override
String toString() {
return 'LyricsSlice({time: $time, text: $text})';
}
}