feat: get/check coin

Closes #661

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-11 17:20:25 +08:00
parent 9a6ba82467
commit 3801bdf9d7
12 changed files with 235 additions and 225 deletions

View File

@@ -753,4 +753,6 @@ class Api {
static const String addFavArticle = '/x/article/favorites/add';
static const String replyTop = '/x/v2/reply/top';
static const String getCoin = '${HttpString.accountBaseUrl}/site/getCoin';
}

View File

@@ -8,5 +8,7 @@ class HttpString {
static const String messageBaseUrl = 'https://message.bilibili.com';
static const String dynamicShareBaseUrl = 'https://t.bilibili.com';
static const String spaceBaseUrl = 'https://space.bilibili.com';
static const String accountBaseUrl = 'https://account.bilibili.com';
static const String sponsorBlockBaseUrl = 'https://www.bsbsb.top';
}

View File

@@ -3,8 +3,10 @@ import 'dart:convert';
import 'dart:io';
import 'package:PiliPlus/build_config.dart';
import 'package:PiliPlus/http/retry_interceptor.dart';
import 'package:PiliPlus/http/user.dart';
import 'package:PiliPlus/utils/accounts/account.dart';
import 'package:PiliPlus/utils/accounts/account_manager/account_mgr.dart';
import 'package:PiliPlus/utils/global_data.dart';
import 'package:archive/archive.dart';
import 'package:brotli/brotli.dart';
import 'package:dio/dio.dart';
@@ -41,6 +43,17 @@ class Request {
isSecure: item.secure,
isHttpOnly: item.httpOnly,
)));
if (Accounts.main.isLogin) {
getCoin();
}
}
static Future getCoin() async {
final res = await UserHttp.getCoin();
if (res['status']) {
GlobalData().coins = res['data'];
}
}
// 从cookie中获取 csrf token

View File

@@ -1,5 +1,6 @@
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/video/later.dart';
import 'package:PiliPlus/utils/global_data.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:dio/dio.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
@@ -29,6 +30,7 @@ class UserHttp {
var res = await Request().get(Api.userInfo);
if (res.data['code'] == 0) {
UserInfoData data = UserInfoData.fromJson(res.data['data']);
GlobalData().coins = data.money;
return {'status': true, 'data': data};
} else {
return {'status': false, 'msg': res.data['message']};
@@ -682,31 +684,12 @@ class UserHttp {
}
}
// 解析收藏夹视频
// static Future parseFavVideo({
// required int mediaId,
// required int oid,
// required String bvid,
// }) async {
// var res = await Request().get(
// 'https://www.bilibili.com/list/ml$mediaId',
// queryParameters: {
// 'oid': mediaId,
// 'bvid': bvid,
// },
// );
// String scriptContent =
// extractScriptContents(parse(res.data).body!.outerHtml)[0];
// int startIndex = scriptContent.indexOf('{');
// int endIndex = scriptContent.lastIndexOf('};');
// String jsonContent = scriptContent.substring(startIndex, endIndex + 1);
// // 解析JSON字符串为Map
// Map<String, dynamic> jsonData = json.decode(jsonContent);
// return {
// 'status': true,
// 'data': jsonData['resourceList']
// .map<MediaVideoItemModel>((e) => MediaVideoItemModel.fromJson(e))
// .toList()
// };
// }
static Future getCoin() async {
final res = await Request().get(Api.getCoin);
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']?['money']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
}