mod: 侧边栏、动态重构,排行改为首页分区,平板、折叠屏、竖屏视频新适配,播放页可隐藏黑边、截图、点踩,弹幕粗细调整,默认关闭后台播放,弹窗接受返回

This commit is contained in:
orz12
2024-05-20 14:46:31 +08:00
parent fd51cddeca
commit 074bf03946
97 changed files with 4105 additions and 2672 deletions

View File

@@ -42,6 +42,12 @@ class Api {
// 视频点踩 web端不支持
// 点踩 Post(app端)
/// access_key str APP登录Token 必要
/// aid num 稿件avid 必要
///
static const String dislikeVideo = '${HttpString.appBaseUrl}/x/v2/view/dislike';
// 投币视频web端POST
/// aid num 稿件avid 必要(可选) avid与bvid任选一个
/// bvid str 稿件bvid 必要(可选) avid与bvid任选一个
@@ -334,10 +340,26 @@ class Api {
static const String webDanmaku = '/x/v2/dm/web/seg.so';
//发送视频弹幕
// 发送视频弹幕
//https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/danmaku/action.md
static const String shootDanmaku = '/x/v2/dm/post';
// 弹幕屏蔽查询Get
static const String danmakuFilter = '/x/dm/filter/user';
// 弹幕屏蔽词添加Post
// 表单内容:
// type: 0关键词1正则2用户
// filter: 屏蔽内容
// csrf
static const String danmakuFilterAdd = '/x/dm/filter/user/add';
// 弹幕屏蔽词删除Post
// 表单内容:
// ids: 被删除条目编号
// csrf
static const String danmakuFilterDel = '/x/dm/filter/user/del';
// up主分组
static const String followUpTag = '/x/relation/tags';

View File

@@ -0,0 +1,63 @@
import '../models/user/danmaku_block.dart';
import 'index.dart';
class DanmakuFilterHttp {
static Future danmakuFilter() async {
var res = await Request().get(Api.danmakuFilter);
if (res.data['code'] == 0) {
return {
'status': true,
'data': DanmakuBlockDataModel.fromJson(res.data['data'])
};
} else {
return {
'status': false,
'data': [],
'msg': res.data['message'],
};
}
}
static Future danmakuFilterDel({required int ids}) async {
var res = await Request().post(
Api.danmakuFilterDel,
queryParameters: {
'ids': ids,
'csrf': await Request.getCsrf(),
},
);
if (res.data['code'] == 0) {
return {
'status': true,
'msg': '操作成功',
};
} else {
return {
'status': false,
'msg': res.data['message'],
};
}
}
static Future danmakuFilterAdd({required String filter, required int type}) async {
var res = await Request().post(
Api.danmakuFilterAdd,
queryParameters: {
'type': type,
'filter': filter,
'csrf': await Request.getCsrf(),
},
);
if (res.data['code'] == 0) {
return {
'status': true,
'data': Rule.fromJson(res.data['data']),
};
} else {
return {
'status': false,
'msg': res.data['message'],
};
}
}
}

View File

@@ -5,15 +5,13 @@ import 'index.dart';
class DynamicsHttp {
static Future followDynamic({
String? type,
int? page,
String? offset,
int? mid,
}) async {
Map<String, dynamic> data = {
'type': type ?? 'all',
'page': page ?? 1,
'timezone_offset': '-480',
'offset': page == 1 ? '' : offset,
'offset': offset,
'features': 'itemOpusStyle'
};
if (mid != -1) {

View File

@@ -10,6 +10,7 @@ import '../models/user/fav_folder.dart';
import '../models/video/ai.dart';
import '../models/video/play/url.dart';
import '../models/video_detail_res.dart';
import '../utils/id_utils.dart';
import '../utils/recommend_filter.dart';
import '../utils/storage.dart';
import '../utils/wbi_sign.dart';
@@ -319,6 +320,29 @@ class VideoHttp {
}
}
// (取消)点踩
static Future dislikeVideo({required String bvid, required bool type}) async {
String? accessKey = GStrorage.localCache
.get(LocalCacheKey.accessKey, defaultValue: {})['value'];
if (accessKey == null || accessKey == "") {
return {'status': false, 'data': [], 'msg': "本操作使用app端接口请前往【隐私设置】刷新access_key"};
}
var res = await Request().post(
Api.dislikeVideo,
queryParameters: {
'aid': IdUtils.bv2av(bvid),
'dislike': type ? 0 : 1,
'access_key': accessKey,
},
);
print(res);
if (res.data is! String && res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']};
} else {
return {'status': false, 'data': [], 'msg': res.data['message']};
}
}
// (取消)收藏
static Future favVideo(
{required int aid, String? addIds, String? delIds}) async {