opt models

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-06-04 15:20:35 +08:00
parent f50b1d2beb
commit b960359a39
858 changed files with 11000 additions and 12588 deletions

View File

@@ -16,11 +16,11 @@ class Api {
// 视频流
// https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/video/videostream_url.md
static const String videoUrl = '/x/player/wbi/playurl';
static const String ugcUrl = '/x/player/wbi/playurl';
// 番剧视频流
// https://api.bilibili.com/pgc/player/web/v2/playurl?cid=104236640&bvid=BV13t411n7ex
static const String bangumiVideoUrl = '/pgc/player/web/v2/playurl';
static const String pgcUrl = '/pgc/player/web/v2/playurl';
// 字幕
// aid, cid
@@ -51,7 +51,7 @@ class Api {
// https://api.bilibili.com/x/web-interface/archive/has/like
// static const String hasLikeVideo = '/x/web-interface/archive/has/like';
static const String bangumiLikeCoinFav = '/pgc/season/episode/community';
static const String pgcLikeCoinFav = '/pgc/season/episode/community';
// 视频点踩 web端不支持
@@ -279,7 +279,7 @@ class Api {
static const String ab2c = '/x/player/pagelist';
// 番剧/剧集明细
static const String bangumiInfo = '/pgc/view/web/season';
static const String pgcInfo = '/pgc/view/web/season';
// https://api.bilibili.com/pgc/season/episode/web/info?ep_id=12345678
static const String episodeInfo = '/pgc/season/episode/web/info';
@@ -370,12 +370,11 @@ class Api {
// order_avoided=true&
// w_rid=d893cf98a4e010cf326373194a648360&
// wts=1689767832
static const String memberArchive = '/x/space/wbi/arc/search';
static const String searchArchive = '/x/space/wbi/arc/search';
// 用户动态搜索
// static const String memberDynamicSearch = '/x/space/dynamic/search';
static const String memberDynamicSearch =
'/x/polymer/web-dynamic/v1/feed/space/search';
static const String dynSearch = '/x/polymer/web-dynamic/v1/feed/space/search';
// 用户动态
static const String memberDynamic = '/x/polymer/web-dynamic/v1/feed/space';
@@ -390,12 +389,12 @@ class Api {
static const String toViewClear = '/x/v2/history/toview/clear';
// 追番
static const String bangumiAdd = '/pgc/web/follow/add';
static const String pgcAdd = '/pgc/web/follow/add';
// 取消追番
static const String bangumiDel = '/pgc/web/follow/del';
static const String pgcDel = '/pgc/web/follow/del';
static const String bangumiUpdate = '/pgc/web/follow/status/update';
static const String pgcUpdate = '/pgc/web/follow/status/update';
// 番剧列表
// https://api.bilibili.com/pgc/season/index/result?
@@ -415,11 +414,11 @@ class Api {
// season_type=1&
// pagesize=20&
// type=1
static const String bangumiList =
static const String pgcIndex =
'/pgc/season/index/result?st=1&order=3&season_version=-1&spoken_language_type=-1&area=-1&is_finish=-1&copyright=-1&season_status=-1&season_month=-1&year=-1&style_id=-1&sort=0&season_type=1&pagesize=20&type=1';
// 我的追番/追剧 ?type=1&pn=1&ps=15
static const String bangumiFollowList = '/x/space/bangumi/follow/list';
static const String favPgc = '/x/space/bangumi/follow/list';
// 黑名单
static const String blackLst = '/x/relation/blacks';
@@ -874,4 +873,8 @@ class Api {
'${HttpString.appBaseUrl}/x/topic/pub/search';
static const String upowerRank = '/x/upower/up/member/rank/v2';
static const String favFavFolder = '/x/v3/fav/folder/fav';
static const String unfavFavFolder = '/x/v3/fav/folder/unfav';
}

View File

@@ -1,22 +1,24 @@
import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/user/black.dart';
import 'package:PiliPlus/models_new/blacklist/data.dart';
import 'package:PiliPlus/utils/storage.dart';
class BlackHttp {
static Future<LoadingState<BlackListDataModel>> blackList(
static Future<LoadingState<BlackListData>> blackList(
{required int pn, int? ps}) async {
var res = await Request().get(Api.blackLst, queryParameters: {
'pn': pn,
'ps': ps ?? 50,
're_version': 0,
'jsonp': 'jsonp',
'csrf': Accounts.main.csrf,
});
var res = await Request().get(
Api.blackLst,
queryParameters: {
'pn': pn,
'ps': ps ?? 50,
're_version': 0,
'jsonp': 'jsonp',
'csrf': Accounts.main.csrf,
},
);
if (res.data['code'] == 0) {
BlackListDataModel data = BlackListDataModel.fromJson(res.data['data']);
return Success(data);
return Success(BlackListData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}

View File

@@ -3,17 +3,17 @@ import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/constants.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/article_info/data.dart';
import 'package:PiliPlus/models/common/dynamic/dynamics_type.dart';
import 'package:PiliPlus/models/common/reply/reply_option_type.dart';
import 'package:PiliPlus/models/dynamics/article_list/data.dart';
import 'package:PiliPlus/models/dynamics/dyn_reserve/data.dart';
import 'package:PiliPlus/models/dynamics/dyn_topic_feed/topic_card_list.dart';
import 'package:PiliPlus/models/dynamics/dyn_topic_top/top_details.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/models/dynamics/up.dart';
import 'package:PiliPlus/models/dynamics/vote_model.dart';
import 'package:PiliPlus/models/space_article/item.dart';
import 'package:PiliPlus/models_new/article/article_info/data.dart';
import 'package:PiliPlus/models_new/article/article_list/data.dart';
import 'package:PiliPlus/models_new/article/article_view/data.dart';
import 'package:PiliPlus/models_new/dynamic/dyn_reserve/data.dart';
import 'package:PiliPlus/models_new/dynamic/dyn_topic_feed/topic_card_list.dart';
import 'package:PiliPlus/models_new/dynamic/dyn_topic_top/top_details.dart';
import 'package:PiliPlus/utils/accounts/account.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/utils.dart';
@@ -41,36 +41,36 @@ class DynamicsHttp {
};
var res = await Request().get(Api.followDynamic, queryParameters: data);
if (res.data['code'] == 0) {
try {
DynamicsDataModel data = DynamicsDataModel.fromJson(res.data['data']);
final antiGoodsDyn = GStorage.antiGoodsDyn;
final filterWord = banWordForDyn.pattern.isNotEmpty;
// try {
DynamicsDataModel data = DynamicsDataModel.fromJson(res.data['data']);
final antiGoodsDyn = GStorage.antiGoodsDyn;
final filterWord = banWordForDyn.pattern.isNotEmpty;
data.items?.removeWhere(
(item) =>
(antiGoodsDyn &&
(item.orig?.modules.moduleDynamic?.additional?.type ==
'ADDITIONAL_TYPE_GOODS' ||
item.modules.moduleDynamic?.additional?.type ==
'ADDITIONAL_TYPE_GOODS')) ||
(filterWord &&
(item.orig?.modules.moduleDynamic?.major?.opus?.summary?.text
?.contains(banWordForDyn) ==
true ||
item.modules.moduleDynamic?.major?.opus?.summary?.text
?.contains(banWordForDyn) ==
true ||
item.orig?.modules.moduleDynamic?.desc?.text
?.contains(banWordForDyn) ==
true ||
item.modules.moduleDynamic?.desc?.text
?.contains(banWordForDyn) ==
true)),
);
return Success(data);
} catch (err) {
return Error(err.toString());
}
data.items?.removeWhere(
(item) =>
(antiGoodsDyn &&
(item.orig?.modules.moduleDynamic?.additional?.type ==
'ADDITIONAL_TYPE_GOODS' ||
item.modules.moduleDynamic?.additional?.type ==
'ADDITIONAL_TYPE_GOODS')) ||
(filterWord &&
(item.orig?.modules.moduleDynamic?.major?.opus?.summary?.text
?.contains(banWordForDyn) ==
true ||
item.modules.moduleDynamic?.major?.opus?.summary?.text
?.contains(banWordForDyn) ==
true ||
item.orig?.modules.moduleDynamic?.desc?.text
?.contains(banWordForDyn) ==
true ||
item.modules.moduleDynamic?.desc?.text
?.contains(banWordForDyn) ==
true)),
);
return Success(data);
// } catch (err) {
// return Error(err.toString());
// }
} else {
return Error(res.data['message']);
}
@@ -245,10 +245,11 @@ class DynamicsHttp {
'web_location': '333.1330',
'x-bili-device-req-json':
'{"platform":"web","device":"pc","spmid":"333.1330"}',
if (Accounts.main.isLogin) 'csrf': Accounts.main.csrf,
if (!clearCookie && Accounts.main.isLogin) 'csrf': Accounts.main.csrf,
},
options:
clearCookie ? Options(extra: {'account': AnonymousAccount()}) : null,
options: clearCookie
? Options(extra: {'account': AnonymousAccount(), 'checkReply': true})
: null,
);
if (res.data['code'] == 0) {
try {
@@ -311,7 +312,7 @@ class DynamicsHttp {
}
}
static Future<LoadingState<SpaceArticleItem>> articleView(
static Future<LoadingState<ArticleViewData>> articleView(
{required dynamic cvId}) async {
final res = await Request().get(
Api.articleView,
@@ -322,7 +323,7 @@ class DynamicsHttp {
}),
);
if (res.data['code'] == 0) {
return Success(SpaceArticleItem.fromJson(res.data['data']));
return Success(ArticleViewData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}

View File

@@ -1,10 +1,10 @@
import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/fans/result.dart';
import 'package:PiliPlus/models_new/fans/data.dart';
class FanHttp {
static Future<LoadingState<FansDataModel>> fans(
static Future<LoadingState<FansData>> fans(
{int? vmid, int? pn, int? ps, String? orderType}) async {
var res = await Request().get(Api.fans, queryParameters: {
'vmid': vmid,
@@ -14,7 +14,7 @@ class FanHttp {
'order_type': orderType,
});
if (res.data['code'] == 0) {
return Success(FansDataModel.fromJson(res.data['data']));
return Success(FansData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}

703
lib/http/fav.dart Normal file
View File

@@ -0,0 +1,703 @@
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models_new/fav/fav_article/data.dart';
import 'package:PiliPlus/models_new/fav/fav_detail/data.dart';
import 'package:PiliPlus/models_new/fav/fav_folder_info/data.dart';
import 'package:PiliPlus/models_new/fav/fav_note/list.dart';
import 'package:PiliPlus/models_new/fav/fav_pgc/data.dart';
import 'package:PiliPlus/models_new/fav/fav_topic/data.dart';
import 'package:PiliPlus/models_new/fav/fav_video/data.dart';
import 'package:PiliPlus/models_new/fav/fav_video/list.dart';
import 'package:PiliPlus/models_new/space/space_fav/data.dart';
import 'package:PiliPlus/models_new/sub/sub_detail/data.dart';
import 'package:PiliPlus/utils/storage.dart' show Accounts;
import 'package:PiliPlus/utils/utils.dart';
import 'package:dio/dio.dart';
class FavHttp {
static Future favFavFolder(mediaId) async {
var res = await Request().post(
Api.favFavFolder,
data: {
'media_id': mediaId,
'csrf': Accounts.main.csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return const {'status': true, 'msg': '收藏成功'};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future unfavFavFolder(mediaId) async {
var res = await Request().post(
Api.unfavFavFolder,
data: {
'media_id': mediaId,
'csrf': Accounts.main.csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return const {'status': true, 'msg': '取消收藏成功'};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future<LoadingState<FavDetailData>> userFavFolderDetail(
{required int mediaId,
required int pn,
required int ps,
String keyword = '',
String order = 'mtime',
int type = 0}) async {
var res = await Request().get(
Api.favResourceList,
queryParameters: {
'media_id': mediaId,
'pn': pn,
'ps': ps,
'keyword': keyword,
'order': order,
'type': type,
'tid': 0,
'platform': 'web'
},
);
if (res.data['code'] == 0) {
return Success(FavDetailData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<SubDetailData>> favResourceList({
required int id,
required int pn,
required int ps,
}) async {
var res = await Request().get(
Api.favResourceList,
queryParameters: {
'media_id': id,
'ps': ps,
'pn': pn,
},
);
if (res.data['code'] == 0) {
return Success(SubDetailData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
// 取消订阅
static Future cancelSub({required int id, required int type}) async {
var res = type == 11
? await Request().post(
Api.unfavFolder,
queryParameters: {
'media_id': id,
'csrf': Accounts.main.csrf,
},
)
: await Request().post(
Api.unfavSeason,
queryParameters: {
'platform': 'web',
'season_id': id,
'csrf': Accounts.main.csrf,
},
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future<LoadingState<SubDetailData>> favSeasonList({
required int id,
required int pn,
required int ps,
}) async {
var res = await Request().get(
Api.favSeasonList,
queryParameters: {
'season_id': id,
'ps': ps,
'pn': pn,
},
);
if (res.data['code'] == 0) {
return Success(SubDetailData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<FavTopicData>> favTopic({
required int page,
}) async {
var res = await Request().get(
Api.favTopicList,
queryParameters: {
'page_size': 24,
'page_num': page,
'web_location': 333.1387,
},
);
if (res.data['code'] == 0) {
return Success(FavTopicData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future addFavTopic(topicId) async {
var res = await Request().post(
Api.addFavTopic,
data: {
'topic_id': topicId,
'csrf': Accounts.main.csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future delFavTopic(topicId) async {
var res = await Request().post(
Api.delFavTopic,
data: {
'topic_id': topicId,
'csrf': Accounts.main.csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future likeTopic(topicId, bool isLike) async {
var res = await Request().post(
Api.likeTopic,
data: {
'action': isLike ? 'cancel_like' : 'like',
'up_mid': Accounts.main.mid,
'topic_id': topicId,
'csrf': Accounts.main.csrf,
'business': 'topic',
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future<LoadingState<FavArticleData>> favArticle({
required int page,
}) async {
var res = await Request().get(
Api.favArticle,
queryParameters: {
'page_size': 20,
'page': page,
},
);
if (res.data['code'] == 0) {
return Success(FavArticleData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future addFavArticle({
required dynamic id,
}) async {
var res = await Request().post(
Api.addFavArticle,
data: {
'id': id,
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future delFavArticle({
required dynamic id,
}) async {
var res = await Request().post(
Api.delFavArticle,
data: {
'id': id,
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future<LoadingState<List<FavNoteItemModel>?>> userNoteList({
required int page,
}) async {
var res = await Request().get(
Api.userNoteList,
queryParameters: {
'pn': page,
'ps': 10,
'csrf': Accounts.main.csrf,
},
);
if (res.data['code'] == 0) {
List<FavNoteItemModel>? list = (res.data['data']?['list'] as List?)
?.map((e) => FavNoteItemModel.fromJson(e))
.toList();
return Success(list);
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<List<FavNoteItemModel>?>> noteList({
required int page,
}) async {
var res = await Request().get(
Api.noteList,
queryParameters: {
'pn': page,
'ps': 10,
'csrf': Accounts.main.csrf,
},
);
if (res.data['code'] == 0) {
List<FavNoteItemModel>? list = (res.data['data']?['list'] as List?)
?.map((e) => FavNoteItemModel.fromJson(e))
.toList();
return Success(list);
} else {
return Error(res.data['message']);
}
}
static Future delNote({
required bool isPublish,
required List noteIds,
}) async {
final res = await Request().post(
isPublish ? Api.delPublishNote : Api.delNote,
data: {
isPublish ? 'cvids' : 'note_ids': noteIds.join(','),
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future<LoadingState<FavPgcData>> favPgc({
required dynamic mid,
required int type,
required int pn,
int? followStatus,
}) async {
var res = await Request().get(
Api.favPgc,
queryParameters: {
'vmid': mid,
'type': type,
if (followStatus != null) 'follow_status': followStatus,
'pn': pn,
},
);
if (res.data['code'] == 0) {
return Success(FavPgcData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
// 收藏夹
static Future<LoadingState<FavVideoData>> userfavFolder({
required int pn,
required int ps,
required dynamic mid,
}) async {
var res = await Request().get(
Api.userFavFolder,
queryParameters: {
'pn': pn,
'ps': ps,
'up_mid': mid,
},
);
if (res.data['code'] == 0) {
return Success(FavVideoData.fromJson(res.data['data']));
} else {
return Error(res.data['message'] ?? '账号未登录');
}
}
static Future sortFavFolder({
required List<int?> sort,
}) async {
Map<String, dynamic> data = {
'sort': sort.join(','),
'csrf': Accounts.main.csrf,
};
Utils.appSign(data);
var res = await Request().post(
Api.sortFavFolder,
data: data,
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future sortFav({
required dynamic mediaId,
required List<String> sort,
}) async {
Map<String, dynamic> data = {
'media_id': mediaId,
'sort': sort.join(','),
'csrf': Accounts.main.csrf,
};
Utils.appSign(data);
var res = await Request().post(
Api.sortFav,
data: data,
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future cleanFav({
required dynamic mediaId,
}) async {
var res = await Request().post(
Api.cleanFav,
data: {
'media_id': mediaId,
'platform': 'web',
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future deleteFolder({
required List<dynamic> mediaIds,
}) async {
var res = await Request().post(Api.deleteFolder,
data: {
'media_ids': mediaIds.join(','),
'platform': 'web',
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
));
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future addOrEditFolder({
required bool isAdd,
dynamic mediaId,
required String title,
required int privacy,
required String cover,
required String intro,
}) async {
var res = await Request().post(isAdd ? Api.addFolder : Api.editFolder,
data: {
'title': title,
'intro': intro,
'privacy': privacy,
'cover': cover.isNotEmpty ? Uri.encodeFull(cover) : cover,
'csrf': Accounts.main.csrf,
if (mediaId != null) 'media_id': mediaId,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
));
if (res.data['code'] == 0) {
return {
'status': true,
'data': FavVideoItemModel.fromJson(res.data['data'])
};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future folderInfo({
dynamic mediaId,
}) async {
var res = await Request().get(
Api.folderInfo,
queryParameters: {
'media_id': mediaId,
},
);
if (res.data['code'] == 0) {
return {'status': true, 'data': FolderInfo.fromJson(res.data['data'])};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future seasonFav({
required bool isFav,
required dynamic seasonId,
}) async {
var res = await Request().post(
Api.seasonFav + (isFav ? 'unfav' : 'fav'),
data: {
'platform': 'web',
'season_id': seasonId,
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {
'status': true,
};
} else {
return {
'status': false,
'msg': res.data['message'],
};
}
}
static Future<LoadingState<List<SpaceFavData>?>> spaceFav({
required int mid,
}) async {
Map<String, String> data = {
'build': '8430300',
'c_locale': 'zh_CN',
'channel': 'bili',
'mobi_app': 'android',
'platform': 'android',
's_locale': 'zh_CN',
'statistics': Constants.statisticsApp,
'up_mid': mid.toString(),
};
var res = await Request().get(
Api.spaceFav,
queryParameters: data,
options: Options(
headers: {
'bili-http-engine': 'cronet',
'user-agent': Constants.userAgentApp,
},
),
);
if (res.data['code'] == 0) {
return Success((res.data['data'] as List?)
?.map((e) => SpaceFavData.fromJson(e))
.toList());
} else {
return Error(res.data['message']);
}
}
static Future communityAction({
required dynamic opusId,
required dynamic action,
}) async {
var res = await Request().post(
Api.communityAction,
queryParameters: {
'csrf': Accounts.main.csrf,
},
data: {
"entity": {
"object_id_str": opusId,
"type": {"biz": 2}
},
"action": action, // 3 fav, 4 unfav
},
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
// (取消)收藏
static Future delFav({
List? ids,
String? delIds,
}) async {
var res = await Request().post(
Api.delFav,
data: {
'resources': ids?.join(','),
'media_id': delIds,
'platform': 'web',
'csrf': Accounts.main.csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
// (取消)收藏
static Future favVideo({
int? aid,
String? addIds,
String? delIds,
int? type,
}) async {
var res = await Request().post(
Api.favVideo,
data: {
'rid': aid,
'type': type ?? 2,
'add_media_ids': addIds ?? '',
'del_media_ids': delIds ?? '',
'csrf': Accounts.main.csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future copyOrMoveFav({
required bool isCopy,
required bool isFav,
required dynamic srcMediaId,
required dynamic tarMediaId,
dynamic mid,
required List resources,
}) async {
var res = await Request().post(
isFav
? isCopy
? Api.copyFav
: Api.moveFav
: isCopy
? Api.copyToview
: Api.moveToview,
data: {
if (srcMediaId != null) 'src_media_id': srcMediaId,
'tar_media_id': tarMediaId,
if (mid != null) 'mid': mid,
'resources': resources.join(','),
'platform': 'web',
'csrf': Accounts.main.csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future allFavFolders(mid) async {
var res = await Request().get(
Api.favFolder,
queryParameters: {'up_mid': mid},
);
if (res.data['code'] == 0) {
return {'status': true, 'data': FavVideoData.fromJson(res.data['data'])};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
// 查看视频被收藏在哪个文件夹
static Future videoInFolder({
dynamic mid,
dynamic rid,
dynamic type,
}) async {
var res = await Request().get(
Api.favFolder,
queryParameters: {
'up_mid': mid,
'rid': rid,
if (type != null) 'type': type,
},
);
if (res.data['code'] == 0) {
return {'status': true, 'data': FavVideoData.fromJson(res.data['data'])};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
}

View File

@@ -1,10 +1,10 @@
import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/follow/result.dart';
import 'package:PiliPlus/models_new/follow/data.dart';
class FollowHttp {
static Future<LoadingState<FollowDataModel>> followings({
static Future<LoadingState<FollowData>> followings({
int? vmid,
int? pn,
int? ps,
@@ -19,14 +19,14 @@ class FollowHttp {
});
if (res.data['code'] == 0) {
return Success(
FollowDataModel.fromJson(res.data['data']),
FollowData.fromJson(res.data['data']),
);
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<FollowDataModel>> followingsNew({
static Future<LoadingState<FollowData>> followingsNew({
int? vmid,
int? pn,
int? ps,
@@ -42,7 +42,7 @@ class FollowHttp {
if (res.data['code'] == 0) {
return Success(
FollowDataModel.fromJson(res.data['data']),
FollowData.fromJson(res.data['data']),
);
} else {
return Error(res.data['message']);

View File

@@ -3,63 +3,23 @@ import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/common/live_search_type.dart';
import 'package:PiliPlus/models/live/live_area_list/area_item.dart';
import 'package:PiliPlus/models/live/live_area_list/area_list.dart';
import 'package:PiliPlus/models/live/live_emoticons/data.dart';
import 'package:PiliPlus/models/live/live_emoticons/datum.dart';
import 'package:PiliPlus/models/live/live_feed_index/data.dart';
import 'package:PiliPlus/models/live/live_follow/data.dart';
import 'package:PiliPlus/models/live/live_room/danmu_info.dart';
import 'package:PiliPlus/models/live/live_room/item.dart';
import 'package:PiliPlus/models/live/live_room/room_info.dart';
import 'package:PiliPlus/models/live/live_room/room_info_h5.dart';
import 'package:PiliPlus/models/live/live_search/data.dart';
import 'package:PiliPlus/models/live/live_second_list/data.dart';
import 'package:PiliPlus/models_new/live/live_area_list/area_item.dart';
import 'package:PiliPlus/models_new/live/live_area_list/area_list.dart';
import 'package:PiliPlus/models_new/live/live_dm_info/data.dart';
import 'package:PiliPlus/models_new/live/live_emote/data.dart';
import 'package:PiliPlus/models_new/live/live_emote/datum.dart';
import 'package:PiliPlus/models_new/live/live_feed_index/data.dart';
import 'package:PiliPlus/models_new/live/live_follow/data.dart';
import 'package:PiliPlus/models_new/live/live_room_info_h5/data.dart';
import 'package:PiliPlus/models_new/live/live_room_play_info/data.dart';
import 'package:PiliPlus/models_new/live/live_search/data.dart';
import 'package:PiliPlus/models_new/live/live_second_list/data.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:PiliPlus/utils/wbi_sign.dart';
import 'package:dio/dio.dart';
class LiveHttp {
static Future<LoadingState<List<LiveItemModel>?>> liveList({
int? vmid,
int? pn,
int? ps,
String? orderType,
String? gaiaVtoken,
}) async {
var res = await Request().get(
Api.liveList,
queryParameters: await WbiSign.makSign({
'page': pn,
'page_size': 30,
'platform': 'web',
'web_location': 0.0,
if (gaiaVtoken != null) 'gaia_vtoken': gaiaVtoken,
}),
options: Options(
headers: {
'origin': 'https://live.bilibili.com',
'referer': 'https://live.bilibili.com/',
'user-agent': Request.headerUa(type: 'pc'),
if (gaiaVtoken != null) 'cookie': 'x-bili-gaia-vtoken=$gaiaVtoken'
},
),
);
if (res.data['code'] == 0) {
List<LiveItemModel>? list = (res.data['data']?['list'] as List?)
?.map<LiveItemModel>((e) => LiveItemModel.fromJson(e))
.toList();
return Success(list);
} else {
String? vVoucher;
if (gaiaVtoken == null && res.data['code'] == -352) {
vVoucher = res.headers['x-bili-gaia-vvoucher']?.firstOrNull;
}
return Error(vVoucher ?? res.data['message']);
}
}
static Future sendLiveMsg({roomId, msg, dmType, emoticonOptions}) async {
String csrf = Accounts.main.csrf;
var res = await Request().post(
@@ -118,7 +78,10 @@ class LiveHttp {
},
);
if (res.data['code'] == 0) {
return {'status': true, 'data': RoomInfoModel.fromJson(res.data['data'])};
return {
'status': true,
'data': RoomPlayInfoData.fromJson(res.data['data'])
};
} else {
return {'status': false, 'msg': res.data['message']};
}
@@ -131,7 +94,7 @@ class LiveHttp {
if (res.data['code'] == 0) {
return {
'status': true,
'data': RoomInfoH5Model.fromJson(res.data['data'])
'data': RoomInfoH5Data.fromJson(res.data['data'])
};
} else {
return {'status': false, 'msg': res.data['message']};
@@ -142,6 +105,12 @@ class LiveHttp {
var res = await Request().get(
Api.liveRoomDmPrefetch,
queryParameters: {'roomid': roomId},
options: Options(
headers: {
'referer': 'https://live.bilibili.com/$roomId',
'user-agent': Request.headerUa(type: 'pc'),
},
),
);
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']?['room']};
@@ -159,7 +128,10 @@ class LiveHttp {
}),
);
if (res.data['code'] == 0) {
return {'status': true, 'data': LiveDanmakuInfo.fromJson(res.data)};
return {
'status': true,
'data': LiveDmInfoData.fromJson(res.data['data'])
};
} else {
return {'status': false, 'msg': res.data['message']};
}

View File

@@ -8,19 +8,18 @@ import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/common/member/contribute_type.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/models/follow/result.dart';
import 'package:PiliPlus/models/member/archive.dart';
import 'package:PiliPlus/models/member/coin.dart';
import 'package:PiliPlus/models/member/info.dart';
import 'package:PiliPlus/models/member/seasons.dart';
import 'package:PiliPlus/models/member/tags.dart';
import 'package:PiliPlus/models/member_ss/item.dart';
import 'package:PiliPlus/models/space/data.dart';
import 'package:PiliPlus/models/space_archive/data.dart';
import 'package:PiliPlus/models/space_article/data.dart';
import 'package:PiliPlus/models/space_fav/space_fav.dart';
import 'package:PiliPlus/models/space_opus/data.dart';
import 'package:PiliPlus/models/upower_rank/data.dart';
import 'package:PiliPlus/models_new/follow/data.dart';
import 'package:PiliPlus/models_new/follow/list.dart';
import 'package:PiliPlus/models_new/member/search_archive/data.dart';
import 'package:PiliPlus/models_new/space/space/data.dart';
import 'package:PiliPlus/models_new/space/space_archive/data.dart';
import 'package:PiliPlus/models_new/space/space_article/data.dart';
import 'package:PiliPlus/models_new/space/space_opus/data.dart';
import 'package:PiliPlus/models_new/space/space_season_series/item.dart';
import 'package:PiliPlus/models_new/upower_rank/data.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:PiliPlus/utils/wbi_sign.dart';
@@ -84,37 +83,7 @@ class MemberHttp {
}
}
static Future<LoadingState> spaceFav({
required int mid,
}) async {
Map<String, String> data = {
'build': '8430300',
'c_locale': 'zh_CN',
'channel': 'bili',
'mobi_app': 'android',
'platform': 'android',
's_locale': 'zh_CN',
'statistics': Constants.statisticsApp,
'up_mid': mid.toString(),
};
var res = await Request().get(
Api.spaceFav,
queryParameters: data,
options: Options(
headers: {
'bili-http-engine': 'cronet',
'user-agent': Constants.userAgentApp,
},
),
);
if (res.data['code'] == 0) {
return Success(SpaceFav.fromJson(res.data).data);
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<MemberSsData>> seasonSeriesList({
static Future<LoadingState<SpaceSsData>> seasonSeriesList({
required int? mid,
required int pn,
}) async {
@@ -128,7 +97,7 @@ class MemberHttp {
);
if (res.data['code'] == 0) {
return Success(
MemberSsData.fromJson(res.data['data']?['items_lists'] ?? {}));
SpaceSsData.fromJson(res.data['data']?['items_lists'] ?? {}));
} else {
return Error(res.data['message']);
}
@@ -324,58 +293,7 @@ class MemberHttp {
}
}
static Future memberArchive({
required int mid,
int ps = 30,
int tid = 0,
int? pn,
String? keyword,
String order = 'pubdate',
bool orderAvoided = true,
}) async {
String dmImgStr = Utils.base64EncodeRandomString(16, 64);
String dmCoverImgStr = Utils.base64EncodeRandomString(32, 128);
final params = await WbiSign.makSign({
'mid': mid,
'ps': ps,
'tid': tid,
'pn': pn,
if (keyword != null) 'keyword': keyword,
'order': order,
'platform': 'web',
'web_location': '1550101',
'order_avoided': orderAvoided,
'dm_img_list': '[]',
'dm_img_str': dmImgStr,
'dm_cover_img_str': dmCoverImgStr,
'dm_img_inter': '{"ds":[],"wh":[0,0,0],"of":[0,0,0]}',
});
var res = await Request().get(
Api.memberArchive,
queryParameters: params,
options: Options(headers: {
HttpHeaders.userAgentHeader: Request.headerUa(type: 'pc'),
HttpHeaders.refererHeader: '${HttpString.spaceBaseUrl}/$mid',
'origin': HttpString.spaceBaseUrl,
}),
);
if (res.data['code'] == 0) {
return {
'status': true,
'data': MemberArchiveDataModel.fromJson(res.data['data'])
};
} else {
Map errMap = {
-352: '风控校验失败,请检查登录状态',
};
return {
'status': false,
'msg': errMap[res.data['code']] ?? res.data['message'],
};
}
}
static Future<LoadingState> memberArchiveNew({
static Future<LoadingState<SearchArchiveData>> searchArchive({
required mid,
int ps = 30,
int tid = 0,
@@ -402,7 +320,7 @@ class MemberHttp {
'dm_img_inter': '{"ds":[],"wh":[0,0,0],"of":[0,0,0]}',
});
var res = await Request().get(
Api.memberArchive,
Api.searchArchive,
queryParameters: params,
options: Options(headers: {
HttpHeaders.userAgentHeader: Request.headerUa(type: 'pc'),
@@ -411,9 +329,9 @@ class MemberHttp {
}),
);
if (res.data['code'] == 0) {
return Success(MemberArchiveDataModel.fromJson(res.data['data']));
return Success(SearchArchiveData.fromJson(res.data['data']));
} else {
Map errMap = {
Map errMap = const {
-352: '风控校验失败,请检查登录状态',
};
return Error(errMap[res.data['code']] ?? res.data['message']);
@@ -453,7 +371,7 @@ class MemberHttp {
}
return Success(data);
} else {
Map errMap = {
Map errMap = const {
-352: '风控校验失败,请检查登录状态',
};
return Error(errMap[res.data['code']] ?? res.data['message']);
@@ -468,7 +386,7 @@ class MemberHttp {
required String keyword,
}) async {
var res = await Request().get(
Api.memberDynamicSearch,
Api.dynSearch,
queryParameters: {
'host_mid': mid,
'page': pn,
@@ -491,14 +409,14 @@ class MemberHttp {
}
}
static Future<LoadingState> memberDynamicSearchNew({
static Future<LoadingState<DynamicsDataModel>> dynSearch({
required int pn,
required dynamic mid,
required dynamic offset,
required String keyword,
}) async {
var res = await Request().get(
Api.memberDynamicSearch,
Api.dynSearch,
queryParameters: {
'host_mid': mid,
'page': pn,
@@ -580,7 +498,7 @@ class MemberHttp {
}
// 获取某分组下的up
static Future<LoadingState<FollowDataModel>> followUpGroup(
static Future<LoadingState<FollowData>> followUpGroup(
int? mid,
int? tagid,
int? pn,
@@ -596,7 +514,7 @@ class MemberHttp {
},
);
if (res.data['code'] == 0) {
return Success(FollowDataModel(
return Success(FollowData(
list: (res.data['data'] as List?)
?.map<FollowItemModel>((e) => FollowItemModel.fromJson(e))
.toList()));
@@ -687,23 +605,6 @@ class MemberHttp {
}
}
// 获取uo专栏
static Future getMemberSeasons(int? mid, int? pn, int? ps) async {
var res = await Request().get(Api.getMemberSeasonsApi, queryParameters: {
'mid': mid,
'page_num': pn,
'page_size': ps,
});
if (res.data['code'] == 0) {
return {
'status': true,
'data': MemberSeasonsDataModel.fromJson(res.data['data']['items_lists'])
};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
// 最近投币
static Future<LoadingState<List<MemberCoinsDataModel>?>> getRecentCoinVideo(
{required int mid}) async {
@@ -760,38 +661,6 @@ class MemberHttp {
}
}
// 查看某个专栏
static Future getSeasonDetail({
required int mid,
required int seasonId,
bool sortReverse = false,
required int pn,
required int ps,
}) async {
var res = await Request().get(
Api.getSeasonDetailApi,
queryParameters: {
'mid': mid,
'season_id': seasonId,
'sort_reverse': sortReverse,
'page_num': pn,
'page_size': ps,
},
);
if (res.data['code'] == 0) {
try {
return {
'status': true,
'data': MemberSeasonsList.fromJson(res.data['data'])
};
} catch (err) {
debugPrint(err.toString());
}
} else {
return {'status': false, 'msg': res.data['message']};
}
}
// 获取up播放数、点赞数
static Future memberView({required int mid}) async {
var res = await Request()
@@ -804,7 +673,7 @@ class MemberHttp {
}
// 搜索follow
static Future<LoadingState<FollowDataModel>> getfollowSearch({
static Future<LoadingState<FollowData>> getfollowSearch({
required int mid,
required int ps,
required int pn,
@@ -827,7 +696,7 @@ class MemberHttp {
'wts': params['wts'],
});
if (res.data['code'] == 0) {
return Success(FollowDataModel.fromJson(res.data['data']));
return Success(FollowData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}

View File

@@ -2,24 +2,21 @@ import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/constants.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/bfs_res/data.dart';
import 'package:PiliPlus/models/msg/account.dart';
import 'package:PiliPlus/models/msg/im_user_infos/datum.dart';
import 'package:PiliPlus/models/msg/msg_dnd/uid_setting.dart';
import 'package:PiliPlus/models/msg/msgfeed_at_me.dart';
import 'package:PiliPlus/models/msg/msgfeed_like_me.dart';
import 'package:PiliPlus/models/msg/msgfeed_reply_me.dart';
import 'package:PiliPlus/models/msg/msgfeed_sys_msg.dart';
import 'package:PiliPlus/models/msg/session.dart';
import 'package:PiliPlus/models/msg/session_ss/data.dart';
import 'package:PiliPlus/models_new/msg/im_user_infos/datum.dart';
import 'package:PiliPlus/models_new/msg/msg_at/data.dart';
import 'package:PiliPlus/models_new/msg/msg_dnd/uid_setting.dart';
import 'package:PiliPlus/models_new/msg/msg_like/data.dart';
import 'package:PiliPlus/models_new/msg/msg_reply/data.dart';
import 'package:PiliPlus/models_new/msg/msg_sys/data.dart';
import 'package:PiliPlus/models_new/msg/session_ss/data.dart';
import 'package:PiliPlus/models_new/upload_bfs/data.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/wbi_sign.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:uuid/uuid.dart';
class MsgHttp {
static Future<LoadingState<MsgFeedReplyMe>> msgFeedReplyMe({
static Future<LoadingState<MsgReplyData>> msgFeedReplyMe({
int? cursor,
int? cursorTime,
}) async {
@@ -35,14 +32,13 @@ class MsgHttp {
},
);
if (res.data['code'] == 0) {
MsgFeedReplyMe data = MsgFeedReplyMe.fromJson(res.data['data']);
return Success(data);
return Success(MsgReplyData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<MsgFeedAtMe>> msgFeedAtMe(
static Future<LoadingState<MsgAtData>> msgFeedAtMe(
{int? cursor, int? cursorTime}) async {
var res = await Request().get(
Api.msgFeedAt,
@@ -56,14 +52,13 @@ class MsgHttp {
},
);
if (res.data['code'] == 0) {
MsgFeedAtMe data = MsgFeedAtMe.fromJson(res.data['data']);
return Success(data);
return Success(MsgAtData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<MsgFeedLikeMe>> msgFeedLikeMe(
static Future<LoadingState<MsgLikeData>> msgFeedLikeMe(
{int? cursor, int? cursorTime}) async {
var res = await Request().get(Api.msgFeedLike, queryParameters: {
if (cursor != null) 'id': cursor,
@@ -74,14 +69,13 @@ class MsgHttp {
'web_location': 333.40164,
});
if (res.data['code'] == 0) {
MsgFeedLikeMe data = MsgFeedLikeMe.fromJson(res.data['data']);
return Success(data);
return Success(MsgLikeData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<List<SystemNotifyList>?>> msgFeedNotify(
static Future<LoadingState<List<MsgSysItem>?>> msgFeedNotify(
{int? cursor, int pageSize = 20}) async {
var res = await Request().get(
Api.msgSysNotify,
@@ -94,10 +88,9 @@ class MsgHttp {
},
);
if (res.data['code'] == 0) {
List<SystemNotifyList>? list = (res.data['data'] as List?)
?.map((e) => SystemNotifyList.fromJson(e))
.toList();
return Success(list);
return Success((res.data['data'] as List?)
?.map((e) => MsgSysItem.fromJson(e))
.toList());
} else {
return Error(res.data['message']);
}
@@ -169,7 +162,7 @@ class MsgHttp {
if (res.data['code'] == 0) {
return {
'status': true,
'data': BfsResData.fromJson(res.data['data']),
'data': UploadBfsResData.fromJson(res.data['data']),
};
} else {
return {
@@ -331,81 +324,6 @@ class MsgHttp {
}
}
// 会话列表
static Future<LoadingState<List<SessionList>?>> sessionList(
{int? endTs}) async {
final params = await WbiSign.makSign({
'session_type': 1,
'group_fold': 1,
'unfollow_fold': 0,
'sort_rule': 2,
'build': 0,
'mobi_app': 'web',
if (endTs != null) 'end_ts': endTs,
});
var res = await Request().get(Api.sessionList, queryParameters: params);
if (res.data['code'] == 0) {
try {
return Success(
SessionDataModel.fromJson(res.data['data']).sessionList,
);
} catch (err) {
return Error(err.toString());
}
} else {
return Error(res.data['message']);
}
}
static Future accountList(uids) async {
var res = await Request().get(Api.sessionAccountList, queryParameters: {
'uids': uids,
'build': 0,
'mobi_app': 'web',
});
if (res.data['code'] == 0) {
try {
return {
'status': true,
'data': res.data['data']
.map<AccountListModel>((e) => AccountListModel.fromJson(e))
.toList(),
};
} catch (err) {
debugPrint('err🔟: $err');
}
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future<LoadingState<SessionMsgDataModel>> sessionMsg({
int? talkerId,
beginSeqno,
endSeqno,
}) async {
final params = await WbiSign.makSign({
'talker_id': talkerId,
'session_type': 1,
'size': 20,
'sender_device_id': 1,
'build': 0,
'mobi_app': 'web',
if (beginSeqno != null) 'begin_seqno': beginSeqno,
if (endSeqno != null) 'end_seqno': endSeqno,
});
var res = await Request().get(Api.sessionMsg, queryParameters: params);
if (res.data['code'] == 0) {
try {
return Success(SessionMsgDataModel.fromJson(res.data['data']));
} catch (err) {
return Error(err.toString());
}
} else {
return Error(res.data['message']);
}
}
// 消息标记已读
static Future ackSessionMsg({
int? talkerId,

View File

@@ -2,17 +2,17 @@ import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/common/pgc_review_type.dart';
import 'package:PiliPlus/models/pgc/list.dart';
import 'package:PiliPlus/models/pgc/pgc_index/condition.dart';
import 'package:PiliPlus/models/pgc/pgc_index_item/data.dart';
import 'package:PiliPlus/models/pgc/pgc_review/data.dart';
import 'package:PiliPlus/models/pgc/pgc_timeline/pgc_timeline.dart';
import 'package:PiliPlus/models/pgc/pgc_timeline/result.dart';
import 'package:PiliPlus/models_new/pgc/pgc_index_condition/data.dart';
import 'package:PiliPlus/models_new/pgc/pgc_index_result/data.dart';
import 'package:PiliPlus/models_new/pgc/pgc_index_result/list.dart';
import 'package:PiliPlus/models_new/pgc/pgc_review/data.dart';
import 'package:PiliPlus/models_new/pgc/pgc_timeline/pgc_timeline.dart';
import 'package:PiliPlus/models_new/pgc/pgc_timeline/result.dart';
import 'package:PiliPlus/utils/storage.dart' show Accounts;
import 'package:dio/dio.dart';
class BangumiHttp {
static Future<LoadingState<PgcIndexItemData>> pgcIndexResult({
class PgcHttp {
static Future<LoadingState<PgcIndexResult>> pgcIndexResult({
required int page,
required Map<String, dynamic> params,
seasonType,
@@ -31,13 +31,13 @@ class BangumiHttp {
},
);
if (res.data['code'] == 0) {
return Success(PgcIndexItemData.fromJson(res.data['data']));
return Success(PgcIndexResult.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<PgcIndexCondition>> pgcIndexCondition({
static Future<LoadingState<PgcIndexConditionData>> pgcIndexCondition({
seasonType,
type,
indexType,
@@ -51,43 +51,25 @@ class BangumiHttp {
},
);
if (res.data['code'] == 0) {
return Success(PgcIndexCondition.fromJson(res.data['data']));
return Success(PgcIndexConditionData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<List<BangumiListItemModel>?>> bangumiList({
static Future<LoadingState<List<PgcIndexItem>?>> pgcIndex({
int? page,
int? indexType,
}) async {
var res = await Request().get(Api.bangumiList, queryParameters: {
'page': page,
if (indexType != null) 'index_type': indexType,
});
var res = await Request().get(
Api.pgcIndex,
queryParameters: {
'page': page,
if (indexType != null) 'index_type': indexType,
},
);
if (res.data['code'] == 0) {
BangumiListDataModel data =
BangumiListDataModel.fromJson(res.data['data']);
return Success(data.list);
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<BangumiListDataModel>> bangumiFollowList({
required dynamic mid,
required int type,
required int pn,
int? followStatus,
}) async {
var res = await Request().get(Api.bangumiFollowList, queryParameters: {
'vmid': mid,
'type': type,
if (followStatus != null) 'follow_status': followStatus,
'pn': pn,
});
if (res.data['code'] == 0) {
return Success(BangumiListDataModel.fromJson(res.data['data']));
return Success(PgcIndexResult.fromJson(res.data['data']).list);
} else {
return Error(res.data['message']);
}

View File

@@ -2,9 +2,11 @@ import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/video/reply/data.dart';
import 'package:PiliPlus/models/video/reply/emote.dart';
import 'package:PiliPlus/models/video/reply/item.dart';
import 'package:PiliPlus/models_new/emote/data.dart';
import 'package:PiliPlus/models_new/emote/package.dart';
import 'package:PiliPlus/models_new/reply/data.dart';
import 'package:PiliPlus/models_new/reply/reply.dart';
import 'package:PiliPlus/models_new/reply2reply/data.dart';
import 'package:PiliPlus/utils/accounts/account.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:dio/dio.dart';
@@ -230,7 +232,7 @@ class ReplyHttp {
}
}
static Future<LoadingState<List<Packages>?>> getEmoteList(
static Future<LoadingState<List<Package>?>> getEmoteList(
{String? business}) async {
var res = await Request().get(Api.myEmote, queryParameters: {
'business': business ?? 'reply',

View File

@@ -4,11 +4,12 @@ import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/common/search_type.dart';
import 'package:PiliPlus/models/pgc/pgc_info_model/result.dart';
import 'package:PiliPlus/models/search/result.dart';
import 'package:PiliPlus/models/search/search_trending/trending_data.dart';
import 'package:PiliPlus/models/search/suggest.dart';
import 'package:PiliPlus/models/topic_pub_search/data.dart';
import 'package:PiliPlus/models_new/dynamic/dyn_topic_pub_search/data.dart';
import 'package:PiliPlus/models_new/pgc/pgc_info_model/result.dart';
import 'package:PiliPlus/models_new/search/search_rcmd/data.dart';
import 'package:PiliPlus/models_new/search/search_trending/data.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:flutter/material.dart';
@@ -16,33 +17,27 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
class SearchHttp {
// 获取搜索建议
static Future searchSuggest({required term}) async {
var res = await Request().get(Api.searchSuggest,
queryParameters: {'term': term, 'main_ver': 'v1', 'highlight': term});
static Future searchSuggest({required String term}) async {
var res = await Request().get(
Api.searchSuggest,
queryParameters: {
'term': term,
'main_ver': 'v1',
'highlight': term,
},
);
if (res.data is String) {
Map<String, dynamic> resultMap = json.decode(res.data);
if (resultMap['code'] == 0) {
if (resultMap['result'] is Map) {
resultMap['result']['term'] = term;
return {
'status': true,
'data': SearchSuggestModel.fromJson(resultMap['result']),
};
}
return {
'status': true,
'data': resultMap['result'] is Map
? SearchSuggestModel.fromJson(resultMap['result'])
: null,
};
} else {
return {
'status': false,
'msg': '请求错误 🙅',
};
}
} else {
return {
'status': false,
'msg': '请求错误 🙅',
};
}
return {'status': false, 'msg': '请求错误'};
}
// 分类搜索
@@ -91,19 +86,19 @@ class SearchHttp {
i['available'] = !blackMids.contains(i['mid']);
}
}
data = SearchVideoModel.fromJson(res.data['data']);
data = SearchVideoData.fromJson(res.data['data']);
break;
case SearchType.live_room:
data = SearchLiveModel.fromJson(res.data['data']);
data = SearchLiveData.fromJson(res.data['data']);
break;
case SearchType.bili_user:
data = SearchUserModel.fromJson(res.data['data']);
data = SearchUserData.fromJson(res.data['data']);
break;
case SearchType.media_bangumi || SearchType.media_ft:
data = SearchMBangumiModel.fromJson(res.data['data']);
data = SearchPgcData.fromJson(res.data['data']);
break;
case SearchType.article:
data = SearchArticleModel.fromJson(res.data['data']);
data = SearchArticleData.fromJson(res.data['data']);
break;
}
return Success(data);
@@ -116,7 +111,7 @@ class SearchHttp {
}
}
static Future<LoadingState<SearchAllModel>> searchAll({
static Future<LoadingState<SearchAllData>> searchAll({
required String keyword,
required page,
String? order,
@@ -149,7 +144,7 @@ class SearchHttp {
}
if (res.data['code'] == 0) {
try {
return Success(SearchAllModel.fromJson(res.data['data']));
return Success(SearchAllData.fromJson(res.data['data']));
} catch (err) {
debugPrint(err.toString());
return Error(err.toString());
@@ -181,17 +176,17 @@ class SearchHttp {
}
}
static Future<LoadingState<BangumiInfoModel>> bangumiInfoNew(
static Future<LoadingState<PgcInfoModel>> pgcInfoNew(
{int? seasonId, int? epId}) async {
var res = await Request().get(
Api.bangumiInfo,
Api.pgcInfo,
queryParameters: {
if (seasonId != null) 'season_id': seasonId,
if (epId != null) 'ep_id': epId,
},
);
if (res.data['code'] == 0) {
return Success(BangumiInfoModel.fromJson(res.data['result']));
return Success(PgcInfoModel.fromJson(res.data['result']));
} else {
return Error(res.data['message']);
}
@@ -211,12 +206,12 @@ class SearchHttp {
}
}
static Future<Map<String, dynamic>> bangumiInfo({
static Future<Map<String, dynamic>> pgcInfo({
dynamic seasonId,
dynamic epId,
}) async {
var res = await Request().get(
Api.bangumiInfo,
Api.pgcInfo,
queryParameters: {
if (seasonId != null) 'season_id': seasonId,
if (epId != null) 'ep_id': epId,
@@ -225,14 +220,14 @@ class SearchHttp {
if (res.data['code'] == 0) {
return {
'status': true,
'data': BangumiInfoModel.fromJson(res.data['result']),
'data': PgcInfoModel.fromJson(res.data['result']),
};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future<LoadingState<TrendingData>> searchTrending(
static Future<LoadingState<SearchTrendingData>> searchTrending(
{int limit = 30}) async {
final res = await Request().get(
Api.searchTrending,
@@ -241,22 +236,25 @@ class SearchHttp {
},
);
if (res.data['code'] == 0) {
return Success(TrendingData.fromJson(res.data['data']));
return Success(SearchTrendingData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<SearchKeywordData>> searchRecommend() async {
final res = await Request().get(Api.searchRecommend, queryParameters: {
'build': '8350200',
'c_locale': 'zh_CN',
'mobi_app': 'android',
'platform': 'android',
's_locale': 'zh_CN',
});
static Future<LoadingState<SearchRcmdData>> searchRecommend() async {
final res = await Request().get(
Api.searchRecommend,
queryParameters: {
'build': '8350200',
'c_locale': 'zh_CN',
'mobi_app': 'android',
'platform': 'android',
's_locale': 'zh_CN',
},
);
if (res.data['code'] == 0) {
return Success(SearchKeywordData.fromJson(res.data['data']));
return Success(SearchRcmdData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}

View File

@@ -2,22 +2,16 @@ import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/fav_article/data.dart';
import 'package:PiliPlus/models/folder_info/data.dart';
import 'package:PiliPlus/models/media_list/data.dart';
import 'package:PiliPlus/models/model_hot_video_item.dart';
import 'package:PiliPlus/models/user/fav_detail.dart';
import 'package:PiliPlus/models/user/fav_folder.dart';
import 'package:PiliPlus/models/user/fav_topic/data.dart';
import 'package:PiliPlus/models/user/history.dart';
import 'package:PiliPlus/models/user/info.dart';
import 'package:PiliPlus/models/user/stat.dart';
import 'package:PiliPlus/models/user/sub_detail.dart';
import 'package:PiliPlus/models/user/sub_folder.dart';
import 'package:PiliPlus/models/video_tag/data.dart';
import 'package:PiliPlus/models_new/history/data.dart';
import 'package:PiliPlus/models_new/media_list/data.dart';
import 'package:PiliPlus/models_new/sub/sub/data.dart';
import 'package:PiliPlus/models_new/sub/sub/list.dart';
import 'package:PiliPlus/models_new/video/video_tag/data.dart';
import 'package:PiliPlus/utils/global_data.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:PiliPlus/utils/wbi_sign.dart';
import 'package:dio/dio.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
@@ -53,180 +47,6 @@ class UserHttp {
}
}
// 收藏夹
static Future<LoadingState<FavFolderData>> userfavFolder({
required int pn,
required int ps,
required dynamic mid,
}) async {
var res = await Request().get(Api.userFavFolder, queryParameters: {
'pn': pn,
'ps': ps,
'up_mid': mid,
});
if (res.data['code'] == 0) {
return Success(FavFolderData.fromJson(res.data['data']));
} else {
return Error(res.data['message'] ?? '账号未登录');
}
}
static Future sortFavFolder({
required List<int?> sort,
}) async {
Map<String, dynamic> data = {
'sort': sort.join(','),
'csrf': Accounts.main.csrf,
};
Utils.appSign(data);
var res = await Request().post(
Api.sortFavFolder,
data: data,
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future sortFav({
required dynamic mediaId,
required List<String> sort,
}) async {
Map<String, dynamic> data = {
'media_id': mediaId,
'sort': sort.join(','),
'csrf': Accounts.main.csrf,
};
Utils.appSign(data);
var res = await Request().post(
Api.sortFav,
data: data,
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future cleanFav({
required dynamic mediaId,
}) async {
var res = await Request().post(
Api.cleanFav,
data: {
'media_id': mediaId,
'platform': 'web',
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future deleteFolder({
required List<dynamic> mediaIds,
}) async {
var res = await Request().post(Api.deleteFolder,
data: {
'media_ids': mediaIds.join(','),
'platform': 'web',
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
));
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future addOrEditFolder({
required bool isAdd,
dynamic mediaId,
required String title,
required int privacy,
required String cover,
required String intro,
}) async {
var res = await Request().post(isAdd ? Api.addFolder : Api.editFolder,
data: {
'title': title,
'intro': intro,
'privacy': privacy,
'cover': cover.isNotEmpty ? Uri.encodeFull(cover) : cover,
'csrf': Accounts.main.csrf,
if (mediaId != null) 'media_id': mediaId,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
));
if (res.data['code'] == 0) {
return {
'status': true,
'data': FavFolderItemData.fromJson(res.data['data'])
};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future folderInfo({
dynamic mediaId,
}) async {
var res = await Request().get(
Api.folderInfo,
queryParameters: {
'media_id': mediaId,
},
);
if (res.data['code'] == 0) {
return {'status': true, 'data': FolderInfo.fromJson(res.data['data'])};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future<LoadingState<FavDetailData>> userFavFolderDetail(
{required int mediaId,
required int pn,
required int ps,
String keyword = '',
String order = 'mtime',
int type = 0}) async {
var res = await Request().get(Api.favResourceList, queryParameters: {
'media_id': mediaId,
'pn': pn,
'ps': ps,
'keyword': keyword,
'order': order,
'type': type,
'tid': 0,
'platform': 'web'
});
if (res.data['code'] == 0) {
return Success(FavDetailData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
// 稍后再看
static Future<LoadingState<Map>> seeYouLater({
required int page,
@@ -445,7 +265,7 @@ class UserHttp {
}
// 我的订阅
static Future<LoadingState<List<SubFolderItemData>?>> userSubFolder({
static Future<LoadingState<List<SubItemModel>?>> userSubFolder({
required int mid,
required int pn,
required int ps,
@@ -460,227 +280,12 @@ class UserHttp {
},
);
if (res.data['code'] == 0 && res.data['data'] is Map) {
return Success(SubFolderModelData.fromJson(res.data['data']).list);
return Success(SubData.fromJson(res.data['data']).list);
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<SubDetailModelData>> favSeasonList({
required int id,
required int pn,
required int ps,
}) async {
var res = await Request().get(
Api.favSeasonList,
queryParameters: {
'season_id': id,
'ps': ps,
'pn': pn,
},
);
if (res.data['code'] == 0) {
return Success(SubDetailModelData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<FavTopicData>> favTopic({
required int page,
}) async {
var res = await Request().get(
Api.favTopicList,
queryParameters: {
'page_size': 24,
'page_num': page,
'web_location': 333.1387,
},
);
if (res.data['code'] == 0) {
return Success(FavTopicData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future addFavTopic(topicId) async {
var res = await Request().post(
Api.addFavTopic,
data: {
'topic_id': topicId,
'csrf': Accounts.main.csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future delFavTopic(topicId) async {
var res = await Request().post(
Api.delFavTopic,
data: {
'topic_id': topicId,
'csrf': Accounts.main.csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future likeTopic(topicId, bool isLike) async {
var res = await Request().post(
Api.likeTopic,
data: {
'action': isLike ? 'cancel_like' : 'like',
'up_mid': Accounts.main.mid,
'topic_id': topicId,
'csrf': Accounts.main.csrf,
'business': 'topic',
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future<LoadingState<FavArticleData>> favArticle({
required int page,
}) async {
var res = await Request().get(
Api.favArticle,
queryParameters: {
'page_size': 20,
'page': page,
},
);
if (res.data['code'] == 0) {
return Success(FavArticleData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future addFavArticle({
required dynamic id,
}) async {
var res = await Request().post(
Api.addFavArticle,
data: {
'id': id,
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future delFavArticle({
required dynamic id,
}) async {
var res = await Request().post(
Api.delFavArticle,
data: {
'id': id,
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future communityAction({
required dynamic opusId,
required dynamic action,
}) async {
var res = await Request().post(
Api.communityAction,
queryParameters: {
'csrf': Accounts.main.csrf,
},
data: {
"entity": {
"object_id_str": opusId,
"type": {"biz": 2}
},
"action": action, // 3 fav, 4 unfav
},
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future<LoadingState<SubDetailModelData>> favResourceList({
required int id,
required int pn,
required int ps,
}) async {
var res = await Request().get(Api.favResourceList, queryParameters: {
'media_id': id,
'ps': ps,
'pn': pn,
});
if (res.data['code'] == 0) {
return Success(SubDetailModelData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
// 取消订阅
static Future cancelSub({required int id, required int type}) async {
late Response res;
if (type == 11) {
res = await Request().post(
Api.unfavFolder,
queryParameters: {
'media_id': id,
'csrf': Accounts.main.csrf,
},
);
} else {
res = await Request().post(
Api.unfavSeason,
queryParameters: {
'platform': 'web',
'season_id': id,
'csrf': Accounts.main.csrf,
},
);
}
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future<Map<String, dynamic>> videoTags({required String bvid}) async {
var res =
await Request().get(Api.videoTags, queryParameters: {'bvid': bvid});
@@ -713,7 +318,7 @@ class UserHttp {
'type': type,
'biz_id': bizId,
if (oid != null) 'oid': oid,
if (otype != null) 'otype': otype, // video:2 // bangumi: 24
if (otype != null) 'otype': otype, // ugc:2 // pgc: 24
'ps': ps,
'direction': direction,
'desc': desc,

View File

@@ -8,20 +8,18 @@ import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/http/login.dart';
import 'package:PiliPlus/models/common/account_type.dart';
import 'package:PiliPlus/models/home/rcmd/result.dart';
import 'package:PiliPlus/models/member/article.dart';
import 'package:PiliPlus/models/model_hot_video_item.dart';
import 'package:PiliPlus/models/model_rec_video_item.dart';
import 'package:PiliPlus/models/pgc/pgc_rank/pgc_rank_item_model.dart';
import 'package:PiliPlus/models/pgc_lcf.dart';
import 'package:PiliPlus/models/play_info/data.dart';
import 'package:PiliPlus/models/triple/pgc_triple.dart';
import 'package:PiliPlus/models/triple/ugc_triple.dart';
import 'package:PiliPlus/models/user/fav_folder.dart';
import 'package:PiliPlus/models/video/ai.dart';
import 'package:PiliPlus/models/video/note_list/data.dart';
import 'package:PiliPlus/models/video/play/url.dart';
import 'package:PiliPlus/models/video_detail/video_detail_response.dart';
import 'package:PiliPlus/models/video_relation/data.dart';
import 'package:PiliPlus/models_new/pgc/pgc_rank/pgc_rank_item_model.dart';
import 'package:PiliPlus/models_new/triple/pgc_triple.dart';
import 'package:PiliPlus/models_new/triple/ugc_triple.dart';
import 'package:PiliPlus/models_new/video/video_ai_conclusion/data.dart';
import 'package:PiliPlus/models_new/video/video_detail/video_detail_response.dart';
import 'package:PiliPlus/models_new/video/video_note_list/data.dart';
import 'package:PiliPlus/models_new/video/video_play_info/data.dart';
import 'package:PiliPlus/models_new/video/video_relation/data.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:PiliPlus/utils/id_utils.dart';
import 'package:PiliPlus/utils/recommend_filter.dart';
@@ -213,7 +211,7 @@ class VideoHttp {
try {
var res = await Request().get(
epid != null && usePgcApi ? Api.bangumiVideoUrl : Api.videoUrl,
epid != null && usePgcApi ? Api.pgcUrl : Api.ugcUrl,
queryParameters: params,
);
@@ -281,33 +279,6 @@ class VideoHttp {
}
}
static Future seasonFav({
required bool isFav,
required dynamic seasonId,
}) async {
var res = await Request().post(
Api.seasonFav + (isFav ? 'unfav' : 'fav'),
data: {
'platform': 'web',
'season_id': seasonId,
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {
'status': true,
};
} else {
return {
'status': false,
'msg': res.data['message'],
};
}
}
static Future videoRelation({required dynamic bvid}) async {
var res = await Request().get(
Api.videoRelation,
@@ -346,10 +317,10 @@ class VideoHttp {
}
}
// 获取点赞/投币/收藏状态 bangumi
static Future bangumiLikeCoinFav({dynamic epId}) async {
// 获取点赞/投币/收藏状态 pgc
static Future pgcLikeCoinFav({dynamic epId}) async {
var res = await Request().get(
Api.bangumiLikeCoinFav,
Api.pgcLikeCoinFav,
queryParameters: {'ep_id': epId},
);
if (res.data['code'] == 0) {
@@ -383,7 +354,7 @@ class VideoHttp {
}
}
// 一键三连 bangumi
// 一键三连 pgc
static Future triple({dynamic epId, required dynamic seasonId}) async {
var res = await Request().post(
Api.triple,
@@ -524,121 +495,6 @@ class VideoHttp {
}
}
// (取消)收藏
static Future delFav({
List? ids,
String? delIds,
}) async {
var res = await Request().post(
Api.delFav,
data: {
'resources': ids?.join(','),
'media_id': delIds,
'platform': 'web',
'csrf': Accounts.main.csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
// (取消)收藏
static Future favVideo({
int? aid,
String? addIds,
String? delIds,
int? type,
}) async {
var res = await Request().post(
Api.favVideo,
data: {
'rid': aid,
'type': type ?? 2,
'add_media_ids': addIds ?? '',
'del_media_ids': delIds ?? '',
'csrf': Accounts.main.csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future copyOrMoveFav({
required bool isCopy,
required bool isFav,
required dynamic srcMediaId,
required dynamic tarMediaId,
dynamic mid,
required List resources,
}) async {
var res = await Request().post(
isFav
? isCopy
? Api.copyFav
: Api.moveFav
: isCopy
? Api.copyToview
: Api.moveToview,
data: {
if (srcMediaId != null) 'src_media_id': srcMediaId,
'tar_media_id': tarMediaId,
if (mid != null) 'mid': mid,
'resources': resources.join(','),
'platform': 'web',
'csrf': Accounts.main.csrf,
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
static Future allFavFolders(mid) async {
var res = await Request().get(
Api.favFolder,
queryParameters: {'up_mid': mid},
);
if (res.data['code'] == 0) {
FavFolderData data = FavFolderData.fromJson(res.data['data']);
return {'status': true, 'data': data};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
// 查看视频被收藏在哪个文件夹
static Future videoInFolder({
dynamic mid,
dynamic rid,
dynamic type,
}) async {
var res = await Request().get(
Api.favFolder,
queryParameters: {
'up_mid': mid,
'rid': rid,
if (type != null) 'type': type,
},
);
if (res.data['code'] == 0) {
FavFolderData data = FavFolderData.fromJson(res.data['data']);
return {'status': true, 'data': data};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
// 发表评论 replyAdd
// type num 评论区类型代码 必要 类型代码见表
@@ -800,8 +656,8 @@ class VideoHttp {
}
// 添加追番
static Future bangumiAdd({int? seasonId}) async {
var res = await Request().post(Api.bangumiAdd, queryParameters: {
static Future pgcAdd({int? seasonId}) async {
var res = await Request().post(Api.pgcAdd, queryParameters: {
'season_id': seasonId,
'csrf': Accounts.main.csrf,
});
@@ -821,8 +677,8 @@ class VideoHttp {
}
// 取消追番
static Future bangumiDel({int? seasonId}) async {
var res = await Request().post(Api.bangumiDel, queryParameters: {
static Future pgcDel({int? seasonId}) async {
var res = await Request().post(Api.pgcDel, queryParameters: {
'season_id': seasonId,
'csrf': Accounts.main.csrf,
});
@@ -841,12 +697,12 @@ class VideoHttp {
}
}
static Future bangumiUpdate({
static Future pgcUpdate({
required List seasonId,
required dynamic status,
}) async {
var res = await Request().post(
Api.bangumiUpdate,
Api.pgcUpdate,
data: {
'season_id': seasonId.join(','),
'status': status,
@@ -890,7 +746,7 @@ class VideoHttp {
if (res.data['code'] == 0 && res.data['data']['code'] == 0) {
return {
'status': true,
'data': AiConclusionModel.fromJson(res.data['data']),
'data': AiConclusionData.fromJson(res.data['data']),
};
} else {
return {'status': false, 'msg': res.data['message']};
@@ -1016,7 +872,7 @@ class VideoHttp {
}
}
static Future<LoadingState<NoteListData>> getVideoNoteList({
static Future<LoadingState<VideoNoteData>> getVideoNoteList({
dynamic oid,
dynamic uperMid,
required int page,
@@ -1033,120 +889,9 @@ class VideoHttp {
},
);
if (res.data['code'] == 0) {
return Success(NoteListData.fromJson(res.data['data']));
return Success(VideoNoteData.fromJson(res.data['data']));
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<List<FavNoteModel>?>> noteList({
required int page,
}) async {
var res = await Request().get(
Api.noteList,
queryParameters: {
'pn': page,
'ps': 10,
'csrf': Accounts.main.csrf,
},
);
if (res.data['code'] == 0) {
List<FavNoteModel>? list = (res.data['data']?['list'] as List?)
?.map((e) => FavNoteModel.fromJson(e))
.toList();
return Success(list);
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState<List<FavNoteModel>?>> userNoteList({
required int page,
}) async {
var res = await Request().get(
Api.userNoteList,
queryParameters: {
'pn': page,
'ps': 10,
'csrf': Accounts.main.csrf,
},
);
if (res.data['code'] == 0) {
List<FavNoteModel>? list = (res.data['data']?['list'] as List?)
?.map((e) => FavNoteModel.fromJson(e))
.toList();
return Success(list);
} else {
return Error(res.data['message']);
}
}
static Future<LoadingState> addNote({
required oid,
required String title,
required String summary,
}) async {
String noteId = '';
try {
final res = await Request().get(Api.archiveNote, queryParameters: {
'oid': oid,
'oid_type': 0,
'csrf': Accounts.main.csrf,
});
if (res.data['code'] == 0) {
if (res.data['data']?['noteIds'] != null) {
noteId = res.data['data']['noteIds'].first;
}
}
} catch (_) {}
final res = await Request().post(
Api.addNote,
data: {
'cont_len': summary.length,
'note_id': noteId,
'oid': oid,
'oid_type': 0,
'platform': 'web',
'title': title,
'summary': summary,
'content': jsonEncode([
{"insert": summary},
]),
'from': 'close',
'hash': DateTime.now().millisecondsSinceEpoch,
'tags': '',
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return Success(res.data['data']?['list']);
} else {
return Error(res.data['message']);
}
}
static Future delNote({
required bool isPublish,
required List noteIds,
}) async {
final res = await Request().post(
isPublish ? Api.delPublishNote : Api.delNote,
data: {
isPublish ? 'cvids' : 'note_ids': noteIds.join(','),
'csrf': Accounts.main.csrf,
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
),
);
if (res.data['code'] == 0) {
return {'status': true};
} else {
return {'status': false, 'msg': res.data['message']};
}
}
}