mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
opt: sponsor block
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -189,7 +189,7 @@ class Request {
|
|||||||
/*
|
/*
|
||||||
* get请求
|
* get请求
|
||||||
*/
|
*/
|
||||||
Future get(url, {data, options, cancelToken, extra}) async {
|
Future<Response> get(url, {data, options, cancelToken, extra}) async {
|
||||||
Response response;
|
Response response;
|
||||||
if (extra != null) {
|
if (extra != null) {
|
||||||
if (extra['ua'] != null) {
|
if (extra['ua'] != null) {
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ class LoginHttp {
|
|||||||
'data': CaptchaDataModel.fromJson(res.data['data']),
|
'data': CaptchaDataModel.fromJson(res.data['data']),
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
return {'status': false, 'data': res.message};
|
return {'status': false, 'data': res.data['message']};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import 'dart:math';
|
|||||||
|
|
||||||
import 'package:PiliPalaX/common/widgets/pair.dart';
|
import 'package:PiliPalaX/common/widgets/pair.dart';
|
||||||
import 'package:PiliPalaX/http/constants.dart';
|
import 'package:PiliPalaX/http/constants.dart';
|
||||||
import 'package:PiliPalaX/pages/setting/widgets/select_item.dart';
|
import 'package:PiliPalaX/http/index.dart';
|
||||||
import 'package:PiliPalaX/pages/video/detail/controller.dart'
|
import 'package:PiliPalaX/pages/video/detail/controller.dart'
|
||||||
show SegmentType, SegmentTypeExt, SkipType, SkipTypeExt;
|
show SegmentType, SegmentTypeExt, SkipType, SkipTypeExt;
|
||||||
import 'package:PiliPalaX/utils/storage.dart';
|
import 'package:PiliPalaX/utils/storage.dart';
|
||||||
@@ -28,6 +28,8 @@ class _SponsorBlockPageState extends State<SponsorBlockPage> {
|
|||||||
late String _userId;
|
late String _userId;
|
||||||
late bool _blockToast;
|
late bool _blockToast;
|
||||||
late String _blockServer;
|
late String _blockServer;
|
||||||
|
late bool _blockTrack;
|
||||||
|
bool? _serverStatus;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -38,6 +40,8 @@ class _SponsorBlockPageState extends State<SponsorBlockPage> {
|
|||||||
_userId = GStorage.blockUserID;
|
_userId = GStorage.blockUserID;
|
||||||
_blockToast = GStorage.blockToast;
|
_blockToast = GStorage.blockToast;
|
||||||
_blockServer = GStorage.blockServer;
|
_blockServer = GStorage.blockServer;
|
||||||
|
_blockTrack = GStorage.blockTrack;
|
||||||
|
_checkServerStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -46,9 +50,21 @@ class _SponsorBlockPageState extends State<SponsorBlockPage> {
|
|||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
TextStyle get _titleStyle => TextStyle(fontSize: 15);
|
TextStyle get _titleStyle => TextStyle(fontSize: 14);
|
||||||
TextStyle get _subTitleStyle =>
|
TextStyle get _subTitleStyle => TextStyle(
|
||||||
TextStyle(color: Theme.of(context).colorScheme.outline);
|
fontSize: 12,
|
||||||
|
color: Theme.of(context).colorScheme.outline,
|
||||||
|
);
|
||||||
|
|
||||||
|
_checkServerStatus() {
|
||||||
|
Request().get('$_blockServer/api/status').then((res) {
|
||||||
|
if (res.data is Map) {
|
||||||
|
setState(() {
|
||||||
|
_serverStatus = res.data['uptime'] != null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Widget get _blockLimitItem => ListTile(
|
Widget get _blockLimitItem => ListTile(
|
||||||
dense: true,
|
dense: true,
|
||||||
@@ -184,6 +200,12 @@ class _SponsorBlockPageState extends State<SponsorBlockPage> {
|
|||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _updateBlockTrack() async {
|
||||||
|
_blockTrack = !_blockTrack;
|
||||||
|
await GStorage.setting.put(SettingBoxKey.blockTrack, _blockTrack);
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
|
||||||
Widget get _blockToastItem => ListTile(
|
Widget get _blockToastItem => ListTile(
|
||||||
dense: true,
|
dense: true,
|
||||||
onTap: _updateBlockToast,
|
onTap: _updateBlockToast,
|
||||||
@@ -208,6 +230,30 @@ class _SponsorBlockPageState extends State<SponsorBlockPage> {
|
|||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
|
||||||
|
Widget get _blockTrackItem => ListTile(
|
||||||
|
dense: true,
|
||||||
|
onTap: _updateBlockTrack,
|
||||||
|
title: Text(
|
||||||
|
'记录跳过片段',
|
||||||
|
style: _titleStyle,
|
||||||
|
),
|
||||||
|
trailing: Transform.scale(
|
||||||
|
alignment: Alignment.centerRight,
|
||||||
|
scale: 0.8,
|
||||||
|
child: Switch(
|
||||||
|
thumbIcon: WidgetStateProperty.resolveWith<Icon?>((states) {
|
||||||
|
if (states.isNotEmpty && states.first == WidgetState.selected) {
|
||||||
|
return const Icon(Icons.done);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}),
|
||||||
|
value: _blockTrack,
|
||||||
|
onChanged: (val) {
|
||||||
|
_updateBlockTrack();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
));
|
||||||
|
|
||||||
Widget get _blockServerItem => ListTile(
|
Widget get _blockServerItem => ListTile(
|
||||||
dense: true,
|
dense: true,
|
||||||
onTap: () {
|
onTap: () {
|
||||||
@@ -267,6 +313,30 @@ class _SponsorBlockPageState extends State<SponsorBlockPage> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Widget get _serverStatusItem => ListTile(
|
||||||
|
dense: true,
|
||||||
|
onTap: _checkServerStatus,
|
||||||
|
title: Text(
|
||||||
|
'服务器状态',
|
||||||
|
style: _titleStyle,
|
||||||
|
),
|
||||||
|
trailing: Text(
|
||||||
|
_serverStatus == null
|
||||||
|
? '-'
|
||||||
|
: _serverStatus == true
|
||||||
|
? '正常'
|
||||||
|
: '错误',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 13,
|
||||||
|
color: _serverStatus == null
|
||||||
|
? null
|
||||||
|
: _serverStatus == true
|
||||||
|
? Theme.of(context).colorScheme.primary
|
||||||
|
: Theme.of(context).colorScheme.error,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
Widget get _divider => SliverToBoxAdapter(
|
Widget get _divider => SliverToBoxAdapter(
|
||||||
child: Divider(
|
child: Divider(
|
||||||
height: 1,
|
height: 1,
|
||||||
@@ -294,10 +364,14 @@ class _SponsorBlockPageState extends State<SponsorBlockPage> {
|
|||||||
),
|
),
|
||||||
body: CustomScrollView(
|
body: CustomScrollView(
|
||||||
slivers: [
|
slivers: [
|
||||||
|
_dividerL,
|
||||||
|
SliverToBoxAdapter(child: _serverStatusItem),
|
||||||
_dividerL,
|
_dividerL,
|
||||||
SliverToBoxAdapter(child: _blockLimitItem),
|
SliverToBoxAdapter(child: _blockLimitItem),
|
||||||
_divider,
|
_divider,
|
||||||
SliverToBoxAdapter(child: _blockToastItem),
|
SliverToBoxAdapter(child: _blockToastItem),
|
||||||
|
_divider,
|
||||||
|
SliverToBoxAdapter(child: _blockTrackItem),
|
||||||
_dividerL,
|
_dividerL,
|
||||||
SliverList.separated(
|
SliverList.separated(
|
||||||
itemCount: _blockSettings.length,
|
itemCount: _blockSettings.length,
|
||||||
@@ -377,22 +451,23 @@ class _SponsorBlockPageState extends State<SponsorBlockPage> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
style: TextStyle(fontSize: 15),
|
style: TextStyle(fontSize: 14),
|
||||||
),
|
),
|
||||||
TextSpan(
|
TextSpan(
|
||||||
text: ' ${_blockSettings[index].first.title}',
|
text: ' ${_blockSettings[index].first.title}',
|
||||||
style: TextStyle(fontSize: 15),
|
style: TextStyle(fontSize: 14),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
subtitle: Text(
|
subtitle: Text(
|
||||||
_blockSettings[index].first.description,
|
_blockSettings[index].first.description,
|
||||||
style: _blockSettings[index].second == SkipType.disable
|
style: TextStyle(
|
||||||
? null
|
fontSize: 12,
|
||||||
: TextStyle(
|
color: _blockSettings[index].second == SkipType.disable
|
||||||
color: Theme.of(context).colorScheme.outline,
|
? null
|
||||||
),
|
: Theme.of(context).colorScheme.outline,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
trailing: PopupMenuButton(
|
trailing: PopupMenuButton(
|
||||||
initialValue: _blockSettings[index].second,
|
initialValue: _blockSettings[index].second,
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ extension SegmentTypeExt on SegmentType {
|
|||||||
'订阅提醒', //interaction
|
'订阅提醒', //interaction
|
||||||
'开场', //intro
|
'开场', //intro
|
||||||
'片尾', //outro
|
'片尾', //outro
|
||||||
'回顾', //preview
|
'预览', //preview
|
||||||
'非音乐', //music_offtopic
|
'非音乐', //music_offtopic
|
||||||
'精彩时刻', //poi_highlight
|
'精彩时刻', //poi_highlight
|
||||||
'闲聊', //filler
|
'闲聊', //filler
|
||||||
@@ -604,6 +604,12 @@ class VideoDetailController extends GetxController
|
|||||||
if (GStorage.blockToast) {
|
if (GStorage.blockToast) {
|
||||||
_showBlockToast('已跳过${item.segmentType.shortTitle}片段');
|
_showBlockToast('已跳过${item.segmentType.shortTitle}片段');
|
||||||
}
|
}
|
||||||
|
if (GStorage.blockTrack) {
|
||||||
|
Request().post(
|
||||||
|
'${GStorage.blockServer}/api/viewedVideoSponsorTime',
|
||||||
|
queryParameters: {'UUID': item.UUID},
|
||||||
|
);
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
debugPrint('failed to skip: $e');
|
debugPrint('failed to skip: $e');
|
||||||
_showBlockToast('${item.segmentType.shortTitle}片段跳过失败');
|
_showBlockToast('${item.segmentType.shortTitle}片段跳过失败');
|
||||||
|
|||||||
@@ -67,6 +67,9 @@ class GStorage {
|
|||||||
static String get blockServer => setting.get(SettingBoxKey.blockServer,
|
static String get blockServer => setting.get(SettingBoxKey.blockServer,
|
||||||
defaultValue: HttpString.sponsorBlockBaseUrl);
|
defaultValue: HttpString.sponsorBlockBaseUrl);
|
||||||
|
|
||||||
|
static bool get blockTrack =>
|
||||||
|
setting.get(SettingBoxKey.blockTrack, defaultValue: true);
|
||||||
|
|
||||||
static ThemeMode get themeMode {
|
static ThemeMode get themeMode {
|
||||||
switch (setting.get(SettingBoxKey.themeMode,
|
switch (setting.get(SettingBoxKey.themeMode,
|
||||||
defaultValue: ThemeType.system.code)) {
|
defaultValue: ThemeType.system.code)) {
|
||||||
@@ -246,6 +249,7 @@ class SettingBoxKey {
|
|||||||
blockUserID = 'blockUserID',
|
blockUserID = 'blockUserID',
|
||||||
blockToast = 'blockToast',
|
blockToast = 'blockToast',
|
||||||
blockServer = 'blockServer',
|
blockServer = 'blockServer',
|
||||||
|
blockTrack = 'blockTrack',
|
||||||
|
|
||||||
// 弹幕相关设置 权重(云屏蔽) 屏蔽类型 显示区域 透明度 字体大小 弹幕时间 描边粗细 字体粗细
|
// 弹幕相关设置 权重(云屏蔽) 屏蔽类型 显示区域 透明度 字体大小 弹幕时间 描边粗细 字体粗细
|
||||||
danmakuWeight = 'danmakuWeight',
|
danmakuWeight = 'danmakuWeight',
|
||||||
|
|||||||
Reference in New Issue
Block a user