This commit is contained in:
Andrew Gundersen 2021-03-30 10:48:45 -05:00
commit 81662942a2
24 changed files with 506 additions and 402 deletions

View file

@ -1,5 +1,6 @@
<template>
<div id="app" v-if="(windowReady && sessionReady)">
<!-- Only render when profile has been set -->
<div id="app" v-if="(ready)">
<button id="titlebar" />
@ -7,21 +8,25 @@
<span class="menu">
<button
class="menuButton exitButton"
@click.prevent="callNavbar('close')"
@click.prevent="post('nav-bar', 'close')"
/>
<button
class="menuButton minimizeButton"
@click.prevent="callNavbar('min')"
@click.prevent="post('nav-bar', 'min')"
/>
</span>
<!-- Main Pages -->
<Messenger v-if="auth"/>
<Messenger
v-if="profile"
:profile="profile"
:newMessages="newMessages"
/>
<Login v-else />
</div>
<!-- Show spash screen if not ready -->
<!-- Show spash screen if ready is false -->
<Splash v-else />
</template>
@ -29,7 +34,6 @@
<script lang="ts">
import { defineComponent, onMounted, onUnmounted, ref } from "vue";
import { IpcRendererEvent } from "electron";
import { authRequest } from '@/modules/message';
import { useIpc } from "@/modules/ipc";
import Splash from "@/components/splash.vue";
@ -44,74 +48,52 @@ export default defineComponent({
},
setup() {
const { post, invoke } = useIpc();
const { post } = useIpc();
const auth = ref(false);
const windowReady = ref(false);
const sessionReady = ref(false);
// Whether browser has received user info yet.
const ready = ref(false);
// When connection is established, we send key over.
const onOpen = (_event: IpcRendererEvent, payload: any) => {
console.log(`Connected to Crimata.`)
const key = window.localStorage.getItem("key");
// Information about current user.
const profile = ref(false);
if (key) {
console.log(`Sending key: ${key}`)
post("client-message", authRequest(key, false, false))
}
// New messages that browser missed while closed.
const newMessages = ref([])
else {
console.log("No key, session ready.")
sessionReady.value = true
// Receive updated information about the session.
const updateState = (_event: IpcRendererEvent, payload: any) => {
console.log("APP:Received updated profile and new messages: \n" +
` profile: ${payload.message.profile}\n` +
` new: ${payload.message.newMessages}`)
if (payload.message.profile) {
console.log(`APP:Logged-in, showing Messenger View.`)
} else {
console.log(`APP:Logged-out, showing Login View.`)
}
}
// Set profile and newMessages.
profile.value = payload.message.profile;
newMessages.value = payload.message.newMessages;
// Update authenticate state on auth message from server.
const onAuthResponse = (_event: IpcRendererEvent, payload: any) => {
const key = payload.message.key
const usr = payload.message.usr
console.log(`Received auth response: ${usr}, ${key}`)
ready.value = true;
if (key) {
console.log(`Auth success, saving key: ${key}.`)
window.localStorage.setItem("key", payload.message.key)
auth.value = true;
}
else {
console.log(`Auth failed, clearing local storage.`)
window.localStorage.clear()
auth.value = false;
}
console.log("Session is ready.")
sessionReady.value = true
}
// Post navbar action to backend.
const callNavbar = (action: string) => {
invoke("nav-bar", action);
}
onMounted(() => {
window.ipcRenderer.on("on-connect", onOpen)
window.ipcRenderer.on("auth-response", onAuthResponse)
window.ipcRenderer.on("window-ready", () => windowReady.value = true);
console.log("APP:mounted.")
window.ipcRenderer.on("update-state", updateState)
post("app-mounted", "")
});
onUnmounted(() => {
window.ipcRenderer.removeAllListeners("on-connect")
window.ipcRenderer.removeAllListeners("window-ready")
window.ipcRenderer.removeAllListeners("auth-response")
window.ipcRenderer.removeAllListeners("update-state")
})
return {
callNavbar,
sessionReady,
windowReady,
auth
ready,
profile,
post,
newMessages
}
}
})