1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-30 06:56:10 +00:00
This commit is contained in:
Yan Maniez 2020-03-22 21:20:14 +01:00
parent 2d826d5248
commit 76173fbda3
3 changed files with 58 additions and 37 deletions

View file

@ -2,6 +2,8 @@ import 'package:aidedejeu_flutter/models/filters.dart';
import 'package:aidedejeu_flutter/models/items.dart'; import 'package:aidedejeu_flutter/models/items.dart';
abstract class BaseDB { abstract class BaseDB {
Future<List<Item>> loadAllItems();
Future<Item> getItemWithId(String id); Future<Item> getItemWithId(String id);
Future<Item> loadChildrenItems(Item item, List<Filter> filters); Future<Item> loadChildrenItems(Item item, List<Filter> filters);

View file

@ -31,6 +31,20 @@ class SembastDB extends BaseDB {
return await dbFactory.openDatabase(dbPath); return await dbFactory.openDatabase(dbPath);
} }
@override
Future<List<Item>> loadAllItems() async {
throw UnimplementedError();
}
@override
Future<void> saveAllItems(List<Item> items) async {
var store = StoreRef.main();
for(int i = 0; i<items.length;i++) {
var item = items[i];
//await store.record(item.id).put(_database,item.toMap());
}
}
@override @override
Future<Item> getItemWithId(String id) { Future<Item> getItemWithId(String id) {
// TODO: implement getItemWithId // TODO: implement getItemWithId

View file

@ -9,12 +9,14 @@ import 'package:sqflite/sqflite.dart';
class SqfliteDB extends BaseDB { class SqfliteDB extends BaseDB {
static SqfliteDB _instance; static SqfliteDB _instance;
static SqfliteDB get instance { static SqfliteDB get instance {
if(_instance == null) { if (_instance == null) {
_instance = SqfliteDB(); _instance = SqfliteDB();
} }
return _instance; return _instance;
} }
Database _database; Database _database;
Future<Database> get database async { Future<Database> get database async {
@ -38,7 +40,7 @@ class SqfliteDB extends BaseDB {
ByteData data = await rootBundle.load(join("assets", "library.db")); ByteData data = await rootBundle.load(join("assets", "library.db"));
List<int> bytes = List<int> bytes =
data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
await File(path).writeAsBytes(bytes, flush: true); await File(path).writeAsBytes(bytes, flush: true);
} else { } else {
@ -48,25 +50,36 @@ class SqfliteDB extends BaseDB {
return await openDatabase(path, readOnly: true); return await openDatabase(path, readOnly: true);
} }
@override
Future<List<Item>> loadAllItems() async {
final db = await database;
var response = await db.query(
"Items",
);
if (response.isNotEmpty) {
return itemsFromMapList(response);
}
return null;
}
@override
Future<Item> getItemWithId(String id) async { Future<Item> getItemWithId(String id) async {
print("getItemWithId " + id); print("getItemWithId " + id);
final db = await database; final db = await database;
var response = await db.query( var response = await db
"Items", .query("Items", where: "Id = ? OR RootId = ?", whereArgs: [id, id]);
where: "Id = ? OR RootId = ?",
whereArgs: [id, id]
);
if (response.isEmpty) { if (response.isEmpty) {
print("Id not found"); print("Id not found");
} }
return response.isNotEmpty ? itemFromMap(response.first) : null; return response.isNotEmpty ? itemFromMap(response.first) : null;
} }
Future<Item> loadChildrenItems(Item item, List<Filters.Filter> filters) async { @override
Future<Item> loadChildrenItems(
Item item, List<Filters.Filter> filters) async {
print("getChildrenItems " + (item?.itemType ?? "")); print("getChildrenItems " + (item?.itemType ?? ""));
if (item.itemType.endsWith("Items")) { if (item.itemType.endsWith("Items")) {
String itemType = String itemType = item.itemType.substring(0, item.itemType.length - 1);
item.itemType.substring(0, item.itemType.length - 1);
String family = ""; String family = "";
if (item is FilteredItems) { if (item is FilteredItems) {
family = item.family ?? ""; family = item.family ?? "";
@ -79,82 +92,74 @@ class SqfliteDB extends BaseDB {
filter.selectedValues.join("%' OR ${filter.name} LIKE '%") + filter.selectedValues.join("%' OR ${filter.name} LIKE '%") +
"%')"; "%')";
} }
if (filter.rangeValues != null && (filter.rangeValues.start > 0 || if (filter.rangeValues != null &&
filter.rangeValues.end < filter.values.length - 1)) { (filter.rangeValues.start > 0 ||
filter.rangeValues.end < filter.values.length - 1)) {
whereFilter = whereFilter =
" AND ([${filter.name}] BETWEEN '${filter.values[filter.rangeValues " AND ([${filter.name}] BETWEEN '${filter.values[filter.rangeValues.start.round()]}' AND '${filter.values[filter.rangeValues.end.round()]}')";
.start.round()]}' AND '${filter.values[filter.rangeValues.end
.round()]}')";
} }
}); });
} }
print(whereFilter); print(whereFilter);
final db = await database; final db = await database;
var response = await db.query( var response = await db.query("Items",
"Items",
where: "ItemType = ? AND Family = ?" + whereFilter, where: "ItemType = ? AND Family = ?" + whereFilter,
whereArgs: [itemType, family], whereArgs: [itemType, family],
orderBy: "NormalizedName" orderBy: "NormalizedName");
);
if (response.isEmpty) { if (response.isEmpty) {
print("Children not found"); print("Children not found");
} }
item.children = response.isNotEmpty item.children = response.isNotEmpty ? itemsFromMapList(response) : null;
? itemsFromMapList(response)
: null;
} }
return item; return item;
} }
@override
Future<List<RaceItem>> loadRaces() async { Future<List<RaceItem>> loadRaces() async {
final db = await database; final db = await database;
var response = await db.query( var response = await db.query("Items",
"Items", where: "ItemType = 'RaceItem'", orderBy: "NormalizedName");
where: "ItemType = 'RaceItem'",
orderBy: "NormalizedName"
);
if (response.isNotEmpty) { if (response.isNotEmpty) {
return itemsFromMapList(response); return itemsFromMapList(response);
} }
return null; return null;
} }
@override
Future<List<SubRaceItem>> loadSubRaces(RaceItem race) async { Future<List<SubRaceItem>> loadSubRaces(RaceItem race) async {
final db = await database; final db = await database;
var response = await db.query( var response = await db.query("Items",
"Items",
where: "ItemType = 'SubRaceItem' AND ParentLink = ?", where: "ItemType = 'SubRaceItem' AND ParentLink = ?",
whereArgs: [race.id], whereArgs: [race.id],
orderBy: "NormalizedName" orderBy: "NormalizedName");
);
if (response.isNotEmpty) { if (response.isNotEmpty) {
return itemsFromMapList(response); return itemsFromMapList(response);
} }
return null; return null;
} }
@override
Future<List<T>> loadTypedItems<T extends Item>( Future<List<T>> loadTypedItems<T extends Item>(
{String itemType, Item item}) async { {String itemType, Item item}) async {
final db = await database; final db = await database;
var response = await db.query( var response = await db.query("Items",
"Items",
where: "ItemType = ?" + (item != null ? " AND ParentLink = ?" : ""), where: "ItemType = ?" + (item != null ? " AND ParentLink = ?" : ""),
whereArgs: item != null ? [itemType, item.id] : [itemType], whereArgs: item != null ? [itemType, item.id] : [itemType],
orderBy: "NormalizedName" orderBy: "NormalizedName");
);
if (response.isNotEmpty) { if (response.isNotEmpty) {
return itemsFromMapList(response); return itemsFromMapList(response);
} }
return null; return null;
} }
@override
Future<List<BackgroundItem>> loadBackgrounds() async { Future<List<BackgroundItem>> loadBackgrounds() async {
return loadTypedItems<BackgroundItem>(itemType: "BackgroundItem"); return loadTypedItems<BackgroundItem>(itemType: "BackgroundItem");
} }
@override
Future<List<SubBackgroundItem>> loadSubBackgrounds(Item item) async { Future<List<SubBackgroundItem>> loadSubBackgrounds(Item item) async {
return loadTypedItems<SubBackgroundItem>( return loadTypedItems<SubBackgroundItem>(
itemType: "SubBackgroundItem", item: item); itemType: "SubBackgroundItem", item: item);
} }
} }