spotube/lib/models/lyrics.dart
2024-04-05 00:48:08 +06:00

73 lines
1.5 KiB
Dart

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})";
}
}