@@ -6,6 +6,7 @@ import 'package:friend_private/backend/http/shared.dart';
6
6
import 'package:friend_private/backend/schema/message.dart' ;
7
7
import 'package:friend_private/env/env.dart' ;
8
8
import 'package:friend_private/utils/logger.dart' ;
9
+ import 'package:friend_private/utils/other/string_utils.dart' ;
9
10
import 'package:http/http.dart' as http;
10
11
import 'package:instabug_flutter/instabug_flutter.dart' ;
11
12
import 'package:path/path.dart' ;
@@ -99,10 +100,25 @@ Stream<ServerMessageChunk> sendMessageStreamServer(String text, {String? appId})
99
100
return ;
100
101
}
101
102
102
- var messageId = "1000" ; // default new message
103
+ var buffers = < String > [];
104
+ var messageId = "1000" ; // Default new message
103
105
await for (var data in response.transform (utf8.decoder)) {
104
106
var lines = data.split ('\n\n ' );
105
107
for (var line in lines.where ((line) => line.isNotEmpty)) {
108
+ // Dealing w/ the package spliting by 1024 bytes in dart
109
+ // Waiting for the next package
110
+ if (line.length >= 1024 ) {
111
+ buffers.add (line);
112
+ continue ;
113
+ }
114
+
115
+ // Merge package if needed
116
+ if (buffers.isNotEmpty) {
117
+ buffers.add (line);
118
+ line = buffers.join ();
119
+ buffers.clear ();
120
+ }
121
+
106
122
if (line.startsWith ('think: ' )) {
107
123
yield ServerMessageChunk (messageId, line.substring (7 ).replaceAll ("__CRLF__" , "\n " ), MessageChunkType .think);
108
124
continue ;
@@ -114,8 +130,7 @@ Stream<ServerMessageChunk> sendMessageStreamServer(String text, {String? appId})
114
130
}
115
131
116
132
if (line.startsWith ('done: ' )) {
117
- var text = utf8.decode (base64.decode (line.substring (6 )));
118
- debugPrint (text);
133
+ var text = decodeBase64 (line.substring (6 ));
119
134
yield ServerMessageChunk (messageId, text, MessageChunkType .done,
120
135
message: ServerMessage .fromJson (json.decode (text)));
121
136
continue ;
@@ -162,10 +177,25 @@ Stream<ServerMessageChunk> sendVoiceMessageStreamServer(List<File> files) async*
162
177
return ;
163
178
}
164
179
165
- var messageId = "1000" ; // default new message
180
+ var buffers = < String > [];
181
+ var messageId = "1000" ; // Default new message
166
182
await for (var data in response.stream.transform (utf8.decoder)) {
167
183
var lines = data.split ('\n\n ' );
168
184
for (var line in lines.where ((line) => line.isNotEmpty)) {
185
+ // Dealing w/ the package spliting by 1024 bytes in dart
186
+ // Waiting for the next package
187
+ if (line.length >= 1024 ) {
188
+ buffers.add (line);
189
+ continue ;
190
+ }
191
+
192
+ // Merge package if needed
193
+ if (buffers.isNotEmpty) {
194
+ buffers.add (line);
195
+ line = buffers.join ();
196
+ buffers.clear ();
197
+ }
198
+
169
199
if (line.startsWith ('think: ' )) {
170
200
yield ServerMessageChunk (messageId, line.substring (7 ).replaceAll ("__CRLF__" , "\n " ), MessageChunkType .think);
171
201
continue ;
@@ -177,14 +207,14 @@ Stream<ServerMessageChunk> sendVoiceMessageStreamServer(List<File> files) async*
177
207
}
178
208
179
209
if (line.startsWith ('done: ' )) {
180
- var text = utf8. decode (base64. decode ( line.substring (6 ) ));
210
+ var text = decodeBase64 ( line.substring (6 ));
181
211
yield ServerMessageChunk (messageId, text, MessageChunkType .done,
182
212
message: ServerMessage .fromJson (json.decode (text)));
183
213
continue ;
184
214
}
185
215
186
216
if (line.startsWith ('message: ' )) {
187
- var text = utf8. decode (base64. decode ( line.substring (9 ) ));
217
+ var text = decodeBase64 ( line.substring (9 ));
188
218
yield ServerMessageChunk (messageId, text, MessageChunkType .message,
189
219
message: ServerMessage .fromJson (json.decode (text)));
190
220
continue ;
0 commit comments