Check Exif DB for memory collection

This commit is contained in:
Cameron
2025-12-17 22:10:23 -05:00
parent e4d988a9fd
commit c7fd328925
2 changed files with 235 additions and 60 deletions

View File

@@ -4,7 +4,9 @@ use diesel::sqlite::SqliteConnection;
use std::ops::DerefMut;
use std::sync::{Arc, Mutex};
use crate::database::models::{Favorite, ImageExif, InsertFavorite, InsertImageExif, InsertUser, User};
use crate::database::models::{
Favorite, ImageExif, InsertFavorite, InsertImageExif, InsertUser, User,
};
pub mod models;
pub mod schema;
@@ -91,7 +93,8 @@ impl UserDao for SqliteUserDao {
!users
.filter(username.eq(user))
.load::<User>(&mut self.connection)
.unwrap_or_default().is_empty()
.unwrap_or_default()
.is_empty()
}
}
@@ -187,6 +190,7 @@ pub trait ExifDao: Sync + Send {
fn get_exif(&mut self, file_path: &str) -> Result<Option<ImageExif>, DbError>;
fn update_exif(&mut self, exif_data: InsertImageExif) -> Result<ImageExif, DbError>;
fn delete_exif(&mut self, file_path: &str) -> Result<(), DbError>;
fn get_all_with_date_taken(&mut self) -> Result<Vec<(String, i64)>, DbError>;
}
pub struct SqliteExifDao {
@@ -273,4 +277,22 @@ impl ExifDao for SqliteExifDao {
.map(|_| ())
.map_err(|_| DbError::new(DbErrorKind::QueryError))
}
fn get_all_with_date_taken(&mut self) -> Result<Vec<(String, i64)>, DbError> {
use schema::image_exif::dsl::*;
let mut connection = self.connection.lock().expect("Unable to get ExifDao");
image_exif
.select((file_path, date_taken))
.filter(date_taken.is_not_null())
.load::<(String, Option<i64>)>(connection.deref_mut())
.map(|records| {
records
.into_iter()
.filter_map(|(path, dt)| dt.map(|ts| (path, ts)))
.collect()
})
.map_err(|_| DbError::new(DbErrorKind::QueryError))
}
}