Skip to content

Commit 75da50a

Browse files
authored
Merge pull request #37 from silicon-heaven/fix-filename-format
Fix filename format
2 parents ea947b4 + 071fa6b commit 75da50a

4 files changed

Lines changed: 31 additions & 22 deletions

File tree

Cargo.lock

Lines changed: 16 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ serde = { version = "1.0.219", features = ["derive"] }
2626
serde_yaml_ng = "0.10.0"
2727
tokio-stream = { version = "0.1.17", features = ["fs"] }
2828
time = { version = "0.3.41", features = ["formatting"] }
29+
chrono = "0.4.42"
2930

3031
# [patch."https://github.com/silicon-heaven/libshvclient-rs"]
3132
# shvclient = { path = "../libshvclient-rs" }

src/sync.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -545,7 +545,7 @@ async fn sync_site_legacy(
545545
fn msec_to_log2_filename(msec: i64) -> String {
546546
shvproto::DateTime::from_epoch_msec(msec)
547547
.to_chrono_datetime()
548-
.format("%Y-%m-%dT%H:%M:%S.log2")
548+
.format("%Y-%m-%dT%H-%M-%S-%3f.log2")
549549
.to_string()
550550
}
551551

src/tree.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use std::pin::Pin;
55
use std::sync::Arc;
66

77
use async_compression::tokio::write::GzipEncoder;
8+
use chrono::TimeZone;
89
use futures::io::{BufReader, BufWriter};
910
use futures::{Stream, StreamExt, TryStreamExt};
1011
use log::{error, info, warn};
@@ -798,6 +799,17 @@ async fn pushlog_handler(
798799
).into())
799800
}
800801

802+
fn file_name_to_file_msec(filename: &str) -> Result<i64, String> {
803+
let without_ext = filename
804+
.strip_suffix(".log2")
805+
.ok_or_else(|| format!("Invalid file extension in '{filename}'"))?;
806+
807+
let datetime = chrono::NaiveDateTime::parse_from_str(without_ext, "%Y-%m-%dT%H-%M-%S-%3f")
808+
.map_err(|e| format!("Failed to parse '{filename}': {e}"))?;
809+
810+
Ok(chrono::Utc.from_utc_datetime(&datetime).timestamp_millis())
811+
}
812+
801813
pub async fn getlog_handler(
802814
site_path: &str,
803815
params: &GetLog2Params,
@@ -844,17 +856,13 @@ pub async fn getlog_handler(
844856
match &params.since {
845857
GetLog2Since::DateTime(date_time) => {
846858
let since_ms = date_time.epoch_msec();
847-
let file_name_to_msec = |file_name: &str| file_name
848-
.strip_suffix(".log2")
849-
.and_then(|file| shvproto::DateTime::from_iso_str(file).ok().as_ref().map(shvproto::DateTime::epoch_msec))
850-
.unwrap_or(i64::MAX);
851859

852860
log_files
853861
.iter()
854862
.map(DirEntry::file_name)
855863
.enumerate()
856864
.rev()
857-
.find(|(_,file)| file_name_to_msec(&file.to_string_lossy()) < since_ms)
865+
.find(|(_,file)| file_name_to_file_msec(&file.to_string_lossy()).is_ok_and(|ms| ms < since_ms))
858866
.map(|(idx, _)| idx)
859867
.unwrap_or(0)
860868
}

0 commit comments

Comments
 (0)