mirror of
https://github.com/lifegpc/eh_downloader_flutter.git
synced 2026-07-08 01:30:28 +08:00
Update
This commit is contained in:
@@ -51,7 +51,12 @@ abstract class _EHApi {
|
|||||||
@DELETE('/token')
|
@DELETE('/token')
|
||||||
Future<ApiResult<bool>> deleteToken({@Query("token") String? token});
|
Future<ApiResult<bool>> deleteToken({@Query("token") String? token});
|
||||||
@GET('/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 {
|
class EHApi extends __EHApi {
|
||||||
|
|||||||
@@ -203,14 +203,14 @@ class __EHApi implements _EHApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<ApiResult<Token>> getToken({String? token}) async {
|
Future<ApiResult<TokenWithUserInfo>> getToken({String? token}) async {
|
||||||
const _extra = <String, dynamic>{};
|
const _extra = <String, dynamic>{};
|
||||||
final queryParameters = <String, dynamic>{r'token': token};
|
final queryParameters = <String, dynamic>{r'token': token};
|
||||||
queryParameters.removeWhere((k, v) => v == null);
|
queryParameters.removeWhere((k, v) => v == null);
|
||||||
final _headers = <String, dynamic>{};
|
final _headers = <String, dynamic>{};
|
||||||
final Map<String, dynamic>? _data = null;
|
final Map<String, dynamic>? _data = null;
|
||||||
final _result = await _dio
|
final _result = await _dio.fetch<Map<String, dynamic>>(
|
||||||
.fetch<Map<String, dynamic>>(_setStreamType<ApiResult<Token>>(Options(
|
_setStreamType<ApiResult<TokenWithUserInfo>>(Options(
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
headers: _headers,
|
headers: _headers,
|
||||||
extra: _extra,
|
extra: _extra,
|
||||||
@@ -226,13 +226,78 @@ class __EHApi implements _EHApi {
|
|||||||
_dio.options.baseUrl,
|
_dio.options.baseUrl,
|
||||||
baseUrl,
|
baseUrl,
|
||||||
))));
|
))));
|
||||||
final value = ApiResult<Token>.fromJson(
|
final value = ApiResult<TokenWithUserInfo>.fromJson(
|
||||||
_result.data!,
|
_result.data!,
|
||||||
(json) => Token.fromJson(json as Map<String, dynamic>),
|
(json) => TokenWithUserInfo.fromJson(json as Map<String, dynamic>),
|
||||||
);
|
);
|
||||||
return value;
|
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) {
|
RequestOptions _setStreamType<T>(RequestOptions requestOptions) {
|
||||||
if (T != dynamic &&
|
if (T != dynamic &&
|
||||||
!(requestOptions.responseType == ResponseType.bytes ||
|
!(requestOptions.responseType == ResponseType.bytes ||
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
import 'user.dart';
|
||||||
|
|
||||||
part 'token.g.dart';
|
part 'token.g.dart';
|
||||||
|
|
||||||
@@ -25,3 +26,20 @@ class Token {
|
|||||||
factory Token.fromJson(Map<String, dynamic> json) => _$TokenFromJson(json);
|
factory Token.fromJson(Map<String, dynamic> json) => _$TokenFromJson(json);
|
||||||
Map<String, dynamic> toJson() => _$TokenToJson(this);
|
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);
|
||||||
|
}
|
||||||
|
|||||||
@@ -23,3 +23,26 @@ Map<String, dynamic> _$TokenToJson(Token instance) => <String, dynamic>{
|
|||||||
'http_only': instance.httpOnly,
|
'http_only': instance.httpOnly,
|
||||||
'secure': instance.secure,
|
'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,
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user