lib/search/filter_kanji: init

This commit is contained in:
2025-05-22 19:45:10 +02:00
parent 0ea8331298
commit fdd15df344
2 changed files with 31 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
import 'package:jadb/models/word_search/word_search_result.dart';
import 'package:jadb/models/kanji_search/kanji_search_result.dart';
import 'package:jadb/search/filter_kanji.dart';
import 'package:jadb/search/radical_search.dart';
import 'package:jadb/search/word_search/word_search.dart';
@@ -16,6 +17,13 @@ class JaDBConnection {
Future<KanjiSearchResult?> searchKanji(String kanji) =>
searchKanjiWithDbConnection(this._connection, kanji);
/// Filter a list of characters, and return the ones that are listed in the kanji dictionary.
Future<List<String>> filterKanji(
List<String> kanji, {
bool deduplicate = false,
}) =>
filterKanjiWithDbConnection(this._connection, kanji, deduplicate);
/// Search for a word in the database.
Future<List<WordSearchResult>?> searchWord(
String word, {

View File

@@ -0,0 +1,23 @@
import 'package:jadb/_data_ingestion/kanjidic/table_names.dart';
import 'package:sqflite_common/sqflite.dart';
Future<List<String>> filterKanjiWithDbConnection(
DatabaseExecutor connection,
List<String> kanji,
bool deduplicate,
) async {
final Set<String> filteredKanji = await connection.rawQuery(
'''
SELECT "literal"
FROM "${KANJIDICTableNames.character}"
WHERE "literal" IN (${kanji.map((_) => '?').join(',')})
''',
kanji,
).then((value) => value.map((e) => e['literal'] as String).toSet());
if (deduplicate) {
return filteredKanji.toList();
} else {
return kanji.where((k) => !filteredKanji.contains(k)).toList();
}
}