main
dart 84 lines 2.25 KB
Raw
1 import 'dart:io';
2 import 'package:path_provider/path_provider.dart';
3 import 'models/message.dart';
4 import '../../../core/models/enums.dart';
5
6 class ExportService {
7 static Future<String> exportAsMarkdown(
8 List<Message> messages, {
9 String? title,
10 }) async {
11 final buffer = StringBuffer();
12
13 if (title != null) {
14 buffer.writeln('# $title');
15 buffer.writeln();
16 }
17
18 buffer.writeln(
19 '*Exported from LocalMind — ${DateTime.now().toIso8601String()}*',
20 );
21 buffer.writeln();
22 buffer.writeln('---');
23 buffer.writeln();
24
25 for (final message in messages) {
26 switch (message.role) {
27 case MessageRole.user:
28 buffer.writeln('## 👤 User');
29 case MessageRole.assistant:
30 buffer.writeln('## 🤖 Assistant');
31 case MessageRole.system:
32 buffer.writeln('## ⚙️ System');
33 case MessageRole.tool:
34 buffer.writeln('## 🔧 Tool');
35 }
36 buffer.writeln();
37 buffer.writeln(message.content);
38 buffer.writeln();
39 buffer.writeln('*${message.createdAt.toIso8601String()}*');
40 buffer.writeln();
41 buffer.writeln('---');
42 buffer.writeln();
43 }
44
45 return buffer.toString();
46 }
47
48 static Future<File> exportAndSaveMarkdown(
49 List<Message> messages, {
50 String? title,
51 String? filename,
52 }) async {
53 final content = await exportAsMarkdown(messages, title: title);
54 final dir = await getApplicationDocumentsDirectory();
55 final name =
56 filename ?? 'localmind_export_${DateTime.now().millisecondsSinceEpoch}';
57 final file = File('${dir.path}/$name.md');
58 return file.writeAsString(content);
59 }
60
61 static String exportAsText(List<Message> messages, {String? title}) {
62 final buffer = StringBuffer();
63
64 if (title != null) {
65 buffer.writeln(title);
66 buffer.writeln('=' * title.length);
67 buffer.writeln();
68 }
69
70 for (final message in messages) {
71 final roleLabel = switch (message.role) {
72 MessageRole.user => 'USER',
73 MessageRole.assistant => 'ASSISTANT',
74 MessageRole.system => 'SYSTEM',
75 MessageRole.tool => 'TOOL',
76 };
77 buffer.writeln('[$roleLabel]');
78 buffer.writeln(message.content);
79 buffer.writeln();
80 }
81
82 return buffer.toString();
83 }
84 }