diff --git a/backend/alembic/versions/0042_add_missing_rom_flag.py b/backend/alembic/versions/0042_add_missing_from_fs.py similarity index 54% rename from backend/alembic/versions/0042_add_missing_rom_flag.py rename to backend/alembic/versions/0042_add_missing_from_fs.py index 80e119911..8a2899a33 100644 --- a/backend/alembic/versions/0042_add_missing_rom_flag.py +++ b/backend/alembic/versions/0042_add_missing_from_fs.py @@ -1,6 +1,6 @@ """empty message -Revision ID: 0042_add_missing_fields +Revision ID: 0042_add_missing_from_fs Revises: 0041_assets_t_thumb_cleanup Create Date: 2025-06-11 @@ -10,7 +10,7 @@ import sqlalchemy as sa from alembic import op # revision identifiers, used by Alembic. -revision = "0042_add_missing_fields" +revision = "0042_add_missing_from_fs" down_revision = "0041_assets_t_thumb_cleanup" branch_labels = None depends_on = None @@ -19,58 +19,72 @@ depends_on = None def upgrade(): with op.batch_alter_table("platforms", schema=None) as batch_op: batch_op.add_column( - sa.Column("missing", sa.Boolean(), nullable=False, server_default="0") + sa.Column( + "missing_from_fs", sa.Boolean(), nullable=False, server_default="0" + ) ) with op.batch_alter_table("roms", schema=None) as batch_op: batch_op.add_column( - sa.Column("missing", sa.Boolean(), nullable=False, server_default="0") + sa.Column( + "missing_from_fs", sa.Boolean(), nullable=False, server_default="0" + ) ) with op.batch_alter_table("rom_files", schema=None) as batch_op: batch_op.add_column( - sa.Column("missing", sa.Boolean(), nullable=False, server_default="0") + sa.Column( + "missing_from_fs", sa.Boolean(), nullable=False, server_default="0" + ) ) with op.batch_alter_table("firmware", schema=None) as batch_op: batch_op.add_column( - sa.Column("missing", sa.Boolean(), nullable=False, server_default="0") + sa.Column( + "missing_from_fs", sa.Boolean(), nullable=False, server_default="0" + ) ) with op.batch_alter_table("saves", schema=None) as batch_op: batch_op.add_column( - sa.Column("missing", sa.Boolean(), nullable=False, server_default="0") + sa.Column( + "missing_from_fs", sa.Boolean(), nullable=False, server_default="0" + ) ) with op.batch_alter_table("states", schema=None) as batch_op: batch_op.add_column( - sa.Column("missing", sa.Boolean(), nullable=False, server_default="0") + sa.Column( + "missing_from_fs", sa.Boolean(), nullable=False, server_default="0" + ) ) with op.batch_alter_table("screenshots", schema=None) as batch_op: batch_op.add_column( - sa.Column("missing", sa.Boolean(), nullable=False, server_default="0") + sa.Column( + "missing_from_fs", sa.Boolean(), nullable=False, server_default="0" + ) ) def downgrade(): with op.batch_alter_table("platforms", schema=None) as batch_op: - batch_op.drop_column("missing") + batch_op.drop_column("missing_from_fs") with op.batch_alter_table("roms", schema=None) as batch_op: - batch_op.drop_column("missing") + batch_op.drop_column("missing_from_fs") with op.batch_alter_table("rom_files", schema=None) as batch_op: - batch_op.drop_column("missing") + batch_op.drop_column("missing_from_fs") with op.batch_alter_table("firmware", schema=None) as batch_op: - batch_op.drop_column("missing") + batch_op.drop_column("missing_from_fs") with op.batch_alter_table("saves", schema=None) as batch_op: - batch_op.drop_column("missing") + batch_op.drop_column("missing_from_fs") with op.batch_alter_table("states", schema=None) as batch_op: - batch_op.drop_column("missing") + batch_op.drop_column("missing_from_fs") with op.batch_alter_table("screenshots", schema=None) as batch_op: - batch_op.drop_column("missing") + batch_op.drop_column("missing_from_fs") diff --git a/backend/endpoints/platform.py b/backend/endpoints/platform.py index 82b8fcf52..2e84f1773 100644 --- a/backend/endpoints/platform.py +++ b/backend/endpoints/platform.py @@ -90,7 +90,7 @@ def get_supported_platforms(request: Request) -> list[PlatformSchema]: "created_at": now, "updated_at": now, "fs_size_bytes": 0, - "missing": False, + "missing_from_fs": False, } if platform["name"] in db_platforms_map: diff --git a/backend/endpoints/responses/assets.py b/backend/endpoints/responses/assets.py index 693410e58..2256eb80f 100644 --- a/backend/endpoints/responses/assets.py +++ b/backend/endpoints/responses/assets.py @@ -16,7 +16,7 @@ class BaseAsset(BaseModel): full_path: str download_path: str - missing: bool + missing_from_fs: bool created_at: datetime updated_at: datetime diff --git a/backend/endpoints/responses/firmware.py b/backend/endpoints/responses/firmware.py index cc9080d28..bda29e0e2 100644 --- a/backend/endpoints/responses/firmware.py +++ b/backend/endpoints/responses/firmware.py @@ -20,7 +20,7 @@ class FirmwareSchema(BaseModel): md5_hash: str sha1_hash: str - missing: bool + missing_from_fs: bool created_at: datetime updated_at: datetime diff --git a/backend/endpoints/responses/platform.py b/backend/endpoints/responses/platform.py index 4404a0ba5..043ad5e83 100644 --- a/backend/endpoints/responses/platform.py +++ b/backend/endpoints/responses/platform.py @@ -32,7 +32,7 @@ class PlatformSchema(BaseModel): updated_at: datetime fs_size_bytes: int - missing: bool + missing_from_fs: bool class Config: from_attributes = True diff --git a/backend/endpoints/responses/rom.py b/backend/endpoints/responses/rom.py index e8f7f6b58..5d9371f02 100644 --- a/backend/endpoints/responses/rom.py +++ b/backend/endpoints/responses/rom.py @@ -225,7 +225,7 @@ class RomSchema(BaseModel): created_at: datetime updated_at: datetime - missing: bool + missing_from_fs: bool class Config: from_attributes = True diff --git a/backend/endpoints/sockets/scan.py b/backend/endpoints/sockets/scan.py index ff4b987e5..5c3037884 100644 --- a/backend/endpoints/sockets/scan.py +++ b/backend/endpoints/sockets/scan.py @@ -130,7 +130,7 @@ async def _identify_firmware( scan_stats.scanned_firmware += 1 scan_stats.added_firmware += 1 if not firmware else 0 - scanned_firmware.missing = False + scanned_firmware.missing_from_fs = False db_firmware_handler.add_firmware(scanned_firmware) return scan_stats @@ -234,8 +234,8 @@ async def _identify_rom( rom.fs_name = fs_rom["fs_name"] db_rom_handler.add_rom(rom) - if rom.missing: - db_rom_handler.update_rom(rom.id, {"missing": False}) + if rom.missing_from_fs: + db_rom_handler.update_rom(rom.id, {"missing_from_fs": False}) return scan_stats diff --git a/backend/handler/database/firmware_handler.py b/backend/handler/database/firmware_handler.py index 0e9814be7..59398b1e9 100644 --- a/backend/handler/database/firmware_handler.py +++ b/backend/handler/database/firmware_handler.py @@ -90,7 +90,7 @@ class DBFirmwareHandler(DBBaseHandler): Firmware.file_name.not_in(fs_firmwares_to_keep), ) ) - .values(**{"missing": True}) + .values(**{"missing_from_fs": True}) .execution_options(synchronize_session="evaluate") ) return missing_firmware diff --git a/backend/handler/database/platforms_handler.py b/backend/handler/database/platforms_handler.py index a5cf15204..74dcfc69b 100644 --- a/backend/handler/database/platforms_handler.py +++ b/backend/handler/database/platforms_handler.py @@ -95,14 +95,14 @@ class DBPlatformsHandler(DBBaseHandler): session.execute( update(Platform) .where(or_(Platform.fs_slug.not_in(fs_platforms_to_keep), Platform.slug.is_(None))) # type: ignore[attr-defined] - .values(**{"missing": True}) + .values(**{"missing_from_fs": True}) .execution_options(synchronize_session="fetch") ) session.execute( update(Rom) .where(Rom.platform_id.in_([p.id for p in missing_platforms])) # type: ignore[attr-defined] - .values(**{"missing": True}) + .values(**{"missing_from_fs": True}) .execution_options(synchronize_session="fetch") ) return missing_platforms diff --git a/backend/handler/database/roms_handler.py b/backend/handler/database/roms_handler.py index f08636945..68a7eaef2 100644 --- a/backend/handler/database/roms_handler.py +++ b/backend/handler/database/roms_handler.py @@ -238,8 +238,8 @@ class DBRomsHandler(DBBaseHandler): def filter_by_ra_only(self, query: Query): return query.filter(Rom.ra_id.isnot(None)) - def filter_by_missing_only(self, query: Query): - return query.filter(Rom.missing.isnot(False)) + def filter_by_missing_from_fs_only(self, query: Query): + return query.filter(Rom.missing_from_fs.isnot(False)) def filter_by_genre(self, query: Query, selected_genre: str): if ROMM_DB_DRIVER == "postgresql": @@ -411,7 +411,7 @@ class DBRomsHandler(DBBaseHandler): query = self.filter_by_ra_only(query) if missing_only: - query = self.filter_by_missing_only(query) + query = self.filter_by_missing_from_fs_only(query) if group_by_meta_id: @@ -705,7 +705,7 @@ class DBRomsHandler(DBBaseHandler): Rom.platform_id == platform_id, Rom.fs_name.not_in(fs_roms_to_keep) ) ) - .values(**{"missing": True}) + .values(**{"missing_from_fs": True}) .execution_options(synchronize_session="evaluate") ) return missing_roms @@ -792,7 +792,7 @@ class DBRomsHandler(DBBaseHandler): session.execute( update(RomFile) .where(RomFile.rom_id == rom_id) - .values(**{"missing": True}) + .values(**{"missing_from_fs": True}) .execution_options(synchronize_session="evaluate") ) return missing_rom_files diff --git a/backend/handler/database/saves_handler.py b/backend/handler/database/saves_handler.py index 337531ba3..44f9c39e5 100644 --- a/backend/handler/database/saves_handler.py +++ b/backend/handler/database/saves_handler.py @@ -90,7 +90,7 @@ class DBSavesHandler(DBBaseHandler): Save.file_name.not_in(saves_to_keep), ) ) - .values(**{"missing": True}) + .values(**{"missing_from_fs": True}) .execution_options(synchronize_session="evaluate") ) diff --git a/backend/handler/database/screenshots_handler.py b/backend/handler/database/screenshots_handler.py index 7be3ad474..401a39814 100644 --- a/backend/handler/database/screenshots_handler.py +++ b/backend/handler/database/screenshots_handler.py @@ -76,7 +76,7 @@ class DBScreenshotsHandler(DBBaseHandler): Screenshot.file_name.not_in(screenshots_to_keep), ) ) - .values(**{"missing": True}) + .values(**{"missing_from_fs": True}) .execution_options(synchronize_session="evaluate") ) diff --git a/backend/handler/database/states_handler.py b/backend/handler/database/states_handler.py index 9dabfbd3c..095308853 100644 --- a/backend/handler/database/states_handler.py +++ b/backend/handler/database/states_handler.py @@ -90,7 +90,7 @@ class DBStatesHandler(DBBaseHandler): State.file_name.not_in(states_to_keep), ) ) - .values(**{"missing": True}) + .values(**{"missing_from_fs": True}) .execution_options(synchronize_session="evaluate") ) diff --git a/backend/handler/scan_handler.py b/backend/handler/scan_handler.py index 9ae60f040..a30f21a09 100644 --- a/backend/handler/scan_handler.py +++ b/backend/handler/scan_handler.py @@ -175,7 +175,7 @@ async def scan_platform( extra=LOGGER_MODULE_NAME, ) - platform_attrs["missing"] = False + platform_attrs["missing_from_fs"] = False return Platform(**platform_attrs) @@ -398,7 +398,7 @@ async def scan_rom( extra=LOGGER_MODULE_NAME, ) - rom_attrs["missing"] = False + rom_attrs["missing_from_fs"] = False return Rom(**rom_attrs) diff --git a/backend/models/assets.py b/backend/models/assets.py index 71bcce4df..8d8b00033 100644 --- a/backend/models/assets.py +++ b/backend/models/assets.py @@ -23,7 +23,7 @@ class BaseAsset(BaseModel): file_path: Mapped[str] = mapped_column(String(length=1000)) file_size_bytes: Mapped[int] = mapped_column(BigInteger(), default=0) - missing: Mapped[bool] = mapped_column(default=False, nullable=False) + missing_from_fs: Mapped[bool] = mapped_column(default=False, nullable=False) @cached_property def full_path(self) -> str: diff --git a/backend/models/firmware.py b/backend/models/firmware.py index 9ffd19441..32066b078 100644 --- a/backend/models/firmware.py +++ b/backend/models/firmware.py @@ -41,7 +41,7 @@ class Firmware(BaseModel): platform: Mapped[Platform] = relationship(lazy="joined", back_populates="firmware") - missing: Mapped[bool] = mapped_column(default=False, nullable=False) + missing_from_fs: Mapped[bool] = mapped_column(default=False, nullable=False) @property def platform_slug(self) -> str: diff --git a/backend/models/platform.py b/backend/models/platform.py index cdfd463a1..8ea861f0f 100644 --- a/backend/models/platform.py +++ b/backend/models/platform.py @@ -50,7 +50,7 @@ class Platform(BaseModel): select(func.count(Rom.id)).where(Rom.platform_id == id).scalar_subquery() ) - missing: Mapped[bool] = mapped_column(default=False, nullable=False) + missing_from_fs: Mapped[bool] = mapped_column(default=False, nullable=False) @cached_property def fs_size_bytes(self) -> int: diff --git a/backend/models/rom.py b/backend/models/rom.py index 002eaea58..8996c0dce 100644 --- a/backend/models/rom.py +++ b/backend/models/rom.py @@ -59,7 +59,7 @@ class RomFile(BaseModel): rom: Mapped[Rom] = relationship(lazy="joined", back_populates="files") - missing: Mapped[bool] = mapped_column(default=False, nullable=False) + missing_from_fs: Mapped[bool] = mapped_column(default=False, nullable=False) @cached_property def full_path(self) -> str: @@ -205,7 +205,7 @@ class Rom(BaseModel): back_populates="roms", ) - missing: Mapped[bool] = mapped_column(default=False, nullable=False) + missing_from_fs: Mapped[bool] = mapped_column(default=False, nullable=False) @property def platform_slug(self) -> str: diff --git a/frontend/src/components/Details/ActionBar.vue b/frontend/src/components/Details/ActionBar.vue index 23e9329ec..d8c5cf119 100644 --- a/frontend/src/components/Details/ActionBar.vue +++ b/frontend/src/components/Details/ActionBar.vue @@ -71,7 +71,7 @@ async function copyDownloadLink(rom: DetailedRom) {
{{ rom.fs_name }} @@ -65,7 +65,7 @@ watch( - + diff --git a/frontend/src/components/Gallery/AppBar/Platform/Base.vue b/frontend/src/components/Gallery/AppBar/Platform/Base.vue index dfaea090d..918a9e120 100644 --- a/frontend/src/components/Gallery/AppBar/Platform/Base.vue +++ b/frontend/src/components/Gallery/AppBar/Platform/Base.vue @@ -20,7 +20,7 @@ const { activePlatformInfoDrawer } = storeToRefs(navigationStore);