import 'package:flutter/foundation.dart'; import 'package:photos/db/files_db.dart'; import "package:photos/models/api/entity/type.dart"; import "package:photos/models/local_entity_data.dart"; import 'package:sqflite/sqlite_api.dart'; extension EntitiesDB on FilesDB { Future upsertEntities( List data, { ConflictAlgorithm conflictAlgorithm = ConflictAlgorithm.replace, }) async { debugPrint("entitiesDB: upsertEntities ${data.length} entities"); final db = await database; var batch = db.batch(); int batchCounter = 0; for (LocalEntityData e in data) { if (batchCounter == 400) { await batch.commit(noResult: true); batch = db.batch(); batchCounter = 0; } batch.insert( "entities", e.toJson(), conflictAlgorithm: conflictAlgorithm, ); batchCounter++; } await batch.commit(noResult: true); } Future deleteEntities( List ids, ) async { final db = await database; var batch = db.batch(); int batchCounter = 0; for (String id in ids) { if (batchCounter == 400) { await batch.commit(noResult: true); batch = db.batch(); batchCounter = 0; } batch.delete( "entities", where: "id = ?", whereArgs: [id], ); batchCounter++; } await batch.commit(noResult: true); } Future> getEntities(EntityType type) async { final db = await database; final List> maps = await db.query( "entities", where: "type = ?", whereArgs: [type.typeToString()], ); return List.generate(maps.length, (i) { return LocalEntityData.fromJson(maps[i]); }); } Future getEntity(EntityType type, String id) async { final db = await database; final List> maps = await db.query( "entities", where: "type = ? AND id = ?", whereArgs: [type.typeToString(), id], ); if (maps.isEmpty) { return null; } return LocalEntityData.fromJson(maps.first); } }