feat: expand media discovery and AI workflows #8
+9
-4
@@ -2074,11 +2074,16 @@ pub fn delete_folder(conn: &Connection, folder_id: i64) -> Result<()> {
|
|||||||
rows
|
rows
|
||||||
};
|
};
|
||||||
|
|
||||||
let tx = conn.unchecked_transaction()?;
|
// Delete sqlite-vec rows outside any transaction — DML on virtual tables is
|
||||||
for image_id in image_ids {
|
// unreliable inside a transaction and will cause remove_folder to fail for
|
||||||
vector::delete_embedding(&tx, image_id)?;
|
// folders that have generated embeddings. The folder cascade (images rows)
|
||||||
vector::delete_caption_embedding(&tx, image_id)?;
|
// 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.execute("DELETE FROM folders WHERE id = ?1", params![folder_id])?;
|
||||||
tx.commit()?;
|
tx.commit()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
+3
-3
@@ -657,8 +657,8 @@ export const useGalleryStore = create<GalleryState>((set, get) => ({
|
|||||||
const { selectedFolderId, loadFolders, loadImages, loadBackgroundJobProgress } = get();
|
const { selectedFolderId, loadFolders, loadImages, loadBackgroundJobProgress } = get();
|
||||||
await loadFolders();
|
await loadFolders();
|
||||||
await loadBackgroundJobProgress();
|
await loadBackgroundJobProgress();
|
||||||
// Invalidate tag cloud cache since library content changed
|
// Invalidate tag cloud and explore-tags cache since library content changed
|
||||||
set({ tagCloudFolderId: undefined, tagCloudEntries: [] });
|
set({ tagCloudFolderId: undefined, tagCloudEntries: [], exploreTagsFolderId: undefined });
|
||||||
if (selectedFolderId === folderId) {
|
if (selectedFolderId === folderId) {
|
||||||
set({ selectedFolderId: null });
|
set({ selectedFolderId: null });
|
||||||
await loadImages(true);
|
await loadImages(true);
|
||||||
@@ -810,7 +810,7 @@ export const useGalleryStore = create<GalleryState>((set, get) => ({
|
|||||||
if (collectionTitle === "Explore Cluster") return;
|
if (collectionTitle === "Explore Cluster") return;
|
||||||
if (collectionTitle === "Similar Images" && similarSourceImageId !== null) {
|
if (collectionTitle === "Similar Images" && similarSourceImageId !== null) {
|
||||||
if (!similarHasMore) return;
|
if (!similarHasMore) return;
|
||||||
await get().loadSimilarImages(similarSourceImageId, similarFolderId, false);
|
await get().loadSimilarImages(similarSourceImageId, similarFolderId, false, get().similarSourceFolderId ?? null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (collectionTitle === "Region Search Results" && similarSourceImageId !== null && similarCrop !== null) {
|
if (collectionTitle === "Region Search Results" && similarSourceImageId !== null && similarCrop !== null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user