Compare commits
1 Commits
fix-issues
...
fix-videoC
| Author | SHA1 | Date | |
|---|---|---|---|
| c1008e0162 |
@ -229,9 +229,7 @@ class VideoContent extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
if (crossAxisCount > 1) ...[
|
if (crossAxisCount > 1) ...[
|
||||||
const SizedBox(height: 2),
|
const SizedBox(height: 2),
|
||||||
VideoStat(
|
VideoStat(videoItem: videoItem, crossAxisCount: crossAxisCount),
|
||||||
videoItem: videoItem,
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
if (crossAxisCount == 1) const SizedBox(height: 4),
|
if (crossAxisCount == 1) const SizedBox(height: 4),
|
||||||
Row(
|
Row(
|
||||||
@ -292,10 +290,14 @@ class VideoContent extends StatelessWidget {
|
|||||||
color: Theme.of(context).colorScheme.outline,
|
color: Theme.of(context).colorScheme.outline,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
VideoStat(
|
Expanded(
|
||||||
videoItem: videoItem,
|
flex: 1,
|
||||||
|
child: VideoStat(
|
||||||
|
videoItem: videoItem,
|
||||||
|
crossAxisCount: crossAxisCount,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
const Spacer(),
|
// const Spacer(),
|
||||||
],
|
],
|
||||||
if (videoItem.goto == 'av' && crossAxisCount != 1) ...[
|
if (videoItem.goto == 'av' && crossAxisCount != 1) ...[
|
||||||
VideoPopupMenu(
|
VideoPopupMenu(
|
||||||
@ -317,10 +319,12 @@ class VideoContent extends StatelessWidget {
|
|||||||
|
|
||||||
class VideoStat extends StatelessWidget {
|
class VideoStat extends StatelessWidget {
|
||||||
final dynamic videoItem;
|
final dynamic videoItem;
|
||||||
|
final int crossAxisCount;
|
||||||
|
|
||||||
const VideoStat({
|
const VideoStat({
|
||||||
Key? key,
|
Key? key,
|
||||||
required this.videoItem,
|
required this.videoItem,
|
||||||
|
required this.crossAxisCount,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -337,7 +341,7 @@ class VideoStat extends StatelessWidget {
|
|||||||
danmu: videoItem.stat.danmu,
|
danmu: videoItem.stat.danmu,
|
||||||
),
|
),
|
||||||
if (videoItem is RecVideoItemModel) ...<Widget>[
|
if (videoItem is RecVideoItemModel) ...<Widget>[
|
||||||
const Spacer(),
|
crossAxisCount > 1 ? const Spacer() : const SizedBox(width: 8),
|
||||||
RichText(
|
RichText(
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
text: TextSpan(
|
text: TextSpan(
|
||||||
|
|||||||
@ -101,13 +101,10 @@ class MemberHttp {
|
|||||||
'data': MemberArchiveDataModel.fromJson(res.data['data'])
|
'data': MemberArchiveDataModel.fromJson(res.data['data'])
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
Map errMap = {
|
|
||||||
-352: '风控校验失败,请检查登录状态',
|
|
||||||
};
|
|
||||||
return {
|
return {
|
||||||
'status': false,
|
'status': false,
|
||||||
'data': [],
|
'data': [],
|
||||||
'msg': errMap[res.data['code']] ?? res.data['message'],
|
'msg': res.data['message'],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -126,13 +123,10 @@ class MemberHttp {
|
|||||||
'data': DynamicsDataModel.fromJson(res.data['data']),
|
'data': DynamicsDataModel.fromJson(res.data['data']),
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
Map errMap = {
|
|
||||||
-352: '风控校验失败,请检查登录状态',
|
|
||||||
};
|
|
||||||
return {
|
return {
|
||||||
'status': false,
|
'status': false,
|
||||||
'data': [],
|
'data': [],
|
||||||
'msg': errMap[res.data['code']] ?? res.data['message'],
|
'msg': res.data['message'],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -142,7 +142,7 @@ class Stat {
|
|||||||
|
|
||||||
Stat.fromJson(Map<String, dynamic> json) {
|
Stat.fromJson(Map<String, dynamic> json) {
|
||||||
view = json["play"];
|
view = json["play"];
|
||||||
danmaku = json['video_review'];
|
danmaku = json['comment'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -34,7 +34,6 @@ class PlayUrlModel {
|
|||||||
String? seekParam;
|
String? seekParam;
|
||||||
String? seekType;
|
String? seekType;
|
||||||
Dash? dash;
|
Dash? dash;
|
||||||
List<Durl>? durl;
|
|
||||||
List<FormatItem>? supportFormats;
|
List<FormatItem>? supportFormats;
|
||||||
// String? highFormat;
|
// String? highFormat;
|
||||||
int? lastPlayTime;
|
int? lastPlayTime;
|
||||||
@ -53,8 +52,7 @@ class PlayUrlModel {
|
|||||||
videoCodecid = json['video_codecid'];
|
videoCodecid = json['video_codecid'];
|
||||||
seekParam = json['seek_param'];
|
seekParam = json['seek_param'];
|
||||||
seekType = json['seek_type'];
|
seekType = json['seek_type'];
|
||||||
dash = json['dash'] != null ? Dash.fromJson(json['dash']) : null;
|
dash = Dash.fromJson(json['dash']);
|
||||||
durl = json['durl']?.map<Durl>((e) => Durl.fromJson(e)).toList();
|
|
||||||
supportFormats = json['support_formats'] != null
|
supportFormats = json['support_formats'] != null
|
||||||
? json['support_formats']
|
? json['support_formats']
|
||||||
.map<FormatItem>((e) => FormatItem.fromJson(e))
|
.map<FormatItem>((e) => FormatItem.fromJson(e))
|
||||||
@ -252,30 +250,3 @@ class Flac {
|
|||||||
audio = json['audio'] != null ? AudioItem.fromJson(json['audio']) : null;
|
audio = json['audio'] != null ? AudioItem.fromJson(json['audio']) : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Durl {
|
|
||||||
Durl({
|
|
||||||
this.order,
|
|
||||||
this.length,
|
|
||||||
this.size,
|
|
||||||
this.ahead,
|
|
||||||
this.vhead,
|
|
||||||
this.url,
|
|
||||||
});
|
|
||||||
|
|
||||||
int? order;
|
|
||||||
int? length;
|
|
||||||
int? size;
|
|
||||||
String? ahead;
|
|
||||||
String? vhead;
|
|
||||||
String? url;
|
|
||||||
|
|
||||||
Durl.fromJson(Map<String, dynamic> json) {
|
|
||||||
order = json['order'];
|
|
||||||
length = json['length'];
|
|
||||||
size = json['size'];
|
|
||||||
ahead = json['ahead'];
|
|
||||||
vhead = json['vhead'];
|
|
||||||
url = json['url'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -218,12 +218,14 @@ class BangumiIntroController extends GetxController {
|
|||||||
addIds: addMediaIdsNew.join(','),
|
addIds: addMediaIdsNew.join(','),
|
||||||
delIds: delMediaIdsNew.join(','));
|
delIds: delMediaIdsNew.join(','));
|
||||||
if (result['status']) {
|
if (result['status']) {
|
||||||
addMediaIdsNew = [];
|
if (result['data']['prompt']) {
|
||||||
delMediaIdsNew = [];
|
addMediaIdsNew = [];
|
||||||
// 重新获取收藏状态
|
delMediaIdsNew = [];
|
||||||
queryHasFavVideo();
|
Get.back();
|
||||||
SmartDialog.showToast('✅ 操作成功');
|
// 重新获取收藏状态
|
||||||
Get.back();
|
queryHasFavVideo();
|
||||||
|
SmartDialog.showToast('✅ 操作成功');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -60,14 +60,16 @@ class FavDetailController extends GetxController {
|
|||||||
var result = await VideoHttp.favVideo(
|
var result = await VideoHttp.favVideo(
|
||||||
aid: id, addIds: '', delIds: mediaId.toString());
|
aid: id, addIds: '', delIds: mediaId.toString());
|
||||||
if (result['status']) {
|
if (result['status']) {
|
||||||
List dataList = favList;
|
if (result['data']['prompt']) {
|
||||||
for (var i in dataList) {
|
List dataList = favList;
|
||||||
if (i.id == id) {
|
for (var i in dataList) {
|
||||||
dataList.remove(i);
|
if (i.id == id) {
|
||||||
break;
|
dataList.remove(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
SmartDialog.showToast('取消收藏');
|
||||||
}
|
}
|
||||||
SmartDialog.showToast('取消收藏');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -29,7 +29,6 @@ class _FavDetailPageState extends State<FavDetailPage> {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
mediaId = Get.parameters['mediaId']!;
|
|
||||||
_futureBuilderFuture = _favDetailController.queryUserFavFolderDetail();
|
_futureBuilderFuture = _favDetailController.queryUserFavFolderDetail();
|
||||||
mediaId = Get.parameters['mediaId']!;
|
mediaId = Get.parameters['mediaId']!;
|
||||||
titleStreamC = StreamController<bool>();
|
titleStreamC = StreamController<bool>();
|
||||||
|
|||||||
@ -80,14 +80,16 @@ class FavSearchController extends GetxController {
|
|||||||
var result = await VideoHttp.favVideo(
|
var result = await VideoHttp.favVideo(
|
||||||
aid: id, addIds: '', delIds: mediaId.toString());
|
aid: id, addIds: '', delIds: mediaId.toString());
|
||||||
if (result['status']) {
|
if (result['status']) {
|
||||||
List dataList = favList;
|
if (result['data']['prompt']) {
|
||||||
for (var i in dataList) {
|
List dataList = favList;
|
||||||
if (i.id == id) {
|
for (var i in dataList) {
|
||||||
dataList.remove(i);
|
if (i.id == id) {
|
||||||
break;
|
dataList.remove(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
SmartDialog.showToast('取消收藏');
|
||||||
}
|
}
|
||||||
SmartDialog.showToast('取消收藏');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,8 +4,6 @@ import 'package:pilipala/http/live.dart';
|
|||||||
import 'package:pilipala/models/live/room_info.dart';
|
import 'package:pilipala/models/live/room_info.dart';
|
||||||
import 'package:pilipala/plugin/pl_player/index.dart';
|
import 'package:pilipala/plugin/pl_player/index.dart';
|
||||||
import '../../models/live/room_info_h5.dart';
|
import '../../models/live/room_info_h5.dart';
|
||||||
import '../../utils/storage.dart';
|
|
||||||
import '../../utils/video_utils.dart';
|
|
||||||
|
|
||||||
class LiveRoomController extends GetxController {
|
class LiveRoomController extends GetxController {
|
||||||
String cover = '';
|
String cover = '';
|
||||||
@ -18,7 +16,6 @@ class LiveRoomController extends GetxController {
|
|||||||
PlPlayerController plPlayerController =
|
PlPlayerController plPlayerController =
|
||||||
PlPlayerController.getInstance(videoType: 'live');
|
PlPlayerController.getInstance(videoType: 'live');
|
||||||
Rx<RoomInfoH5Model> roomInfoH5 = RoomInfoH5Model().obs;
|
Rx<RoomInfoH5Model> roomInfoH5 = RoomInfoH5Model().obs;
|
||||||
late bool enableCDN;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
@ -34,8 +31,6 @@ class LiveRoomController extends GetxController {
|
|||||||
cover = liveItem.cover;
|
cover = liveItem.cover;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// CDN优化
|
|
||||||
enableCDN = setting.get(SettingBoxKey.enableCDN, defaultValue: true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
playerInit(source) async {
|
playerInit(source) async {
|
||||||
@ -62,11 +57,9 @@ class LiveRoomController extends GetxController {
|
|||||||
List<CodecItem> codec =
|
List<CodecItem> codec =
|
||||||
res['data'].playurlInfo.playurl.stream.first.format.first.codec;
|
res['data'].playurlInfo.playurl.stream.first.format.first.codec;
|
||||||
CodecItem item = codec.first;
|
CodecItem item = codec.first;
|
||||||
String videoUrl = enableCDN
|
String videoUrl = (item.urlInfo?.first.host)! +
|
||||||
? VideoUtils.getCdnUrl(item)
|
item.baseUrl! +
|
||||||
: (item.urlInfo?.first.host)! +
|
item.urlInfo!.first.extra!;
|
||||||
item.baseUrl! +
|
|
||||||
item.urlInfo!.first.extra!;
|
|
||||||
await playerInit(videoUrl);
|
await playerInit(videoUrl);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,6 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:pilipala/common/widgets/video_card_h.dart';
|
import 'package:pilipala/common/widgets/video_card_h.dart';
|
||||||
import 'package:pilipala/utils/utils.dart';
|
import 'package:pilipala/utils/utils.dart';
|
||||||
import '../../common/widgets/http_error.dart';
|
|
||||||
import 'controller.dart';
|
import 'controller.dart';
|
||||||
|
|
||||||
class MemberArchivePage extends StatefulWidget {
|
class MemberArchivePage extends StatefulWidget {
|
||||||
@ -87,16 +86,10 @@ class _MemberArchivePageState extends State<MemberArchivePage> {
|
|||||||
: const SliverToBoxAdapter(),
|
: const SliverToBoxAdapter(),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return HttpError(
|
return const SliverToBoxAdapter();
|
||||||
errMsg: snapshot.data['msg'],
|
|
||||||
fn: () {},
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return HttpError(
|
return const SliverToBoxAdapter();
|
||||||
errMsg: snapshot.data['msg'],
|
|
||||||
fn: () {},
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return const SliverToBoxAdapter();
|
return const SliverToBoxAdapter();
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import 'package:get/get.dart';
|
|||||||
import 'package:pilipala/pages/member_dynamics/index.dart';
|
import 'package:pilipala/pages/member_dynamics/index.dart';
|
||||||
import 'package:pilipala/utils/utils.dart';
|
import 'package:pilipala/utils/utils.dart';
|
||||||
|
|
||||||
import '../../common/widgets/http_error.dart';
|
|
||||||
import '../dynamics/widgets/dynamic_panel.dart';
|
import '../dynamics/widgets/dynamic_panel.dart';
|
||||||
|
|
||||||
class MemberDynamicsPage extends StatefulWidget {
|
class MemberDynamicsPage extends StatefulWidget {
|
||||||
@ -81,16 +80,10 @@ class _MemberDynamicsPageState extends State<MemberDynamicsPage> {
|
|||||||
: const SliverToBoxAdapter(),
|
: const SliverToBoxAdapter(),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return HttpError(
|
return const SliverToBoxAdapter();
|
||||||
errMsg: snapshot.data['msg'],
|
|
||||||
fn: () {},
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return HttpError(
|
return const SliverToBoxAdapter();
|
||||||
errMsg: snapshot.data['msg'],
|
|
||||||
fn: () {},
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return const SliverToBoxAdapter();
|
return const SliverToBoxAdapter();
|
||||||
|
|||||||
@ -90,8 +90,6 @@ class VideoDetailController extends GetxController
|
|||||||
late String cacheDecode;
|
late String cacheDecode;
|
||||||
late int cacheAudioQa;
|
late int cacheAudioQa;
|
||||||
|
|
||||||
PersistentBottomSheetController? replyReplyBottomSheetCtr;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
@ -142,7 +140,7 @@ class VideoDetailController extends GetxController
|
|||||||
}
|
}
|
||||||
|
|
||||||
showReplyReplyPanel() {
|
showReplyReplyPanel() {
|
||||||
replyReplyBottomSheetCtr =
|
PersistentBottomSheetController? ctr =
|
||||||
scaffoldKey.currentState?.showBottomSheet((BuildContext context) {
|
scaffoldKey.currentState?.showBottomSheet((BuildContext context) {
|
||||||
return VideoReplyReplyPanel(
|
return VideoReplyReplyPanel(
|
||||||
oid: oid.value,
|
oid: oid.value,
|
||||||
@ -155,7 +153,7 @@ class VideoDetailController extends GetxController
|
|||||||
source: 'videoDetail',
|
source: 'videoDetail',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
replyReplyBottomSheetCtr?.closed.then((value) {
|
ctr?.closed.then((value) {
|
||||||
fRpid = 0;
|
fRpid = 0;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -231,11 +229,9 @@ class VideoDetailController extends GetxController
|
|||||||
seekTo: seekToTime ?? defaultST,
|
seekTo: seekToTime ?? defaultST,
|
||||||
duration: duration ?? Duration(milliseconds: data.timeLength ?? 0),
|
duration: duration ?? Duration(milliseconds: data.timeLength ?? 0),
|
||||||
// 宽>高 水平 否则 垂直
|
// 宽>高 水平 否则 垂直
|
||||||
direction: firstVideo.width != null && firstVideo.height != null
|
direction: (firstVideo.width! - firstVideo.height!) > 0
|
||||||
? ((firstVideo.width! - firstVideo.height!) > 0
|
? 'horizontal'
|
||||||
? 'horizontal'
|
: 'vertical',
|
||||||
: 'vertical')
|
|
||||||
: null,
|
|
||||||
bvid: bvid,
|
bvid: bvid,
|
||||||
cid: cid.value,
|
cid: cid.value,
|
||||||
enableHeart: enableHeart,
|
enableHeart: enableHeart,
|
||||||
@ -252,21 +248,6 @@ class VideoDetailController extends GetxController
|
|||||||
var result = await VideoHttp.videoUrl(cid: cid.value, bvid: bvid);
|
var result = await VideoHttp.videoUrl(cid: cid.value, bvid: bvid);
|
||||||
if (result['status']) {
|
if (result['status']) {
|
||||||
data = result['data'];
|
data = result['data'];
|
||||||
if (data.acceptDesc!.isNotEmpty && data.acceptDesc!.contains('试看')) {
|
|
||||||
SmartDialog.showToast(
|
|
||||||
'该视频为专属视频,仅提供试看',
|
|
||||||
displayTime: const Duration(seconds: 3),
|
|
||||||
);
|
|
||||||
videoUrl = data.durl!.first.url!;
|
|
||||||
audioUrl = '';
|
|
||||||
defaultST = Duration.zero;
|
|
||||||
firstVideo = VideoItem();
|
|
||||||
if (autoPlay.value) {
|
|
||||||
await playerInit();
|
|
||||||
isShowCover.value = false;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
final List<VideoItem> allVideosList = data.dash!.video!;
|
final List<VideoItem> allVideosList = data.dash!.video!;
|
||||||
try {
|
try {
|
||||||
// 当前可播放的最高质量视频
|
// 当前可播放的最高质量视频
|
||||||
@ -374,11 +355,4 @@ class VideoDetailController extends GetxController
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// mob端全屏状态关闭二级回复
|
|
||||||
hiddenReplyReplyPanel() {
|
|
||||||
replyReplyBottomSheetCtr != null
|
|
||||||
? replyReplyBottomSheetCtr!.close()
|
|
||||||
: print('replyReplyBottomSheetCtr is null');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -305,9 +305,11 @@ class VideoIntroController extends GetxController {
|
|||||||
delIds: favStatus == 1 ? '$defaultFolderId' : '',
|
delIds: favStatus == 1 ? '$defaultFolderId' : '',
|
||||||
);
|
);
|
||||||
if (result['status']) {
|
if (result['status']) {
|
||||||
// 重新获取收藏状态
|
if (result['data']['prompt']) {
|
||||||
await queryHasFavVideo();
|
// 重新获取收藏状态
|
||||||
SmartDialog.showToast('✅ 操作成功');
|
await queryHasFavVideo();
|
||||||
|
SmartDialog.showToast('✅ 操作成功');
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
SmartDialog.showToast(result['msg']);
|
SmartDialog.showToast(result['msg']);
|
||||||
}
|
}
|
||||||
@ -332,12 +334,14 @@ class VideoIntroController extends GetxController {
|
|||||||
delIds: delMediaIdsNew.join(','));
|
delIds: delMediaIdsNew.join(','));
|
||||||
SmartDialog.dismiss();
|
SmartDialog.dismiss();
|
||||||
if (result['status']) {
|
if (result['status']) {
|
||||||
addMediaIdsNew = [];
|
if (result['data']['prompt']) {
|
||||||
delMediaIdsNew = [];
|
addMediaIdsNew = [];
|
||||||
Get.back();
|
delMediaIdsNew = [];
|
||||||
// 重新获取收藏状态
|
Get.back();
|
||||||
await queryHasFavVideo();
|
// 重新获取收藏状态
|
||||||
SmartDialog.showToast('✅ 操作成功');
|
await queryHasFavVideo();
|
||||||
|
SmartDialog.showToast('✅ 操作成功');
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
SmartDialog.showToast(result['msg']);
|
SmartDialog.showToast(result['msg']);
|
||||||
}
|
}
|
||||||
@ -478,7 +482,7 @@ class VideoIntroController extends GetxController {
|
|||||||
final ReleatedController releatedCtr =
|
final ReleatedController releatedCtr =
|
||||||
Get.find<ReleatedController>(tag: heroTag);
|
Get.find<ReleatedController>(tag: heroTag);
|
||||||
videoDetailCtr.bvid = bvid;
|
videoDetailCtr.bvid = bvid;
|
||||||
videoDetailCtr.oid.value = aid ?? IdUtils.bv2av(bvid);
|
videoDetailCtr.oid.value = aid;
|
||||||
videoDetailCtr.cid.value = cid;
|
videoDetailCtr.cid.value = cid;
|
||||||
videoDetailCtr.danmakuCid.value = cid;
|
videoDetailCtr.danmakuCid.value = cid;
|
||||||
videoDetailCtr.queryVideoUrl();
|
videoDetailCtr.queryVideoUrl();
|
||||||
|
|||||||
@ -12,7 +12,6 @@ import 'package:pilipala/pages/preview/index.dart';
|
|||||||
import 'package:pilipala/pages/video/detail/index.dart';
|
import 'package:pilipala/pages/video/detail/index.dart';
|
||||||
import 'package:pilipala/pages/video/detail/reply_new/index.dart';
|
import 'package:pilipala/pages/video/detail/reply_new/index.dart';
|
||||||
import 'package:pilipala/utils/feed_back.dart';
|
import 'package:pilipala/utils/feed_back.dart';
|
||||||
import 'package:pilipala/utils/id_utils.dart';
|
|
||||||
import 'package:pilipala/utils/storage.dart';
|
import 'package:pilipala/utils/storage.dart';
|
||||||
import 'package:pilipala/utils/url_utils.dart';
|
import 'package:pilipala/utils/url_utils.dart';
|
||||||
import 'package:pilipala/utils/utils.dart';
|
import 'package:pilipala/utils/utils.dart';
|
||||||
@ -621,34 +620,26 @@ InlineSpan buildContent(
|
|||||||
..onTap = () async {
|
..onTap = () async {
|
||||||
final String title = content.jumpUrl[matchStr]['title'];
|
final String title = content.jumpUrl[matchStr]['title'];
|
||||||
if (appUrlSchema == '') {
|
if (appUrlSchema == '') {
|
||||||
if (matchStr.startsWith('BV')) {
|
final String redirectUrl =
|
||||||
|
await UrlUtils.parseRedirectUrl(matchStr);
|
||||||
|
final String pathSegment = Uri.parse(redirectUrl).path;
|
||||||
|
final String lastPathSegment =
|
||||||
|
pathSegment.split('/').last;
|
||||||
|
if (lastPathSegment.startsWith('BV')) {
|
||||||
UrlUtils.matchUrlPush(
|
UrlUtils.matchUrlPush(
|
||||||
matchStr,
|
lastPathSegment,
|
||||||
title,
|
title,
|
||||||
'',
|
redirectUrl,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final String redirectUrl =
|
Get.toNamed(
|
||||||
await UrlUtils.parseRedirectUrl(matchStr);
|
'/webview',
|
||||||
final String pathSegment = Uri.parse(redirectUrl).path;
|
parameters: {
|
||||||
final String lastPathSegment =
|
'url': redirectUrl,
|
||||||
pathSegment.split('/').last;
|
'type': 'url',
|
||||||
if (lastPathSegment.startsWith('BV')) {
|
'pageTitle': title
|
||||||
UrlUtils.matchUrlPush(
|
},
|
||||||
lastPathSegment,
|
);
|
||||||
title,
|
|
||||||
redirectUrl,
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
Get.toNamed(
|
|
||||||
'/webview',
|
|
||||||
parameters: {
|
|
||||||
'url': redirectUrl,
|
|
||||||
'type': 'url',
|
|
||||||
'pageTitle': title
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (appUrlSchema.startsWith('bilibili://search')) {
|
if (appUrlSchema.startsWith('bilibili://search')) {
|
||||||
|
|||||||
@ -92,7 +92,6 @@ class _VideoDetailPageState extends State<VideoDetailPage>
|
|||||||
videoSourceInit();
|
videoSourceInit();
|
||||||
appbarStreamListen();
|
appbarStreamListen();
|
||||||
lifecycleListener();
|
lifecycleListener();
|
||||||
fullScreenStatusListener();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取视频资源,初始化播放器
|
// 获取视频资源,初始化播放器
|
||||||
@ -189,14 +188,6 @@ class _VideoDetailPageState extends State<VideoDetailPage>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fullScreenStatusListener() {
|
|
||||||
plPlayerController?.isFullScreen.listen((bool isFullScreen) {
|
|
||||||
if (isFullScreen) {
|
|
||||||
videoDetailController.hiddenReplyReplyPanel();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
shutdownTimerService.handleWaitingFinished();
|
shutdownTimerService.handleWaitingFinished();
|
||||||
@ -234,10 +225,7 @@ class _VideoDetailPageState extends State<VideoDetailPage>
|
|||||||
@override
|
@override
|
||||||
// 返回当前页面时
|
// 返回当前页面时
|
||||||
void didPopNext() async {
|
void didPopNext() async {
|
||||||
if (plPlayerController != null &&
|
setState(() => isShowing = true);
|
||||||
plPlayerController!.videoPlayerController != null) {
|
|
||||||
setState(() => isShowing = true);
|
|
||||||
}
|
|
||||||
videoDetailController.isFirstTime = false;
|
videoDetailController.isFirstTime = false;
|
||||||
final bool autoplay = autoPlayEnable;
|
final bool autoplay = autoPlayEnable;
|
||||||
videoDetailController.playerInit(autoplay: autoplay);
|
videoDetailController.playerInit(autoplay: autoplay);
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
import 'package:pilipala/models/video/play/url.dart';
|
import 'package:pilipala/models/video/play/url.dart';
|
||||||
|
|
||||||
import '../models/live/room_info.dart';
|
|
||||||
|
|
||||||
class VideoUtils {
|
class VideoUtils {
|
||||||
static String getCdnUrl(dynamic item) {
|
static String getCdnUrl(dynamic item) {
|
||||||
var backupUrl = "";
|
var backupUrl = "";
|
||||||
@ -14,20 +12,13 @@ class VideoUtils {
|
|||||||
} else if (item is AudioItem) {
|
} else if (item is AudioItem) {
|
||||||
backupUrl = item.backupUrl ?? "";
|
backupUrl = item.backupUrl ?? "";
|
||||||
videoUrl = backupUrl.contains("http") ? backupUrl : (item.baseUrl ?? "");
|
videoUrl = backupUrl.contains("http") ? backupUrl : (item.baseUrl ?? "");
|
||||||
} else if (item is CodecItem) {
|
|
||||||
backupUrl = (item.urlInfo?.first.host)! +
|
|
||||||
item.baseUrl! +
|
|
||||||
item.urlInfo!.first.extra!;
|
|
||||||
videoUrl = backupUrl.contains("http") ? backupUrl : (item.baseUrl ?? "");
|
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// issues #70
|
/// issues #70
|
||||||
if (videoUrl.contains(".mcdn.bilivideo")) {
|
if (videoUrl.contains(".mcdn.bilivideo") ||
|
||||||
videoUrl =
|
videoUrl.contains("/upgcxcode/")) {
|
||||||
'https://proxy-tf-all-ws.bilivideo.com/?url=${Uri.encodeComponent(videoUrl)}';
|
|
||||||
} else if (videoUrl.contains("/upgcxcode/")) {
|
|
||||||
//CDN列表
|
//CDN列表
|
||||||
var cdnList = {
|
var cdnList = {
|
||||||
'ali': 'upos-sz-mirrorali.bilivideo.com',
|
'ali': 'upos-sz-mirrorali.bilivideo.com',
|
||||||
|
|||||||
Reference in New Issue
Block a user