From 1f77ee178e65d616613f3508178e713494f9310f Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Thu, 29 May 2025 10:19:37 +0800 Subject: [PATCH] opt live Signed-off-by: bggRGjQaUbCoE --- lib/http/live.dart | 9 ++-- lib/pages/live_room/controller.dart | 68 +++++++++++++---------------- lib/tcp/live.dart | 11 ++--- 3 files changed, 40 insertions(+), 48 deletions(-) diff --git a/lib/http/live.dart b/lib/http/live.dart index 130ac534a..503a95a1f 100644 --- a/lib/http/live.dart +++ b/lib/http/live.dart @@ -136,11 +136,12 @@ class LiveHttp { } static Future liveRoomDanmaPrefetch({roomId}) async { - var res = await Request().get(Api.liveRoomDmPrefetch, queryParameters: { - 'roomid': roomId, - }); + var res = await Request().get( + Api.liveRoomDmPrefetch, + queryParameters: {'roomid': roomId}, + ); if (res.data['code'] == 0) { - return {'status': true, 'data': res.data['data']['room']}; + return {'status': true, 'data': res.data['data']?['room']}; } else { return {'status': false, 'msg': res.data['message']}; } diff --git a/lib/pages/live_room/controller.dart b/lib/pages/live_room/controller.dart index 158fd1cd1..3458413e2 100644 --- a/lib/pages/live_room/controller.dart +++ b/lib/pages/live_room/controller.dart @@ -111,17 +111,6 @@ class LiveRoomController extends GetxController { } } - void setVolume(value) { - if (value == 0) { - // 设置音量 - volumeOff.value = false; - } else { - // 取消音量 - volume = value; - volumeOff.value = true; - } - } - Future queryLiveInfoH5() async { var res = await LiveHttp.liveRoomInfoH5(roomId: roomId); if (res['status']) { @@ -152,20 +141,22 @@ class LiveRoomController extends GetxController { if (messages.isEmpty) { LiveHttp.liveRoomDanmaPrefetch(roomId: roomId).then((v) { if (v['status']) { - messages.addAll((v['data'] as List) - .map((obj) => { - 'name': obj['user']['base']['name'], - 'uid': obj['user']['uid'], - 'text': obj['text'], - 'emots': obj['emots'], - 'uemote': obj['emoticon']['emoticon_unique'] != "" - ? obj['emoticon'] - : null, - }) - .toList()); - WidgetsBinding.instance.addPostFrameCallback( - (_) => scrollToBottom(), - ); + if ((v['data'] as List?)?.isNotEmpty == true) { + messages.addAll((v['data'] as List) + .map((obj) => { + 'name': obj['user']['base']['name'], + 'uid': obj['user']['uid'], + 'text': obj['text'], + 'emots': obj['emots'], + 'uemote': obj['emoticon']['emoticon_unique'] != "" + ? obj['emoticon'] + : null, + }) + .toList()); + WidgetsBinding.instance.addPostFrameCallback( + (_) => scrollToBottom(), + ); + } } }); } @@ -186,25 +177,28 @@ class LiveRoomController extends GetxController { msgStream?.addEventListener((obj) { if (obj['cmd'] == 'DANMU_MSG') { // 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({ - 'name': obj['info'][0][15]['user']['base']['name'], - 'uid': obj['info'][0][15]['user']['uid'], - 'text': obj['info'][1], - 'emots': jsonDecode(obj['info'][0][15]['extra'])['emots'], - 'uemote': obj['info'][0][13], + 'name': user['base']['name'], + 'uid': user['uid'], + 'text': info[1], + 'emots': extra['emots'], + 'uemote': first[13], }); - Map json = jsonDecode(obj['info'][0][15]['extra']); if (showDanmaku) { controller?.addDanmaku( DanmakuContentItem( - json['content'], - color: DmUtils.decimalToColor(json['color']), - type: DmUtils.getPosition(json['mode']), + extra['content'], + color: DmUtils.decimalToColor(extra['color']), + type: DmUtils.getPosition(extra['mode']), ), ); - WidgetsBinding.instance.addPostFrameCallback( - (_) => scrollToBottom(), - ); + WidgetsBinding.instance + .addPostFrameCallback((_) => scrollToBottom()); } } }); diff --git a/lib/tcp/live.dart b/lib/tcp/live.dart index 9f50be1eb..ebf476c86 100644 --- a/lib/tcp/live.dart +++ b/lib/tcp/live.dart @@ -3,7 +3,6 @@ import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; -import 'package:PiliPlus/pages/mine/controller.dart'; import 'package:PiliPlus/services/loggeer.dart'; import 'package:brotli/brotli.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -194,18 +193,16 @@ class LiveMessageStream { Future getSocket() async { for (final server in servers) { try { - return WebSocket.connect( - server, - headers: MineController.anonymity.value ? {'cookie': ''} : null, - ); + return WebSocket.connect(server); } catch (_) {} } throw Exception("all servers connect failed"); } socket = await getSocket(); - // logger.d('$logTag ===> TCP连接建立'); - // logger.d('$logTag ===> 发送认证包'); + // logger + // ..d('$logTag ===> TCP连接建立') + // ..d('$logTag ===> 发送认证包'); _socketSubscription = socket?.listen( (data) { PackageHeader? header = PackageHeader.fromBytesData(data);