feat: expand media discovery and AI workflows #8

Merged
LyAhn merged 25 commits from codex/5-discovery-features into main 2026-06-07 22:43:16 +00:00
2 changed files with 12 additions and 7 deletions
Showing only changes of commit fd1585b5e2 - Show all commits
+9 -4
View File
@@ -2074,11 +2074,16 @@ pub fn delete_folder(conn: &Connection, folder_id: i64) -> Result<()> {
rows
};
let tx = conn.unchecked_transaction()?;
for image_id in image_ids {
vector::delete_embedding(&tx, image_id)?;
vector::delete_caption_embedding(&tx, image_id)?;
// Delete sqlite-vec rows outside any transaction — DML on virtual tables is
// unreliable inside a transaction and will cause remove_folder to fail for
// folders that have generated embeddings. The folder cascade (images rows)
// is handled by the FK ON DELETE CASCADE when the folder row is deleted.
for image_id in &image_ids {
vector::delete_embedding(conn, *image_id)?;
vector::delete_caption_embedding(conn, *image_id)?;
}
let tx = conn.unchecked_transaction()?;
tx.execute("DELETE FROM folders WHERE id = ?1", params![folder_id])?;
tx.commit()?;
Ok(())
+3 -3
View File
@@ -657,8 +657,8 @@ export const useGalleryStore = create<GalleryState>((set, get) => ({
const { selectedFolderId, loadFolders, loadImages, loadBackgroundJobProgress } = get();
await loadFolders();
await loadBackgroundJobProgress();
// Invalidate tag cloud cache since library content changed
set({ tagCloudFolderId: undefined, tagCloudEntries: [] });
// Invalidate tag cloud and explore-tags cache since library content changed
set({ tagCloudFolderId: undefined, tagCloudEntries: [], exploreTagsFolderId: undefined });
if (selectedFolderId === folderId) {
set({ selectedFolderId: null });
await loadImages(true);
@@ -810,7 +810,7 @@ export const useGalleryStore = create<GalleryState>((set, get) => ({
if (collectionTitle === "Explore Cluster") return;
if (collectionTitle === "Similar Images" && similarSourceImageId !== null) {
if (!similarHasMore) return;
await get().loadSimilarImages(similarSourceImageId, similarFolderId, false);
await get().loadSimilarImages(similarSourceImageId, similarFolderId, false, get().similarSourceFolderId ?? null);
return;
}
if (collectionTitle === "Region Search Results" && similarSourceImageId !== null && similarCrop !== null) {