Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
e85e82b
feat(library): stage import candidates
darwin67 Aug 26, 2026
ec4e34b
feat(app): review books before import
darwin67 Aug 26, 2026
bac8dae
fix(library): harden staged discovery
darwin67 Aug 26, 2026
c97223b
fix(app): make staged imports race safe
darwin67 Aug 26, 2026
62f5135
feat(library): report staged discovery progress
darwin67 Aug 26, 2026
008b53e
feat(app): show staged import progress
darwin67 Aug 26, 2026
f9b8440
fix(library): serialize concurrent managed imports
darwin67 Aug 26, 2026
17d40cb
fix(app): keep discovery activity visible
darwin67 Aug 26, 2026
9c70492
chore(dev): add local data reset command
darwin67 Aug 26, 2026
cd6bc19
fix(app): size staged import modal by content
darwin67 Aug 26, 2026
c4aaeda
feat(library): report copy-check progress
darwin67 Aug 26, 2026
557bff2
fix(app): show granular copy-check progress
darwin67 Aug 26, 2026
cbb11bf
perf(library): hash import candidates concurrently
darwin67 Aug 27, 2026
6c3c20d
refactor(library): split managed import preparation
darwin67 Aug 27, 2026
af4f5f5
perf(app): prepare managed imports concurrently
darwin67 Aug 27, 2026
ef47086
fix(app): use progress bar for library activity
darwin67 Aug 27, 2026
de6fe0c
fix(storage): isolate development reset data
darwin67 Aug 27, 2026
59be534
fix(library): stream and verify import discovery
darwin67 Aug 27, 2026
fc8a277
fix(app): bound and virtualize staged imports
darwin67 Aug 27, 2026
14c6052
fix(storage): harden development data ownership
darwin67 Aug 27, 2026
22d1313
fix(library): make discovery results deterministic
darwin67 Aug 27, 2026
b03a17e
fix(app): stabilize staged review feedback
darwin67 Aug 27, 2026
174994f
fix(storage): bind reset to owned directories
darwin67 Aug 27, 2026
c6e52b8
chore(dev): keep local data under target
darwin67 Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ rust-project.json

/.direnv/

# Python script test artifacts
__pycache__/
*.py[cod]

# Hugo build output
/website/public/
/website/.hugo_build.lock
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 8 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
.PHONY: dev lint fmt test test-scripts check-rfds changelog next-version
.PHONY: dev reset lint fmt test test-scripts check-rfds changelog next-version

DEV_DATA_HOME := $(CURDIR)/target

## Run the application in debug mode
dev:
SHOSAI_DEV_BUILD=1 cargo run -p shosai-app
XDG_DATA_HOME="$(DEV_DATA_HOME)" SHOSAI_DEV_BUILD=1 cargo run -p shosai-app

## Delete development-only Shosai data and development-owned managed copies
reset:
@XDG_DATA_HOME="$(DEV_DATA_HOME)" python3 scripts/reset-local-data.py

