mod canvas;
mod comments;
mod page_script;
mod pdf;
mod server_mode;
mod server_mode_comments;
mod server_mode_pages;
mod slide_png;
mod video;
use axum::Router;
use crate::drive::server_mode::{Config, router};
fn zip_of(files: &[(&str, &str)]) -> Vec<u8> {
use std::io::Write;
let mut out = zip::ZipWriter::new(std::io::Cursor::new(Vec::new()));
for (name, text) in files {
out.start_file(*name, zip::write::SimpleFileOptions::default())
.unwrap();
out.write_all(text.as_bytes()).unwrap();
}
out.finish().unwrap().into_inner()
}
fn server_mode(name: &str) -> Router {
let dir =
std::env::temp_dir().join(format!("devpage-server-mode-{name}-{}", std::process::id()));
let _ = std::fs::remove_dir_all(&dir);
std::fs::create_dir_all(dir.join("bucket")).unwrap();
let config = Config::local(&dir.join("data"), &dir.join("bucket"), 1 << 30);
router(&config).unwrap()
}
async fn publish(base: &str, id: Option<&str>, zip: Vec<u8>) -> String {
let url = match id {
Some(id) => format!("{base}/api/documents/{id}/versions"),
None => format!("{base}/api/documents"),
};
let response = reqwest::Client::new()
.post(url)
.body(zip)
.send()
.await
.unwrap();
assert_eq!(response.status(), 201);
let answer: serde_json::Value = response.json().await.unwrap();
id.map(str::to_string)
.unwrap_or_else(|| answer["id"].as_str().unwrap().to_string())
}