import 'dart:io'; import 'package:comunic/enums/user_page_visibility.dart'; import 'package:comunic/models/account_image_settings.dart'; import 'package:comunic/models/api_request.dart'; import 'package:comunic/models/general_settings.dart'; /// Settings helper /// /// @author Pierre Hubert const _APIAccountImageVisibilityAPILevels = { "open": AccountImageVisibilityLevels.EVERYONE, "public": AccountImageVisibilityLevels.COMUNIC_USERS, "friends": AccountImageVisibilityLevels.FRIENDS_ONLY, }; class SettingsHelper { /// Get & return general user settings static Future getGeneralSettings() async { final response = (await APIRequest(uri: "settings/get_general", needLogin: true).exec()) .assertOk() .getObject(); return GeneralSettings( email: response["email"], firstName: response["firstName"], lastName: response["lastName"], pageVisibility: response["is_open"] ? UserPageVisibility.OPEN : response["is_public"] ? UserPageVisibility.PUBLIC : UserPageVisibility.PRIVATE, allowComments: response["allow_comments"], allowPostsFromFriends: response["allow_posts_from_friends"], allowComunicEmails: response["allow_comunic_mails"], publicFriendsList: response["public_friends_list"], virtualDirectory: response["virtual_directory"], personalWebsite: response["personnal_website"], publicNote: response["publicNote"], ); } /// Apply new general settings static Future updateGeneralSettings(GeneralSettings settings) async { (await APIRequest(uri: "settings/set_general", needLogin: true, args: { "firstName": settings.firstName, "lastName": settings.lastName, "allow_comunic_mails": settings.allowComunicEmails ? "true" : "false", "isPublic": settings.pageVisibility == UserPageVisibility.PUBLIC ? "true" : "false", "isOpen": settings.pageVisibility == UserPageVisibility.OPEN ? "true" : "false", "allowComments": settings.allowComments ? "true" : "false", "allowPostsFromFriends": settings.allowPostsFromFriends ? "true" : "false", "publicFriendsList": settings.publicFriendsList ? "true" : "false", "personnalWebsite": settings.personalWebsite, "virtualDirectory": settings.virtualDirectory, "publicNote": settings.publicNote, }).exec()) .assertOk(); } /// Get & return account image settings static Future getAccountImageSettings() async { final response = (await APIRequest(uri: "settings/get_account_image", needLogin: true) .exec()) .assertOk() .getObject(); return AccountImageSettings( hasImage: response["has_image"], imageURL: response["image_url"], visibility: _APIAccountImageVisibilityAPILevels[response["visibility"]]); } /// Upload a new account image static Future uploadAccountImage(File newImage) async => (await APIRequest(uri: "settings/upload_account_image", needLogin: true) .addFile("picture", newImage) .execWithFiles()) .isOK; /// Upload a new account image from memory static Future uploadAccountImageFromMemory(List bytes) async => (await APIRequest(uri: "settings/upload_account_image", needLogin: true) .addBytesFile("picture", BytesFile("accountImage.png", bytes)) .execWithFiles()) .isOK; /// Change account image visibility level static Future setAccountImageVisibilityLevel( AccountImageVisibilityLevels level) async => (await APIRequest( uri: "settings/set_account_image_visibility", needLogin: true) .addString( "visibility", // Find appropriate visibility level _APIAccountImageVisibilityAPILevels.entries .firstWhere((f) => f.value == level) .key) .exec()) .isOK; /// Delete user account image static Future deleteAccountImage() async => (await APIRequest(uri: "settings/delete_account_image", needLogin: true) .exec()) .isOK; }