AppMediaItem.fromJSON constructor

AppMediaItem.fromJSON(
  1. dynamic map
)

Implementation

factory AppMediaItem.fromJSON(map) {
  try {
    AppConfig.logger.t("AppMediaItem fromJSON: ${map['name'] ?? ''} with id ${map['id'] ?? ''}");
    int dur = 30;

    if(map['duration'] is String && map['duration'].toString().contains(":")) {
      final List<String> parts = map['duration'].toString().split(':');
      for (int i = 0; i < parts.length; i++) {
        dur += int.parse(parts[i]) * (60 ^ (parts.length - i - 1));
      }
    } else if(map['duration'] is int) {
      dur = map['duration'];
    }

    final appMediaItem = AppMediaItem(
      id: map['id'] ?? '',
      type: EnumToString.fromString(MediaItemType.values, map['type'].toString()) ?? MediaItemType.song,
      album: map['album'] ?? '',
      publishedYear: map['publishedYear'] ?? 0,
      duration: dur,
      language: map['language'] ?? '',
      is320Kbps: map['is320Kbps'] ?? false,
      lyrics: map['lyrics'] ?? '',
      albumId: map['albumId'] ?? '',
      description: map['description'] ?? '',
      name: map['name'] ?? '',
      artist: map['artist'] ?? '',
      featInternalArtists: map['featInternalArtists'] as Map<String, String>?,
      externalArtists: (map['externalArtists'] as List<dynamic>?)?.map((e) => e.toString()).toList(),
      imgUrl: map['imgUrl'] ?? '',
      allImgs: (map['allImgs'] as List<dynamic>?)?.map((e) => e.toString()).toList(),
      url: map['url']?.toString() ?? '',
      permaUrl: map['permaUrl'] ?? '',
      allUrls: (map['allUrls'] as List<dynamic>?)?.map((e) => e.toString()).toList(),
      quality: int.tryParse(map['quality'].toString()),
      releaseDate: map['releaseDate'] ?? 0,
      trackNumber: map['trackNumber'],
      discNumber: map['discNumber'],
      mediaSource: EnumToString.fromString(AppMediaSource.values, map["mediaSource"] ?? AppMediaSource.internal.name) ?? AppMediaSource.internal,
      likes: map['likes'] ?? 0,
      path: map['path'] ?? '',
      state: map['state'] ?? 0,
    );
    return appMediaItem;
  } catch (e) {
    AppConfig.logger.e(e.toString());
    throw Exception('Error parsing song item: $e');
  }
}