## Run clippy lints on the workspace
lint:
Expand Down
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,17 @@ make test
make check-rfds
```

`make dev` stores its isolated database, preferences, and default managed book
copies in `target/shosai-dev`; packaged releases use the platform `shosai` data
directory. Deleting `target` or running `cargo clean` therefore also clears the
default development state. With the development app closed, `make reset` removes
only the ownership-marked `target/shosai-dev` state. Production data and books
referenced from their current location are preserved. Copied books in an external
development managed-library folder are removed only when it contains
`.shosai-storage-profile` with the exact value `shosai-development-v1`; the folder
itself and unrelated files in it are preserved. Reset fails safely if that marker
is absent or does not match.

The project is a Cargo workspace:

- `crates/shosai-core` contains document formats, library storage, and reader logic.
Expand Down
16 changes: 15 additions & 1 deletion crates/shosai-app/locales/en-US/main.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -62,18 +62,32 @@ page-number = Page { $page }
search-library-placeholder = Search by title or author...
add-books = + Add books
adding-books = Adding books…
adding-books-progress = Adding { $completed } of { $total } books…
add-books-heading = Add books
add-books-description = Choose individual files or a folder. Shosai supports PDF, EPUB, and CBZ files.
choose-book-files = Choose files…
choose-book-folder = Choose a folder…
scanning-books = Checking books…
scanning-books-description = Shosai is finding supported formats and exact duplicates. Nothing will be added until you confirm.
finding-books-progress = Finding supported books… { $found } found · { $read } read
reading-books-progress = Reading { $completed } of { $total } books…
checking-copies-progress = Checking { $completed } of { $total } books for copies…
review-books-heading = Review books
review-books-summary = Found { $found } supported files · { $selected } selected
filter-review-books-placeholder = Filter by title, file, or format…
no-matching-books-found = No books match this filter.
select-all-new-books = Select all new books
no-supported-books-found = No supported books were found in this selection.
already-in-library = Already in your library as “{ $title }”
duplicate-selected-file = Exact duplicate of { $file }
book-discovery-failed = { $count } files could not be checked. { $file }: { $error }
book-storage-heading = How should Shosai store these books?
selected-book-files = { $count } files selected
selected-book-folder = Folder selected: { $folder }
copy-into-shosai = Copy into Shosai — Recommended
copy-into-shosai-description = Keeps a private copy that remains available if the originals move or are deleted. Uses additional disk space.
use-current-location = Use files in their current location
use-current-location-description = Avoids duplicate storage, but books become unavailable if the files move or their drive is disconnected.
ready-to-add-books = Ready to add books
change-storage-choice = Change storage choice
add-selected-books = Add books
back = Back
Expand Down
16 changes: 15 additions & 1 deletion crates/shosai-app/locales/ja/main.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -62,18 +62,32 @@ page-number = { $page }ページ
search-library-placeholder = タイトル・著者を検索...
add-books = + 本を追加
adding-books = 本を追加中…
adding-books-progress = { $total }冊中{ $completed }冊を追加中…
add-books-heading = 本を追加
add-books-description = ファイルまたはフォルダーを選んでください。PDF、EPUB、CBZファイルに対応しています。
choose-book-files = ファイルを選択…
choose-book-folder = フォルダーを選択…
scanning-books = 本を確認中…
scanning-books-description = 対応形式と完全に同じファイルを確認しています。確定するまで本は追加されません。
finding-books-progress = 対応している本を検索中… { $found }冊見つかりました · { $read }冊読み込み済み
reading-books-progress = { $total }冊中{ $completed }冊を読み込み中…
checking-copies-progress = 同じ本がないか{ $total }冊中{ $completed }冊を確認中…
review-books-heading = 追加する本を確認
review-books-summary = 対応ファイル:{ $found }個 · 選択中:{ $selected }個
filter-review-books-placeholder = タイトル、ファイル名、形式で絞り込む…
no-matching-books-found = 条件に一致する本がありません。
select-all-new-books = 新しい本をすべて選択
no-supported-books-found = 対応している本が見つかりませんでした。
already-in-library = 「{ $title }」としてライブラリに追加済み
duplicate-selected-file = { $file }と完全に同じファイル
book-discovery-failed = { $count }個のファイルを確認できませんでした。{ $file }: { $error }
book-storage-heading = 本をどこに保存しますか?
selected-book-files = { $count }個のファイルを選択中
selected-book-folder = 選択中のフォルダー:{ $folder }
copy-into-shosai = 書斎にコピー — おすすめ
copy-into-shosai-description = 元のファイルを移動または削除しても読めるよう、専用のコピーを保存します。追加のディスク容量を使用します。
use-current-location = 現在の場所にあるファイルを使用
use-current-location-description = ファイルを複製しませんが、移動した場合やドライブが接続されていない場合は読めなくなります。
ready-to-add-books = 本を追加する準備ができました
change-storage-choice = 保存方法を変更
add-selected-books = 本を追加
back = 戻る
Expand Down
Loading
Loading