minecli 0.1.0

A CLI for managing Minecraft server mods, datapacks, and plugins.
use std::fs::{self, OpenOptions};
use std::io::Write;
use std::path::{Path, PathBuf};
use std::time::{SystemTime, UNIX_EPOCH};

use crate::core::manifest::minecli_dir;
use crate::error::{IoResultExt, Result};

pub const HISTORY_FILE: &str = "history.log";

pub fn history_file(server_dir: &Path) -> PathBuf {
    minecli_dir(server_dir).join(HISTORY_FILE)
}

pub fn record(server_dir: &Path, message: impl AsRef<str>) -> Result<()> {
    let path = history_file(server_dir);
    if let Some(parent) = path.parent() {
        fs::create_dir_all(parent).at(parent)?;
    }

    let timestamp = SystemTime::now()
        .duration_since(UNIX_EPOCH)
        .unwrap_or_default()
        .as_secs();
    let mut file = OpenOptions::new()
        .create(true)
        .append(true)
        .open(&path)
        .at(&path)?;
    writeln!(file, "{timestamp} {}", message.as_ref()).at(&path)?;
    Ok(())
}