()
| 339 | |
| 340 | |
| 341 | def main(): |
| 342 | import argparse |
| 343 | |
| 344 | parser = argparse.ArgumentParser(description="候选池与工作库存管理器") |
| 345 | parser.add_argument("--base-dir", type=Path, help="项目根目录或 sources/legado 目录") |
| 346 | parser.add_argument( |
| 347 | "action", |
| 348 | choices=["status", "refresh-candidates", "refresh-screened", "rebuild"], |
| 349 | help="执行动作", |
| 350 | ) |
| 351 | args = parser.parse_args() |
| 352 | |
| 353 | inventory = SourceInventory(args.base_dir) |
| 354 | |
| 355 | if args.action == "status": |
| 356 | print(json.dumps(inventory.inventory_status(), ensure_ascii=False, indent=2)) |
| 357 | return 0 |
| 358 | |
| 359 | if args.action == "refresh-screened": |
| 360 | _, report = inventory.refresh_screened_pool(save=True) |
| 361 | print(json.dumps(report, ensure_ascii=False, indent=2)) |
| 362 | return 0 |
| 363 | |
| 364 | if args.action == "refresh-candidates": |
| 365 | _, report = inventory.refresh_candidate_pool(save=True) |
| 366 | print(json.dumps(report, ensure_ascii=False, indent=2)) |
| 367 | return 0 |
| 368 | |
| 369 | _, _, report = inventory.build_inventory(save=True) |
| 370 | print(json.dumps(report, ensure_ascii=False, indent=2)) |
| 371 | return 0 |
| 372 | |
| 373 | |
| 374 | if __name__ == "__main__": |
no test coverage detected