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 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, ); }