Skip to content

Commit ae5a860

Browse files
committed
fix: remove attach log from cubit and use usecase
1 parent e0e52e7 commit ae5a860

4 files changed

Lines changed: 76 additions & 54 deletions

File tree

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import 'dart:convert';
2+
import 'dart:math';
3+
import 'dart:typed_data';
4+
5+
import 'package:bb_mobile/core/errors/bull_exception.dart';
6+
import 'package:bb_mobile/core/exchange/domain/entity/support_chat_message_attachment.dart';
7+
import 'package:bb_mobile/core/utils/logger.dart';
8+
import 'package:intl/intl.dart';
9+
10+
class CreateLogAttachmentUsecase {
11+
Future<SupportChatMessageAttachment> execute() async {
12+
try {
13+
List<String> logs;
14+
try {
15+
logs = await log.readLogs();
16+
} catch (e) {
17+
logs = [
18+
'timestamp\tlevel\tmessage\terror\ttrace',
19+
'${DateTime.now().toIso8601String()}\tINFO\tNo logs file found or logs could not be read: $e\t\t',
20+
];
21+
}
22+
23+
if (logs.isEmpty) {
24+
logs = [
25+
'timestamp\tlevel\tmessage\terror\ttrace',
26+
'${DateTime.now().toIso8601String()}\tINFO\tNo logs have been recorded yet\t\t',
27+
];
28+
}
29+
30+
final logContent = logs.join('\n');
31+
final bytes = Uint8List.fromList(utf8.encode(logContent));
32+
33+
final random = Random();
34+
final timestamp = DateFormat('yyyyMMdd_HHmmss').format(DateTime.now());
35+
36+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
37+
final randomAlphanumeric = String.fromCharCodes(
38+
Iterable.generate(
39+
8,
40+
(_) => chars.codeUnitAt(random.nextInt(chars.length)),
41+
),
42+
);
43+
44+
final fileName = '$timestamp.BullLog.$randomAlphanumeric.txt';
45+
46+
return SupportChatMessageAttachment(
47+
attachmentId: 'temp_logs_${DateTime.now().millisecondsSinceEpoch}',
48+
fileName: fileName,
49+
fileType: 'text/plain',
50+
fileSize: bytes.length,
51+
fileData: bytes,
52+
createdAt: DateTime.now(),
53+
);
54+
} catch (e) {
55+
throw CreateLogAttachmentException('$e');
56+
}
57+
}
58+
}
59+
60+
class CreateLogAttachmentException extends BullException {
61+
CreateLogAttachmentException(super.message);
62+
}

lib/core/exchange/exchange_locator.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import 'package:bb_mobile/core/exchange/domain/repositories/exchange_user_reposi
1919
import 'package:bb_mobile/core/exchange/domain/repositories/price_repository.dart';
2020
import 'package:bb_mobile/core/exchange/domain/usecases/convert_currency_to_sats_amount_usecase.dart';
2121
import 'package:bb_mobile/core/exchange/domain/usecases/convert_sats_to_currency_amount_usecase.dart';
22+
import 'package:bb_mobile/core/exchange/domain/usecases/create_log_attachment_usecase.dart';
2223
import 'package:bb_mobile/core/exchange/domain/usecases/delete_exchange_api_key_usecase.dart';
2324
import 'package:bb_mobile/core/exchange/domain/usecases/get_available_currencies_usecase.dart';
2425
import 'package:bb_mobile/core/exchange/domain/usecases/get_exchange_funding_details_usecase.dart';
@@ -462,6 +463,10 @@ class ExchangeLocator {
462463
),
463464
);
464465

