mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
@@ -127,6 +127,9 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
|
|||||||
if (Platform.isIOS || Platform.isAndroid) {
|
if (Platform.isIOS || Platform.isAndroid) {
|
||||||
StatusBarControl.setHidden(false, animation: StatusBarAnimation.FADE);
|
StatusBarControl.setHidden(false, animation: StatusBarAnimation.FADE);
|
||||||
}
|
}
|
||||||
|
for (int index = 0; index < widget.sources.length; index++) {
|
||||||
|
CachedNetworkImageProvider(_getActualUrl(index)).evict();
|
||||||
|
}
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,6 +209,10 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String _getActualUrl(int index) => _thumbList[index] && _quality != 100
|
||||||
|
? '${widget.sources[index]}@${_quality}q.webp'
|
||||||
|
: widget.sources[index];
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Stack(
|
return Stack(
|
||||||
@@ -252,7 +259,7 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
|
|||||||
index == currentIndex,
|
index == currentIndex,
|
||||||
_enablePageView,
|
_enablePageView,
|
||||||
)
|
)
|
||||||
: _itemBuilder(widget.sources, index),
|
: _itemBuilder(index),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -358,17 +365,15 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
|
|||||||
Share.shareXFiles([XFile(path)], subject: imgUrl);
|
Share.shareXFiles([XFile(path)], subject: imgUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _itemBuilder(sources, index) {
|
Widget _itemBuilder(index) {
|
||||||
return Center(
|
return Center(
|
||||||
child: Hero(
|
child: Hero(
|
||||||
tag: sources[index],
|
tag: widget.sources[index],
|
||||||
child: CachedNetworkImage(
|
child: CachedNetworkImage(
|
||||||
fadeInDuration: const Duration(milliseconds: 0),
|
fadeInDuration: const Duration(milliseconds: 0),
|
||||||
fadeOutDuration: const Duration(milliseconds: 0),
|
fadeOutDuration: const Duration(milliseconds: 0),
|
||||||
imageUrl: _thumbList[index] && _quality != 100
|
imageUrl: _getActualUrl(index),
|
||||||
? '${sources[index]}@${_quality}q.webp'
|
// fit: BoxFit.contain,
|
||||||
: sources[index],
|
|
||||||
fit: BoxFit.contain,
|
|
||||||
progressIndicatorBuilder: (context, url, progress) {
|
progressIndicatorBuilder: (context, url, progress) {
|
||||||
return Center(
|
return Center(
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
@@ -377,13 +382,13 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
errorListener: (value) {
|
// errorListener: (value) {
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
// WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
setState(() {
|
// setState(() {
|
||||||
_thumbList[index] = false;
|
// _thumbList[index] = false;
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
},
|
// },
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -88,12 +88,12 @@ class NetworkImgLayer extends StatelessWidget {
|
|||||||
placeholder: (BuildContext context, String url) =>
|
placeholder: (BuildContext context, String url) =>
|
||||||
placeholder(context),
|
placeholder(context),
|
||||||
imageBuilder: imageBuilder,
|
imageBuilder: imageBuilder,
|
||||||
errorListener: (value) {
|
// errorListener: (value) {
|
||||||
thumbnail = false;
|
// thumbnail = false;
|
||||||
if (context.mounted) {
|
// if (context.mounted) {
|
||||||
(context as Element).markNeedsBuild();
|
// (context as Element).markNeedsBuild();
|
||||||
}
|
// }
|
||||||
},
|
// },
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -4,18 +4,12 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
import 'package:package_info_plus/package_info_plus.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
import 'package:PiliPalaX/http/index.dart';
|
|
||||||
import 'package:PiliPalaX/models/github/latest.dart';
|
import 'package:PiliPalaX/models/github/latest.dart';
|
||||||
import 'package:PiliPalaX/pages/setting/controller.dart';
|
import 'package:PiliPalaX/pages/setting/controller.dart';
|
||||||
import 'package:PiliPalaX/utils/storage.dart';
|
import 'package:PiliPalaX/utils/storage.dart';
|
||||||
import 'package:PiliPalaX/utils/utils.dart';
|
import 'package:PiliPalaX/utils/utils.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
|
||||||
import '../../utils/cache_manage.dart';
|
import '../../utils/cache_manage.dart';
|
||||||
|
|
||||||
const String _sourceCodeUrl = 'https://github.com/bggRGjQaUbCoE/PiliPalaX';
|
|
||||||
const String _originSourceCodeUrl = 'https://github.com/guozhigq/pilipala';
|
|
||||||
const String _upstreamUrl = 'https://github.com/orz12/PiliPalaX';
|
|
||||||
|
|
||||||
class AboutPage extends StatefulWidget {
|
class AboutPage extends StatefulWidget {
|
||||||
const AboutPage({super.key});
|
const AboutPage({super.key});
|
||||||
|
|
||||||
@@ -25,6 +19,11 @@ class AboutPage extends StatefulWidget {
|
|||||||
|
|
||||||
class _AboutPageState extends State<AboutPage> {
|
class _AboutPageState extends State<AboutPage> {
|
||||||
final AboutController _aboutController = Get.put(AboutController());
|
final AboutController _aboutController = Get.put(AboutController());
|
||||||
|
static const String _sourceCodeUrl =
|
||||||
|
'https://github.com/bggRGjQaUbCoE/PiliPalaX';
|
||||||
|
static const String _originSourceCodeUrl =
|
||||||
|
'https://github.com/guozhigq/pilipala';
|
||||||
|
static const String _upstreamUrl = 'https://github.com/orz12/PiliPalaX';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -115,13 +114,13 @@ class _AboutPageState extends State<AboutPage> {
|
|||||||
color: Theme.of(context).colorScheme.outlineVariant,
|
color: Theme.of(context).colorScheme.outlineVariant,
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () => _aboutController.githubUrl(_sourceCodeUrl),
|
onTap: () => Utils.launchURL(_sourceCodeUrl),
|
||||||
leading: const Icon(Icons.code),
|
leading: const Icon(Icons.code),
|
||||||
title: const Text('Source Code'),
|
title: const Text('Source Code'),
|
||||||
subtitle: Text(_sourceCodeUrl, style: subTitleStyle),
|
subtitle: Text(_sourceCodeUrl, style: subTitleStyle),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () => _aboutController.githubUrl(_originSourceCodeUrl),
|
onTap: () => Utils.launchURL(_originSourceCodeUrl),
|
||||||
leading: const Icon(Icons.code),
|
leading: const Icon(Icons.code),
|
||||||
title: const Text('Origin'),
|
title: const Text('Origin'),
|
||||||
subtitle: Text(
|
subtitle: Text(
|
||||||
@@ -130,7 +129,7 @@ class _AboutPageState extends State<AboutPage> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () => _aboutController.githubUrl(_upstreamUrl),
|
onTap: () => Utils.launchURL(_upstreamUrl),
|
||||||
leading: const Icon(Icons.code),
|
leading: const Icon(Icons.code),
|
||||||
title: const Text('Upstream'),
|
title: const Text('Upstream'),
|
||||||
subtitle: Text(
|
subtitle: Text(
|
||||||
@@ -139,7 +138,23 @@ class _AboutPageState extends State<AboutPage> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () => _aboutController.feedback(context),
|
onTap: () {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return SimpleDialog(
|
||||||
|
clipBehavior: Clip.hardEdge,
|
||||||
|
title: const Text('问题反馈'),
|
||||||
|
children: [
|
||||||
|
ListTile(
|
||||||
|
title: const Text('GitHub Issue'),
|
||||||
|
onTap: () => Utils.launchURL('$_sourceCodeUrl/issues'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
leading: const Icon(Icons.feedback_outlined),
|
leading: const Icon(Icons.feedback_outlined),
|
||||||
title: const Text('问题反馈'),
|
title: const Text('问题反馈'),
|
||||||
trailing: Icon(
|
trailing: Icon(
|
||||||
@@ -149,7 +164,9 @@ class _AboutPageState extends State<AboutPage> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
onTap: () => _aboutController.logs(),
|
onTap: () {
|
||||||
|
Get.toNamed('/logs');
|
||||||
|
},
|
||||||
leading: const Icon(Icons.bug_report_outlined),
|
leading: const Icon(Icons.bug_report_outlined),
|
||||||
title: const Text('错误日志'),
|
title: const Text('错误日志'),
|
||||||
trailing: Icon(Icons.arrow_forward, size: 16, color: outline),
|
trailing: Icon(Icons.arrow_forward, size: 16, color: outline),
|
||||||
@@ -257,22 +274,26 @@ class _AboutPageState extends State<AboutPage> {
|
|||||||
child: const Text('取消'),
|
child: const Text('取消'),
|
||||||
),
|
),
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () async {
|
||||||
Get.back();
|
Get.back();
|
||||||
GStorage.setting.clear();
|
await Future.wait([
|
||||||
GStorage.video.clear();
|
GStorage.setting.clear(),
|
||||||
|
GStorage.video.clear(),
|
||||||
|
]);
|
||||||
SmartDialog.showToast('重置成功');
|
SmartDialog.showToast('重置成功');
|
||||||
},
|
},
|
||||||
child: const Text('重置可导出的设置'),
|
child: const Text('重置可导出的设置'),
|
||||||
),
|
),
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () async {
|
||||||
Get.back();
|
Get.back();
|
||||||
GStorage.userInfo.clear();
|
await Future.wait([
|
||||||
GStorage.setting.clear();
|
GStorage.userInfo.clear(),
|
||||||
GStorage.localCache.clear();
|
GStorage.setting.clear(),
|
||||||
GStorage.video.clear();
|
GStorage.localCache.clear(),
|
||||||
GStorage.historyWord.clear();
|
GStorage.video.clear(),
|
||||||
|
GStorage.historyWord.clear(),
|
||||||
|
]);
|
||||||
SmartDialog.showToast('重置成功');
|
SmartDialog.showToast('重置成功');
|
||||||
},
|
},
|
||||||
child: const Text('重置所有数据(含登录信息)'),
|
child: const Text('重置所有数据(含登录信息)'),
|
||||||
@@ -298,7 +319,6 @@ class AboutController extends GetxController {
|
|||||||
RxBool isUpdate = true.obs;
|
RxBool isUpdate = true.obs;
|
||||||
RxBool isLoading = true.obs;
|
RxBool isLoading = true.obs;
|
||||||
LatestDataModel? data;
|
LatestDataModel? data;
|
||||||
// RxInt count = 0.obs;
|
|
||||||
RxString cacheSize = ''.obs;
|
RxString cacheSize = ''.obs;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -330,91 +350,21 @@ class AboutController extends GetxController {
|
|||||||
currentVersion.value = "${currentInfo.version}+$buildNumber";
|
currentVersion.value = "${currentInfo.version}+$buildNumber";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取远程版本
|
// // 获取远程版本
|
||||||
Future getRemoteApp() async {
|
// Future getRemoteApp() async {
|
||||||
var result = await Request().get(Api.latestApp, extra: {'ua': 'pc'});
|
// var result = await Request().get(Api.latestApp, extra: {'ua': 'pc'});
|
||||||
if (result.data.isEmpty) {
|
// if (result.data.isEmpty) {
|
||||||
SmartDialog.showToast('检查更新失败,github接口未返回数据,请检查网络');
|
// SmartDialog.showToast('检查更新失败,github接口未返回数据,请检查网络');
|
||||||
return false;
|
// return false;
|
||||||
} else if (result.data[0] == null) {
|
// } else if (result.data[0] == null) {
|
||||||
SmartDialog.showToast('检查更新失败,github接口返回如下内容:\n${result.data}');
|
// SmartDialog.showToast('检查更新失败,github接口返回如下内容:\n${result.data}');
|
||||||
return false;
|
// return false;
|
||||||
}
|
|
||||||
data = LatestDataModel.fromJson(result.data[0]);
|
|
||||||
remoteAppInfo = data;
|
|
||||||
remoteVersion.value = data!.tagName!;
|
|
||||||
isUpdate.value =
|
|
||||||
Utils.needUpdate(currentVersion.value, remoteVersion.value);
|
|
||||||
isLoading.value = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 跳转下载/本地更新
|
|
||||||
Future onUpdate() async {
|
|
||||||
if (data != null) {
|
|
||||||
Utils.matchVersion(data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 跳转github
|
|
||||||
githubUrl(String url) {
|
|
||||||
launchUrl(
|
|
||||||
Uri.parse(url),
|
|
||||||
mode: LaunchMode.externalApplication,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
githubRelease() {
|
|
||||||
launchUrl(
|
|
||||||
Uri.parse('$_sourceCodeUrl/release'),
|
|
||||||
mode: LaunchMode.externalApplication,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 问题反馈
|
|
||||||
feedback(BuildContext context) async {
|
|
||||||
await showDialog(
|
|
||||||
context: context,
|
|
||||||
builder: (context) {
|
|
||||||
return SimpleDialog(
|
|
||||||
clipBehavior: Clip.hardEdge,
|
|
||||||
title: const Text('问题反馈'),
|
|
||||||
children: [
|
|
||||||
ListTile(
|
|
||||||
title: const Text('GitHub Issue'),
|
|
||||||
onTap: () => launchUrl(
|
|
||||||
Uri.parse('$_sourceCodeUrl/issues'),
|
|
||||||
// 系统自带浏览器打开
|
|
||||||
mode: LaunchMode.externalApplication,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// ListTile(
|
|
||||||
// title: const Text('腾讯兔小巢'),
|
|
||||||
// onTap: () => launchUrl(
|
|
||||||
// Uri.parse('https://support.qq.com/embed/phone/637735'),
|
|
||||||
// // 系统自带浏览器打开
|
|
||||||
// mode: LaunchMode.externalApplication,
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 日志
|
|
||||||
logs() {
|
|
||||||
Get.toNamed('/logs');
|
|
||||||
}
|
|
||||||
|
|
||||||
// tapOnVersion() {
|
|
||||||
// if (settingController.hiddenSettingUnlocked.value) {
|
|
||||||
// SmartDialog.showToast('您已解锁开发人员选项, 无需再次操作');
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// count.value++;
|
|
||||||
// if (count.value == 5) {
|
|
||||||
// setting.put(SettingBoxKey.hiddenSettingUnlocked, true);
|
|
||||||
// SmartDialog.showToast('恭喜您发现了开发人员选项!');
|
|
||||||
// }
|
// }
|
||||||
|
// data = LatestDataModel.fromJson(result.data[0]);
|
||||||
|
// remoteAppInfo = data;
|
||||||
|
// remoteVersion.value = data!.tagName!;
|
||||||
|
// isUpdate.value =
|
||||||
|
// Utils.needUpdate(currentVersion.value, remoteVersion.value);
|
||||||
|
// isLoading.value = false;
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,7 +126,6 @@ abstract class ReplyController extends CommonController {
|
|||||||
sortType = ReplySortType.time;
|
sortType = ReplySortType.time;
|
||||||
mode = Mode.MAIN_LIST_TIME;
|
mode = Mode.MAIN_LIST_TIME;
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
}
|
}
|
||||||
sortTypeTitle.value = sortType.titles;
|
sortTypeTitle.value = sortType.titles;
|
||||||
sortTypeLabel.value = sortType.labels;
|
sortTypeLabel.value = sortType.labels;
|
||||||
|
|||||||
@@ -225,28 +225,28 @@ class _UpPanelState extends State<UpPanel> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _SliverHeaderDelegate extends SliverPersistentHeaderDelegate {
|
// class _SliverHeaderDelegate extends SliverPersistentHeaderDelegate {
|
||||||
_SliverHeaderDelegate({required this.height, required this.child});
|
// _SliverHeaderDelegate({required this.height, required this.child});
|
||||||
|
|
||||||
final double height;
|
// final double height;
|
||||||
final Widget child;
|
// final Widget child;
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
Widget build(
|
// Widget build(
|
||||||
BuildContext context, double shrinkOffset, bool overlapsContent) {
|
// BuildContext context, double shrinkOffset, bool overlapsContent) {
|
||||||
return child;
|
// return child;
|
||||||
}
|
// }
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
double get maxExtent => height;
|
// double get maxExtent => height;
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
double get minExtent => height;
|
// double get minExtent => height;
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) =>
|
// bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) =>
|
||||||
true;
|
// true;
|
||||||
}
|
// }
|
||||||
|
|
||||||
class UpPanelSkeleton extends StatelessWidget {
|
class UpPanelSkeleton extends StatelessWidget {
|
||||||
const UpPanelSkeleton({super.key});
|
const UpPanelSkeleton({super.key});
|
||||||
|
|||||||
@@ -111,21 +111,21 @@ class _FollowPageState extends State<FollowPage> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _FakeAPI {
|
// class _FakeAPI {
|
||||||
static const List<String> _kOptions = <String>[
|
// static const List<String> _kOptions = <String>[
|
||||||
'aardvark',
|
// 'aardvark',
|
||||||
'bobcat',
|
// 'bobcat',
|
||||||
'chameleon',
|
// 'chameleon',
|
||||||
];
|
// ];
|
||||||
// Searches the options, but injects a fake "network" delay.
|
// // Searches the options, but injects a fake "network" delay.
|
||||||
static Future<Iterable<String>> search(String query) async {
|
// static Future<Iterable<String>> search(String query) async {
|
||||||
await Future<void>.delayed(
|
// await Future<void>.delayed(
|
||||||
const Duration(seconds: 1)); // Fake 1 second delay.
|
// const Duration(seconds: 1)); // Fake 1 second delay.
|
||||||
if (query == '') {
|
// if (query == '') {
|
||||||
return const Iterable<String>.empty();
|
// return const Iterable<String>.empty();
|
||||||
}
|
// }
|
||||||
return _kOptions.where((String option) {
|
// return _kOptions.where((String option) {
|
||||||
return option.contains(query.toLowerCase());
|
// return option.contains(query.toLowerCase());
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|||||||
@@ -120,12 +120,15 @@ class _LoginPageState extends State<LoginPage> {
|
|||||||
child: Padding(
|
child: Padding(
|
||||||
padding:
|
padding:
|
||||||
const EdgeInsets.symmetric(horizontal: 20, vertical: 20),
|
const EdgeInsets.symmetric(horizontal: 20, vertical: 20),
|
||||||
child: Text(_loginPageCtr.codeInfo.value['data']?['url'] ?? "",
|
child: Text(
|
||||||
|
_loginPageCtr.codeInfo.value['data']?['url'] ?? "",
|
||||||
style: Theme.of(context).textTheme.labelSmall!.copyWith(
|
style: Theme.of(context).textTheme.labelSmall!.copyWith(
|
||||||
color: Theme.of(context)
|
color: Theme.of(context)
|
||||||
.colorScheme
|
.colorScheme
|
||||||
.onSurface
|
.onSurface
|
||||||
.withOpacity(0.4))),
|
.withOpacity(0.4),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
Padding(
|
Padding(
|
||||||
|
|||||||
@@ -1527,37 +1527,37 @@ class VideoDetailController extends GetxController
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
List<SegmentType> _actionType2SegmentType(ActionType actionType) {
|
// List<SegmentType> _actionType2SegmentType(ActionType actionType) {
|
||||||
return switch (actionType) {
|
// return switch (actionType) {
|
||||||
ActionType.skip => [
|
// ActionType.skip => [
|
||||||
SegmentType.sponsor,
|
// SegmentType.sponsor,
|
||||||
SegmentType.selfpromo,
|
// SegmentType.selfpromo,
|
||||||
SegmentType.interaction,
|
// SegmentType.interaction,
|
||||||
SegmentType.intro,
|
// SegmentType.intro,
|
||||||
SegmentType.outro,
|
// SegmentType.outro,
|
||||||
SegmentType.preview,
|
// SegmentType.preview,
|
||||||
SegmentType.filler,
|
// SegmentType.filler,
|
||||||
],
|
// ],
|
||||||
ActionType.mute => [
|
// ActionType.mute => [
|
||||||
SegmentType.sponsor,
|
// SegmentType.sponsor,
|
||||||
SegmentType.selfpromo,
|
// SegmentType.selfpromo,
|
||||||
SegmentType.interaction,
|
// SegmentType.interaction,
|
||||||
SegmentType.intro,
|
// SegmentType.intro,
|
||||||
SegmentType.outro,
|
// SegmentType.outro,
|
||||||
SegmentType.preview,
|
// SegmentType.preview,
|
||||||
SegmentType.music_offtopic,
|
// SegmentType.music_offtopic,
|
||||||
SegmentType.filler,
|
// SegmentType.filler,
|
||||||
],
|
// ],
|
||||||
ActionType.full => [
|
// ActionType.full => [
|
||||||
SegmentType.sponsor,
|
// SegmentType.sponsor,
|
||||||
SegmentType.selfpromo,
|
// SegmentType.selfpromo,
|
||||||
SegmentType.exclusive_access,
|
// SegmentType.exclusive_access,
|
||||||
],
|
// ],
|
||||||
ActionType.poi => [
|
// ActionType.poi => [
|
||||||
SegmentType.poi_highlight,
|
// SegmentType.poi_highlight,
|
||||||
],
|
// ],
|
||||||
};
|
// };
|
||||||
}
|
// }
|
||||||
|
|
||||||
List<ActionType> _segmentType2ActionType(SegmentType segmentType) {
|
List<ActionType> _segmentType2ActionType(SegmentType segmentType) {
|
||||||
return switch (segmentType) {
|
return switch (segmentType) {
|
||||||
|
|||||||
@@ -191,6 +191,7 @@ class LiveMessageStream {
|
|||||||
for (final server in servers) {
|
for (final server in servers) {
|
||||||
try {
|
try {
|
||||||
return await WebSocket.connect(server);
|
return await WebSocket.connect(server);
|
||||||
|
// ignore: empty_catches
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
throw Exception("all servers connect failed");
|
throw Exception("all servers connect failed");
|
||||||
|
|||||||
@@ -301,20 +301,20 @@ class PiliScheme {
|
|||||||
// https | m.bilibili.com | /bangumi/play/ss39708
|
// https | m.bilibili.com | /bangumi/play/ss39708
|
||||||
// final String scheme = value.scheme!;
|
// final String scheme = value.scheme!;
|
||||||
final String host = value.host;
|
final String host = value.host;
|
||||||
final String? path = value.path;
|
final String path = value.path;
|
||||||
Map<String, String> query = value.queryParameters;
|
Map<String, String> query = value.queryParameters;
|
||||||
RegExp regExp = RegExp(r'^((www\.)|(m\.))?bilibili\.com$');
|
RegExp regExp = RegExp(r'^((www\.)|(m\.))?bilibili\.com$');
|
||||||
if (regExp.hasMatch(host)) {
|
if (regExp.hasMatch(host)) {
|
||||||
debugPrint('bilibili.com');
|
debugPrint('bilibili.com');
|
||||||
} else if (host.contains('live')) {
|
} else if (host.contains('live')) {
|
||||||
int roomId = int.parse(path!.split('/').last);
|
int roomId = int.parse(path.split('/').last);
|
||||||
Utils.toDupNamed(
|
Utils.toDupNamed(
|
||||||
'/liveRoom?roomid=$roomId',
|
'/liveRoom?roomid=$roomId',
|
||||||
arguments: {'liveItem': null, 'heroTag': roomId.toString()},
|
arguments: {'liveItem': null, 'heroTag': roomId.toString()},
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
} else if (host.contains('space')) {
|
} else if (host.contains('space')) {
|
||||||
var mid = path!.split('/').last;
|
var mid = path.split('/').last;
|
||||||
Utils.toDupNamed('/member?mid=$mid', arguments: {'face': ''});
|
Utils.toDupNamed('/member?mid=$mid', arguments: {'face': ''});
|
||||||
return;
|
return;
|
||||||
} else if (host == 'b23.tv') {
|
} else if (host == 'b23.tv') {
|
||||||
@@ -352,7 +352,6 @@ class PiliScheme {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (path != null) {
|
|
||||||
List<String> pathPart = path.split('/');
|
List<String> pathPart = path.split('/');
|
||||||
if (pathPart.length < 3) {
|
if (pathPart.length < 3) {
|
||||||
Utils.toDupNamed(
|
Utils.toDupNamed(
|
||||||
@@ -426,7 +425,6 @@ class PiliScheme {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static List<int> matchNum(String str) {
|
static List<int> matchNum(String str) {
|
||||||
final RegExp regExp = RegExp(r'\d+');
|
final RegExp regExp = RegExp(r'\d+');
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// 订阅者回调签名
|
// 订阅者回调签名
|
||||||
typedef void EventCallback(arg);
|
typedef EventCallback = void Function(dynamic arg);
|
||||||
|
|
||||||
class EventBus {
|
class EventBus {
|
||||||
// 私有构造函数
|
// 私有构造函数
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ extension StringExt on String {
|
|||||||
String get http2https => replaceFirst(RegExp("^http://"), "https://");
|
String get http2https => replaceFirst(RegExp("^http://"), "https://");
|
||||||
}
|
}
|
||||||
|
|
||||||
extension boolExt on bool {
|
extension BoolExt on bool {
|
||||||
bool get not => !this;
|
bool get not => !this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
12
pubspec.lock
12
pubspec.lock
@@ -106,18 +106,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: audio_service
|
name: audio_service
|
||||||
sha256: "9dd5ba7e77567b290c35908b1950d61485b4dfdd3a0ac398e98cfeec04651b75"
|
sha256: f6c8191bef6b843da34675dd0731ad11d06094c36b691ffcf3148a4feb2e585f
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.18.15"
|
version: "0.18.16"
|
||||||
audio_service_platform_interface:
|
audio_service_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: audio_service_platform_interface
|
name: audio_service_platform_interface
|
||||||
sha256: "8431a455dac9916cc9ee6f7da5620a666436345c906ad2ebb7fa41d18b3c1bf4"
|
sha256: "6283782851f6c8b501b60904a32fc7199dc631172da0629d7301e66f672ab777"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.1"
|
version: "0.1.3"
|
||||||
audio_service_web:
|
audio_service_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -914,10 +914,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: image
|
name: image
|
||||||
sha256: "599d08e369969bdf83138f5b4e0a7e823d3f992f23b8a64dd626877c37013533"
|
sha256: "20842a5ad1555be624c314b0c0cc0566e8ece412f61e859a42efeb6d4101a26c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.4.0"
|
version: "4.5.0"
|
||||||
image_cropper:
|
image_cropper:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|||||||
Reference in New Issue
Block a user