8 releases
0.3.2 | Feb 2, 2025 |
---|---|
0.2.5 | Sep 25, 2024 |
0.1.1 | Sep 15, 2024 |
#593 in Data structures
133 downloads per month
Used in nvl-cli
39KB
607 lines
libwebnovel-storage
This is an implementation of a local repository of webnovels. It downloads webnovels & places them in a coherent manner on the filesystem. It is also capable of generating ebooks from these downloaded webnovels.
What this does
Basically, it provides data structures and method easing the work of
implementing a program using libwebnovel
. Said program would only have to make the "glue" between UI and this library's functions.
Example
use libwebnovel_storage::{LibraryError, LocalLibrary};
fn main() -> Result<(), LibraryError> {
let library_path = ".config/my_library/config.toml";
let mut library = LocalLibrary::load(library_path)?;
// Add to watchlist & download
library.add("https://www.royalroad.com/fiction/21220/mother-of-learning")?;
// update all novels
let errors = library.update();
// or, if you want to have more control over the update process
// (for instance, printing a progress bar):
for novel in library.novels_mut() {
let novel_title = novel.title()?.clone();
for (i, result) in novel.update_iter().enumerate() {
if result.is_err() {
eprintln!(
"Encountered an error while updating novel {}: {}",
novel_title,
result.unwrap_err()
);
}
println!("novel {}: updated chapter {}", novel_title, i + 1);
}
#[cfg(feature = "epub")]
println!(
"Generated ebook path: {}",
novel.generate_epub().unwrap().display()
);
}
Ok(())
}
cargo
features
By default, the epub
feature is active. If you do not wish to use this
feature, use the following in your Cargo.toml
:
# Cargo.toml
[dependencies.libwebnovel-storage]
version = '0'
default-features = false
TODO
- a local filesystem representation for a novel library
- bulk updates
- bulk updates with an iterator, to offer control over looping and get update information while they happen
- add epub generation
Legal
Without explicit refutation in the header of any file in this repository, all files in this repository are considered under the terms of the AGPL-3 license (of which a copy can be found in the LICENSE file at the root of this repository) and bearing the mention "Copyright (c) 2024 paulollivier & contributors".
Basically, please do not use this code without crediting its writer(s) or for a commercial project.
License: AGPL-3.0-or-later
Dependencies
~8–17MB
~229K SLoC