Files
SpotiFLAC-Mobile/lib/models/track.dart
2026-01-20 02:10:10 +07:00

87 lines
2.0 KiB
Dart

import 'package:json_annotation/json_annotation.dart';
part 'track.g.dart';
@JsonSerializable()
class Track {
final String id;
final String name;
final String artistName;
final String albumName;
final String? albumArtist;
final String? coverUrl;
final String? isrc;
final int duration;
final int? trackNumber;
final int? discNumber;
final String? releaseDate;
final String? deezerId;
final ServiceAvailability? availability;
final String? source;
final String? albumType;
final String? itemType;
const Track({
required this.id,
required this.name,
required this.artistName,
required this.albumName,
this.albumArtist,
this.coverUrl,
this.isrc,
required this.duration,
this.trackNumber,
this.discNumber,
this.releaseDate,
this.deezerId,
this.availability,
this.source,
this.albumType,
this.itemType,
});
bool get isSingle => albumType == 'single' || albumType == 'ep';
bool get isAlbumItem => itemType == 'album';
bool get isPlaylistItem => itemType == 'playlist';
bool get isArtistItem => itemType == 'artist';
bool get isCollection => isAlbumItem || isPlaylistItem || isArtistItem;
factory Track.fromJson(Map<String, dynamic> json) => _$TrackFromJson(json);
Map<String, dynamic> toJson() => _$TrackToJson(this);
bool get isFromExtension => source != null && source!.isNotEmpty;
}
@JsonSerializable()
class ServiceAvailability {
final bool tidal;
final bool qobuz;
final bool amazon;
final bool deezer;
final String? tidalUrl;
final String? qobuzUrl;
final String? amazonUrl;
final String? deezerUrl;
final String? deezerId;
const ServiceAvailability({
this.tidal = false,
this.qobuz = false,
this.amazon = false,
this.deezer = false,
this.tidalUrl,
this.qobuzUrl,
this.amazonUrl,
this.deezerUrl,
this.deezerId,
});
factory ServiceAvailability.fromJson(Map<String, dynamic> json) =>
_$ServiceAvailabilityFromJson(json);
Map<String, dynamic> toJson() => _$ServiceAvailabilityToJson(this);
}