|
|
|
@ -5,11 +5,16 @@ use serde_json;
|
|
|
|
|
use std::{fs, fs::File, io::Read, path::Path, str::FromStr};
|
|
|
|
|
use tar::Archive;
|
|
|
|
|
|
|
|
|
|
#[cfg(debug_assertions)]
|
|
|
|
|
use crate::render::render_client;
|
|
|
|
|
|
|
|
|
|
#[cfg(not(debug_assertions))]
|
|
|
|
|
use crate::render::render_ssr;
|
|
|
|
|
|
|
|
|
|
use crate::{
|
|
|
|
|
cli::GeneratorOptions,
|
|
|
|
|
data::{Outbox, Person},
|
|
|
|
|
error::Ærror,
|
|
|
|
|
render::render,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
mod cli;
|
|
|
|
@ -27,15 +32,37 @@ fn main() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn generate() -> Result<(), Ærror> {
|
|
|
|
|
let args = GeneratorOptions::parse();
|
|
|
|
|
let args;
|
|
|
|
|
#[cfg(not(debug_assertions))]
|
|
|
|
|
{
|
|
|
|
|
args = GeneratorOptions::parse();
|
|
|
|
|
setup_dirs(&args)?;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(debug_assertions)]
|
|
|
|
|
{
|
|
|
|
|
args = GeneratorOptions {
|
|
|
|
|
archive_file: String::from_str("")?,
|
|
|
|
|
title: String::from_str("")?,
|
|
|
|
|
output_dir: String::from_str("")?,
|
|
|
|
|
overwrite: true,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setup_dirs(&args)?;
|
|
|
|
|
let (outbox_text, actor_text, archive_time) = read_archive(&args)?;
|
|
|
|
|
let (outbox, author) = parse_json(outbox_text, actor_text)?;
|
|
|
|
|
|
|
|
|
|
let output_str = render(outbox, author, archive_time)?;
|
|
|
|
|
#[cfg(debug_assertions)]
|
|
|
|
|
{
|
|
|
|
|
render_client(outbox, author, archive_time)?;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(not(debug_assertions))]
|
|
|
|
|
{
|
|
|
|
|
let output_str = render_ssr(outbox, author, archive_time)?;
|
|
|
|
|
|
|
|
|
|
println!("{}", output_str);
|
|
|
|
|
println!("{}", output_str);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
@ -62,10 +89,24 @@ fn setup_dirs(args: &GeneratorOptions) -> Result<(), crate::error::Ærror> {
|
|
|
|
|
fn read_archive(
|
|
|
|
|
args: &GeneratorOptions,
|
|
|
|
|
) -> Result<(String, String, DateTime<chrono::Utc>), crate::error::Ærror> {
|
|
|
|
|
#[cfg(not(debug_assertions))]
|
|
|
|
|
let path = &args.archive_file;
|
|
|
|
|
|
|
|
|
|
let tar_gz = File::open(path)?;
|
|
|
|
|
let tar = GzDecoder::new(tar_gz);
|
|
|
|
|
let tar;
|
|
|
|
|
|
|
|
|
|
#[cfg(not(debug_assertions))]
|
|
|
|
|
{
|
|
|
|
|
let tar_gz = File::open(path)?;
|
|
|
|
|
tar = GzDecoder::new(tar_gz);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(debug_assertions)]
|
|
|
|
|
{
|
|
|
|
|
let tar_bytes = include_bytes!("../test-archive.tar.gz");
|
|
|
|
|
let tar_gz: &[u8] = tar_bytes.as_slice();
|
|
|
|
|
tar = GzDecoder::new(tar_gz);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let mut archive = Archive::new(tar);
|
|
|
|
|
|
|
|
|
|
let mut outbox_text = String::new();
|
|
|
|
@ -90,6 +131,7 @@ fn read_archive(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if path_str.starts_with("media_attachments") {
|
|
|
|
|
#[cfg(not(debug_assertions))]
|
|
|
|
|
file.unpack_in(&args.output_dir)?;
|
|
|
|
|
} else {
|
|
|
|
|
match path_str.as_str() {
|
|
|
|
@ -99,10 +141,13 @@ fn read_archive(
|
|
|
|
|
"actor.json" => {
|
|
|
|
|
file.read_to_string(&mut actor_text)?;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"avatar.png" => {
|
|
|
|
|
#[cfg(not(debug_assertions))]
|
|
|
|
|
file.unpack_in(&args.output_dir)?;
|
|
|
|
|
}
|
|
|
|
|
"header.png" => {
|
|
|
|
|
#[cfg(not(debug_assertions))]
|
|
|
|
|
file.unpack_in(&args.output_dir)?;
|
|
|
|
|
}
|
|
|
|
|
_ => (),
|
|
|
|
|