From 7a4b5b99080a6cde3a491f452446f1feed12e7ef Mon Sep 17 00:00:00 2001 From: p11 Date: Fri, 18 Apr 2025 20:31:48 +0200 Subject: [PATCH] Put render novel into separate function --- Cargo.lock | 1 + Cargo.toml | 1 + src/main.rs | 22 +++++++++++++++++----- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index da38e5e..f7f2262 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -170,6 +170,7 @@ dependencies = [ "data-stream", "dialogi", "header-config", + "indexmap", "maud", "percent-encoding", "pukram2html", diff --git a/Cargo.toml b/Cargo.toml index 1fc703b..184223c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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" diff --git a/src/main.rs b/src/main.rs index c152bf5..86775bc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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>, + 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!();