mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-06-19 00:05:16 +00:00
Do not use SQLite anymore for users
This commit is contained in:
@ -13,18 +13,6 @@ abstract class BaseTableContract {
|
||||
static const C_ID = "id";
|
||||
}
|
||||
|
||||
/// User table contract
|
||||
abstract class UserTableContract {
|
||||
static const TABLE_NAME = "users";
|
||||
static const C_ID = BaseTableContract.C_ID;
|
||||
static const C_FIRST_NAME = "first_name";
|
||||
static const C_LAST_NAME = "last_name";
|
||||
static const C_VISIBILITY = "visibility";
|
||||
static const C_VIRTUAL_DIRECTORY = "virtual_directory";
|
||||
static const C_ACCOUNT_IMAGE_URL = "account_image_url";
|
||||
static const C_CUSTOM_EMOJIES = "custom_emojies";
|
||||
}
|
||||
|
||||
/// Friends table contract
|
||||
abstract class FriendsListTableContract {
|
||||
static const TABLE_NAME = "friends";
|
||||
|
@ -1,5 +1,4 @@
|
||||
import 'package:comunic/helpers/database/database_contract.dart';
|
||||
import 'package:connectivity/connectivity.dart';
|
||||
import 'package:path/path.dart';
|
||||
import 'package:sqflite/sqflite.dart';
|
||||
|
||||
@ -30,21 +29,11 @@ abstract class DatabaseHelper {
|
||||
return _db;
|
||||
}
|
||||
|
||||
/// Cleanup database
|
||||
static Future<void> cleanUpDatabase() async {
|
||||
// If connected to a network, cleanup user information
|
||||
if (await Connectivity().checkConnectivity() != ConnectivityResult.none)
|
||||
await _db.execute("DELETE FROM ${UserTableContract.TABLE_NAME}");
|
||||
}
|
||||
|
||||
/// Perform database update
|
||||
///
|
||||
/// Currently : delete all the database tables and initialize it again
|
||||
static Future<void> _performDatabaseUpdate(
|
||||
Database db, int oldVersion, int newVersion) async {
|
||||
// Drop users table
|
||||
await db.execute("DROP TABLE IF EXISTS ${UserTableContract.TABLE_NAME}");
|
||||
|
||||
// Drop friends list table
|
||||
await db
|
||||
.execute("DROP TABLE IF EXISTS ${FriendsListTableContract.TABLE_NAME}");
|
||||
@ -55,17 +44,6 @@ abstract class DatabaseHelper {
|
||||
|
||||
/// Initialize the database
|
||||
static Future<void> _initializeDatabase(Database db, int version) async {
|
||||
// Create users table
|
||||
await db.execute("CREATE TABLE ${UserTableContract.TABLE_NAME} ("
|
||||
"${UserTableContract.C_ID} INTEGER PRIMARY KEY, "
|
||||
"${UserTableContract.C_FIRST_NAME} TEXT, "
|
||||
"${UserTableContract.C_LAST_NAME} TEXT, "
|
||||
"${UserTableContract.C_VISIBILITY} TEXT, "
|
||||
"${UserTableContract.C_VIRTUAL_DIRECTORY} TEXT, "
|
||||
"${UserTableContract.C_ACCOUNT_IMAGE_URL} TEXT, "
|
||||
"${UserTableContract.C_CUSTOM_EMOJIES} TEXT"
|
||||
")");
|
||||
|
||||
// Friends list table
|
||||
await db.execute("CREATE TABLE ${FriendsListTableContract.TABLE_NAME} ("
|
||||
"${FriendsListTableContract.C_ID} INTEGER PRIMARY KEY, "
|
||||
|
@ -1,24 +0,0 @@
|
||||
import 'package:comunic/helpers/database/model_database_helper.dart';
|
||||
import 'package:comunic/models/user.dart';
|
||||
|
||||
import 'database_contract.dart';
|
||||
|
||||
/// User database helper
|
||||
///
|
||||
/// @author Pierre HUBERT
|
||||
|
||||
class UsersDatabaseHelper extends ModelDatabaseHelper<User> {
|
||||
|
||||
|
||||
@override
|
||||
String tableName() {
|
||||
return UserTableContract.TABLE_NAME;
|
||||
}
|
||||
|
||||
@override
|
||||
User initializeFromMap(Map<String, dynamic> map) {
|
||||
return User.fromMap(map);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -102,6 +102,8 @@ abstract class BaseSerializationHelper<T extends SerializableElement> {
|
||||
return _cache.any((element) => isContained(element));
|
||||
}
|
||||
|
||||
Future<bool> has(T el) => any((t) => t == el);
|
||||
|
||||
/// Check if any entry in the last match the predicate
|
||||
Future<T> first(bool filter(T t)) async {
|
||||
await _loadCache();
|
||||
@ -120,10 +122,26 @@ abstract class BaseSerializationHelper<T extends SerializableElement> {
|
||||
await _saveCache();
|
||||
}
|
||||
|
||||
/// Insert or replace many elements
|
||||
Future<void> insertOrReplaceElements(List<T> list) async {
|
||||
await _loadCache();
|
||||
|
||||
_cache.removeWhere((element) => list.any((newEl) => element == newEl));
|
||||
_cache.addAll(list);
|
||||
|
||||
await _saveCache();
|
||||
}
|
||||
|
||||
/// Remove elements
|
||||
Future<void> removeElement(bool isToRemove(T t)) async {
|
||||
await _loadCache();
|
||||
_cache.removeWhere((element) => isToRemove(element));
|
||||
await _saveCache();
|
||||
}
|
||||
|
||||
/// Remove all elements
|
||||
Future<void> removeAll() async {
|
||||
_cache = [];
|
||||
await _saveCache();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,28 @@
|
||||
import 'package:comunic/helpers/serialization/base_serialization_helper.dart';
|
||||
import 'package:comunic/models/user.dart';
|
||||
|
||||
/// User serialization helper
|
||||
///
|
||||
/// @author Pierre Hubert
|
||||
|
||||
UsersListSerialisationHelper _singleton;
|
||||
|
||||
class UsersListSerialisationHelper extends BaseSerializationHelper<User> {
|
||||
UsersListSerialisationHelper._();
|
||||
|
||||
factory UsersListSerialisationHelper() {
|
||||
if (_singleton == null) _singleton = UsersListSerialisationHelper._();
|
||||
|
||||
return _singleton;
|
||||
}
|
||||
|
||||
@override
|
||||
String get type => "users-list";
|
||||
|
||||
@override
|
||||
User parse(Map<String, dynamic> m) => User.fromJson(m);
|
||||
|
||||
/// Remove a user by its ID
|
||||
Future<void> removeUserByID(int userID) =>
|
||||
removeElement((t) => t.id == userID);
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
import 'package:comunic/enums/user_page_visibility.dart';
|
||||
import 'package:comunic/helpers/database/users_database_helper.dart';
|
||||
import 'package:comunic/helpers/serialization/user_list_serialization_helper.dart';
|
||||
import 'package:comunic/lists/custom_emojies_list.dart';
|
||||
import 'package:comunic/lists/users_list.dart';
|
||||
import 'package:comunic/models/advanced_user_info.dart';
|
||||
@ -27,7 +27,6 @@ class GetUserAdvancedUserError extends Error {
|
||||
}
|
||||
|
||||
class UsersHelper {
|
||||
final UsersDatabaseHelper _usersDatabaseHelper = UsersDatabaseHelper();
|
||||
|
||||
/// Download information about some given users ID
|
||||
///
|
||||
@ -64,7 +63,7 @@ class UsersHelper {
|
||||
);
|
||||
|
||||
// Save the list
|
||||
_usersDatabaseHelper.insertOrUpdateAll(list);
|
||||
await UsersListSerialisationHelper().insertOrReplaceElements(list);
|
||||
|
||||
return list;
|
||||
}
|
||||
@ -114,8 +113,8 @@ class UsersHelper {
|
||||
|
||||
// Check cache
|
||||
for (int userID in users) {
|
||||
if (!forceDownload && await _usersDatabaseHelper.has(userID))
|
||||
list.add(await _usersDatabaseHelper.get(userID));
|
||||
if (!forceDownload && await UsersListSerialisationHelper().any((u) => u.id == userID))
|
||||
list.add(await UsersListSerialisationHelper().first((u) => u.id == userID));
|
||||
else
|
||||
toDownload.add(userID);
|
||||
}
|
||||
|
Reference in New Issue
Block a user