twitch-hls-client 1.7.0

Minimal CLI client for watching/recording Twitch streams
use std::{
    fs,
    io::{self, Write},
};

use anyhow::Result;
use log::info;

use super::Output;
use crate::config::Config;

pub struct File {
    file: fs::File,
}

impl Output for File {
    fn set_header(&mut self, header: &[u8]) -> io::Result<()> {
        self.file.write_all(header)
    }
}

impl Write for File {
    fn write(&mut self, _buf: &[u8]) -> io::Result<usize> {
        unreachable!();
    }

    fn flush(&mut self) -> io::Result<()> {
        self.file.flush()
    }

    fn write_all(&mut self, buf: &[u8]) -> io::Result<()> {
        self.file.write_all(buf)
    }
}

impl File {
    pub fn new() -> Result<Option<Self>> {
        let cfg = Config::get();

        let Some(path) = &cfg.record_path else {
            return Ok(None);
        };

        info!("Recording to: {path}");
        if cfg.overwrite {
            return Ok(Some(Self {
                file: fs::File::create(path)?,
            }));
        }

        Ok(Some(Self {
            file: fs::File::create_new(path)?,
        }))
    }
}