Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-05-25 12:15:38 +08:00
parent 86bbdcc90c
commit 525dce989b
107 changed files with 374 additions and 490 deletions

View File

@@ -12,10 +12,8 @@ import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/http/user.dart';
import 'package:PiliPlus/http/video.dart';
import 'package:PiliPlus/models/common/account_type.dart';
import 'package:PiliPlus/models/common/sponsor_block/action_type.dart';
import 'package:PiliPlus/models/common/sponsor_block/post_segment_model.dart';
import 'package:PiliPlus/models/common/sponsor_block/segment_model.dart';
import 'package:PiliPlus/models/common/sponsor_block/segment_type.dart';
import 'package:PiliPlus/models/common/video/audio_quality.dart';
import 'package:PiliPlus/models/common/video/source_type.dart';
import 'package:PiliPlus/models/common/video/video_decode_type.dart';
@@ -349,9 +347,9 @@ class VideoDetailController extends GetxController
cover = RxString(args['cover'] ?? '');
isVertical = args['isVertical'] ?? false;
sourceType = args['sourceType'] ?? SourceType.normal;
isFileSource = sourceType == SourceType.file;
isPlayAll = sourceType != SourceType.normal && !isFileSource;
sourceType = args['sourceType'] ?? .normal;
isFileSource = sourceType == .file;
isPlayAll = sourceType != .normal && !isFileSource;
if (isFileSource) {
initFileSource(args['entry']);
} else if (isPlayAll) {
@@ -446,10 +444,10 @@ class VideoDetailController extends GetxController
? () => getMediaList(isLoadPrevious: true)
: null,
onDelete:
sourceType == SourceType.watchLater ||
(sourceType == SourceType.fav && args['isOwner'] == true)
sourceType == .watchLater ||
(sourceType == .fav && args['isOwner'] == true)
? (item, index) async {
if (sourceType == SourceType.watchLater) {
if (sourceType == .watchLater) {
final res = await UserHttp.toViewDel(
aids: item.aid.toString(),
);
@@ -954,8 +952,8 @@ class VideoDetailController extends GetxController
first: 0,
second: plPlayerController.position.inMilliseconds / 1000,
),
category: SegmentType.sponsor,
actionType: ActionType.skip,
category: .sponsor,
actionType: .skip,
),
);
}

View File

@@ -4,7 +4,6 @@ import 'package:PiliPlus/common/widgets/badge.dart';
import 'package:PiliPlus/common/widgets/dialog/dialog.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/common/widgets/stat/stat.dart';
import 'package:PiliPlus/models/common/stat_type.dart';
import 'package:PiliPlus/models/common/video/video_quality.dart';
import 'package:PiliPlus/models_new/pgc/pgc_info_model/episode.dart' as pgc;
import 'package:PiliPlus/models_new/pgc/pgc_info_model/result.dart';
@@ -475,12 +474,12 @@ class _DownloadPanelState extends State<DownloadPanel> {
if (view != null)
StatWidget(
value: view,
type: StatType.play,
type: .play,
),
if (danmaku != null)
StatWidget(
value: danmaku,
type: StatType.danmaku,
type: .danmaku,
),
],
),

View File

@@ -6,7 +6,6 @@ import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/http/pgc.dart';
import 'package:PiliPlus/http/search.dart';
import 'package:PiliPlus/http/video.dart';
import 'package:PiliPlus/models/common/video/source_type.dart';
import 'package:PiliPlus/models/common/video/video_type.dart';
import 'package:PiliPlus/models_new/pgc/pgc_info_model/episode.dart';
import 'package:PiliPlus/models_new/pgc/pgc_info_model/result.dart';
@@ -301,7 +300,7 @@ class PgcIntroController extends CommonIntroController {
queryPgcLikeCoinFav();
}
hasLater.value = videoDetailCtr.sourceType == SourceType.watchLater;
hasLater.value = videoDetailCtr.sourceType == .watchLater;
this.cid.value = cid;
queryOnlineTotal();
queryVideoIntro(episode as EpisodeItem);

View File

