Bookshelf is made for managing media, mainly books. Modules are to be made by the user (or stolen from the internet) and used to scrape data from websites, thereby getting metadata and download entire books and other items.
This is something I'm making to learn Rust. ~~It's totally not because I wanted a way to scrape books like manga from online and read them later.~~ It's made mainly for managing books but can be used to manage any media.
```sh
example_mod with code 12345bookshelf add -m example_mod -c 12345
bookshelf download -u https://example.com/book/12345 ```
```sh
bookshelf search -t "^The.*" -a "John Doe" -g "sci-fi,comedy" -b "horror"
bookshelf search -f -a "Jane Smith,Bob Ross" -g "romance,comedy" --broad_search ```
```sh
example_mod with code 12345bookshelf info -m example_mod -c 12345 ```
```sh
example_mod with id 1234bookshelf update -m example_mod -c 12345 -f
bookshelf update -m example_mod -c 12345 -t "New title" -a "Alice" -g "comedy,horror" ```
```sh
bookshelf pull
example_mod and created by "Bob"bookshelf pull -m example_mod -a "Bob" ```
```sh
bookshelf rm -m example_mod -c 12345 ```
sh
bookshelf modules
```sh
bookshelf export -f index.yaml
bookshelf import -f index.yaml ```
To launch bookshelf in TUI mode, simply run bookshelf without arguments.
Down/j : move downUp/k : move upctrl-D : move down 50%ctrl-U : move up 50%Home: go to topEnd: go to bottomF : toggle favorite (add/remove item to/from favorites)y : yank (copy) item (module and code) to clipboardo : open itemw : write to index fileft/fa/fg : filter by title regex/authors/genreset/ea/eg : edit title/authors/genresEsc : cancel filter/editCurrently, the following settings (and their default values) can be set in bookshelf .yaml:
yaml
"index_file": "~/.config/bookshelf/index"
"modules_dir": "~/.config/bookshelf/modules"
"data_dir": "~/.config/bookshelf/data"
Books and other items are stored in data_dir in their own directories.
A module can be written in any language. It only needs to be made executable and placed in the modules directory to be used. The metadata and download are mostly handled by the module with little to no help from bookshelf because every site has its own ways to get metadata and download items, and it's a lot simpler to have the individual modules handle everything for that.
A module should be able to handle the following commands:
your_mod check $URLGiven a URL, the module prints a 1 (with or without newlines) if the URL can be processed by the module, and 0 otherwise
your_mod code $URLGiven a URL, the module prints the code identifying the item.
your_mod url $CODEGiven a code, the module prints the URL for the item.
your_mod metadata $CODEPrint title, authors, and genres for the item with the provided code. The 3 items are on separate lines, with authors and genres being comma-separated. For example:
Rust for noobs
John Doe,Jane Smith
education,programming
your_mod download $CODEThe module downloads the book with the provided code. No out put is expected, and everything is done by the module in this case. Any and all output is ignored by bookshelf, so feel free to print anything.
your_mod mediaPrint the media type of the item handled by the module, for example: jpg, png, pdf, txt, mp3, mp4. This is for the (to be implemented) feature of opening the downloaded files with other programs.
License: GNU GPLv3