diff --git a/aidedejeu_flutter/lib/databases/database.dart b/aidedejeu_flutter/lib/databases/database.dart index fd0a4b91..e32114da 100644 --- a/aidedejeu_flutter/lib/databases/database.dart +++ b/aidedejeu_flutter/lib/databases/database.dart @@ -2,6 +2,8 @@ import 'package:aidedejeu_flutter/models/filters.dart'; import 'package:aidedejeu_flutter/models/items.dart'; abstract class BaseDB { + Future> loadAllItems(); + Future getItemWithId(String id); Future loadChildrenItems(Item item, List filters); diff --git a/aidedejeu_flutter/lib/databases/database_sembast.dart b/aidedejeu_flutter/lib/databases/database_sembast.dart index 6d4eda82..d820dade 100644 --- a/aidedejeu_flutter/lib/databases/database_sembast.dart +++ b/aidedejeu_flutter/lib/databases/database_sembast.dart @@ -31,6 +31,20 @@ class SembastDB extends BaseDB { return await dbFactory.openDatabase(dbPath); } + @override + Future> loadAllItems() async { + throw UnimplementedError(); + } + + @override + Future saveAllItems(List items) async { + var store = StoreRef.main(); + for(int i = 0; i getItemWithId(String id) { // TODO: implement getItemWithId diff --git a/aidedejeu_flutter/lib/databases/database_sqflite.dart b/aidedejeu_flutter/lib/databases/database_sqflite.dart index d8278f1b..4c160b48 100644 --- a/aidedejeu_flutter/lib/databases/database_sqflite.dart +++ b/aidedejeu_flutter/lib/databases/database_sqflite.dart @@ -9,12 +9,14 @@ import 'package:sqflite/sqflite.dart'; class SqfliteDB extends BaseDB { static SqfliteDB _instance; + static SqfliteDB get instance { - if(_instance == null) { + if (_instance == null) { _instance = SqfliteDB(); } return _instance; } + Database _database; Future get database async { @@ -38,7 +40,7 @@ class SqfliteDB extends BaseDB { ByteData data = await rootBundle.load(join("assets", "library.db")); List bytes = - data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); + data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); await File(path).writeAsBytes(bytes, flush: true); } else { @@ -48,25 +50,36 @@ class SqfliteDB extends BaseDB { return await openDatabase(path, readOnly: true); } + @override + Future> loadAllItems() async { + final db = await database; + var response = await db.query( + "Items", + ); + if (response.isNotEmpty) { + return itemsFromMapList(response); + } + return null; + } + + @override Future getItemWithId(String id) async { print("getItemWithId " + id); final db = await database; - var response = await db.query( - "Items", - where: "Id = ? OR RootId = ?", - whereArgs: [id, id] - ); + var response = await db + .query("Items", where: "Id = ? OR RootId = ?", whereArgs: [id, id]); if (response.isEmpty) { print("Id not found"); } return response.isNotEmpty ? itemFromMap(response.first) : null; } - Future loadChildrenItems(Item item, List filters) async { + @override + Future loadChildrenItems( + Item item, List filters) async { print("getChildrenItems " + (item?.itemType ?? "")); if (item.itemType.endsWith("Items")) { - String itemType = - item.itemType.substring(0, item.itemType.length - 1); + String itemType = item.itemType.substring(0, item.itemType.length - 1); String family = ""; if (item is FilteredItems) { family = item.family ?? ""; @@ -79,82 +92,74 @@ class SqfliteDB extends BaseDB { filter.selectedValues.join("%' OR ${filter.name} LIKE '%") + "%')"; } - if (filter.rangeValues != null && (filter.rangeValues.start > 0 || - filter.rangeValues.end < filter.values.length - 1)) { + if (filter.rangeValues != null && + (filter.rangeValues.start > 0 || + filter.rangeValues.end < filter.values.length - 1)) { whereFilter = - " AND ([${filter.name}] BETWEEN '${filter.values[filter.rangeValues - .start.round()]}' AND '${filter.values[filter.rangeValues.end - .round()]}')"; + " AND ([${filter.name}] BETWEEN '${filter.values[filter.rangeValues.start.round()]}' AND '${filter.values[filter.rangeValues.end.round()]}')"; } }); } print(whereFilter); final db = await database; - var response = await db.query( - "Items", + var response = await db.query("Items", where: "ItemType = ? AND Family = ?" + whereFilter, whereArgs: [itemType, family], - orderBy: "NormalizedName" - ); + orderBy: "NormalizedName"); if (response.isEmpty) { print("Children not found"); } - item.children = response.isNotEmpty - ? itemsFromMapList(response) - : null; + item.children = response.isNotEmpty ? itemsFromMapList(response) : null; } return item; } + @override Future> loadRaces() async { final db = await database; - var response = await db.query( - "Items", - where: "ItemType = 'RaceItem'", - orderBy: "NormalizedName" - ); + var response = await db.query("Items", + where: "ItemType = 'RaceItem'", orderBy: "NormalizedName"); if (response.isNotEmpty) { return itemsFromMapList(response); } return null; } + @override Future> loadSubRaces(RaceItem race) async { final db = await database; - var response = await db.query( - "Items", + var response = await db.query("Items", where: "ItemType = 'SubRaceItem' AND ParentLink = ?", whereArgs: [race.id], - orderBy: "NormalizedName" - ); + orderBy: "NormalizedName"); if (response.isNotEmpty) { return itemsFromMapList(response); } return null; } + @override Future> loadTypedItems( {String itemType, Item item}) async { final db = await database; - var response = await db.query( - "Items", + var response = await db.query("Items", where: "ItemType = ?" + (item != null ? " AND ParentLink = ?" : ""), whereArgs: item != null ? [itemType, item.id] : [itemType], - orderBy: "NormalizedName" - ); + orderBy: "NormalizedName"); if (response.isNotEmpty) { return itemsFromMapList(response); } return null; } + @override Future> loadBackgrounds() async { return loadTypedItems(itemType: "BackgroundItem"); } + @override Future> loadSubBackgrounds(Item item) async { return loadTypedItems( itemType: "SubBackgroundItem", item: item); } - -} \ No newline at end of file +}