feat: add upload logic.
This commit is contained in:
+33
-5
@@ -3,6 +3,7 @@ import 'dart:io';
|
||||
|
||||
import 'package:dde_gesture_manager/constants/sp_keys.dart';
|
||||
import 'package:dde_gesture_manager/extensions.dart';
|
||||
import 'package:dde_gesture_manager/models/scheme.dart' as AppScheme;
|
||||
import 'package:dde_gesture_manager/utils/helper.dart';
|
||||
import 'package:dde_gesture_manager/utils/notificator.dart';
|
||||
import 'package:dde_gesture_manager_api/apis.dart';
|
||||
@@ -13,7 +14,12 @@ typedef T BeanBuilder<T>(Map res);
|
||||
|
||||
typedef T HandleRespBuild<T>(http.Response resp);
|
||||
|
||||
getStatusCodeFunc<int>(Map resp) => resp["statusCode"];
|
||||
typedef int GetStatusCodeFunc(Map resp);
|
||||
|
||||
int getStatusCodeFunc(Map resp) => resp["statusCode"] as int;
|
||||
|
||||
BeanBuilder<List<T>> listRespBuilderWrap<T>(BeanBuilder<T> builder) =>
|
||||
(Map resp) => (resp['list'] as List).map<T>((e) => builder(e)).toList();
|
||||
|
||||
class HttpErrorCode extends Error {
|
||||
int statusCode;
|
||||
@@ -40,11 +46,13 @@ class Api {
|
||||
}
|
||||
|
||||
static HandleRespBuild<T> _handleRespBuild<T>(BeanBuilder<T> builder) => (http.Response resp) {
|
||||
if (builder == getStatusCodeFunc) return builder({"statusCode": resp.statusCode});
|
||||
if (builder is GetStatusCodeFunc) return builder({"statusCode": resp.statusCode});
|
||||
T res;
|
||||
try {
|
||||
res = builder(json.decode(resp.body));
|
||||
var decodeBody = json.decode(utf8.decode(resp.bodyBytes));
|
||||
res = decodeBody is Map ? builder(decodeBody) : builder({'list': decodeBody});
|
||||
} catch (e) {
|
||||
e.sout();
|
||||
throw HttpErrorCode(resp.statusCode, message: resp.body);
|
||||
}
|
||||
return res;
|
||||
@@ -67,7 +75,7 @@ class Api {
|
||||
path: path,
|
||||
),
|
||||
headers: <String, String>{
|
||||
HttpHeaders.contentTypeHeader: ContentType.json.value,
|
||||
HttpHeaders.contentTypeHeader: ContentType.json.toString(),
|
||||
}..addAll(
|
||||
ignoreToken ? {} : {HttpHeaders.authorizationHeader: 'Bearer ${H().sp.getString(SPKeys.accessToken)}'}),
|
||||
)
|
||||
@@ -98,7 +106,7 @@ class Api {
|
||||
),
|
||||
body: jsonEncode(body),
|
||||
headers: <String, String>{
|
||||
HttpHeaders.contentTypeHeader: ContentType.json.value,
|
||||
HttpHeaders.contentTypeHeader: ContentType.json.toString(),
|
||||
}..addAll(
|
||||
ignoreToken ? {} : {HttpHeaders.authorizationHeader: 'Bearer ${H().sp.getString(SPKeys.accessToken)}'}),
|
||||
)
|
||||
@@ -132,4 +140,24 @@ class Api {
|
||||
ignoreToken: true,
|
||||
ignoreErrorHandle: ignoreErrorHandle,
|
||||
);
|
||||
|
||||
static Future<bool> checkAuthStatus() => _get<int>(Apis.auth.status, getStatusCodeFunc, ignoreErrorHandle: true)
|
||||
.then((value) => value == HttpStatus.noContent);
|
||||
|
||||
static Future<bool> uploadScheme({required AppScheme.Scheme scheme, required bool share}) => _post(
|
||||
Apis.scheme.upload,
|
||||
getStatusCodeFunc,
|
||||
body: SchemeSerializer.toMap(
|
||||
Scheme(
|
||||
name: scheme.name,
|
||||
uuid: scheme.id,
|
||||
description: scheme.description,
|
||||
gestures: scheme.gestures,
|
||||
shared: share,
|
||||
),
|
||||
),
|
||||
).then((value) => value == HttpStatus.noContent);
|
||||
|
||||
static Future<List<Scheme>> userUploads() =>
|
||||
_get(Apis.scheme.userUploads, listRespBuilderWrap(SchemeSerializer.fromMap));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user