Route settings dialog to /settings and fix worker null handling
This commit is contained in:
@@ -63,7 +63,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="header-settings">
|
<div class="header-settings">
|
||||||
<button class="header-settings-btn" title="Settings" @click="showSettings = !showSettings">
|
<button class="header-settings-btn" title="Settings" @click="openSettings">
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
width="20"
|
width="20"
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
<!-- Full-screen settings view -->
|
<!-- Full-screen settings view -->
|
||||||
<div v-if="showSettings" class="settings-view">
|
<div v-if="showSettings" class="settings-view">
|
||||||
<div class="settings-header">
|
<div class="settings-header">
|
||||||
<button class="settings-back" @click="showSettings = false">
|
<button class="settings-back" @click="closeSettings">
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
width="24"
|
width="24"
|
||||||
@@ -239,7 +239,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, watch, computed, onMounted, onUnmounted } from "vue"
|
import { ref, watch, computed, onMounted, onUnmounted } from "vue"
|
||||||
import { useRouter } from "vue-router"
|
import { useRouter, useRoute } from "vue-router"
|
||||||
import { navAttrs } from "../composables/useKeyboardNavigation"
|
import { navAttrs } from "../composables/useKeyboardNavigation"
|
||||||
import logoUrl from "../assets/mediahive.webp"
|
import logoUrl from "../assets/mediahive.webp"
|
||||||
import { fetchRoots, replaceRoots, pickFolderAndAddRoot } from "../api"
|
import { fetchRoots, replaceRoots, pickFolderAndAddRoot } from "../api"
|
||||||
@@ -273,6 +273,7 @@ const emit = defineEmits<{
|
|||||||
}>()
|
}>()
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
const route = useRoute()
|
||||||
const searchInputRef = ref<HTMLInputElement | null>(null)
|
const searchInputRef = ref<HTMLInputElement | null>(null)
|
||||||
const localSearch = ref(props.searchQuery)
|
const localSearch = ref(props.searchQuery)
|
||||||
|
|
||||||
@@ -283,9 +284,23 @@ function _onPywebviewReady() {
|
|||||||
window.addEventListener("pywebviewready", _onPywebviewReady, { once: true })
|
window.addEventListener("pywebviewready", _onPywebviewReady, { once: true })
|
||||||
onUnmounted(() => window.removeEventListener("pywebviewready", _onPywebviewReady))
|
onUnmounted(() => window.removeEventListener("pywebviewready", _onPywebviewReady))
|
||||||
|
|
||||||
const showSettings = ref(false)
|
const showSettings = computed(() => route.path === "/settings")
|
||||||
const roots = ref<RootEntry[]>([])
|
const roots = ref<RootEntry[]>([])
|
||||||
|
|
||||||
|
function openSettings() {
|
||||||
|
if (showSettings.value) return
|
||||||
|
void router.push("/settings")
|
||||||
|
}
|
||||||
|
|
||||||
|
function closeSettings() {
|
||||||
|
if (!showSettings.value) return
|
||||||
|
if (window.history.length > 1) {
|
||||||
|
router.back()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
void router.replace("/movies")
|
||||||
|
}
|
||||||
|
|
||||||
function setPreferredResolution(value: ResolutionPreference) {
|
function setPreferredResolution(value: ResolutionPreference) {
|
||||||
settings.preferredResolution = value
|
settings.preferredResolution = value
|
||||||
}
|
}
|
||||||
@@ -337,7 +352,7 @@ async function addRoot() {
|
|||||||
try {
|
try {
|
||||||
await replaceRoots(newRoots)
|
await replaceRoots(newRoots)
|
||||||
await refreshRoots()
|
await refreshRoots()
|
||||||
showSettings.value = false
|
closeSettings()
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("Failed to add root:", e)
|
console.error("Failed to add root:", e)
|
||||||
alert("Failed to add root")
|
alert("Failed to add root")
|
||||||
|
|||||||
@@ -36,6 +36,11 @@ const router = createRouter({
|
|||||||
name: "search",
|
name: "search",
|
||||||
component: EmptyRouteComponent,
|
component: EmptyRouteComponent,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/settings",
|
||||||
|
name: "settings",
|
||||||
|
component: EmptyRouteComponent,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: "/series",
|
path: "/series",
|
||||||
name: "series",
|
name: "series",
|
||||||
|
|||||||
@@ -795,9 +795,9 @@ self.onmessage = (event: MessageEvent<SearchWorkerMessage>) => {
|
|||||||
|
|
||||||
void (async () => {
|
void (async () => {
|
||||||
const response = await performSearch(query, token)
|
const response = await performSearch(query, token)
|
||||||
console.log("[worker] search id=%d query=%q CANCELLED", id, query)
|
if (!response) {
|
||||||
return
|
return
|
||||||
console.log("[worker] posting result id=%d query=%q results=%d categories=%d", id, query, response.results.length, response.categories.length)
|
}
|
||||||
self.postMessage(response)
|
self.postMessage(response)
|
||||||
})()
|
})()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user