Support domain when exporting room logs

This commit is contained in:
Joscha 2023-12-31 20:20:28 +01:00
parent 2bbfca7002
commit 1f1795f111

View file

@ -6,7 +6,7 @@ mod text;
use std::fs::File; use std::fs::File;
use std::io::{self, BufWriter, Write}; use std::io::{self, BufWriter, Write};
use crate::vault::{EuphRoomVault, EuphVault}; use crate::vault::{EuphRoomVault, EuphVault, RoomIdentifier};
#[derive(Debug, Clone, Copy, clap::ValueEnum)] #[derive(Debug, Clone, Copy, clap::ValueEnum)]
pub enum Format { pub enum Format {
@ -43,6 +43,10 @@ pub struct Args {
#[arg(long, short)] #[arg(long, short)]
all: bool, all: bool,
/// Domain to resolve the room names with.
#[arg(long, short, default_value = "euphoria.leet.nu")]
domain: String,
/// Format of the output file. /// Format of the output file.
#[arg(long, short, value_enum, default_value_t = Format::Text)] #[arg(long, short, value_enum, default_value_t = Format::Text)]
format: Format, format: Format,
@ -85,7 +89,12 @@ pub async fn export(vault: &EuphVault, mut args: Args) -> anyhow::Result<()> {
} }
let rooms = if args.all { let rooms = if args.all {
let mut rooms = vault.rooms().await?; let mut rooms = vault
.rooms()
.await?
.into_iter()
.map(|id| id.name)
.collect::<Vec<_>>();
rooms.sort_unstable(); rooms.sort_unstable();
rooms rooms
} else { } else {
@ -101,14 +110,14 @@ pub async fn export(vault: &EuphVault, mut args: Args) -> anyhow::Result<()> {
for room in rooms { for room in rooms {
if args.out == "-" { if args.out == "-" {
eprintln!("Exporting &{room} as {} to stdout", args.format.name()); eprintln!("Exporting &{room} as {} to stdout", args.format.name());
let vault = vault.room(room); let vault = vault.room(RoomIdentifier::new(args.domain.clone(), room));
let mut stdout = BufWriter::new(io::stdout()); let mut stdout = BufWriter::new(io::stdout());
export_room(&vault, &mut stdout, args.format).await?; export_room(&vault, &mut stdout, args.format).await?;
stdout.flush()?; stdout.flush()?;
} else { } else {
let out = format_out(&args.out, &room, args.format); let out = format_out(&args.out, &room, args.format);
eprintln!("Exporting &{room} as {} to {out}", args.format.name()); eprintln!("Exporting &{room} as {} to {out}", args.format.name());
let vault = vault.room(room); let vault = vault.room(RoomIdentifier::new(args.domain.clone(), room));
let mut file = BufWriter::new(File::create(out)?); let mut file = BufWriter::new(File::create(out)?);
export_room(&vault, &mut file, args.format).await?; export_room(&vault, &mut file, args.format).await?;
file.flush()?; file.flush()?;