diff --git a/lib/helpers/database/database_contract.dart b/lib/helpers/database/database_contract.dart index 537d4bf..daca551 100644 --- a/lib/helpers/database/database_contract.dart +++ b/lib/helpers/database/database_contract.dart @@ -22,6 +22,7 @@ abstract class UserTableContract { 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"; } /// Conversations table contract diff --git a/lib/helpers/database/database_helper.dart b/lib/helpers/database/database_helper.dart index d34eca4..0a85afa 100644 --- a/lib/helpers/database/database_helper.dart +++ b/lib/helpers/database/database_helper.dart @@ -70,7 +70,8 @@ abstract class DatabaseHelper { "${UserTableContract.C_LAST_NAME} TEXT, " "${UserTableContract.C_VISIBILITY} TEXT, " "${UserTableContract.C_VIRTUAL_DIRECTORY} TEXT, " - "${UserTableContract.C_ACCOUNT_IMAGE_URL} TEXT" + "${UserTableContract.C_ACCOUNT_IMAGE_URL} TEXT, " + "${UserTableContract.C_CUSTOM_EMOJIES} TEXT" ")"); // Create conversations table diff --git a/lib/helpers/users_helper.dart b/lib/helpers/users_helper.dart index 2054db5..75442f5 100644 --- a/lib/helpers/users_helper.dart +++ b/lib/helpers/users_helper.dart @@ -1,8 +1,10 @@ import 'package:comunic/enums/user_page_visibility.dart'; import 'package:comunic/helpers/database/users_database_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'; import 'package:comunic/models/api_request.dart'; +import 'package:comunic/models/custom_emoji.dart'; import 'package:comunic/models/user.dart'; /// User helper @@ -44,21 +46,21 @@ class UsersHelper { final list = UsersList(); response.getObject().forEach( (k, v) => list.add( - User( - id: v["userID"], - firstName: v["firstName"], - lastName: v["lastName"], - pageVisibility: v["publicPage"] == "false" + User( + id: v["userID"], + firstName: v["firstName"], + lastName: v["lastName"], + pageVisibility: v["publicPage"] == "false" + ? UserPageVisibility.PRIVATE + : (v["openPage"] == "false" ? UserPageVisibility.PRIVATE - : (v["openPage"] == "false" - ? UserPageVisibility.PRIVATE - : UserPageVisibility.OPEN), - virtualDirectory: v["virtualDirectory"] == "" - ? null - : v["virtualDirectory"], - accountImageURL: v["accountImage"], - ), - ), + : UserPageVisibility.OPEN), + virtualDirectory: + v["virtualDirectory"] == "" ? null : v["virtualDirectory"], + accountImageURL: v["accountImage"], + customEmojies: _parseCustomEmojies(v["customEmojis"]), + ), + ), ); // Save the list @@ -154,8 +156,24 @@ class UsersHelper { virtualDirectory: data["virtualDirectory"] == "" ? null : data["virtualDirectory"], accountImageURL: data["accountImage"], + customEmojies: _parseCustomEmojies(data["customEmojis"]), publicNote: data["publicNote"], canPostTexts: data["can_post_texts"], ); } + + /// Parse the list of custom emojies + CustomEmojiesList _parseCustomEmojies(List list) { + final l = list.cast>(); + + return CustomEmojiesList() + ..addAll(l + .map((f) => CustomEmoji( + id: f["id"], + userID: f["userID"], + shortcut: f["shorcut"], + url: f["url"], + )) + .toList()); + } } diff --git a/lib/lists/custom_emojies_list.dart b/lib/lists/custom_emojies_list.dart new file mode 100644 index 0000000..d967008 --- /dev/null +++ b/lib/lists/custom_emojies_list.dart @@ -0,0 +1,17 @@ +import 'package:comunic/lists/abstract_list.dart'; +import 'package:comunic/models/custom_emoji.dart'; + +/// Custom emojies list +/// +/// @author Pierre HUBERT + +class CustomEmojiesList extends AbstractList { + /// Serialize this list + List> toSerializableList() => + map((f) => f.toMap()).toList(); + + /// Un-serialize this list + static CustomEmojiesList fromSerializedList(List list) => + CustomEmojiesList() + ..addAll(list.map((f) => CustomEmoji.fromMap(f)).toList()); +} diff --git a/lib/models/advanced_user_info.dart b/lib/models/advanced_user_info.dart index dbfb55e..f201fe2 100644 --- a/lib/models/advanced_user_info.dart +++ b/lib/models/advanced_user_info.dart @@ -1,4 +1,5 @@ import 'package:comunic/enums/user_page_visibility.dart'; +import 'package:comunic/lists/custom_emojies_list.dart'; import 'package:comunic/models/user.dart'; import 'package:meta/meta.dart'; @@ -17,6 +18,7 @@ class AdvancedUserInfo extends User { @required UserPageVisibility pageVisibility, @required String virtualDirectory, @required String accountImageURL, + @required CustomEmojiesList customEmojies, @required this.publicNote, @required this.canPostTexts, }) : assert(publicNote != null), @@ -27,5 +29,6 @@ class AdvancedUserInfo extends User { lastName: lastName, pageVisibility: pageVisibility, virtualDirectory: virtualDirectory, - accountImageURL: accountImageURL); + accountImageURL: accountImageURL, + customEmojies: customEmojies); } diff --git a/lib/models/custom_emoji.dart b/lib/models/custom_emoji.dart new file mode 100644 index 0000000..ec76a70 --- /dev/null +++ b/lib/models/custom_emoji.dart @@ -0,0 +1,35 @@ +import 'package:flutter/material.dart'; + +/// Single custom emoji information +/// +/// @author Pierre Hubert + +class CustomEmoji { + final int id; + final int userID; + final String shortcut; + final String url; + + const CustomEmoji({ + @required this.id, + @required this.userID, + @required this.shortcut, + @required this.url, + }) : assert(id != null), + assert(userID != null), + assert(shortcut != null), + assert(url != null); + + Map toMap() => { + "id": id, + "userID": userID, + "shortcut": shortcut, + "url": url, + }; + + CustomEmoji.fromMap(Map map) + : id = map["id"], + userID = map["userID"], + shortcut = map["shortcut"], + url = map["url"]; +} diff --git a/lib/models/user.dart b/lib/models/user.dart index ff55d1d..97fded8 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -1,5 +1,8 @@ +import 'dart:convert'; + import 'package:comunic/enums/user_page_visibility.dart'; import 'package:comunic/helpers/database/database_contract.dart'; +import 'package:comunic/lists/custom_emojies_list.dart'; import 'package:comunic/models/cache_model.dart'; import 'package:comunic/utils/ui_utils.dart'; import 'package:meta/meta.dart'; @@ -14,6 +17,7 @@ class User extends CacheModel { final UserPageVisibility pageVisibility; final String virtualDirectory; final String accountImageURL; + final CustomEmojiesList customEmojies; const User({ @required int id, @@ -22,11 +26,13 @@ class User extends CacheModel { @required this.pageVisibility, @required this.virtualDirectory, @required this.accountImageURL, + @required this.customEmojies, }) : assert(id != null), assert(firstName != null), assert(lastName != null), assert(pageVisibility != null), assert(accountImageURL != null), + assert(customEmojies != null), super(id: id); /// Get user full name @@ -43,6 +49,8 @@ class User extends CacheModel { UserTableContract.C_VISIBILITY: pageVisibility.toString(), UserTableContract.C_VIRTUAL_DIRECTORY: virtualDirectory, UserTableContract.C_ACCOUNT_IMAGE_URL: accountImageURL, + UserTableContract.C_CUSTOM_EMOJIES: + jsonEncode(customEmojies.toSerializableList()), }; } @@ -53,5 +61,7 @@ class User extends CacheModel { userPageVisibilityFromString(map[UserTableContract.C_VISIBILITY]), this.virtualDirectory = map[UserTableContract.C_VIRTUAL_DIRECTORY], this.accountImageURL = map[UserTableContract.C_ACCOUNT_IMAGE_URL], + this.customEmojies = CustomEmojiesList.fromSerializedList( + jsonDecode(map[UserTableContract.C_CUSTOM_EMOJIES])), super.fromMap(map); }