Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-05-29 10:19:37 +08:00
parent 6d599891dc
commit 1f77ee178e
3 changed files with 40 additions and 48 deletions

View File

@@ -136,11 +136,12 @@ class LiveHttp {
} }
static Future liveRoomDanmaPrefetch({roomId}) async { static Future liveRoomDanmaPrefetch({roomId}) async {
var res = await Request().get(Api.liveRoomDmPrefetch, queryParameters: { var res = await Request().get(
'roomid': roomId, Api.liveRoomDmPrefetch,
}); queryParameters: {'roomid': roomId},
);
if (res.data['code'] == 0) { if (res.data['code'] == 0) {
return {'status': true, 'data': res.data['data']['room']}; return {'status': true, 'data': res.data['data']?['room']};
} else { } else {
return {'status': false, 'msg': res.data['message']}; return {'status': false, 'msg': res.data['message']};
} }

View File

@@ -111,17 +111,6 @@ class LiveRoomController extends GetxController {
} }
} }
void setVolume(value) {
if (value == 0) {
// 设置音量
volumeOff.value = false;
} else {
// 取消音量
volume = value;
volumeOff.value = true;
}
}
Future<void> queryLiveInfoH5() async { Future<void> queryLiveInfoH5() async {
var res = await LiveHttp.liveRoomInfoH5(roomId: roomId); var res = await LiveHttp.liveRoomInfoH5(roomId: roomId);
if (res['status']) { if (res['status']) {
@@ -152,20 +141,22 @@ class LiveRoomController extends GetxController {
if (messages.isEmpty) { if (messages.isEmpty) {
LiveHttp.liveRoomDanmaPrefetch(roomId: roomId).then((v) { LiveHttp.liveRoomDanmaPrefetch(roomId: roomId).then((v) {
if (v['status']) { if (v['status']) {
messages.addAll((v['data'] as List) if ((v['data'] as List?)?.isNotEmpty == true) {
.map((obj) => { messages.addAll((v['data'] as List)
'name': obj['user']['base']['name'], .map((obj) => {
'uid': obj['user']['uid'], 'name': obj['user']['base']['name'],
'text': obj['text'], 'uid': obj['user']['uid'],
'emots': obj['emots'], 'text': obj['text'],
'uemote': obj['emoticon']['emoticon_unique'] != "" 'emots': obj['emots'],
? obj['emoticon'] 'uemote': obj['emoticon']['emoticon_unique'] != ""
: null, ? obj['emoticon']
}) : null,
.toList()); })
WidgetsBinding.instance.addPostFrameCallback( .toList());
(_) => scrollToBottom(), WidgetsBinding.instance.addPostFrameCallback(
); (_) => scrollToBottom(),
);
}
} }
}); });
} }
@@ -186,25 +177,28 @@ class LiveRoomController extends GetxController {
msgStream?.addEventListener((obj) { msgStream?.addEventListener((obj) {
if (obj['cmd'] == 'DANMU_MSG') { if (obj['cmd'] == 'DANMU_MSG') {
// logger.i(' 原始弹幕消息 ======> ${jsonEncode(obj)}'); // logger.i(' 原始弹幕消息 ======> ${jsonEncode(obj)}');
final info = obj['info'];
final first = info[0];
final content = first[15];
final extra = jsonDecode(content['extra']);
final user = content['user'];
messages.add({ messages.add({
'name': obj['info'][0][15]['user']['base']['name'], 'name': user['base']['name'],
'uid': obj['info'][0][15]['user']['uid'], 'uid': user['uid'],
'text': obj['info'][1], 'text': info[1],
'emots': jsonDecode(obj['info'][0][15]['extra'])['emots'], 'emots': extra['emots'],
'uemote': obj['info'][0][13], 'uemote': first[13],
}); });
Map json = jsonDecode(obj['info'][0][15]['extra']);
if (showDanmaku) { if (showDanmaku) {
controller?.addDanmaku( controller?.addDanmaku(
DanmakuContentItem( DanmakuContentItem(
json['content'], extra['content'],
color: DmUtils.decimalToColor(json['color']), color: DmUtils.decimalToColor(extra['color']),
type: DmUtils.getPosition(json['mode']), type: DmUtils.getPosition(extra['mode']),
), ),
); );
WidgetsBinding.instance.addPostFrameCallback( WidgetsBinding.instance
(_) => scrollToBottom(), .addPostFrameCallback((_) => scrollToBottom());
);
} }
} }
}); });

View File

@@ -3,7 +3,6 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:PiliPlus/pages/mine/controller.dart';
import 'package:PiliPlus/services/loggeer.dart'; import 'package:PiliPlus/services/loggeer.dart';
import 'package:brotli/brotli.dart'; import 'package:brotli/brotli.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
@@ -194,18 +193,16 @@ class LiveMessageStream {
Future<WebSocket> getSocket() async { Future<WebSocket> getSocket() async {
for (final server in servers) { for (final server in servers) {
try { try {
return WebSocket.connect( return WebSocket.connect(server);
server,
headers: MineController.anonymity.value ? {'cookie': ''} : null,
);
} catch (_) {} } catch (_) {}
} }
throw Exception("all servers connect failed"); throw Exception("all servers connect failed");
} }
socket = await getSocket(); socket = await getSocket();
// logger.d('$logTag ===> TCP连接建立'); // logger
// logger.d('$logTag ===> 发送认证包'); // ..d('$logTag ===> TCP连接建立')
// ..d('$logTag ===> 发送认证包');
_socketSubscription = socket?.listen( _socketSubscription = socket?.listen(
(data) { (data) {
PackageHeader? header = PackageHeader.fromBytesData(data); PackageHeader? header = PackageHeader.fromBytesData(data);