2021-02-02 20:33:09 +01:00
|
|
|
import 'dart:convert';
|
|
|
|
import 'dart:io';
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:gecko/globals.dart';
|
|
|
|
import 'package:http/http.dart' as http;
|
|
|
|
import 'package:path_provider/path_provider.dart';
|
|
|
|
|
|
|
|
class CesiumPlusProvider with ChangeNotifier {
|
|
|
|
TextEditingController cesiumName = TextEditingController();
|
2021-11-29 04:05:08 +01:00
|
|
|
Image defaultAvatar(double size) =>
|
|
|
|
Image.asset(('assets/icon_user.png'), height: size);
|
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];
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<String> getName(String _pubkey) async {
|
|
|
|
String _name;
|
|
|
|
|
|
|
|
List queryOptions = await _buildQuery(_pubkey);
|
2021-03-19 06:33:48 +01:00
|
|
|
final response = await http.post((Uri.parse(queryOptions[0])),
|
2021-02-02 20:33:09 +01:00
|
|
|
body: queryOptions[1], headers: queryOptions[2]);
|
|
|
|
final responseJson = json.decode(response.body);
|
|
|
|
if (responseJson['hits']['hits'].toString() == '[]') {
|
|
|
|
return '';
|
|
|
|
}
|
2021-02-04 21:00:37 +01:00
|
|
|
final bool _nameExist =
|
2021-02-02 20:33:09 +01:00
|
|
|
responseJson['hits']['hits'][0]['_source'].containsKey("title");
|
2021-02-04 21:00:37 +01:00
|
|
|
if (!_nameExist) {
|
2021-02-02 20:33:09 +01:00
|
|
|
return '';
|
|
|
|
}
|
|
|
|
_name = responseJson['hits']['hits'][0]['_source']['title'];
|
|
|
|
|
|
|
|
return _name;
|
|
|
|
}
|
|
|
|
|
2021-11-29 04:05:08 +01:00
|
|
|
Future<Image> getAvatar(String _pubkey, double size) async {
|
2021-02-02 20:33:09 +01:00
|
|
|
List queryOptions = await _buildQuery(_pubkey);
|
2021-11-29 04:05:08 +01:00
|
|
|
|
|
|
|
http.Response response;
|
|
|
|
try {
|
|
|
|
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
|
|
|
}
|
2021-11-29 04:05:08 +01:00
|
|
|
final responseJson = json.decode(response.body);
|
|
|
|
|
|
|
|
if (responseJson['hits']['hits'].toString() == '[]' ||
|
|
|
|
!responseJson['hits']['hits'][0]['_source'].containsKey("avatar")) {
|
|
|
|
return defaultAvatar(size);
|
2021-02-02 20:33:09 +01:00
|
|
|
}
|
2021-11-29 04:05:08 +01:00
|
|
|
|
2021-02-02 20:33:09 +01:00
|
|
|
final _avatar =
|
|
|
|
responseJson['hits']['hits'][0]['_source']['avatar']['_content'];
|
|
|
|
|
|
|
|
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-11-29 04:05:08 +01:00
|
|
|
return Image.file(
|
|
|
|
avatarFile,
|
|
|
|
height: size,
|
|
|
|
fit: BoxFit.cover,
|
|
|
|
);
|
2021-02-02 20:33:09 +01:00
|
|
|
}
|
|
|
|
}
|