fix: parse whisper data

mod: load more pm

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-23 10:42:47 +08:00
parent 2f5a3d66fc
commit e212144250
5 changed files with 36 additions and 9 deletions

View File

@@ -372,8 +372,7 @@ class MemberHttp {
queryParameters: params, queryParameters: params,
options: Options(headers: { options: Options(headers: {
HttpHeaders.userAgentHeader: Request.headerUa(type: 'pc'), HttpHeaders.userAgentHeader: Request.headerUa(type: 'pc'),
HttpHeaders.refererHeader: HttpHeaders.refererHeader: '${HttpString.spaceBaseUrl}/$mid',
'${HttpString.spaceBaseUrl}/$mid/search?keyword=$keyword',
'origin': HttpString.spaceBaseUrl, 'origin': HttpString.spaceBaseUrl,
}), }),
); );

View File

@@ -455,8 +455,11 @@ class MsgHttp {
} }
} }
static Future<LoadingState<SessionMsgDataModel>> sessionMsg( static Future<LoadingState<SessionMsgDataModel>> sessionMsg({
{int? talkerId}) async { int? talkerId,
beginSeqno,
endSeqno,
}) async {
Map params = await WbiSign.makSign({ Map params = await WbiSign.makSign({
'talker_id': talkerId, 'talker_id': talkerId,
'session_type': 1, 'session_type': 1,
@@ -464,6 +467,8 @@ class MsgHttp {
'sender_device_id': 1, 'sender_device_id': 1,
'build': 0, 'build': 0,
'mobi_app': 'web', 'mobi_app': 'web',
if (beginSeqno != null) 'begin_seqno': beginSeqno,
if (endSeqno != null) 'end_seqno': endSeqno,
}); });
var res = await Request().get(Api.sessionMsg, queryParameters: params); var res = await Request().get(Api.sessionMsg, queryParameters: params);
if (res.data['code'] == 0) { if (res.data['code'] == 0) {

View File

@@ -170,8 +170,8 @@ class SessionMsgDataModel {
List<MessageItem>? messages; List<MessageItem>? messages;
int? hasMore; int? hasMore;
int? minSeqno; num? minSeqno;
int? maxSeqno; num? maxSeqno;
List<dynamic>? eInfos; List<dynamic>? eInfos;
SessionMsgDataModel.fromJson(Map<String, dynamic> json) { SessionMsgDataModel.fromJson(Map<String, dynamic> json) {

View File

@@ -2,6 +2,7 @@ import 'dart:convert';
import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/pages/common/common_list_controller.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -19,6 +20,8 @@ class WhisperDetailController
late String face; late String face;
String? mid; String? mid;
int? msgSeqno;
//表情转换图片规则 //表情转换图片规则
List<dynamic>? eInfos; List<dynamic>? eInfos;
@@ -38,7 +41,8 @@ class WhisperDetailController
bool isRefresh, Success<SessionMsgDataModel> response) { bool isRefresh, Success<SessionMsgDataModel> response) {
List<MessageItem>? messageList = response.response.messages; List<MessageItem>? messageList = response.response.messages;
if (messageList?.isNotEmpty == true) { if (messageList?.isNotEmpty == true) {
if (messageList!.length == 1 && msgSeqno = messageList!.last.msgSeqno;
if (messageList.length == 1 &&
messageList.last.msgType == 18 && messageList.last.msgType == 18 &&
messageList.last.msgSource == 18) { messageList.last.msgSource == 18) {
// debugPrint(messageList.last); // debugPrint(messageList.last);
@@ -103,7 +107,7 @@ class WhisperDetailController
loadingState.refresh(); loadingState.refresh();
SmartDialog.showToast('撤回成功'); SmartDialog.showToast('撤回成功');
} else { } else {
queryData(); onRefresh();
onClearText(); onClearText();
SmartDialog.showToast('发送成功'); SmartDialog.showToast('发送成功');
} }
@@ -114,10 +118,24 @@ class WhisperDetailController
@override @override
List<MessageItem>? getDataList(SessionMsgDataModel response) { List<MessageItem>? getDataList(SessionMsgDataModel response) {
if (response.hasMore == 0) {
isEnd = true;
}
return response.messages; return response.messages;
} }
@override @override
Future<LoadingState<SessionMsgDataModel>> customGetData() => Future<void> onRefresh() {
MsgHttp.sessionMsg(talkerId: talkerId); msgSeqno = null;
scrollController.jumpToTop();
return super.onRefresh();
}
@override
Future<LoadingState<SessionMsgDataModel>> customGetData() =>
MsgHttp.sessionMsg(
talkerId: talkerId,
beginSeqno: msgSeqno != null ? 0 : null,
endSeqno: msgSeqno,
);
} }

View File

@@ -130,7 +130,12 @@ class _WhisperDetailPageState
reverse: true, reverse: true,
itemCount: loadingState.response!.length, itemCount: loadingState.response!.length,
padding: const EdgeInsets.only(bottom: 12), padding: const EdgeInsets.only(bottom: 12),
physics: const AlwaysScrollableScrollPhysics(),
controller: _whisperDetailController.scrollController,
itemBuilder: (context, int index) { itemBuilder: (context, int index) {
if (index == loadingState.response!.length - 1) {
_whisperDetailController.onLoadMore();
}
final item = loadingState.response![index]; final item = loadingState.response![index];
return ChatItem( return ChatItem(
item: item, item: item,