diff --git a/backend/handler/database/screenshots_handler.py b/backend/handler/database/screenshots_handler.py index ed3abcdae..585359539 100644 --- a/backend/handler/database/screenshots_handler.py +++ b/backend/handler/database/screenshots_handler.py @@ -2,7 +2,7 @@ from collections.abc import Sequence from functools import partial import pydash -from sqlalchemy import delete, or_, select, update +from sqlalchemy import case, delete, or_, select, update from sqlalchemy.orm import Session from sqlalchemy.sql import Delete, Select, Update @@ -38,8 +38,8 @@ class DBScreenshotsHandler(DBBaseHandler): if exclude_filenames: query = query.filter( or_( - Screenshot.file_name.not_in(filenames), - Screenshot.file_name_no_ext.not_in(filenames), + Screenshot.file_name.not_in(exclude_filenames), + Screenshot.file_name_no_ext.not_in(exclude_filenames), ) ) @@ -69,6 +69,11 @@ class DBScreenshotsHandler(DBBaseHandler): user_id=user_id, filenames=pydash.compact([file_name, file_name_no_ext]), ) + # Prefer exact stem matches first + query = query.order_by( + case((Screenshot.file_name_no_ext == file_name, 0), else_=1), + Screenshot.id.desc(), + ) return session.scalars(query.limit(1)).first() @begin_session