Fix search highlighting

This commit is contained in:
2025-05-24 01:16:01 +02:00
parent 6eb55c5d50
commit 716a02a1dc
2 changed files with 16 additions and 26 deletions

View File

@@ -644,8 +644,8 @@ class MainPageState extends State<MainPage> with WindowListener {
// Build rich text with highlights for search results
List<InlineSpan> _buildHighlightedText(String highlightedText) {
List<InlineSpan> spans = [];
// The text comes with <b>highlighted parts</b>
RegExp exp = RegExp(r'<b>(.*?)</b>');
// The text comes with <highlight>highlighted parts</highlight>
RegExp exp = RegExp(r'<highlight>(.*?)</highlight>');
int lastIndex = 0;
for (final match in exp.allMatches(highlightedText)) {
@@ -656,7 +656,7 @@ class MainPageState extends State<MainPage> with WindowListener {
text: highlightedText.substring(lastIndex, match.start),
style: const TextStyle(
fontSize: 13,
), // Smaller font for regular text
),
),
);
}
@@ -669,7 +669,7 @@ class MainPageState extends State<MainPage> with WindowListener {
fontWeight: FontWeight.bold,
backgroundColor: Colors.yellow,
color: Colors.black,
fontSize: 13, // Smaller font for highlighted text
fontSize: 13,
),
),
);
@@ -682,7 +682,7 @@ class MainPageState extends State<MainPage> with WindowListener {
spans.add(
TextSpan(
text: highlightedText.substring(lastIndex),
style: const TextStyle(fontSize: 13), // Smaller font for regular text
style: const TextStyle(fontSize: 13),
),
);
}
@@ -805,23 +805,12 @@ class MainPageState extends State<MainPage> with WindowListener {
12, // Smaller font for date
),
),
subtitle:
note.snippet != null
? Text.rich(
subtitle: Text.rich(
TextSpan(
children:
_buildHighlightedText(
note.snippet!,
children: _buildHighlightedText(
note.snippet ?? note.content,
),
),
)
: Text(
note.content.length > 200
? '${note.content.substring(0, 200)}...'
: note.content,
style: const TextStyle(
fontSize: 13,
), // Smaller font for content
),
isThreeLine: true,
onTap: () async {

View File

@@ -184,8 +184,8 @@ Future<List<Note>> searchNotes(String query) async {
limit: 10,
attributesToHighlight: ['content'],
showRankingScore: true,
highlightPreTag: '<b>',
highlightPostTag: '</b>',
highlightPreTag: '<highlight>',
highlightPostTag: '</highlight>',
);
final response = await http.post(
Uri.parse('$endpoint/indexes/$noteIndex/search'),
@@ -201,7 +201,8 @@ Future<List<Note>> searchNotes(String query) async {
(hit) => Note(
id: hit['id'] as String,
epochTime: hit['date'] as int,
content: hit['_formatted']['content'] as String,
content: hit['content'] as String,
snippet: hit['_formatted']['content'] as String,
),
)
.toList();