import { ref, computed, onMounted } from 'vue' import { useRouter } from 'vue-router' import { useMainStore } from '../store/main' import { SubsonicApi, useSubsonicApi } from '../subsonicApi' import { Logo } from '../components/Logo.vine' export const LoginView = ({ returnTo = '/discover' }: { returnTo?: string }) => { const router = useRouter(), mainStore = useMainStore(), subsonicApi = useSubsonicApi(), staticServerUrl = import.meta.env.SERVER_URL ?? null, serverUrl = ref(mainStore.serverUrl ?? ''), username = ref(mainStore.serverCredentials?.username ?? ''), password = ref(''), error = ref(null), displayForm = ref(false), hasError = computed(() => error.value !== null), loginHandler = async() => { try { mainStore.isLoading = true error.value = null const auth = SubsonicApi.createAuth(username.value, password.value) subsonicApi.setServerUrl(staticServerUrl ?? serverUrl.value) subsonicApi.setAuth(auth) subsonicApi.initialize() const serverInfo = await subsonicApi.fetchServerInfo() mainStore.setServerUrl(staticServerUrl ?? serverUrl.value) mainStore.setServerCredentials(auth) mainStore.setServerInfo(serverInfo) router.replace(returnTo) } catch (err: any) { console.error(err) mainStore.isLoading = false error.value = err } } onMounted( () => { if (!mainStore.isAuthenticated()) { displayForm.value = true } else { router.replace(returnTo) } } ) return vine`
`; }