mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-25 22:39:22 +00:00
Can generate a random account image
This commit is contained in:
parent
7bb805bffd
commit
7e01947da9
@ -40,8 +40,9 @@ class APIHelper {
|
||||
final data = FormData.fromMap(request.args);
|
||||
|
||||
// Process files (if required)
|
||||
if (multipart)
|
||||
for (var key in request.files.keys) {
|
||||
if (multipart) {
|
||||
// Process filesystem files
|
||||
for (final key in request.files.keys) {
|
||||
var v = request.files[key];
|
||||
data.files.add(MapEntry(
|
||||
key,
|
||||
@ -49,6 +50,16 @@ class APIHelper {
|
||||
filename: v.path.split("/").last)));
|
||||
}
|
||||
|
||||
// Process in-memory files
|
||||
for (final key in request.bytesFiles.keys) {
|
||||
var v = request.bytesFiles[key];
|
||||
data.files.add(MapEntry(
|
||||
key,
|
||||
MultipartFile.fromBytes(v.bytes,
|
||||
filename: v.filename.split("/").last)));
|
||||
}
|
||||
}
|
||||
|
||||
// Execute the request
|
||||
final response = await Dio().post(
|
||||
url.toString(),
|
||||
@ -64,9 +75,10 @@ class APIHelper {
|
||||
return APIResponse(response.statusCode, null);
|
||||
|
||||
return APIResponse(response.statusCode, response.data);
|
||||
} catch (e) {
|
||||
} catch (e, stack) {
|
||||
print(e.toString());
|
||||
print("Could not execute a request!");
|
||||
print(stack);
|
||||
return APIResponse(-1, null);
|
||||
}
|
||||
}
|
||||
|
@ -36,6 +36,13 @@ class SettingsHelper {
|
||||
.execWithFiles())
|
||||
.isOK;
|
||||
|
||||
/// Upload a new account image from memory
|
||||
static Future<bool> uploadAccountImageFromMemory(List<int> 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<bool> setAccountImageVisibilityLevel(
|
||||
AccountImageVisibilityLevels level) async =>
|
||||
|
@ -10,11 +10,19 @@ import 'package:meta/meta.dart';
|
||||
///
|
||||
/// @author Pierre HUBERT
|
||||
|
||||
class BytesFile {
|
||||
final String filename;
|
||||
final List<int> bytes;
|
||||
|
||||
BytesFile(this.filename, this.bytes);
|
||||
}
|
||||
|
||||
class APIRequest {
|
||||
final String uri;
|
||||
final bool needLogin;
|
||||
Map<String, String> args;
|
||||
Map<String, File> files = Map();
|
||||
Map<String, BytesFile> bytesFiles = Map();
|
||||
|
||||
APIRequest({@required this.uri, this.needLogin = false, this.args})
|
||||
: assert(uri != null),
|
||||
@ -42,6 +50,11 @@ class APIRequest {
|
||||
return this;
|
||||
}
|
||||
|
||||
APIRequest addBytesFile(String name, BytesFile file) {
|
||||
this.bytesFiles[name] = file;
|
||||
return this;
|
||||
}
|
||||
|
||||
void addArgs(Map<String, String> newArgs) => args.addAll(newArgs);
|
||||
|
||||
/// Execute the request
|
||||
|
@ -6,6 +6,8 @@ import 'package:comunic/utils/files_utils.dart';
|
||||
import 'package:comunic/utils/intl_utils.dart';
|
||||
import 'package:comunic/utils/ui_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:identicon/identicon.dart';
|
||||
import 'package:random_string/random_string.dart';
|
||||
import 'package:settings_ui/settings_ui.dart';
|
||||
|
||||
/// Account image settings section
|
||||
@ -69,11 +71,18 @@ class __AccountImageSettingsBodyState extends State<_AccountImageSettingsBody> {
|
||||
width: 40,
|
||||
),
|
||||
),
|
||||
|
||||
// Upload new account image
|
||||
SettingsTile(
|
||||
title: tr("Upload an account image"),
|
||||
onTap: () => _uploadAccountImage(),
|
||||
),
|
||||
|
||||
// Generate a random account image
|
||||
SettingsTile(
|
||||
title: tr("Generate a random account image"),
|
||||
onTap: () => _generateRandomAccountImage(),
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
@ -95,6 +104,12 @@ class __AccountImageSettingsBodyState extends State<_AccountImageSettingsBody> {
|
||||
onTap: () => _uploadAccountImage(),
|
||||
),
|
||||
|
||||
// Generate a random account image
|
||||
SettingsTile(
|
||||
title: tr("Generate a random account image"),
|
||||
onTap: () => _generateRandomAccountImage(),
|
||||
),
|
||||
|
||||
// Change account image visibility
|
||||
SettingsTile(
|
||||
title: tr("Change account image visibility"),
|
||||
@ -131,6 +146,20 @@ class __AccountImageSettingsBodyState extends State<_AccountImageSettingsBody> {
|
||||
_key.currentState.refresh();
|
||||
}
|
||||
|
||||
/// Generate a random account image
|
||||
void _generateRandomAccountImage() async {
|
||||
// Generate emoticon
|
||||
final bytes = Identicon().generate(randomString(10));
|
||||
|
||||
if (!await SettingsHelper.uploadAccountImageFromMemory(bytes)) {
|
||||
showSimpleSnack(
|
||||
context, tr("Could not upload your generated account image!"));
|
||||
return;
|
||||
}
|
||||
|
||||
_key.currentState.refresh();
|
||||
}
|
||||
|
||||
/// Change account image visibility
|
||||
void _chooseAccountImageVisibility() async {
|
||||
final newLevel = await showDialog<AccountImageVisibilityLevels>(
|
||||
|
14
pubspec.lock
14
pubspec.lock
@ -142,6 +142,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.1.3"
|
||||
identicon:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: identicon
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.1"
|
||||
image:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -233,6 +240,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.5"
|
||||
random_string:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: random_string
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
settings_ui:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -57,6 +57,12 @@ dependencies:
|
||||
# Build settings UI
|
||||
settings_ui: ^0.2.0
|
||||
|
||||
# Generate identicons
|
||||
identicon: ^0.1.1
|
||||
|
||||
# Generate random strings
|
||||
random_string: ^2.0.1
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
|
Loading…
Reference in New Issue
Block a user