refa: live page

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-05-05 17:03:49 +08:00
parent 7689fe8aa4
commit 562f9035e8
31 changed files with 1334 additions and 461 deletions

View File

@@ -737,10 +737,6 @@ class Api {
/// 稍后再看&收藏夹视频列表
static const String mediaList = '/x/v2/medialist/resource/list';
/// 我的关注 - 正在直播
static const String getFollowingLive =
'${HttpString.liveBaseUrl}/xlive/web-ucenter/user/following';
static const String pgcIndexCondition = '/pgc/season/index/condition';
static const String pgcIndexResult = '/pgc/season/index/result';
@@ -800,4 +796,10 @@ class Api {
static const String voteInfo = '/x/vote/vote_info';
static const String doVote = '/x/vote/do_vote';
static const String liveFeedIndex =
'${HttpString.liveBaseUrl}/xlive/app-interface/v2/index/feed';
static const String liveFollow =
'${HttpString.liveBaseUrl}/xlive/web-ucenter/user/following';
}

View File

@@ -2,14 +2,16 @@ import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/http/api.dart';
import 'package:PiliPlus/http/init.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/live/danmu_info.dart';
import 'package:PiliPlus/models/live/follow.dart';
import 'package:PiliPlus/models/live/item.dart';
import 'package:PiliPlus/models/live/live_emoticons/data.dart';
import 'package:PiliPlus/models/live/live_emoticons/datum.dart';
import 'package:PiliPlus/models/live/room_info.dart';
import 'package:PiliPlus/models/live/room_info_h5.dart';
import 'package:PiliPlus/models/live/live_feed_index/data.dart';
import 'package:PiliPlus/models/live/live_follow/data.dart';
import 'package:PiliPlus/models/live/live_room/danmu_info.dart';
import 'package:PiliPlus/models/live/live_room/item.dart';
import 'package:PiliPlus/models/live/live_room/room_info.dart';
import 'package:PiliPlus/models/live/live_room/room_info_h5.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:PiliPlus/utils/wbi_sign.dart';
import 'package:dio/dio.dart';
@@ -150,31 +152,6 @@ class LiveHttp {
}
}
// 我的关注 正在直播
static Future liveFollowing({required int pn, required int ps}) async {
var res = await Request().get(
Api.getFollowingLive,
queryParameters: {
'page': pn,
'page_size': ps,
'platform': 'web',
'ignoreRecord': 1,
'hit_ab': true,
},
);
if (res.data['code'] == 0) {
return {
'status': true,
'data': LiveFollowingModel.fromJson(res.data['data'])
};
} else {
return {
'status': false,
'msg': res.data['message'],
};
}
}
static Future<LoadingState<List<LiveEmoteDatum>?>> getLiveEmoticons(
{required int roomId}) async {
var res = await Request().get(
@@ -191,4 +168,65 @@ class LiveHttp {
return LoadingState.error(res.data['message']);
}
}
static Future<LoadingState<LiveIndexData>> liveFeedIndex({
required int pn,
required bool isLogin,
}) async {
final params = {
if (isLogin) 'access_key': Accounts.main.accessKey,
'appkey': Constants.appKey,
'actionKey': 'appkey',
'build': '8350200',
'c_locale': 'zh_CN',
'device': 'pad',
'device_name': 'vivo',
'device_type': '0',
'fnval': '912',
'disable_rcmd': '0',
'https_url_req': '1',
'login_event': isLogin ? '1' : '0',
'mobi_app': 'android_hd',
'module_select': '0',
'network': 'wifi',
'page': pn.toString(),
'platform': 'android',
if (isLogin) 'relation_page': '1',
's_locale': 'zh_CN',
'scale': '2',
'statistics': Constants.statistics,
'ts': (DateTime.now().millisecondsSinceEpoch ~/ 1000).toString(),
};
Utils.appSign(
params,
Constants.appKey,
Constants.appSec,
);
var res = await Request().get(
Api.liveFeedIndex,
queryParameters: params,
);
if (res.data['code'] == 0) {
return LoadingState.success(LiveIndexData.fromJson(res.data['data']));
} else {
return LoadingState.error(res.data['message']);
}
}
static Future<LoadingState<LiveFollowData>> liveFollow(int page) async {
var res = await Request().get(
Api.liveFollow,
queryParameters: {
'page': page,
'page_size': 9,
'ignoreRecord': 1,
'hit_ab': true,
},
);
if (res.data['code'] == 0) {
return LoadingState.success(LiveFollowData.fromJson(res.data['data']));
} else {
return LoadingState.error(res.data['message']);
}
}
}