Skip to content

Commit

Permalink
use platforms store + fix scan
Browse files Browse the repository at this point in the history
  • Loading branch information
gantoine committed May 24, 2024
1 parent 2d4d1b5 commit d99c199
Show file tree
Hide file tree
Showing 11 changed files with 87 additions and 55 deletions.
2 changes: 1 addition & 1 deletion backend/handler/database/platforms_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class DBPlatformsHandler(DBBaseHandler):
def add_platform(
self, platform: Platform, query: Query = None, session: Session = None
) -> Platform | None:
session.merge(platform)
platform = session.merge(platform)
session.flush()

return session.scalar(query.filter_by(id=platform.id).limit(1))
Expand Down
34 changes: 20 additions & 14 deletions backend/handler/database/roms_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ def _order(self, data: Select[Rom], order_by: str, order_dir: str):

@begin_session
@with_assets
def add_rom(self, rom: Rom, query: Query = None, session: Session = None):
session.merge(rom)
def add_rom(self, rom: Rom, query: Query = None, session: Session = None) -> Rom:
rom = session.merge(rom)
session.flush()

return session.scalar(query.filter_by(id=rom.id).limit(1))
Expand All @@ -70,7 +70,7 @@ def get_roms(
order_dir: str = "asc",
query: Query = None,
session: Session = None,
):
) -> list[Rom] | Rom | None:
return (
session.scalar(query.filter_by(id=id).limit(1))
if id
Expand All @@ -89,7 +89,7 @@ def get_rom_by_filename(
file_name: str,
query: Query = None,
session: Session = None,
):
) -> Rom | None:
return session.scalar(
query.filter_by(platform_id=platform_id, file_name=file_name).limit(1)
)
Expand All @@ -98,7 +98,7 @@ def get_rom_by_filename(
@with_assets
def get_rom_by_filename_no_tags(
self, file_name_no_tags: str, query: Query = None, session: Session = None
):
) -> Rom | None:
return session.scalar(
query.filter_by(file_name_no_tags=file_name_no_tags).limit(1)
)
Expand All @@ -107,13 +107,13 @@ def get_rom_by_filename_no_tags(
@with_assets
def get_rom_by_filename_no_ext(
self, file_name_no_ext: str, query: Query = None, session: Session = None
):
) -> Rom | None:
return session.scalar(
query.filter_by(file_name_no_ext=file_name_no_ext).limit(1)
)

@begin_session
def update_rom(self, id: int, data: dict, session: Session = None):
def update_rom(self, id: int, data: dict, session: Session = None) -> Rom:
return session.execute(
update(Rom)
.where(Rom.id == id)
Expand All @@ -122,33 +122,39 @@ def update_rom(self, id: int, data: dict, session: Session = None):
)

@begin_session
def delete_rom(self, id: int, session: Session = None):
def delete_rom(self, id: int, session: Session = None) -> Rom:
return session.execute(
delete(Rom)
.where(Rom.id == id)
.execution_options(synchronize_session="evaluate")
)

@begin_session
def purge_roms(self, platform_id: int, roms: list[str], session: Session = None):
def purge_roms(
self, platform_id: int, roms: list[str], session: Session = None
) -> int:
return session.execute(
delete(Rom)
.where(and_(Rom.platform_id == platform_id, Rom.file_name.not_in(roms)))
.execution_options(synchronize_session="evaluate")
)

@begin_session
def get_rom_note(self, rom_id: int, user_id: int, session: Session = None):
return session.scalars(
def get_rom_note(
self, rom_id: int, user_id: int, session: Session = None
) -> RomNote | None:
return session.scalar(
select(RomNote).filter_by(rom_id=rom_id, user_id=user_id).limit(1)
).first()
)

@begin_session
def add_rom_note(self, rom_id: int, user_id: int, session: Session = None):
def add_rom_note(
self, rom_id: int, user_id: int, session: Session = None
) -> RomNote:
return session.merge(RomNote(rom_id=rom_id, user_id=user_id))

