From deb9f2f84cf9afc1e357977a0a30aef2594fd57e Mon Sep 17 00:00:00 2001 From: Andrew Gundersen Date: Sat, 20 Mar 2021 09:50:53 -0500 Subject: [PATCH] updating --- src/App.vue | 40 +++++------ src/background/init.ts | 2 +- src/background/session.ts | 2 - src/background/window.ts | 94 ++++++++++++++------------ src/components/inputItem/inputItem.vue | 31 +++++++-- src/views/messenger.vue | 7 +- windowState.json | 2 +- 7 files changed, 104 insertions(+), 74 deletions(-) diff --git a/src/App.vue b/src/App.vue index 1929108..308977c 100644 --- a/src/App.vue +++ b/src/App.vue @@ -20,6 +20,7 @@ + @@ -34,34 +35,29 @@ export default defineComponent({ components: { Splash }, setup() { - const { invoke } = useIpc(); - const ready = ref(false); - const { saveMessages } = useMessages(); - onMounted(() => { - window.ipcRenderer.on('window-ready', (_event, payload: {message: boolean}) => { - ready.value = payload.message; - }) - }); + // Show spash screen til true. + const ready = ref(false); - onUnmounted(() => { - window.ipcRenderer.removeAllListeners('window-ready') - }) + const { invoke } = useIpc(); - const saveWindowState = async () => { - await invoke('window-save', ""); + // Post navbar action to backend. + const callNavbar = (action: string) => { + console.log("Calling navbar") + invoke('nav-bar', action); } - const callNavbar = async (action: string) => { + const onWindowReady = (_event: any, payload: any) => { + ready.value = true; + } - // save messages before closing. - if (action === 'close') { - saveMessages(); - await saveWindowState(); - } + onMounted(() => { + window.ipcRenderer.on("window-ready", onWindowReady); + }); - invoke('nav-bar', action); - } + onUnmounted(() => { + window.ipcRenderer.removeAllListeners("window-ready") + }) return { callNavbar, @@ -77,7 +73,7 @@ export default defineComponent({ html, body { margin: 0; padding: 0; - background-color: #EBEBEB; + // Background color set in window.ts } #app { diff --git a/src/background/init.ts b/src/background/init.ts index 0f60068..cb90050 100644 --- a/src/background/init.ts +++ b/src/background/init.ts @@ -9,7 +9,7 @@ import { stopStream } from './audio'; let winActive: boolean; backgroundMitt.on('window-active', (state: boolean) => { - winActive = state; + winActive = state; }); export function initApp(dev: boolean): void { diff --git a/src/background/session.ts b/src/background/session.ts index 27a5546..766df03 100644 --- a/src/background/session.ts +++ b/src/background/session.ts @@ -59,7 +59,6 @@ const handleAuthMessage = (message: string) => { } const handleProfileMessage = (message: Profile) => { - console.log("Updating profile...") backgroundMitt.emit('ipc-renderer', { endpoint: 'update-profile', message: message @@ -86,7 +85,6 @@ const handleStandardMessage = (m: StandardMessage) => { } const handleAnnotationMessage = (message: Annotation) => { - console.log("Annotation message") backgroundMitt.emit('ipc-renderer', { endpoint: 'annotate-message', message: message diff --git a/src/background/window.ts b/src/background/window.ts index d46da18..a34427b 100644 --- a/src/background/window.ts +++ b/src/background/window.ts @@ -14,16 +14,17 @@ interface IpcRendererPayload { let win: BrowserWindow | null; -// Util function to handle window close & minimize. -const navBarHandler = (_event, action: string): void => { - switch(action) { - case 'close': - if (win) win.close(); - break; - case 'min': - if (win) win.minimize(); - break; +// Called when a NavBar button is pressed. +const onNavBar = (_event: any, action: string): void => { + console.log("onNavBar") + if (win) { + if (action === "close") { + saveWindowState() + win.close() + } else { + win.minimize() } + } } // Util function to render message on ipc-renderer event. @@ -35,34 +36,42 @@ const renderMessage = (payload: IpcRendererPayload): void => { } } -const onWindowSave = (_event, _s: string) => { +// Write a json with position and size of window. +const saveWindowState = () => { if (win) { const bounds = win.getBounds(); - const state = JSON.stringify({w: bounds.width, h: bounds.height}); - - fs.writeFile('windowstate.json', state, (err: Error) => { + const position = win.getPosition(); + + const state = JSON.stringify( + { + w: bounds.width, + h: bounds.height, + x: position[0], + y: position[1] + } + ); + + fs.writeFile('windowState.json', state, (err) => { if (err) throw err; return; }); } - } // Do this on window mount. -const windowMount = (): void => { +const onWindowMount = (): void => { backgroundMitt.emit('window-active', true); + // handle win nav-bar event. ipcMain.removeHandler('nav-bar'); // avoid setting duplicate handlers - ipcMain.handle('nav-bar', navBarHandler); - - ipcMain.removeHandler('window-save'); // avoid setting duplicate handlers - ipcMain.handle('window-save', onWindowSave); - // render messages through ipc-renderer. + ipcMain.handle('nav-bar', onNavBar); + + // Gateway for messages to the frontend. backgroundMitt.on('ipc-renderer', renderMessage); } -// do this on window dismount. -const windowDismount = (): void => { +// Do this on window dismount (close). +const onWindowDismount = (): void => { win = null; backgroundMitt.emit('window-active', false); } @@ -74,49 +83,48 @@ export async function createWindow(): Promise { // avoid creating duplicate windows. if (win) resolve(); - // read windowState from json. - const rawData = fs.readFileSync('windowState.json'); - const windowState = JSON.parse(rawData); + // Load the saved window state. + const state = JSON.parse(fs.readFileSync('windowState.json').toString()); + // Define the browser window. win = new BrowserWindow({ - width: windowState.w, - height: windowState.h, + width: state.w, + height: state.h, + x: state.x, + y: state.y, resizable: true, backgroundColor: '#EBEBEB', frame: false, minWidth: 350, minHeight: 500, webPreferences: { - // Use pluginOptions.nodeIntegration, leave this alone - // See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info - nodeIntegration: (process.env - .ELECTRON_NODE_INTEGRATION as unknown) as boolean, - preload: path.join(__dirname, "preload.js") + nodeIntegration: (process.env.ELECTRON_NODE_INTEGRATION as unknown) as boolean, preload: path.join(__dirname, "preload.js") } }); - + // Load the URL. if (process.env.WEBPACK_DEV_SERVER_URL) { - // Load the url of the dev server if in development mode - win.loadURL(process.env.WEBPACK_DEV_SERVER_URL as string); - } else { + win.loadURL(process.env.WEBPACK_DEV_SERVER_URL as string); // dev + } + + else { createProtocol("app"); - // Load the index.html when not in development - win.loadURL("app://./index.html"); + win.loadURL("app://./index.html"); // prod } // Handle window close. - win.on("closed", windowDismount); + win.on("closed", onWindowDismount); win.once('ready-to-show', () => { if (win) win.show() }) win.webContents.on('did-finish-load', () => { - if (win) win.webContents.send('window-ready', { - message: true - }); - windowMount(); + if (win) win.webContents.send('window-ready', { + message: true + }); + + onWindowMount(); resolve(); }); diff --git a/src/components/inputItem/inputItem.vue b/src/components/inputItem/inputItem.vue index 8ea6a5d..91ef863 100644 --- a/src/components/inputItem/inputItem.vue +++ b/src/components/inputItem/inputItem.vue @@ -41,11 +41,23 @@ export default defineComponent({ // Mark input item with user's initials. const initials = ref("") - initials.value = "IN"; - // Initial position. - const xStart = 15; - const yStart = window.innerHeight - 200; + // ---Set xStart and yStart------------------------------------ + const cordsStr = window.localStorage.getItem("input_cords") + + let cords = {x: 15, y: window.innerHeight - 200} // default values + + if (cordsStr) { + console.log("found archived cords!") + cords = JSON.parse(cordsStr) + } + + const xStart = cords.x; + const yStart = cords.y; + + console.log(`xStart: ${xStart}`) + console.log(`yStart: ${yStart}`) + // ------------------------------------------------------------ // Calculate position of inputItem on drag. const { elementX, elementY } = draggify("inputItem", xStart, yStart, 15); @@ -63,6 +75,17 @@ export default defineComponent({ window.ipcRenderer.on("update-profile", onUpdateProfile); }) + const savePosition = () => { + const cords = JSON.stringify( + { + x: elementX.value, + y: elementY.value + } + ) + window.localStorage.setItem("input_cords", cords) + console.log(`Start saved: ${cords}`) + } + onUnmounted(() => { window.ipcRenderer.removeAllListeners("update-profile"); }) diff --git a/src/views/messenger.vue b/src/views/messenger.vue index 9be42ef..5c28758 100644 --- a/src/views/messenger.vue +++ b/src/views/messenger.vue @@ -32,7 +32,12 @@ export default defineComponent({ const { emitter } = useMitt(); // Handle messages in view. - const { messages, addMessage, updateMessage } = useMessages(); + const { + messages, + addMessage, + updateMessage, + saveMessages + } = useMessages(); // Alter existing message. const onAnnotateMessage = (_event: any, payload: any) => { diff --git a/windowState.json b/windowState.json index d637d9e..9957688 100644 --- a/windowState.json +++ b/windowState.json @@ -1 +1 @@ -{"w":352,"h":500} \ No newline at end of file +{"w":688,"h":536,"x":1478,"y":513} \ No newline at end of file -- 2.43.0