mirror of
https://codeberg.org/postscriptum/snac2nex.git
synced 2026-04-01 05:35:27 +00:00
implement deleted posts cleanup, extend sync response features
This commit is contained in:
parent
e85a4bb7d0
commit
499a78004a
7 changed files with 160 additions and 36 deletions
58
src/main.rs
58
src/main.rs
|
|
@ -1,9 +1,11 @@
|
|||
mod config;
|
||||
mod nex;
|
||||
mod response;
|
||||
mod snac;
|
||||
|
||||
use anyhow::Result;
|
||||
use nex::Nex;
|
||||
use response::Response;
|
||||
use snac::Snac;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
|
|
@ -22,26 +24,33 @@ fn main() -> Result<()> {
|
|||
let s = Snac::init(c.source, c.user)?;
|
||||
|
||||
println!("export begin...");
|
||||
let (mut u, mut t) = sync(&s, &n)?;
|
||||
let mut r = sync(&s, &n)?;
|
||||
match c.rotate {
|
||||
Some(r) => loop {
|
||||
println!("queue completed (updated: {u} / total: {t}), await {r} seconds to rotate...");
|
||||
std::thread::sleep(std::time::Duration::from_secs(r));
|
||||
(u, t) = sync(&s, &n)?;
|
||||
Some(t) => loop {
|
||||
println!(
|
||||
"queue completed:\n\tcreated: {}\n\tupdated: {}\n\tdeleted:\n\t\tfiles: {}\n\t\tdirectories: {}\n\tignored: {}\n\ttotal: {}\nawait {t} seconds to rotate...",
|
||||
r.created, r.updated, r.deleted.files, r.deleted.directories, r.ignored, r.total
|
||||
);
|
||||
std::thread::sleep(std::time::Duration::from_secs(t));
|
||||
r = sync(&s, &n)?;
|
||||
},
|
||||
None => println!("export completed (updated: {u} / total: {t})."),
|
||||
None => println!(
|
||||
"export completed:\n\tcreated: {}\n\tupdated: {}\n\tdeleted:\n\t\tfiles: {}\n\t\tdirectories: {}\n\tignored: {}\n\ttotal: {}",
|
||||
r.created, r.updated, r.deleted.files, r.deleted.directories, r.ignored, r.total
|
||||
),
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn sync(snac: &Snac, nex: &Nex) -> Result<(usize, usize)> {
|
||||
let mut t = 0; // total
|
||||
let mut u = 0; // updated
|
||||
fn sync(snac: &Snac, nex: &Nex) -> Result<Response> {
|
||||
use std::collections::HashSet;
|
||||
let mut r = Response::default();
|
||||
for user in &snac.users {
|
||||
println!("\tsync profile for `{}`...", user.name);
|
||||
let mut keep = HashSet::with_capacity(100); // @TODO estimated
|
||||
for post in user.public()? {
|
||||
t += 1;
|
||||
r.total += 1;
|
||||
// make sure post entry has expected content type
|
||||
if !post.is_note() {
|
||||
todo!()
|
||||
|
|
@ -49,12 +58,12 @@ fn sync(snac: &Snac, nex: &Nex) -> Result<(usize, usize)> {
|
|||
// skip non authorized content
|
||||
if let Some(content) = post.source_content {
|
||||
println!("\t\tsync post `{}`...", post.id);
|
||||
u += nex.sync(
|
||||
let response = nex.sync(
|
||||
&user.name,
|
||||
content,
|
||||
post.url,
|
||||
post.attachment.map(|a| {
|
||||
use nex::Source;
|
||||
use nex::source::Source;
|
||||
let mut attachments = Vec::with_capacity(a.len());
|
||||
for attachment in a {
|
||||
attachments.push((
|
||||
|
|
@ -81,8 +90,31 @@ fn sync(snac: &Snac, nex: &Nex) -> Result<(usize, usize)> {
|
|||
}),
|
||||
(post.published, post.updated),
|
||||
)?;
|
||||
use nex::response::change::Change;
|
||||
let f = ""; //response.file.to_string_lossy();
|
||||
match response.change {
|
||||
Change::Created => {
|
||||
r.created += 1;
|
||||
println!("\t\t\tcreate new post file `{f}`.")
|
||||
}
|
||||
Change::Ignored => {
|
||||
r.ignored += 1;
|
||||
println!("\t\t\tpost file `{f}` is up to date.")
|
||||
}
|
||||
Change::Updated => {
|
||||
r.updated += 1;
|
||||
println!("\t\t\tpost file `{f}` update with new content.")
|
||||
}
|
||||
}
|
||||
for i in response.keep {
|
||||
keep.insert(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
// cleanup removed post entries
|
||||
let d = nex.clean(&user.name, keep)?;
|
||||
r.deleted.directories += d.directories;
|
||||
r.deleted.files += d.files;
|
||||
}
|
||||
Ok((u, t))
|
||||
Ok(r)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue