Compare commits
	
		
			3 commits
		
	
	
		
			99f703135d
			...
			ba1b0b79be
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							 | 
						ba1b0b79be | ||
| 
							 | 
						5b703310ba | ||
| 47c039cc71 | 
					 6 changed files with 745 additions and 441 deletions
				
			
		
							
								
								
									
										1162
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										1162
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
					@ -24,7 +24,7 @@ figment_file_provider_adapter = "0.1.1"
 | 
				
			||||||
log = "0.4.22"
 | 
					log = "0.4.22"
 | 
				
			||||||
multimap = "0.10.0"
 | 
					multimap = "0.10.0"
 | 
				
			||||||
pretty_env_logger = "0.5.0"
 | 
					pretty_env_logger = "0.5.0"
 | 
				
			||||||
progenitor-client = "0.8.0"
 | 
					progenitor-client = "0.11.0"
 | 
				
			||||||
readonly = "0.2.12"
 | 
					readonly = "0.2.12"
 | 
				
			||||||
regress = "0.10.1"
 | 
					regress = "0.10.1"
 | 
				
			||||||
reqwest = { version = "0.12.8", features = ["json", "stream"] }
 | 
					reqwest = { version = "0.12.8", features = ["json", "stream"] }
 | 
				
			||||||
| 
						 | 
					@ -32,12 +32,12 @@ serde = { version = "1.0.213", features = ["derive"] }
 | 
				
			||||||
tabled = "0.16.0"
 | 
					tabled = "0.16.0"
 | 
				
			||||||
tokio = { version = "1.41.0", features = ["full"] }
 | 
					tokio = { version = "1.41.0", features = ["full"] }
 | 
				
			||||||
uuid = { version = "1.11.0", features = ["serde", "v4"] }
 | 
					uuid = { version = "1.11.0", features = ["serde", "v4"] }
 | 
				
			||||||
vcard4 = "0.5.2"
 | 
					vcard4 = "0.7.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[build-dependencies]
 | 
					[build-dependencies]
 | 
				
			||||||
openapiv3 = "2.0.0"
 | 
					openapiv3 = "2.0.0"
 | 
				
			||||||
prettyplease = "0.2.24"
 | 
					prettyplease = "0.2.24"
 | 
				
			||||||
progenitor = "0.8.0"
 | 
					progenitor = "0.11.0"
 | 
				
			||||||
serde_json = "1.0"
 | 
					serde_json = "1.0"
 | 
				
			||||||
