This commit is contained in:
+8
-2
@@ -4,6 +4,7 @@ import 'package:jadb/models/word_search/word_search_result.dart';
|
||||
import 'package:jadb/search/filter_kanji.dart';
|
||||
import 'package:jadb/search/kanji_search.dart';
|
||||
import 'package:jadb/search/radical_search.dart';
|
||||
import 'package:jadb/search/versions.dart';
|
||||
import 'package:jadb/search/word_search/word_search.dart';
|
||||
import 'package:sqflite_common/sqlite_api.dart';
|
||||
|
||||
@@ -18,8 +19,9 @@ extension JaDBConnection on DatabaseExecutor {
|
||||
searchKanjiWithDbConnection(this, kanji);
|
||||
|
||||
/// Search for a kanji in the database.
|
||||
Future<Map<String, KanjiSearchResult>> jadbGetManyKanji(Iterable<String> kanji) =>
|
||||
searchManyKanjiWithDbConnection(this, kanji);
|
||||
Future<Map<String, KanjiSearchResult>> jadbGetManyKanji(
|
||||
Iterable<String> kanji,
|
||||
) => searchManyKanjiWithDbConnection(this, kanji);
|
||||
|
||||
/// Filter a list of characters, and return the ones that are listed in the kanji dictionary.
|
||||
Future<List<String>> filterKanji(
|
||||
@@ -68,4 +70,8 @@ extension JaDBConnection on DatabaseExecutor {
|
||||
/// of the radicals, and return those.
|
||||
Future<List<String>> jadbSearchKanjiByRadicals(List<String> radicals) =>
|
||||
searchKanjiByRadicalsWithDbConnection(this, radicals);
|
||||
|
||||
/// Retrieve the version information for all datasources in the database.
|
||||
Future<DatasourceVersions> jadbGetDatasourceVersions() =>
|
||||
getDatasourceVersions(this);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
import 'package:jadb/table_names/jmdict.dart';
|
||||
import 'package:jadb/table_names/kanjidic.dart';
|
||||
import 'package:jadb/table_names/radkfile.dart';
|
||||
import 'package:jadb/table_names/tanos_jlpt.dart';
|
||||
import 'package:sqflite_common/sqlite_api.dart';
|
||||
|
||||
class DatasourceVersions {
|
||||
final String jmdictVersion;
|
||||
final DateTime jmdictDate;
|
||||
final String jmdictHash;
|
||||
|
||||
final String kanjidic2Version;
|
||||
final DateTime kanjidic2Date;
|
||||
final String kanjidic2Hash;
|
||||
|
||||
final String radkfileVersion;
|
||||
final DateTime radkfileDate;
|
||||
final String radkfileHash;
|
||||
|
||||
final String tanosJlptVersion;
|
||||
final DateTime tanosJlptDate;
|
||||
final String tanosJlptHash;
|
||||
|
||||
const DatasourceVersions({
|
||||
required this.jmdictVersion,
|
||||
required this.jmdictDate,
|
||||
required this.jmdictHash,
|
||||
required this.kanjidic2Version,
|
||||
required this.kanjidic2Date,
|
||||
required this.kanjidic2Hash,
|
||||
required this.radkfileVersion,
|
||||
required this.radkfileDate,
|
||||
required this.radkfileHash,
|
||||
required this.tanosJlptVersion,
|
||||
required this.tanosJlptDate,
|
||||
required this.tanosJlptHash,
|
||||
});
|
||||
}
|
||||
|
||||
DateTime _parseDateTime(String dateString) {
|
||||
try {
|
||||
return DateTime.parse(dateString);
|
||||
} catch (e) {
|
||||
if (RegExp(r'^\d{4}-\d{2}$').hasMatch(dateString)) {
|
||||
return DateTime.parse('$dateString-01');
|
||||
} else if (RegExp(r'^\d{4}$').hasMatch(dateString)) {
|
||||
return DateTime.parse('$dateString-01-01');
|
||||
} else {
|
||||
throw FormatException('Invalid date format: $dateString');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<DatasourceVersions> getDatasourceVersions(
|
||||
final DatabaseExecutor connection,
|
||||
) async {
|
||||
final jmdictVersion = await connection
|
||||
.query(JMdictTableNames.version)
|
||||
.then((rows) => rows.first);
|
||||
final kanjidic2Version = await connection
|
||||
.query(KANJIDICTableNames.version)
|
||||
.then((rows) => rows.first);
|
||||
final radkfileVersion = await connection
|
||||
.query(RADKFILETableNames.version)
|
||||
.then((rows) => rows.first);
|
||||
final tanosJlptVersion = await connection
|
||||
.query(TanosJLPTTableNames.version)
|
||||
.then((rows) => rows.first);
|
||||
|
||||
return DatasourceVersions(
|
||||
jmdictVersion: jmdictVersion['version'] as String,
|
||||
jmdictDate: _parseDateTime(jmdictVersion['date'].toString()),
|
||||
jmdictHash: jmdictVersion['hash'] as String,
|
||||
kanjidic2Version: kanjidic2Version['version'] as String,
|
||||
kanjidic2Date: _parseDateTime(kanjidic2Version['date'].toString()),
|
||||
kanjidic2Hash: kanjidic2Version['hash'] as String,
|
||||
radkfileVersion: radkfileVersion['version'] as String,
|
||||
radkfileDate: _parseDateTime(radkfileVersion['date'].toString()),
|
||||
radkfileHash: radkfileVersion['hash'] as String,
|
||||
tanosJlptVersion: tanosJlptVersion['version'] as String,
|
||||
tanosJlptDate: _parseDateTime(tanosJlptVersion['date'].toString()),
|
||||
tanosJlptHash: tanosJlptVersion['hash'] as String,
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
import 'package:jadb/search.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
import 'setup_database_connection.dart';
|
||||
|
||||
void main() {
|
||||
test('Retrieve datasource versions', () async {
|
||||
final connection = await setupDatabaseConnection();
|
||||
final result = await connection.jadbGetDatasourceVersions();
|
||||
expect(result, isNotNull);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user