bin/jadb: split

This commit is contained in:
2025-04-30 08:40:01 +02:00
parent 4357485870
commit 1fdcb7a477
7 changed files with 204 additions and 163 deletions

23
lib/cli/args.dart Normal file
View File

@@ -0,0 +1,23 @@
import 'dart:io';
import 'package:args/args.dart';
void addLibsqliteArg(ArgParser argParser) {
argParser.addOption(
'libsqlite',
help:
'Path to the SQLite library. This is used to load the SQLite library dynamically.',
valueHelp: 'PATH',
defaultsTo: Platform.environment['LIBSQLITE_PATH'],
);
}
void addJadbArg(ArgParser argParser) {
argParser.addOption(
'jadb',
abbr: 'f',
help: 'Path to the SQLite database file.',
valueHelp: 'PATH',
defaultsTo: Platform.environment['JADB_PATH'],
);
}

View File

@@ -0,0 +1,41 @@
import 'dart:io';
import 'package:jadb/_data_ingestion/open_local_db.dart';
import 'package:jadb/_data_ingestion/seed_database.dart';
import 'package:args/command_runner.dart';
import 'package:jadb/cli/args.dart';
class CreateDb extends Command {
final name = "create-db";
final description = "Create the database";
CreateDb() {
addLibsqliteArg(argParser);
}
Future<void> run() async {
if (argResults!.option('libsqlite') == null) {
print(argParser.usage);
exit(64);
}
final db = await openLocalDb(
libsqlitePath: argResults!.option('libsqlite')!,
readWrite: true,
);
if (db == null) {
print("Failed to open database");
exit(1);
}
seedData(db).then((_) {
print("Database created successfully");
}).catchError((error) {
print("Error creating database: $error");
}).whenComplete(() {
db.close();
});
}
}

View File

@@ -0,0 +1,45 @@
import 'dart:convert';
import 'dart:io';
import 'package:jadb/_data_ingestion/open_local_db.dart';
import 'package:jadb/cli/args.dart';
import 'package:jadb/search.dart';
import 'package:args/command_runner.dart';
class QueryKanji extends Command {
final name = "query-kanji";
final description = "Query the database for kanji data";
QueryKanji() {
addLibsqliteArg(argParser);
addJadbArg(argParser);
}
Future<void> run() async {
if (argResults!.option('libsqlite') == null ||
argResults!.option('jadb') == null) {
print(argParser.usage);
exit(64);
}
final db = await openLocalDb(
jadbPath: argResults!.option('jadb')!,
libsqlitePath: argResults!.option('libsqlite')!,
);
if (db == null) {
print("Failed to open database");
exit(1);
}
final result = await JaDBConnection(db).searchKanji('');
if (result == null) {
print("No such kanji");
} else {
print(JsonEncoder.withIndent(' ').convert(result.toJson()));
}
}
}

View File

@@ -0,0 +1,48 @@
import 'dart:convert';
import 'dart:io';
import 'package:jadb/_data_ingestion/open_local_db.dart';
import 'package:jadb/cli/args.dart';
import 'package:jadb/search.dart';
import 'package:args/command_runner.dart';
class QueryWord extends Command {
final name = "query-word";
final description = "Query the database for word data";
QueryWord() {
addLibsqliteArg(argParser);
addJadbArg(argParser);
}
Future<void> run() async {
if (argResults!.option('libsqlite') == null ||
argResults!.option('jadb') == null) {
print(argParser.usage);
exit(64);
}
final db = await openLocalDb(
jadbPath: argResults!.option('jadb')!,
libsqlitePath: argResults!.option('libsqlite')!,
);
if (db == null) {
print("Failed to open database");
exit(1);
}
final result = await JaDBConnection(db).searchWord('kana');
if (result == null) {
print("Invalid search");
} else if (result.isEmpty) {
print("No matches");
} else {
print(JsonEncoder.withIndent(' ')
.convert(result.map((e) => e.toJson()).toList()));
}
}
}