Put render novel into separate function

This commit is contained in:
p11 2025-04-18 20:31:48 +02:00
parent 8b2d44d574
commit 7a4b5b9908
3 changed files with 19 additions and 5 deletions

1
Cargo.lock generated
View File

@ -170,6 +170,7 @@ dependencies = [
"data-stream",
"dialogi",
"header-config",
"indexmap",
"maud",
"percent-encoding",
"pukram2html",

View File

@ -12,3 +12,4 @@ dialogi = "0.3.1"
vn-settings = "0.1.0"
threadpool = "1.8.1"
header-config = "0.1.5"
indexmap = "2.9.0"

View File

@ -21,6 +21,7 @@ use data_stream::{
use dialog::parse_map;
use dialogi::DialogParameter;
use header_config::parse_config;
use indexmap::IndexMap;
use maud::html;
use percent_encoding::percent_decode_str;
use pukram2html::{Settings, convert, convert_extended, convert_subheader};
@ -604,7 +605,12 @@ fn handle_relative_connection(
.map(|parent| parse_config(&parent.with_extension("vng")).ok())
.unwrap_or_default();
if let Some(mut config_map) = config_map {
fn render_novel(
mut config_map: IndexMap<Box<str>, Box<str>>,
pk_path: &Path,
stream: &mut TcpStream,
start_level: usize,
) -> std::result::Result<(), dialogi::ParsingError> {
let mut player_settings = PlayerSettings {
colors: ColorSettings::common(),
timing: TimingSettings::common(),
@ -646,10 +652,7 @@ fn handle_relative_connection(
}
}
let Ok(dialogs) = parse_map(file_paths.pk, &mut settings_context) else {
fail(stream);
return;
};
let dialogs = parse_map(pk_path, &mut settings_context)?;
let mut sections = Vec::new();
@ -885,6 +888,15 @@ fn handle_relative_connection(
};
let _ = write!(stream, "{}", html.into_string());
Ok(())
}
if let Some(config_map) = config_map {
if render_novel(config_map, file_paths.pk, &mut stream, start_level).is_err() {
fail(stream);
return;
}
} else {
let Ok(pk_file) = File::open(file_paths.pk) else {
unreachable!();