gecko/lib/providers/cesium_plus.dart

159 lines
4.1 KiB
Dart
Raw Normal View History

2021-02-02 20:33:09 +01:00
import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
2021-02-02 20:33:09 +01:00
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:path_provider/path_provider.dart';
// import 'package:http/http.dart' as http;
2021-02-02 20:33:09 +01:00
class CesiumPlusProvider with ChangeNotifier {
TextEditingController cesiumName = TextEditingController();
2021-12-23 12:36:09 +01:00
Image defaultAvatar(double? size) =>
Image.asset(('assets/icon_user.png'), height: size);
2021-02-02 20:33:09 +01:00
CancelToken avatarCancelToken = CancelToken();
2021-02-02 20:33:09 +01:00
Future<List> _buildQuery(_pubkey) async {
var queryGetAvatar = json.encode({
"query": {
"bool": {
"should": [
{
"match": {
'_id': {"query": _pubkey, "boost": 2}
}
},
{
"prefix": {'_id': _pubkey}
}
]
}
},
"highlight": {
"fields": {"title": {}, "tags": {}}
},
"from": 0,
"size": 100,
"_source": [
"title",
"avatar",
"avatar._content_type",
"description",
"city",
"address",
"socials.url",
"creationTime",
"membersCount",
"type"
],
"indices_boost": {"user": 100, "page": 1, "group": 0.01}
});
String requestUrl = "/user,page,group/profile,record/_search";
String podRequest = cesiumPod + requestUrl;
Map<String, String> headers = {
'Content-type': 'application/json',
'Accept': 'application/json',
};
return [podRequest, queryGetAvatar, headers];
}
2021-12-24 15:27:38 +01:00
Future<String> getName(String? _pubkey) async {
2021-12-23 12:36:09 +01:00
String? _name;
2021-02-02 20:33:09 +01:00
2022-05-19 09:07:26 +02:00
if (g1WalletsBox.get(_pubkey)?.csName != null) {
2021-12-24 15:27:38 +01:00
return g1WalletsBox.get(_pubkey)!.csName!;
2021-12-01 08:14:07 +01:00
}
2021-02-02 20:33:09 +01:00
List queryOptions = await _buildQuery(_pubkey);
var dio = Dio();
2021-12-23 12:36:09 +01:00
late Response response;
try {
response = await dio.post(
queryOptions[0],
data: queryOptions[1],
options: Options(
headers: queryOptions[2],
sendTimeout: 3000,
receiveTimeout: 5000,
),
);
// response = await http.post((Uri.parse(queryOptions[0])),
// body: queryOptions[1], headers: queryOptions[2]);
} catch (e) {
log.e(e);
}
if (response.data['hits']['hits'].toString() == '[]') {
2021-02-02 20:33:09 +01:00
return '';
}
final bool _nameExist =
response.data['hits']['hits'][0]['_source'].containsKey("title");
if (!_nameExist) {
2021-02-02 20:33:09 +01:00
return '';
}
_name = response.data['hits']['hits'][0]['_source']['title'];
2021-02-02 20:33:09 +01:00
2021-12-24 15:27:38 +01:00
_name ??= '';
2021-12-23 12:36:09 +01:00
g1WalletsBox.get(_pubkey)!.csName = _name;
2021-12-01 08:14:07 +01:00
2021-02-02 20:33:09 +01:00
return _name;
}
2021-12-23 12:36:09 +01:00
Future<Image?> getAvatar(String? _pubkey, double size) async {
2021-12-20 21:33:03 +01:00
if (g1WalletsBox.get(_pubkey)?.avatar != null) {
2021-12-23 12:36:09 +01:00
return g1WalletsBox.get(_pubkey)!.avatar;
2021-11-30 10:28:13 +01:00
}
var dio = Dio();
2021-11-30 10:28:13 +01:00
// log.d(_pubkey);
2021-12-01 08:14:07 +01:00
2021-02-02 20:33:09 +01:00
List queryOptions = await _buildQuery(_pubkey);
2021-12-23 12:36:09 +01:00
late Response response;
try {
response = await dio
.post(queryOptions[0],
data: queryOptions[1],
options: Options(
headers: queryOptions[2],
sendTimeout: 4000,
receiveTimeout: 15000,
),
cancelToken: avatarCancelToken)
.timeout(
const Duration(seconds: 15),
);
// response = await http.post((Uri.parse(queryOptions[0])),
// body: queryOptions[1], headers: queryOptions[2]);
} catch (e) {
log.e(e);
2021-02-02 20:33:09 +01:00
}
if (response.data['hits']['hits'].toString() == '[]' ||
!response.data['hits']['hits'][0]['_source'].containsKey("avatar")) {
return defaultAvatar(size);
2021-02-02 20:33:09 +01:00
}
2021-02-02 20:33:09 +01:00
final _avatar =
response.data['hits']['hits'][0]['_source']['avatar']['_content'];
2021-02-02 20:33:09 +01:00
var avatarFile =
2021-11-27 05:35:02 +01:00
File('${(await getTemporaryDirectory()).path}/avatar_$_pubkey.png');
2021-02-02 20:33:09 +01:00
await avatarFile.writeAsBytes(base64.decode(_avatar));
2021-12-01 08:14:07 +01:00
final finalAvatar = Image.file(
avatarFile,
height: size,
fit: BoxFit.fitWidth,
);
2021-12-01 08:14:07 +01:00
2021-12-23 12:36:09 +01:00
g1WalletsBox.get(_pubkey)!.avatar = finalAvatar;
2021-12-01 08:14:07 +01:00
return finalAvatar;
2021-02-02 20:33:09 +01:00
}
}