You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.7 KiB
Dart

import 'dart:convert';
import '../../../core/status.dart';
class Game {
final int id; // DB id
final int igdbId;
final String name;
final String? localizedTitle;
final String? originalName;
final ItemStatus status;
final String? note;
final String? summary;
final String? coverUrl;
final int? releaseYear;
final bool locked;
final Map<String, dynamic>? rawJson;
Game({
required this.id,
required this.igdbId,
required this.name,
this.localizedTitle,
this.originalName,
this.status = ItemStatus.Init,
this.note,
this.summary,
this.coverUrl,
this.releaseYear,
this.locked = false,
this.rawJson,
});
factory Game.fromJson(Map<String, dynamic> j) {
Map<String, dynamic>? parsedJson;
final jsonString = j['json'] as String?;
if (jsonString != null && jsonString.isNotEmpty) {
try {
parsedJson = Map<String, dynamic>.from(
jsonDecode(jsonString) as Map<dynamic, dynamic>);
} catch (_) {}
}
return Game(
id: (j['id'] as num).toInt(),
igdbId: (j['igdb_id'] as num).toInt(),
name: (j['name'] ?? '') as String,
localizedTitle: j['loc_title'] as String?,
originalName: j['original_name'] as String?,
status: j['status'] != null ? statusFromString(j['status'] as String) : ItemStatus.Init,
note: j['note'] as String?,
summary: j['loc_summary'] as String?,
coverUrl: j['cover_url'] as String?,
releaseYear: (j['release_year'] as num?)?.toInt(),
locked: ((j['loc_locked'] ?? j['locked'] ?? 0) as num?)?.toInt() == 1,
rawJson: parsedJson,
);
}
String get displayName => (localizedTitle != null && localizedTitle!.isNotEmpty) ? localizedTitle! : name;
}