RhythmBox/lib/services/track.dart

71 lines
1.9 KiB
Dart
Raw Normal View History

2024-08-29 17:56:21 +00:00
import 'dart:io';
import 'package:metadata_god/metadata_god.dart';
import 'package:path/path.dart';
import 'package:rhythm_box/services/audio_player/audio_player.dart';
import 'package:spotify/spotify.dart';
extension TrackExtensions on Track {
Track fromFile(
File file, {
Metadata? metadata,
String? art,
}) {
album = Album()
..name = metadata?.album ?? 'Unknown'
..images = [if (art != null) Image()..url = art]
..genres = [if (metadata?.genre != null) metadata!.genre!]
..artists = [
Artist()
..name = metadata?.albumArtist ?? 'Unknown'
..id = metadata?.albumArtist ?? 'Unknown'
..type = 'artist',
]
..id = metadata?.album
..releaseDate = metadata?.year?.toString();
artists = [
Artist()
..name = metadata?.artist ?? 'Unknown'
..id = metadata?.artist ?? 'Unknown'
];
id = metadata?.title ?? basenameWithoutExtension(file.path);
name = metadata?.title ?? basenameWithoutExtension(file.path);
type = 'track';
uri = file.path;
durationMs = (metadata?.durationMs?.toInt() ?? 0);
return this;
}
}
extension TrackSimpleExtensions on TrackSimple {
Track asTrack(AlbumSimple album) {
Track track = Track();
track.name = name;
track.album = album;
track.artists = artists;
track.availableMarkets = availableMarkets;
track.discNumber = discNumber;
track.durationMs = durationMs;
track.explicit = explicit;
track.externalUrls = externalUrls;
track.href = href;
track.id = id;
track.isPlayable = isPlayable;
track.linkedFrom = linkedFrom;
track.name = name;
track.previewUrl = previewUrl;
track.trackNumber = trackNumber;
track.type = type;
track.uri = uri;
return track;
}
}
extension TracksToMediaExtension on Iterable<Track> {
List<RhythmMedia> asMediaList() {
return map((track) => RhythmMedia(track)).toList();
}
}