@begin_session
def update_rom_note(self, id: int, data: dict, session: Session = None):
def update_rom_note(self, id: int, data: dict, session: Session = None) -> RomNote:
return session.execute(
update(RomNote)
.where(RomNote.id == id)
Expand Down
6 changes: 3 additions & 3 deletions backend/logger/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
log.setLevel(logging.DEBUG)

# Set up sqlachemy logger
sql_log = logging.getLogger("sqlalchemy.engine")
sql_log.setLevel(logging.DEBUG)
# sql_log = logging.getLogger("sqlalchemy.engine")
# sql_log.setLevel(logging.DEBUG)

# Define stdout handler
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setFormatter(StdoutFormatter())
log.addHandler(stdout_handler)
sql_log.addHandler(stdout_handler)
# sql_log.addHandler(stdout_handler)

# Hush passlib warnings
logging.getLogger("passlib").setLevel(logging.ERROR)
2 changes: 1 addition & 1 deletion frontend/src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ socket.on(
socket.on("scan:scanning_rom", (rom: Rom) => {
scanningStore.set(true);
if (romsStore.platform.name === rom.platform_name) {
if (romsStore.platformID === rom.platform_id) {
romsStore.add([rom]);
romsStore.setFiltered(
isFiltered ? romsStore.filteredRoms : romsStore.allRoms,
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Gallery/AppBar/AdminMenu.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import DeleteBtn from "@/components/Gallery/AppBar/DeleteBtn.vue";

<template>
<v-list rounded="0" class="pa-0">
<view-firmware-btn />
<upload-rom-btn />
<view-firmware-btn />
<scan-btn />
<v-divider class="border-opacity-25" />
<delete-btn />
Expand Down
19 changes: 13 additions & 6 deletions frontend/src/components/Gallery/AppBar/DeleteBtn.vue
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
<script setup lang="ts">
import storeRoms from "@/stores/roms";
import type { Events } from "@/types/emitter";
import type { Emitter } from "mitt";
import { inject } from "vue";
import { useRoute } from "vue-router";
import type { Emitter } from "mitt";
import type { Events } from "@/types/emitter";
import storePlatforms, { type Platform } from "@/stores/platforms";
// Props
const emitter = inject<Emitter<Events>>("emitter");
const romsStore = storeRoms();
const platforms = storePlatforms();
const route = useRoute();
</script>

<template>
<v-list-item
v-if="romsStore.platform"
v-if="route.params.platform"
class="py-4 pr-5 text-romm-red"
@click="emitter?.emit('showDeletePlatformDialog', romsStore.platform)"
@click="
emitter?.emit(
'showDeletePlatformDialog',
platforms.get(Number(route.params.platform)) as Platform
)
"
>
<v-list-item-title class="d-flex">
<v-icon icon="mdi-delete" color="red" class="mr-2" />
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/components/Gallery/AppBar/ScanBtn.vue
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ async function scan() {
if (!socket.connected) socket.connect();
socket.emit("scan", {
platforms: [romsStore.platform.id],
platforms: [romsStore.platformID],
type: "quick",
apis: heartbeat.getMetadataOptions().map((s) => s.value),
});
}
</script>

<template>
<v-list-item v-if="romsStore.platform" @click="scan" class="py-4 pr-5">
<v-list-item v-if="romsStore.platformID" @click="scan" class="py-4 pr-5">
<v-list-item-title class="d-flex">
<v-icon icon="mdi-magnify-scan" class="mr-2" />
Scan platform
Expand Down
15 changes: 11 additions & 4 deletions frontend/src/components/Gallery/AppBar/UploadRomBtn.vue
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
<script setup lang="ts">
import { inject } from "vue";
import { useRoute } from "vue-router";
import type { Emitter } from "mitt";
import type { Events } from "@/types/emitter";
import storeRoms from "@/stores/roms";
import storePlatforms, { type Platform } from "@/stores/platforms";
// Props
const emitter = inject<Emitter<Events>>("emitter");
const romsStore = storeRoms();
const platforms = storePlatforms();
const route = useRoute();
</script>

<template>
<v-list-item
v-if="romsStore.platform"
@click="emitter?.emit('showUploadRomDialog', romsStore.platform)"
v-if="route.params.platform"
@click="
emitter?.emit(
'showUploadRomDialog',
platforms.get(Number(route.params.platform)) as Platform
)
"
class="py-4 pr-5"
>
<v-list-item-title class="d-flex"
Expand Down
15 changes: 11 additions & 4 deletions frontend/src/components/Gallery/AppBar/ViewFirmwareBtn.vue
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
<script setup lang="ts">
import { inject } from "vue";
import { useRoute } from "vue-router";
import type { Emitter } from "mitt";
import type { Events } from "@/types/emitter";
import storeRoms from "@/stores/roms";
import storePlatforms, { type Platform } from "@/stores/platforms";
// Props
const emitter = inject<Emitter<Events>>("emitter");
const romsStore = storeRoms();
const platforms = storePlatforms();
const route = useRoute();
</script>

<template>
<v-list-item
v-if="romsStore.platform"
@click="emitter?.emit('showFirmwareDialog', romsStore.platform)"
v-if="route.params.platform"
@click="
emitter?.emit(
'showFirmwareDialog',
platforms.get(Number(route.params.platform)) as Platform
)
"
class="py-4 pr-5"
>
<v-list-item-title class="d-flex"
Expand Down
8 changes: 4 additions & 4 deletions frontend/src/stores/roms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export type Rom = RomSchema & {

export default defineStore("roms", {
state: () => ({
_platform: {} as PlatformSchema,
_platformID: 0,
_all: [] as Rom[],
_grouped: [] as Rom[],
_filteredIDs: [] as number[],
Expand All @@ -27,7 +27,7 @@ export default defineStore("roms", {
}),

getters: {
platform: (state) => state._platform,
platformID: (state) => state._platformID,
allRoms: (state) => state._all,
filteredRoms: (state) =>
state._grouped.filter((rom) => state._filteredIDs.includes(rom.id)),
Expand Down Expand Up @@ -69,8 +69,8 @@ export default defineStore("roms", {
return a.sort_comparator.localeCompare(b.sort_comparator);
});
},
setPlatform(platform: PlatformSchema) {
this._platform = platform;
setPlatformID(platformID: number) {
this._platformID = platformID;
},
setRecentRoms(roms: Rom[]) {
this.recentRoms = roms;
Expand Down
35 changes: 20 additions & 15 deletions frontend/src/views/Gallery/Base.vue
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const {
searchRoms,
cursor,
searchCursor,
platform,
platformID,
} = storeToRefs(romsStore);
// Event listeners bus
Expand All @@ -60,7 +60,7 @@ async function fetchRoms() {
await romApi
.getRoms({
platformId: platform.value.id,
platformId: platformID.value,
cursor: galleryFilterStore.isFiltered()
? searchCursor.value
: cursor.value,
Expand All @@ -84,12 +84,12 @@ async function fetchRoms() {
})
.catch((error) => {
emitter?.emit("snackbarShow", {
msg: `Couldn't fetch roms for ${platform.value.name}: ${error}`,
msg: `Couldn't fetch roms for platform ID ${platformID.value}: ${error}`,
icon: "mdi-close-circle",
color: "red",
timeout: 4000,
});
console.error(`Couldn't fetch roms for ${platform.value.name}: ${error}`);
console.error(`Couldn't fetch roms for platform ID ${platformID.value}: ${error}`);
})
.finally(() => {
gettingRoms.value = false;
Expand Down Expand Up @@ -186,16 +186,19 @@ function onScroll() {
}
onMounted(async () => {
let platform = platforms.get(Number(route.params.platform));
const storedPlatformID = romsStore.platformID;
const platformID = Number(route.params.platform);
romsStore.setPlatformID(platformID);
const platform = platforms.get(platformID);
if (!platform) {
platform = (await platformApi.getPlatform(Number(route.params.platform)))
.data;
const { data } = await platformApi.getPlatform(platformID)
platforms.add(data);
}
romsStore.setPlatform(platform);
// If platform is different, reset store and fetch roms
if (platform.id != romsStore.platform.id) {
if (storedPlatformID != platformID) {
resetGallery();
await fetchRoms();
}
Expand Down Expand Up @@ -225,13 +228,15 @@ onBeforeRouteUpdate(async (to, _) => {
// Reset store if switching to another platform
resetGallery();
let newPlatform = platforms.get(Number(to.params.platform));
if (!newPlatform) {
newPlatform = (await platformApi.getPlatform(Number(to.params.platform)))
.data;
const platformID = Number(to.params.platform);
romsStore.setPlatformID(platformID);
const platform = platforms.get(platformID);
if (!platform) {
const { data } = await platformApi.getPlatform(platformID)
platforms.add(data);
}
romsStore.setPlatform(newPlatform);
await fetchRoms();
setFilters();
});
Expand Down

0 comments on commit d99c199

Please sign in to comment.