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
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;
|
|
}
|