466+
locator.registerFactory<CreateLogAttachmentUsecase>(
467+
() => CreateLogAttachmentUsecase(),
468+
);
469+
465470
locator.registerFactory<LabelExchangeOrdersUsecase>(
466471
() => LabelExchangeOrdersUsecase(
467472
labelDatasource: locator<LabelDatasource>(),

lib/features/exchange_support_chat/presentation/exchange_support_chat_cubit.dart

Lines changed: 7 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
1-
import 'dart:convert';
21
import 'dart:io';
3-
import 'dart:math';
4-
import 'dart:typed_data';
2+
53
import 'package:bb_mobile/core/exchange/domain/entity/support_chat_message.dart';
64
import 'package:bb_mobile/core/exchange/domain/entity/support_chat_message_attachment.dart';
5+
import 'package:bb_mobile/core/exchange/domain/usecases/create_log_attachment_usecase.dart';
76
import 'package:bb_mobile/core/exchange/domain/usecases/get_exchange_user_summary_usecase.dart';
8-
import 'package:bb_mobile/core/exchange/domain/usecases/get_support_chat_messages_usecase.dart';
97
import 'package:bb_mobile/core/exchange/domain/usecases/get_support_chat_message_attachment_usecase.dart';
8+
import 'package:bb_mobile/core/exchange/domain/usecases/get_support_chat_messages_usecase.dart';
109
import 'package:bb_mobile/core/exchange/domain/usecases/send_support_chat_message_usecase.dart';
11-
import 'package:bb_mobile/core/utils/logger.dart';
1210
import 'package:bb_mobile/features/exchange_support_chat/presentation/exchange_support_chat_state.dart';
1311
import 'package:flutter_bloc/flutter_bloc.dart';
1412
import 'package:image_picker/image_picker.dart';
15-
import 'package:intl/intl.dart';
1613
import 'package:path_provider/path_provider.dart';
1714
import 'package:permission_handler/permission_handler.dart';
1815
import 'package:share_plus/share_plus.dart';
@@ -23,16 +20,19 @@ class ExchangeSupportChatCubit extends Cubit<ExchangeSupportChatState> {
2320
required SendSupportChatMessageUsecase sendMessageUsecase,
2421
required GetSupportChatMessageAttachmentUsecase getAttachmentUsecase,
2522
required GetExchangeUserSummaryUsecase getUserSummaryUsecase,
23+
required CreateLogAttachmentUsecase createLogAttachmentUsecase,
2624
}) : _getMessagesUsecase = getMessagesUsecase,
2725
_sendMessageUsecase = sendMessageUsecase,
2826
_getAttachmentUsecase = getAttachmentUsecase,
2927
_getUserSummaryUsecase = getUserSummaryUsecase,
28+
_createLogAttachmentUsecase = createLogAttachmentUsecase,
3029
super(const ExchangeSupportChatState());
3130

3231
final GetSupportChatMessagesUsecase _getMessagesUsecase;
3332
final SendSupportChatMessageUsecase _sendMessageUsecase;
3433
final GetSupportChatMessageAttachmentUsecase _getAttachmentUsecase;
3534
final GetExchangeUserSummaryUsecase _getUserSummaryUsecase;
35+
final CreateLogAttachmentUsecase _createLogAttachmentUsecase;
3636

3737
bool _limitFetchingOlderMessages = false;
3838

@@ -285,54 +285,7 @@ class ExchangeSupportChatCubit extends Cubit<ExchangeSupportChatState> {
285285
try {
286286
emit(state.copyWith(errorPermissionDenied: ''));
287287

288-
// Read all available logs
289-
List<String> logs;
290-
try {
291-
logs = await log.readLogs();
292-
} catch (e) {
293-
// If logs file doesn't exist or can't be read, create a message explaining this
294-
logs = [
295-
'timestamp\tlevel\tmessage\terror\ttrace',
296-
'${DateTime.now().toIso8601String()}\tINFO\tNo logs file found or logs could not be read: $e\t\t',
297-
];
298-
}
299-
300-
if (logs.isEmpty) {
301-
// Create a minimal log entry if no logs exist
302-
logs = [
303-
'timestamp\tlevel\tmessage\terror\ttrace',
304-
'${DateTime.now().toIso8601String()}\tINFO\tNo logs have been recorded yet\t\t',
305-
];
306-
}
307-
308-
// Create log file content and encode as UTF-8
309-
final logContent = logs.join('\n');
310-
final bytes = Uint8List.fromList(utf8.encode(logContent));
311-
312-
// Generate filename: timestamp.BullLog.random8alphanumeric
313-
final random = Random();
314-
final timestamp = DateFormat('yyyyMMdd_HHmmss').format(DateTime.now());
315-
316-
// Generate random 8-character alphanumeric string
317-
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
318-
final randomAlphanumeric = String.fromCharCodes(
319-
Iterable.generate(
320-
8,
321-
(_) => chars.codeUnitAt(random.nextInt(chars.length)),
322-
),
323-
);
324-
325-
final fileName = '$timestamp.BullLog.$randomAlphanumeric.txt';
326-
327-
// Create attachment with text/plain MIME type (more likely to be accepted by server)
328-
final attachment = SupportChatMessageAttachment(
329-
attachmentId: 'temp_logs_${DateTime.now().millisecondsSinceEpoch}',
330-
fileName: fileName,
331-
fileType: 'text/plain',
332-
fileSize: bytes.length,
333-
fileData: bytes,
334-
createdAt: DateTime.now(),
335-
);
288+
final attachment = await _createLogAttachmentUsecase.execute();
336289

337290
emit(
338291
state.copyWith(

lib/features/exchange_support_chat/ui/screens/exchange_support_chat_screen.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:bb_mobile/core/exchange/domain/entity/support_chat_message.dart';
22
import 'package:bb_mobile/core/exchange/domain/entity/support_chat_message_attachment.dart';
3+
import 'package:bb_mobile/core/exchange/domain/usecases/create_log_attachment_usecase.dart';
34
import 'package:bb_mobile/core/exchange/domain/usecases/get_exchange_user_summary_usecase.dart';
45
import 'package:bb_mobile/core/exchange/domain/usecases/get_support_chat_message_attachment_usecase.dart';
56
import 'package:bb_mobile/core/exchange/domain/usecases/get_support_chat_messages_usecase.dart';
@@ -29,6 +30,7 @@ class ExchangeSupportChatScreen extends StatelessWidget {
2930
sendMessageUsecase: locator<SendSupportChatMessageUsecase>(),
3031
getAttachmentUsecase: locator<GetSupportChatMessageAttachmentUsecase>(),
3132
getUserSummaryUsecase: locator<GetExchangeUserSummaryUsecase>(),
33+
createLogAttachmentUsecase: locator<CreateLogAttachmentUsecase>(),
3234
)..loadMessages(),
3335
child: Scaffold(
3436
appBar: AppBar(

0 commit comments

Comments
 (0)