]> Repos - mime-chat/commitdiff
feature: notify newMessage if window is blurred or closed
authorEnrique H. Oliva <hernandeze2@xavier.edu>
Fri, 30 Jul 2021 13:52:43 +0000 (08:52 -0500)
committerEnrique H. Oliva <hernandeze2@xavier.edu>
Fri, 30 Jul 2021 13:52:43 +0000 (08:52 -0500)
src/init.ts
src/ipc/listeners.ts
src/render/components/messenger.vue
src/render/ipc.ts
src/session.ts
src/store.ts
src/types.ts

index 637db63fbc9db3d106833a239dd3464ae899fe9d..25de81d64d8d178b973cf89c53adb901840ef3f5 100644 (file)
@@ -9,7 +9,7 @@ import { app, protocol } from "electron";
 import createWindow from "./window";
 import main from "./main";
 import { backgroundMitt } from '@/composables/useEmitter';
-import {setWindow, getWindow } from './store';
+import {setWindowOpen, getWindowOpen } from './store';
 
 console.log('Starting Crimata electron app.');
 
@@ -22,7 +22,7 @@ const isDev = require('electron-is-dev');
 
 // Listen for window creation.
 backgroundMitt.on('window-active', (state: boolean) => {
-    setWindow(state)
+    setWindowOpen(state)
 });
 
 /* Start main process on ready */
@@ -40,7 +40,7 @@ app.on("window-all-closed", () => {
 
 // When user clicks app icon (re-open)
 app.on("activate", () => {
-    if (!getWindow()) createWindow();
+    if (!getWindowOpen()) createWindow();
 });
 
 // Exit cleanly on request from parent process in development mode.
index f92bead55a7847c3c9cf09a5260901331ea41b56..ef0f9657643cd686b2a272042e3d21fac6a2ecff 100644 (file)
@@ -1,12 +1,13 @@
-
 import { IpcListener } from "@/composables/useIpcMain"
 import { sendMessage } from '@/session';
 import { updateAppState } from "@/account";
 import { onNavBar } from "@/window";
+import { setWindowFocus } from '@/store';
 
 const CLIENT_MESSAGE_CHANNEL = "post-session-send"
 const APP_MOUNT_CHANNEL = "post-app-mount";
 const NAV_BAR_CHANNEL = "post-nav-bar";
+const POST_WINDOW_FOCUS = 'post-window-focus';
 
 export const messageListener = new IpcListener<Raw | Request>({
     channel: CLIENT_MESSAGE_CHANNEL,
@@ -22,3 +23,8 @@ export const navBarListener = new IpcListener({
     channel: NAV_BAR_CHANNEL,
     listenerCallback: onNavBar
 });
+
+export const windowFocusListener = new IpcListener<FocusPayload>({
+    channel: POST_WINDOW_FOCUS,
+    listenerCallback: ({ isFocused }) => setWindowFocus(isFocused)
+});
index df7dc151010c440b468e715148ebf0e2423a07dd..ad41e2ebd974379a11ed1d999de9c8416bcdeca3 100644 (file)
@@ -31,7 +31,7 @@ import ConnectionStatus from "./connectionStatus.vue";
 import { profile } from "@/render/shared/profile";
 import { messages } from "@/render/shared/messages";
 import useScroll from "@/render/composables/useScroll";
-import { postMessage } from "@/render/ipc";
+import { postMessage, postWindowFocus } from "@/render/ipc";
 
 export default defineComponent({
   name: "Messenger",
@@ -46,6 +46,7 @@ export default defineComponent({
   setup() {
 
     const onFocus = () => {
+        postWindowFocus({ isFocused: true });
         postMessage({
           intent: "focus",
           params: { "focus": true },
@@ -55,6 +56,7 @@ export default defineComponent({
     }
 
     const onBlur = () => {
+        postWindowFocus({ isFocused: false });
         postMessage({
           intent: "focus",
           params: { "focus": false },
index b787831e75781f7e6283ddd9f63e21f3f1f811dc..e6e994c1f78eff29159b8a726c60c80b3eb31fb6 100644 (file)
@@ -65,7 +65,7 @@ export const postNavBar = (payload: string): void => (
  *
  */
 
-export const postWindowBlur = (payload: { isFocused: boolean }): void => (
+export const postWindowFocus = (payload: { isFocused: boolean }): void => (
     post('post-window-focus', payload)
 );
 
index be6fdd31fa0ec8eaa1a556aea11b5246350a977c..f379f880aca7971b782cbf13db84bece85b44ddd 100644 (file)
@@ -5,7 +5,7 @@ import { config } from "@/config";
 import useWebsockets from "./composables/useWebsockets";
 import { backgroundMitt, ipcEmit } from "@/composables/useEmitter";
 import { Notification } from 'electron';
-import { getWindow } from './store';
+import { getWindowFocus, getWindowOpen } from './store';
 
 function showNotification (options: {
     title: string;
@@ -40,8 +40,10 @@ const onMessageCallback = (payload: string) => {
         const body = message.body as Update;
         uiState.update(body);
 
+        const isFocused = getWindowFocus();
+        const isOpen = getWindowOpen();
         // show notification if window is not active
-        if (!getWindow()) {
+        if (!isFocused || !isOpen) {
             if (body.name === "add") {
                 const data = body.data as Message;
                 showNotification({
@@ -77,7 +79,7 @@ export const updateAppUI = (): void => {
     uiState.emit();
 }
 
-export function sendMessage<Message>(message: Raw | Request): void {
+export function sendMessage(message: Raw | Request): void {
     send(message);
 }
 
index 8ac280ef9282e1b523f2c2f5addebc7020bac9b4..eab4cc795c46724202a80021200eee88ebb8002a 100644 (file)
@@ -4,9 +4,6 @@ const schema = {
        token: {
                type: 'string',
        },
-    window: {
-        type: 'boolean'
-    }
 };
 
 const store = new Store({
@@ -32,14 +29,19 @@ export const clearToken = (): void => {
 /*
  * Window state management
 * */
-export const setWindow = (state: boolean): void => {
-    store.set("window", state);
+export const setWindowOpen = (state: boolean): void => {
+    store.set("window.isOpen", state);
 }
 
-export const getWindow = (): boolean | undefined => {
-    return store.get("window");
+export const getWindowOpen = (): boolean | undefined => {
+    return store.get("window.isOpen");
 }
 
-export const clearWindow = (): void => {
-    store.delete("window");
+export const setWindowFocus = (state: boolean): void => {
+    store.set("window.isFocused", state);
 }
+
+export const getWindowFocus = (): boolean | undefined => {
+    return store.get("window.isFocused");
+}
+
index ba360564c35b60c5260ef670d5cf26bc1fad66ac..51d1c681caf659d09e2f6c880d1a8621ee7158d6 100644 (file)
@@ -125,3 +125,7 @@ interface IpcRendererEvent<T> {
   payload: T | null;
 }
 
+interface FocusPayload {
+    isFocused: boolean;
+}
+