More clean up.
This commit is contained in:
parent
c90495a985
commit
17e99518ce
3 changed files with 31 additions and 23 deletions
|
@ -8,7 +8,7 @@ edition = "2021"
|
|||
[dependencies]
|
||||
anyhow = "1.0.71"
|
||||
chrono = "0.4.26"
|
||||
clap = { version = "4.3.12", features = ["default", "derive"] }
|
||||
clap = { version = "4.3.12", features = ["default", "derive", "env"] }
|
||||
env_logger = "0.10.0"
|
||||
html2md = "0.2.14"
|
||||
log = "0.4.19"
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
use anyhow::Result;
|
||||
use chrono::Local;
|
||||
use html2md::parse_html;
|
||||
use log::debug;
|
||||
use megalodon::{
|
||||
entities::{Account, Attachment, Status},
|
||||
response::Response,
|
||||
|
@ -46,7 +45,7 @@ pub(super) async fn format_status(
|
|||
"{}{}",
|
||||
ancestor,
|
||||
if !thread.is_empty() {
|
||||
thread
|
||||
format!("\n{}", thread)
|
||||
} else {
|
||||
String::default()
|
||||
}
|
||||
|
@ -55,25 +54,20 @@ pub(super) async fn format_status(
|
|||
|
||||
fn format_attachments(depth: usize, attachments: &[Attachment]) -> String {
|
||||
let prefix = vec![">"; depth].join("");
|
||||
debug!("Attachments {:?}", attachments);
|
||||
if attachments.is_empty() {
|
||||
String::default()
|
||||
} else {
|
||||
let mut editor = DefaultEditor::new().unwrap();
|
||||
attachments
|
||||
.iter()
|
||||
.map(|a| {
|
||||
Url::parse(&a.url).unwrap().open();
|
||||
let mut editor = DefaultEditor::new().unwrap();
|
||||
let src = if let Ok(line) = editor.readline("Filename: ") {
|
||||
line
|
||||
} else {
|
||||
a.url.clone()
|
||||
};
|
||||
format!(
|
||||
"
|
||||
{} <img src=\"{}\" />",
|
||||
prefix, src
|
||||
)
|
||||
format!("{} <img src=\"{}\" />", prefix, src)
|
||||
})
|
||||
.collect::<Vec<String>>()
|
||||
.join("\n")
|
||||
|
|
40
src/main.rs
40
src/main.rs
|
@ -9,10 +9,9 @@ use megalodon::{
|
|||
response::Response,
|
||||
Megalodon,
|
||||
};
|
||||
|
||||
use tokio_stream::{iter, StreamExt};
|
||||
|
||||
use std::env;
|
||||
use std::{env, fs::File, io::prelude::*};
|
||||
|
||||
use self::{
|
||||
format::format_status,
|
||||
|
@ -28,6 +27,12 @@ mod range;
|
|||
#[derive(Debug, Parser)]
|
||||
#[command()]
|
||||
struct Config {
|
||||
#[arg(short, long, env = "MASTODON_URL")]
|
||||
url: String,
|
||||
#[arg(short, long, env = "MASTODON_ACCESS_TOKEN")]
|
||||
access_token: String,
|
||||
#[arg(short, long)]
|
||||
output_dir: String,
|
||||
#[arg(required = true)]
|
||||
date: String,
|
||||
#[arg(short, long)]
|
||||
|
@ -36,15 +41,21 @@ struct Config {
|
|||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
let Config { date, verbose } = Config::parse();
|
||||
let Config {
|
||||
date,
|
||||
verbose,
|
||||
url,
|
||||
access_token,
|
||||
output_dir,
|
||||
} = Config::parse();
|
||||
|
||||
let level = if verbose { "debug" } else { "off" };
|
||||
env::set_var("RUST_LOG", format!("{}={}", module_path!(), level));
|
||||
env_logger::init();
|
||||
|
||||
let day = try_create_range(date)?;
|
||||
let day = try_create_range(date.clone())?;
|
||||
|
||||
let client = create_client()?;
|
||||
let client = create_client(url, access_token)?;
|
||||
let Response { json: account, .. } = client.verify_account_credentials().await?;
|
||||
|
||||
debug!("Fetching posts for date, {}.", day.end.format("%Y-%m-%d"));
|
||||
|
@ -97,23 +108,26 @@ async fn main() -> Result<()> {
|
|||
}
|
||||
}
|
||||
reversed.reverse();
|
||||
println!("{}", reversed.join("\n\n"));
|
||||
let output = format!("{}{}.md", output_dir, date);
|
||||
let mut f = File::options().append(true).open(&output)?;
|
||||
f.write_all(&reversed.join("\n\n").as_bytes())?;
|
||||
println!("Appended matching posts to {}.", output);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// Only ones authored by the user, on the date requested, that aren't a reply to any other status
|
||||
fn filter_statuses<'a>(account: &Account, day: &Range, json: &'a Vec<Status>) -> Vec<&'a Status> {
|
||||
json.iter()
|
||||
.filter(|json| {
|
||||
json.account.id == account.id
|
||||
&& day.start <= json.created_at
|
||||
&& json.created_at <= day.end
|
||||
.filter(|status| {
|
||||
status.account.id == account.id
|
||||
&& status.in_reply_to_id.is_none()
|
||||
&& day.start <= status.created_at
|
||||
&& status.created_at <= day.end
|
||||
})
|
||||
.collect::<Vec<&Status>>()
|
||||
}
|
||||
|
||||
fn create_client() -> Result<Box<dyn Megalodon + Send + Sync>> {
|
||||
let url = env::var("MASTODON_URL")?;
|
||||
let token = env::var("MASTODON_ACCESS_TOKEN")?;
|
||||
fn create_client(url: String, token: String) -> Result<Box<dyn Megalodon + Send + Sync>> {
|
||||
Ok(generator(megalodon::SNS::Mastodon, url, Some(token), None))
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue