1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-12-26 04:48:51 +00:00

Get custom emojies from server

This commit is contained in:
Pierre HUBERT 2020-04-28 18:47:47 +02:00
parent c42fe7f806
commit 032b247080
7 changed files with 101 additions and 16 deletions

View File

@ -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

View File

@ -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

View File

@ -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<dynamic> list) {
final l = list.cast<Map<String, dynamic>>();
return CustomEmojiesList()
..addAll(l
.map((f) => CustomEmoji(
id: f["id"],
userID: f["userID"],
shortcut: f["shorcut"],
url: f["url"],
))
.toList());
}
}

View File

@ -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<CustomEmoji> {
/// Serialize this list
List<Map<String, dynamic>> toSerializableList() =>
map((f) => f.toMap()).toList();
/// Un-serialize this list
static CustomEmojiesList fromSerializedList(List<dynamic> list) =>
CustomEmojiesList()
..addAll(list.map((f) => CustomEmoji.fromMap(f)).toList());
}

View File

@ -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);
}

View File

@ -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<String, dynamic> toMap() => {
"id": id,
"userID": userID,
"shortcut": shortcut,
"url": url,
};
CustomEmoji.fromMap(Map<String, dynamic> map)
: id = map["id"],
userID = map["userID"],
shortcut = map["shortcut"],
url = map["url"];
}

View File

@ -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);
}