forked from wathiede/photosync
Add search-media-items verb to list all photos in an album.
This commit is contained in:
parent
076a947b08
commit
9691e7b456
48
src/main.rs
48
src/main.rs
@ -3,6 +3,7 @@ use std::path::PathBuf;
|
||||
|
||||
use google_api_auth;
|
||||
use google_photoslibrary1;
|
||||
use google_photoslibrary1::schemas::SearchMediaItemsRequest;
|
||||
use regex::Regex;
|
||||
use structopt::StructOpt;
|
||||
use yup_oauth2::{Authenticator, InstalledFlow};
|
||||
@ -10,7 +11,12 @@ use yup_oauth2::{Authenticator, InstalledFlow};
|
||||
#[derive(Debug, StructOpt)]
|
||||
enum Command {
|
||||
/// List albums for the user of the given credentials. Optionally title filter.
|
||||
ListAlbums { title_filter: Option<Regex> },
|
||||
ListAlbums {
|
||||
title_filter: Option<Regex>,
|
||||
},
|
||||
SearchMediaItems {
|
||||
album_id: String,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug, StructOpt)]
|
||||
@ -59,6 +65,40 @@ fn new_client(
|
||||
Ok(google_photoslibrary1::Client::new(auth))
|
||||
}
|
||||
|
||||
fn search_media_items(
|
||||
client: google_photoslibrary1::Client,
|
||||
album_id: String,
|
||||
) -> Result<(), Box<dyn Error>> {
|
||||
let mut page_token = None;
|
||||
let mut total = 0;
|
||||
loop {
|
||||
let resp = client
|
||||
.media_items()
|
||||
.search(SearchMediaItemsRequest {
|
||||
album_id: Some(album_id.clone()),
|
||||
page_token,
|
||||
..Default::default()
|
||||
})
|
||||
.execute_with_all_fields()?;
|
||||
|
||||
let media_items = resp.media_items.ok_or("no results")?;
|
||||
println!("got ({}) items", media_items.len());
|
||||
total += media_items.len();
|
||||
for mi in media_items {
|
||||
println!(
|
||||
"{} {}",
|
||||
mi.id.unwrap_or("NO ID".to_string()),
|
||||
mi.filename.unwrap_or("NO FILENAME".to_string())
|
||||
);
|
||||
}
|
||||
page_token = resp.next_page_token;
|
||||
if page_token.is_none() {
|
||||
println!("({}) items total", total);
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn list_albums(
|
||||
client: google_photoslibrary1::Client,
|
||||
title_filter: Option<Regex>,
|
||||
@ -80,9 +120,10 @@ fn list_albums(
|
||||
}
|
||||
}
|
||||
println!(
|
||||
"album: {} {}",
|
||||
"album: {} {} ({} items)",
|
||||
a.id.unwrap_or("NO ID".to_string()),
|
||||
a.title.unwrap_or("NO TITLE".to_string()).to_string()
|
||||
a.title.unwrap_or("NO TITLE".to_string()).to_string(),
|
||||
a.media_items_count.unwrap_or(0)
|
||||
);
|
||||
}
|
||||
Ok(())
|
||||
@ -94,5 +135,6 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let client = new_client(&opt.credentials, &opt.token_cache)?;
|
||||
match opt.cmd {
|
||||
Command::ListAlbums { title_filter } => list_albums(client, title_filter),
|
||||
Command::SearchMediaItems { album_id } => search_media_items(client, album_id),
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user