mirror of
https://github.com/KRTirtho/spotube.git
synced 2026-02-04 16:02:54 +00:00
151 lines
4.3 KiB
Dart
151 lines
4.3 KiB
Dart
part of 'metadata.dart';
|
|
|
|
extension AsMediaListSpotubeTrackObject on Iterable<SpotubeTrackObject> {
|
|
List<SpotubeMedia> asMediaList() {
|
|
return map((track) => SpotubeMedia(track)).toList();
|
|
}
|
|
}
|
|
|
|
extension FullAsPartialSpotubeTrackObject on Iterable<SpotubeFullTrackObject>? {
|
|
List<SpotubeTrackObject>? union() {
|
|
return this?.map((track) => SpotubeTrackObject.full(track)).toList();
|
|
}
|
|
}
|
|
|
|
extension FullAsSpotubeTrackObject on Iterable<SpotubeFullTrackObject> {
|
|
List<SpotubeTrackObject> union() {
|
|
return map((track) => SpotubeTrackObject.full(track)).toList();
|
|
}
|
|
}
|
|
|
|
extension LocalAsPartialSpotubeTrackObject
|
|
on Iterable<SpotubeLocalTrackObject>? {
|
|
List<SpotubeTrackObject>? union() {
|
|
return this?.map((track) => SpotubeTrackObject.local(track)).toList();
|
|
}
|
|
}
|
|
|
|
extension LocalAsSpotubeTrackObject on Iterable<SpotubeLocalTrackObject> {
|
|
List<SpotubeTrackObject> union() {
|
|
return map((track) => SpotubeTrackObject.local(track)).toList();
|
|
}
|
|
}
|
|
|
|
extension ToMetadataSpotubeFullTrackObject on SpotubeTrackObject {
|
|
Metadata toMetadata({
|
|
required int fileLength,
|
|
Uint8List? imageBytes,
|
|
String? mimeType,
|
|
}) {
|
|
return Metadata(
|
|
title: name,
|
|
artist: artists.map((a) => a.name).join(", "),
|
|
album: album.name,
|
|
albumArtist: artists.map((a) => a.name).join(", "),
|
|
year: album.releaseDate == null
|
|
? 1970
|
|
: DateTime.tryParse(album.releaseDate!)?.year ??
|
|
int.tryParse(album.releaseDate!) ??
|
|
1970,
|
|
durationMs: durationMs.toDouble(),
|
|
fileSize: BigInt.from(fileLength),
|
|
picture: imageBytes != null
|
|
? Picture(
|
|
data: imageBytes,
|
|
mimeType: mimeType ??
|
|
lookupMimeType("", headerBytes: imageBytes) ??
|
|
"image/jpeg",
|
|
)
|
|
: null,
|
|
);
|
|
}
|
|
}
|
|
|
|
extension CommonTrackProperties on SpotubeTrackObject {
|
|
String get id => when(
|
|
full: (track) => track.id,
|
|
local: (track) => track.id,
|
|
);
|
|
|
|
String get name => when(
|
|
full: (track) => track.name,
|
|
local: (track) => track.name,
|
|
);
|
|
|
|
String get externalUri => when(
|
|
full: (track) => track.externalUri,
|
|
local: (track) => track.externalUri,
|
|
);
|
|
|
|
int get durationMs => when(
|
|
full: (track) => track.durationMs,
|
|
local: (track) => track.durationMs,
|
|
);
|
|
|
|
SpotubeSimpleAlbumObject get album => when(
|
|
full: (track) => track.album,
|
|
local: (track) => track.album,
|
|
);
|
|
List<SpotubeSimpleArtistObject> get artists => when(
|
|
full: (track) => track.artists,
|
|
local: (track) => track.artists,
|
|
);
|
|
}
|
|
|
|
SpotubeLocalTrackObject localTrackFromFile(
|
|
File file, {
|
|
Metadata? metadata,
|
|
String? art,
|
|
}) {
|
|
return SpotubeLocalTrackObject(
|
|
// typeName: "track_local",
|
|
id: file.absolute.path,
|
|
name: metadata?.title ?? basenameWithoutExtension(file.path),
|
|
externalUri: "file://${file.absolute.path}",
|
|
artists: metadata?.artist?.split(",").map((a) {
|
|
return SpotubeSimpleArtistObject(
|
|
// typeName: "artist_simple",
|
|
id: a.trim(),
|
|
name: a.trim(),
|
|
externalUri: "file://${file.absolute.path}",
|
|
);
|
|
}).toList() ??
|
|
[
|
|
SpotubeSimpleArtistObject(
|
|
// typeName: "artist_simple",
|
|
id: "unknown",
|
|
name: "Unknown Artist",
|
|
externalUri: "file://${file.absolute.path}",
|
|
),
|
|
],
|
|
album: SpotubeSimpleAlbumObject(
|
|
// typeName: "album_simple",
|
|
albumType: SpotubeAlbumType.album,
|
|
id: metadata?.album ?? "unknown",
|
|
name: metadata?.album ?? "Unknown Album",
|
|
externalUri: "file://${file.absolute.path}",
|
|
artists: [
|
|
SpotubeSimpleArtistObject(
|
|
// typeName: "artist_simple",
|
|
id: metadata?.albumArtist ?? "unknown",
|
|
name: metadata?.albumArtist ?? "Unknown Artist",
|
|
externalUri: "file://${file.absolute.path}",
|
|
),
|
|
],
|
|
releaseDate:
|
|
metadata?.year != null ? "${metadata!.year}-01-01" : "1970-01-01",
|
|
images: [
|
|
if (art != null)
|
|
SpotubeImageObject(
|
|
// typeName: "image",
|
|
url: art,
|
|
width: 300,
|
|
height: 300,
|
|
),
|
|
],
|
|
),
|
|
durationMs: metadata?.durationMs?.toInt() ?? 0,
|
|
path: file.path,
|
|
);
|
|
}
|