This commit is contained in:
2023-08-29 06:59:36 +08:00
parent d19c7d6d18
commit 359fbf7d06
4 changed files with 117 additions and 6 deletions

View File

@@ -51,7 +51,12 @@ abstract class _EHApi {
@DELETE('/token')
Future<ApiResult<bool>> deleteToken({@Query("token") String? token});
@GET('/token')
Future<ApiResult<Token>> getToken({@Query("token") String? token});
Future<ApiResult<TokenWithUserInfo>> getToken({@Query("token") String? token});
@GET('/file/{id}')
Future<HttpResponse> getFile(@Path("id") int id);
@GET('/file/random')
Future<HttpResponse> getRandomFile({@Query("is_nsfw") bool? isNsfw, @Query("is_ad") bool? isAd, @Query("thumb") bool? thumb});
}
class EHApi extends __EHApi {

View File

@@ -203,14 +203,14 @@ class __EHApi implements _EHApi {
}
@override
Future<ApiResult<Token>> getToken({String? token}) async {
Future<ApiResult<TokenWithUserInfo>> getToken({String? token}) async {
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{r'token': token};
queryParameters.removeWhere((k, v) => v == null);
final _headers = <String, dynamic>{};
final Map<String, dynamic>? _data = null;
final _result = await _dio
.fetch<Map<String, dynamic>>(_setStreamType<ApiResult<Token>>(Options(
final _result = await _dio.fetch<Map<String, dynamic>>(
_setStreamType<ApiResult<TokenWithUserInfo>>(Options(
method: 'GET',
headers: _headers,
extra: _extra,
@@ -226,13 +226,78 @@ class __EHApi implements _EHApi {
_dio.options.baseUrl,
baseUrl,
))));
final value = ApiResult<Token>.fromJson(
final value = ApiResult<TokenWithUserInfo>.fromJson(
_result.data!,
(json) => Token.fromJson(json as Map<String, dynamic>),
(json) => TokenWithUserInfo.fromJson(json as Map<String, dynamic>),
);
return value;
}
@override
Future<HttpResponse<dynamic>> getFile(int id) async {
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _headers = <String, dynamic>{};
final Map<String, dynamic>? _data = null;
final _result =
await _dio.fetch(_setStreamType<HttpResponse<dynamic>>(Options(
method: 'GET',
headers: _headers,
extra: _extra,
)
.compose(
_dio.options,
'/file/${id}',
queryParameters: queryParameters,
data: _data,
)
.copyWith(
baseUrl: _combineBaseUrls(
_dio.options.baseUrl,
baseUrl,
))));
final value = _result.data;
final httpResponse = HttpResponse(value, _result);
return httpResponse;
}
@override
Future<HttpResponse<dynamic>> getRandomFile({
bool? isNsfw,
bool? isAd,
bool? thumb,
}) async {
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{
r'is_nsfw': isNsfw,
r'is_ad': isAd,
r'thumb': thumb,
};
queryParameters.removeWhere((k, v) => v == null);
final _headers = <String, dynamic>{};
final Map<String, dynamic>? _data = null;
final _result =
await _dio.fetch(_setStreamType<HttpResponse<dynamic>>(Options(
method: 'GET',
headers: _headers,
extra: _extra,
)
.compose(
_dio.options,
'/file/random',
queryParameters: queryParameters,
data: _data,
)
.copyWith(
baseUrl: _combineBaseUrls(
_dio.options.baseUrl,
baseUrl,
))));
final value = _result.data;
final httpResponse = HttpResponse(value, _result);
return httpResponse;
}
RequestOptions _setStreamType<T>(RequestOptions requestOptions) {
if (T != dynamic &&
!(requestOptions.responseType == ResponseType.bytes ||

View File

@@ -1,4 +1,5 @@
import 'package:json_annotation/json_annotation.dart';
import 'user.dart';
part 'token.g.dart';
@@ -25,3 +26,20 @@ class Token {
factory Token.fromJson(Map<String, dynamic> json) => _$TokenFromJson(json);
Map<String, dynamic> toJson() => _$TokenToJson(this);
}
@JsonSerializable()
class TokenWithUserInfo {
const TokenWithUserInfo({
required this.token,
required this.name,
required this.isAdmin,
required this.permissions,
});
final Token token;
final String name;
@JsonKey(name: 'is_admin')
final bool isAdmin;
final UserPermission permissions;
factory TokenWithUserInfo.fromJson(Map<String, dynamic> json) => _$TokenWithUserInfoFromJson(json);
Map<String, dynamic> toJson() => _$TokenWithUserInfoToJson(this);
}

View File

@@ -23,3 +23,26 @@ Map<String, dynamic> _$TokenToJson(Token instance) => <String, dynamic>{
'http_only': instance.httpOnly,
'secure': instance.secure,
};
TokenWithUserInfo _$TokenWithUserInfoFromJson(Map<String, dynamic> json) =>
TokenWithUserInfo(
token: Token.fromJson(json['token'] as Map<String, dynamic>),
name: json['name'] as String,
isAdmin: json['is_admin'] as bool,
permissions: $enumDecode(_$UserPermissionEnumMap, json['permissions']),
);
Map<String, dynamic> _$TokenWithUserInfoToJson(TokenWithUserInfo instance) =>
<String, dynamic>{
'token': instance.token,
'name': instance.name,
'is_admin': instance.isAdmin,
'permissions': _$UserPermissionEnumMap[instance.permissions]!,
};
const _$UserPermissionEnumMap = {
UserPermission.none: 0,
UserPermission.readGallery: 1,
UserPermission.editGallery: 2,
UserPermission.all: 3,
};