@@ -8,7 +8,6 @@ import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/common/widgets/image_viewer/hero.dart';
import 'package:PiliPlus/common/widgets/stat/stat.dart';
import 'package:PiliPlus/models/common/image_preview_type.dart';
import 'package:PiliPlus/models/common/image_type.dart';
import 'package:PiliPlus/models_new/pgc/pgc_info_model/result.dart';
import 'package:PiliPlus/pages/video/controller.dart';
import 'package:PiliPlus/pages/video/introduction/pgc/controller.dart';
@@ -323,7 +322,7 @@ class _PgcIntroPageState extends State<PgcIntroPage> {
src: avatar,
width: 35,
height: 35,
type: ImageType.avatar,
type: .avatar,
),
Column(
mainAxisSize: MainAxisSize.min,

View File

@@ -3,7 +3,6 @@ import 'package:PiliPlus/common/widgets/keep_alive_wrapper.dart';
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
import 'package:PiliPlus/common/widgets/selectable_text.dart';
import 'package:PiliPlus/common/widgets/stat/stat.dart';
import 'package:PiliPlus/models/common/stat_type.dart';
import 'package:PiliPlus/models_new/pgc/pgc_info_model/result.dart';
import 'package:PiliPlus/models_new/video/video_tag/data.dart';
import 'package:PiliPlus/pages/common/slide/common_slide_page.dart';
@@ -136,11 +135,11 @@ class _IntroDetailState extends State<PgcIntroPanel>
spacing: 6,
children: [
StatWidget(
type: StatType.play,
type: .play,
value: widget.item.stat!.view,
),
StatWidget(
type: StatType.danmaku,
type: .danmaku,
value: widget.item.stat!.danmaku,
),
],

View File

@@ -10,7 +10,6 @@ import 'package:PiliPlus/http/member.dart';
import 'package:PiliPlus/http/search.dart';
import 'package:PiliPlus/http/user.dart';
import 'package:PiliPlus/http/video.dart';
import 'package:PiliPlus/models/common/video/source_type.dart';
import 'package:PiliPlus/models_new/member_card_info/data.dart';
import 'package:PiliPlus/models_new/relation/data.dart';
import 'package:PiliPlus/models_new/video/video_ai_conclusion/model_result.dart';
@@ -531,7 +530,7 @@ class UgcIntroController extends CommonIntroController with ReloadMixin {
} catch (_) {}
}
hasLater.value = videoDetailCtr.sourceType == SourceType.watchLater;
hasLater.value = videoDetailCtr.sourceType == .watchLater;
this.bvid = bvid;
queryVideoIntro();
} else {

View File

@@ -8,8 +8,6 @@ import 'package:PiliPlus/common/widgets/scroll_physics.dart';
import 'package:PiliPlus/common/widgets/selectable_text.dart';
import 'package:PiliPlus/common/widgets/stat/stat.dart';
import 'package:PiliPlus/http/sponsor_block.dart';
import 'package:PiliPlus/models/common/image_type.dart';
import 'package:PiliPlus/models/common/stat_type.dart';
import 'package:PiliPlus/models_new/video/video_detail/data.dart';
import 'package:PiliPlus/models_new/video/video_detail/staff.dart';
import 'package:PiliPlus/models_new/video/video_tag/data.dart';
@@ -784,7 +782,7 @@ class _UgcIntroPanelState extends State<UgcIntroPanel> {
clipBehavior: Clip.none,
children: [
NetworkImgLayer(
type: ImageType.avatar,
type: .avatar,
src: item.face,
width: 35,
height: 35,
@@ -940,12 +938,12 @@ class _UgcIntroPanelState extends State<UgcIntroPanel> {
spacing: 10,
children: [
StatWidget(
type: StatType.play,
type: .play,
value: videoDetail.stat?.view,
color: theme.colorScheme.outline,
),
StatWidget(
type: StatType.danmaku,
type: .danmaku,
value: videoDetail.stat?.danmaku,
color: theme.colorScheme.outline,
),

View File

@@ -5,7 +5,6 @@ import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart';
import 'package:PiliPlus/common/widgets/image/image_save.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/common/widgets/stat/stat.dart';
import 'package:PiliPlus/models/common/stat_type.dart';
import 'package:PiliPlus/models_new/media_list/media_list.dart';
import 'package:PiliPlus/models_new/video/video_detail/episode.dart';
import 'package:PiliPlus/pages/common/slide/common_slide_page.dart';
@@ -260,11 +259,11 @@ class _MediaListPanelState extends State<MediaListPanel>
spacing: 8,
children: [
StatWidget(
type: StatType.play,
type: .play,
value: item.cntInfo!.play,
),
StatWidget(
type: StatType.danmaku,
type: .danmaku,
value: item.cntInfo!.danmaku,
),
],

View File

@@ -7,7 +7,6 @@ import 'package:PiliPlus/common/widgets/loading_widget/loading_widget.dart';
import 'package:PiliPlus/common/widgets/sliver/sliver_pinned_header.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/common/image_preview_type.dart';
import 'package:PiliPlus/models/common/image_type.dart';
import 'package:PiliPlus/models/common/member/user_info_type.dart';
import 'package:PiliPlus/models/member/info.dart';
import 'package:PiliPlus/models_new/space/space_archive/item.dart';
@@ -407,7 +406,7 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
),
child: NetworkImgLayer(
src: face,
type: ImageType.avatar,
type: .avatar,
width: 70,
height: 70,
),

View File

@@ -3,7 +3,6 @@ import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/common/image_type.dart';
import 'package:PiliPlus/models_new/video/video_note_list/list.dart';
import 'package:PiliPlus/pages/common/slide/common_slide_page.dart';
import 'package:PiliPlus/pages/video/note/controller.dart';
@@ -235,7 +234,7 @@ class _NoteListPageState extends State<NoteListPage>
height: 34,
width: 34,
src: item.author!.face,
type: ImageType.avatar,
type: .avatar,
),
),
const SizedBox(width: 12),

View File

@@ -46,8 +46,7 @@ class PostPanel extends CommonSlidePage {
} else {
item.segment.second = value;
}
if (item.category == SegmentType.poi_highlight ||
item.actionType == ActionType.full) {
if (item.category == .poi_highlight || item.actionType == .full) {
item.segment.second = value;
}
}
@@ -166,7 +165,7 @@ class PostPanel extends CommonSlidePage {
},
);
if (item.category != SegmentType.poi_highlight) {
if (item.category != .poi_highlight) {
return Wrap(
runSpacing: 8,
spacing: 16,
@@ -212,8 +211,8 @@ class _PostPanelState extends State<PostPanel>
first: 0,
second: currentPos(),
),
category: SegmentType.sponsor,
actionType: ActionType.skip,
category: .sponsor,
actionType: .skip,
),
);
});
@@ -345,7 +344,7 @@ class _PostPanelState extends State<PostPanel>
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
if (item.actionType != ActionType.full)
if (item.actionType != .full)
PostPanel.segmentWidget(
theme,
item: item,
@@ -361,8 +360,8 @@ class _PostPanelState extends State<PostPanel>
value: () => item.category,
onSelected: (e) {
bool flag = false;
if (item.category == SegmentType.exclusive_access ||
item.category == SegmentType.poi_highlight) {
if (item.category == .exclusive_access ||
item.category == .poi_highlight) {
flag = true;
}
item.category = e;
@@ -372,14 +371,14 @@ class _PostPanelState extends State<PostPanel>
flag = true;
}
switch (e) {
case SegmentType.poi_highlight:
case .poi_highlight:
PostPanel.updateSegment(
isFirst: false,
item: item,
value: item.segment.first,
);
break;
case SegmentType.exclusive_access:
case .exclusive_access:
PostPanel.updateSegment(
isFirst: true,
item: item,
@@ -406,11 +405,11 @@ class _PostPanelState extends State<PostPanel>
value: () => item.actionType,
onSelected: (e) {
bool flag = false;
if (item.actionType == ActionType.full) {
if (item.actionType == .full) {
flag = true;
}
item.actionType = e;
if (e == ActionType.full) {
if (e == .full) {
flag = true;
PostPanel.updateSegment(
isFirst: true,

View File

@@ -17,7 +17,6 @@ import 'package:PiliPlus/grpc/bilibili/main/community/reply/v1.pb.dart'
import 'package:PiliPlus/http/reply.dart';
import 'package:PiliPlus/http/video.dart';
import 'package:PiliPlus/models/common/badge_type.dart';
import 'package:PiliPlus/models/common/image_type.dart';
import 'package:PiliPlus/pages/dynamics/widgets/vote.dart';
import 'package:PiliPlus/pages/member/widget/medal_widget.dart';
import 'package:PiliPlus/pages/save_panel/view.dart';
@@ -307,7 +306,7 @@ class ReplyItemGrpc extends StatelessWidget {
text: 'TOP',
size: PBadgeSize.small,
isStack: false,
type: PBadgeType.line_primary,
type: .line_primary,
fontSize: 9,
textScaleFactor: 1,
),
@@ -703,7 +702,7 @@ class ReplyItemGrpc extends StatelessWidget {
WidgetSpan(
child: NetworkImgLayer(
src: emote.url,
type: ImageType.emote,
type: .emote,
width: size,
height: size,
),

View File

@@ -3,15 +3,12 @@ import 'dart:math' as math;
import 'package:PiliPlus/common/widgets/button/toolbar_icon_button.dart';
import 'package:PiliPlus/common/widgets/custom_icon.dart';
import 'package:PiliPlus/common/widgets/flutter/text_field/controller.dart'
show RichTextType;
import 'package:PiliPlus/common/widgets/flutter/text_field/text_field.dart';
import 'package:PiliPlus/common/widgets/view_safe_area.dart';
import 'package:PiliPlus/grpc/bilibili/main/community/reply/v1.pb.dart'
show ReplyInfo;
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/http/video.dart';
import 'package:PiliPlus/models/common/publish_panel_type.dart';
import 'package:PiliPlus/models/dynamics/result.dart' show FilePicModel;
import 'package:PiliPlus/pages/common/publish/common_rich_text_pub_page.dart';
import 'package:PiliPlus/pages/dynamics_mention/controller.dart';
@@ -138,7 +135,7 @@ class _ReplyPageState extends CommonRichTextPubPageState<ReplyPage> {
child: Listener(
onPointerUp: (event) {
if (readOnly.value) {
updatePanelType(PanelType.keyboard);
updatePanelType(.keyboard);
}
},
child: Obx(
@@ -291,7 +288,7 @@ class _ReplyPageState extends CommonRichTextPubPageState<ReplyPage> {
if (res != null) {
onInsertText(
'${res.title} ',
RichTextType.common,
.common,
rawText: '${res.url} ',
);
}
@@ -323,7 +320,7 @@ class _ReplyPageState extends CommonRichTextPubPageState<ReplyPage> {
);
onInsertText(
' ${DurationUtils.formatDuration((plPlayerController.playedTime ?? Duration.zero).inSeconds)} ',
RichTextType.common,
.common,
);
} catch (e) {
debugPrint(e.toString());
@@ -376,7 +373,7 @@ class _ReplyPageState extends CommonRichTextPubPageState<ReplyPage> {
Future<void> onCustomPublish({List? pictures}) async {
Map<String, int> atNameToMid = {};
for (final e in editController.items) {
if (e.type == RichTextType.at) {
if (e.type == .at) {
atNameToMid[e.rawText] ??= int.parse(e.id!);
}
}

View File

@@ -25,7 +25,7 @@ class ReplySearchChildController
Future<LoadingState<SearchItemReply>> customGetData() {
return ReplyGrpc.searchItem(
page: page,
itemType: searchType == ReplySearchType.video
itemType: searchType == .video
? SearchItemType.VIDEO
: SearchItemType.ARTICLE,
oid: controller.oid,

View File

@@ -4,7 +4,6 @@ import 'package:PiliPlus/common/widgets/image/image_save.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/grpc/bilibili/main/community/reply/v1.pb.dart'
show SearchItem, SearchItemVideoSubType;
import 'package:PiliPlus/models/common/badge_type.dart';
import 'package:PiliPlus/models/common/reply/reply_search_type.dart';
import 'package:PiliPlus/utils/duration_utils.dart';
import 'package:PiliPlus/utils/platform_utils.dart';
@@ -29,7 +28,7 @@ class ReplySearchItem extends StatelessWidget {
String? category;
int? duration;
switch (type) {
case ReplySearchType.video:
case .video:
if (item.video.type == SearchItemVideoSubType.UGC) {
final ugc = item.video.ugc;
title = ugc.title;
@@ -42,7 +41,7 @@ class ReplySearchItem extends StatelessWidget {
cover = pgc.cover;
category = pgc.category;
}
case ReplySearchType.article:
case .article:
final article = item.article;
title = article.title;
cover = article.covers.firstOrNull ?? '';
@@ -88,7 +87,7 @@ class ReplySearchItem extends StatelessWidget {
right: 6,
bottom: 6,
text: DurationUtils.formatDuration(duration),
type: PBadgeType.gray,
type: .gray,
),
],
);

View File

@@ -1,4 +1,3 @@
import 'package:PiliPlus/models/common/reply/reply_search_type.dart';
import 'package:PiliPlus/pages/video/reply_search_item/child/controller.dart';
import 'package:PiliPlus/utils/extension/scroll_controller_ext.dart';
import 'package:PiliPlus/utils/utils.dart';
@@ -16,11 +15,11 @@ class ReplySearchController extends GetxController
late final TextEditingController editingController;
late final videoCtr = Get.put(
ReplySearchChildController(this, ReplySearchType.video),
ReplySearchChildController(this, .video),
tag: Utils.generateRandomString(8),
);
late final articleCtr = Get.put(
ReplySearchChildController(this, ReplySearchType.article),
ReplySearchChildController(this, .article),
tag: Utils.generateRandomString(8),
);

View File

@@ -1,7 +1,6 @@
import 'package:PiliPlus/common/widgets/scaffold.dart';
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
import 'package:PiliPlus/common/widgets/view_safe_area.dart';
import 'package:PiliPlus/models/common/reply/reply_search_type.dart';
import 'package:PiliPlus/pages/video/reply_search_item/child/view.dart';
import 'package:PiliPlus/pages/video/reply_search_item/controller.dart';
import 'package:PiliPlus/utils/utils.dart';
@@ -90,11 +89,11 @@ class _ReplySearchPageState extends State<ReplySearchPage> {
children: [
ReplySearchChildPage(
controller: _controller.videoCtr,
searchType: ReplySearchType.video,
searchType: .video,
),
ReplySearchChildPage(
controller: _controller.articleCtr,
searchType: ReplySearchType.article,
searchType: .article,
),
],
),

View File

@@ -2,7 +2,6 @@ import 'package:PiliPlus/common/widgets/button/icon_button.dart';
import 'package:PiliPlus/common/widgets/view_safe_area.dart';
import 'package:PiliPlus/http/danmaku.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/common/publish_panel_type.dart';
import 'package:PiliPlus/pages/common/publish/common_text_pub_page.dart';
import 'package:PiliPlus/pages/setting/slide_color_picker.dart';
import 'package:PiliPlus/utils/storage_pref.dart';
@@ -341,12 +340,12 @@ class _SendDanmakuPanelState extends CommonTextPubPageState<SendDanmakuPanel> {
children: [
Obx(
() {
final isEmoji = panelType.value == PanelType.emoji;
final isEmoji = panelType.value == .emoji;
return iconButton(
tooltip: '弹幕样式',
onPressed: () {
updatePanelType(
isEmoji ? PanelType.keyboard : PanelType.emoji,
isEmoji ? .keyboard : .emoji,
);
},
iconSize: 24,
@@ -362,7 +361,7 @@ class _SendDanmakuPanelState extends CommonTextPubPageState<SendDanmakuPanel> {
child: Listener(
onPointerUp: (event) {
if (readOnly.value) {
updatePanelType(PanelType.keyboard);
updatePanelType(.keyboard);
}
},
child: Obx(

View File

@@ -11,7 +11,6 @@ import 'package:PiliPlus/common/widgets/route_aware_mixin.dart';
import 'package:PiliPlus/common/widgets/scaffold.dart';
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
import 'package:PiliPlus/common/widgets/sliver/sliver_pinned_dynamic_header.dart';
import 'package:PiliPlus/models/common/episode_panel_type.dart';
import 'package:PiliPlus/models_new/pgc/pgc_info_model/result.dart';
import 'package:PiliPlus/models_new/video/video_detail/episode.dart' as ugc;
import 'package:PiliPlus/models_new/video/video_detail/page.dart';
@@ -1373,7 +1372,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
// SegmentType.values.length,
// )],
// segment: Pair(first: 0, second: 0),
// skipType: SkipType.alwaysSkip,
// skipType: .alwaysSkip,
// ),
// );
// },
@@ -1637,7 +1636,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
ugcIntroController: videoDetailController.isUgc
? ugcIntroController
: null,
type: EpisodeType.part,
type: .part,
list: [videoDetail.pages!],
cover: videoDetailController.cover.value,
bvid: videoDetailController.bvid,
@@ -1681,7 +1680,7 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
ugcIntroController: videoDetailController.isUgc
? ugcIntroController
: null,
type: EpisodeType.season,
type: .season,
initialTabIndex: videoDetailController.seasonIndex.value,
cover: videoDetailController.cover.value,
seasonId: videoDetail.ugcSeason!.id,
@@ -1750,10 +1749,10 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
? ugcIntroController
: null,
type: season != null
? EpisodeType.season
? .season
: episodes is List<Part>
? EpisodeType.part
: EpisodeType.pgc,
? .part
: .pgc,
cover: videoDetailController.cover.value,
enableSlide: enableSlide,
initialTabIndex: index ?? 0,