use std::fs; use std::path::Path; use chrono_tz::Tz; use walkdir::WalkDir; use crate::error::StreamdError; use crate::extract::parse_markdown_file; use crate::localize::localize_stream_file; use crate::models::{LocalizedShard, RepositoryConfiguration}; pub mod completions; pub mod daily; pub mod edit; pub mod new; pub mod timesheet; pub mod todo; pub fn load_markdown_shards( base_folder: &Path, config: &RepositoryConfiguration, tz: Tz, ) -> Result, StreamdError> { let mut shards = Vec::new(); for entry in WalkDir::new(base_folder) .max_depth(1) .into_iter() .filter_map(|e| e.ok()) { let path = entry.path(); if path.extension().map(|e| e == "md").unwrap_or(false) { let file_name = path.to_string_lossy().to_string(); let content = fs::read_to_string(path)?; let stream_file = parse_markdown_file(&file_name, &content); if let Ok(shard) = localize_stream_file(&stream_file, config, tz) { shards.push(shard); } } } Ok(shards) }