syn = "2.0"
 | 
					syn = "2.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,7 +50,7 @@ pub async fn auto_create_albums(ctx: Context, separator: String) -> Result<()> {
 | 
				
			||||||
        .cloned()
 | 
					        .cloned()
 | 
				
			||||||
        .collect();
 | 
					        .collect();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    info!("Creating missing albums: {:?}", missing_albums);
 | 
					    info!("Creating missing albums: {missing_albums:?}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for missing_album in &missing_albums {
 | 
					    for missing_album in &missing_albums {
 | 
				
			||||||
        let assets = sorted_assets
 | 
					        let assets = sorted_assets
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,8 +55,7 @@ pub async fn sync_date_of_birth(ctx: Context, vcard_file: &PathBuf) -> Result<()
 | 
				
			||||||
                            let bday = vcard_date_to_naive_date(dt.value.first().unwrap().clone())?;
 | 
					                            let bday = vcard_date_to_naive_date(dt.value.first().unwrap().clone())?;
 | 
				
			||||||
                            if c.date_of_birth.as_ref().is_some_and(|bdate| bday == *bdate) {
 | 
					                            if c.date_of_birth.as_ref().is_some_and(|bdate| bday == *bdate) {
 | 
				
			||||||
                                debug!(
 | 
					                                debug!(
 | 
				
			||||||
                                    "{} already has the proper date of birth, skipping",
 | 
					                                    "{formatted_name} already has the proper date of birth, skipping"
 | 
				
			||||||
                                    formatted_name
 | 
					 | 
				
			||||||
                                );
 | 
					                                );
 | 
				
			||||||
                            } else if bday.year() > 0 {
 | 
					                            } else if bday.year() > 0 {
 | 
				
			||||||
                                UpdatePersonDateOfBirth::new(UpdatePersonDateOfBirthArgs {
 | 
					                                UpdatePersonDateOfBirth::new(UpdatePersonDateOfBirthArgs {
 | 
				
			||||||
| 
						 | 
					@ -68,8 +67,7 @@ pub async fn sync_date_of_birth(ctx: Context, vcard_file: &PathBuf) -> Result<()
 | 
				
			||||||
                                updated_dobs += 1;
 | 
					                                updated_dobs += 1;
 | 
				
			||||||
                            } else {
 | 
					                            } else {
 | 
				
			||||||
                                debug!(
 | 
					                                debug!(
 | 
				
			||||||
                                    "{} has an incomplete date of birth, skipping",
 | 
					                                    "{formatted_name} has an incomplete date of birth, skipping"
 | 
				
			||||||
                                    formatted_name
 | 
					 | 
				
			||||||
                                );
 | 
					                                );
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
| 
						 | 
					@ -77,14 +75,14 @@ pub async fn sync_date_of_birth(ctx: Context, vcard_file: &PathBuf) -> Result<()
 | 
				
			||||||
                            todo!("{}: DateTimeOrTextProperty({})", formatted_name, prop)
 | 
					                            todo!("{}: DateTimeOrTextProperty({})", formatted_name, prop)
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    None => debug!("No Immich match for {}", formatted_name),
 | 
					                    None => debug!("No Immich match for {formatted_name}"),
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            None => todo!(),
 | 
					            None => todo!(),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    info!("Updated {} persons", updated_dobs);
 | 
					    info!("Updated {updated_dobs} persons");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ok(())
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,7 +55,7 @@ async fn main() -> Result<()> {
 | 
				
			||||||
    if let Some(project_dirs) = ProjectDirs::from("fr", "enoent", "Immich Tools") {
 | 
					    if let Some(project_dirs) = ProjectDirs::from("fr", "enoent", "Immich Tools") {
 | 
				
			||||||
        let config_file_path = project_dirs.config_dir().join("config.toml");
 | 
					        let config_file_path = project_dirs.config_dir().join("config.toml");
 | 
				
			||||||
        if config_file_path.exists() {
 | 
					        if config_file_path.exists() {
 | 
				
			||||||
            debug!("Reading configuration from {:?}", config_file_path);
 | 
					            debug!("Reading configuration from {config_file_path:?}");
 | 
				
			||||||
            conf_extractor =
 | 
					            conf_extractor =
 | 
				
			||||||
                conf_extractor.merge(FileAdapter::wrap(Toml::file_exact(config_file_path)));
 | 
					                conf_extractor.merge(FileAdapter::wrap(Toml::file_exact(config_file_path)));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -135,7 +135,7 @@ async fn validate_client_connection(client: &Client) -> Result<()> {
 | 
				
			||||||
        .with_note(|| {
 | 
					        .with_note(|| {
 | 
				
			||||||
            format!(
 | 
					            format!(
 | 
				
			||||||
                "The API version for this client is {}, make sure the server version is compatible",
 | 
					                "The API version for this client is {}, make sure the server version is compatible",
 | 
				
			||||||
                client.api_version()
 | 
					                Client::api_version()
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        })?;
 | 
					        })?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,7 @@ pub struct AssetQuery {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub async fn fetch_all_assets(query: AssetQuery, client: &Client) -> Result<Vec<AssetResponseDto>> {
 | 
					pub async fn fetch_all_assets(query: AssetQuery, client: &Client) -> Result<Vec<AssetResponseDto>> {
 | 
				
			||||||
    debug!("Fetching assets with query {:?}", query);
 | 
					    debug!("Fetching assets with query {query:?}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // is_offline is ignored, let's fetch trashed assets instead and filter them later
 | 
					    // is_offline is ignored, let's fetch trashed assets instead and filter them later
 | 
				
			||||||
    let trashed_after = if query.is_offline == Some(true) {
 | 
					    let trashed_after = if query.is_offline == Some(true) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue