Expand description
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.
Structs§
- Local
Library - A local disk storage.
- Novel
- Represents a novel. Stored on disk at the following path: <base_library_path>/<novel.title()>/
- Novel
Chapter Update Iter - An iterator over the update operation of a chapter. Used to be able to monitor progress from your code.
Enums§
- Epub
Generation Error - An error on epub generation
- Library
Error - Represents an error that can happen during Library operations