mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-25 14:29:22 +00:00
91 lines
2.8 KiB
Dart
91 lines
2.8 KiB
Dart
import 'package:comunic/enums/user_page_visibility.dart';
|
|
import 'package:comunic/helpers/database/users_database_helper.dart';
|
|
import 'package:comunic/lists/users_list.dart';
|
|
import 'package:comunic/models/api_request.dart';
|
|
import 'package:comunic/models/user.dart';
|
|
|
|
/// User helper
|
|
///
|
|
/// Helper used to get information about the users of Comunic
|
|
///
|
|
/// @author Pierre HUBERT
|
|
|
|
class UsersHelper {
|
|
final UsersDatabaseHelper _usersDatabaseHelper = UsersDatabaseHelper();
|
|
|
|
/// Download information about some given users ID
|
|
///
|
|
/// Return the list of users information in case of success, null in case of
|
|
/// failure
|
|
Future<UsersList> _downloadInfo(List<int> users) async {
|
|
// Execute the request
|
|
final response = await APIRequest(
|
|
uri: "user/getInfoMultiple",
|
|
needLogin: true,
|
|
args: {"usersID": users.join(",")}).exec();
|
|
|
|
// Check if the request did not execute correctly
|
|
if (response.code != 200) return null;
|
|
|
|
final list = UsersList();
|
|
response.getObject().forEach(
|
|
(k, v) => list.add(
|
|
User(
|
|
id: v["userID"],
|
|
firstName: v["firstName"],
|
|
lastName: v["lastName"],
|
|
pageVisibility: v["publicPage"] == "false"
|
|
? UserPageVisibility.PRIVATE
|
|
: (v["openPage"] == "false"
|
|
? UserPageVisibility.PRIVATE
|
|
: UserPageVisibility.OPEN),
|
|
virtualDirectory: v["virtualDirectory"] == ""
|
|
? null
|
|
: v["virtualDirectory"],
|
|
accountImageURL: v["accountImage"],
|
|
),
|
|
),
|
|
);
|
|
|
|
// Save the list
|
|
_usersDatabaseHelper.insertOrUpdateAll(list);
|
|
|
|
return list;
|
|
}
|
|
|
|
/// Get users information from a given [Set]
|
|
Future<UsersList> getList(Set<int> users,
|
|
{bool forceDownload = false}) async {
|
|
return await getUsersInfo(users.toList());
|
|
}
|
|
|
|
/// Get users information
|
|
///
|
|
/// If [forceDownload] is set to true, the data will always be retrieved from
|
|
/// the server, otherwise cached data will be used if available
|
|
Future<UsersList> getUsersInfo(List<int> users,
|
|
{bool forceDownload = false}) async {
|
|
List<int> toDownload = List();
|
|
UsersList list = UsersList();
|
|
|
|
// Check cache
|
|
for (int userID in users) {
|
|
if (!forceDownload && await _usersDatabaseHelper.has(userID))
|
|
list.add(await _usersDatabaseHelper.get(userID));
|
|
else
|
|
toDownload.add(userID);
|
|
}
|
|
|
|
// Process download if required
|
|
if (toDownload.length > 0) {
|
|
final downloadedList = await _downloadInfo(toDownload);
|
|
|
|
if (downloadedList == null) return null;
|
|
|
|
list.addAll(downloadedList);
|
|
}
|
|
|
|
return list;
|
|
}
|
|
}
|