bin/jadb: split
This commit is contained in:
23
lib/cli/args.dart
Normal file
23
lib/cli/args.dart
Normal 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'],
|
||||
);
|
||||
}
|
||||
41
lib/cli/commands/create_db.dart
Normal file
41
lib/cli/commands/create_db.dart
Normal 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();
|
||||
});
|
||||
}
|
||||
}
|
||||
45
lib/cli/commands/query_kanji.dart
Normal file
45
lib/cli/commands/query_kanji.dart
Normal 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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
48
lib/cli/commands/query_word.dart
Normal file
48
lib/cli/commands/query_word.dart
Normal 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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user