]> Repos - mime-chat/commitdiff
initial working version
authorriqo <hernandeze2@xavier.edu>
Wed, 16 Jun 2021 13:42:47 +0000 (08:42 -0500)
committerriqo <hernandeze2@xavier.edu>
Wed, 16 Jun 2021 13:42:47 +0000 (08:42 -0500)
23 files changed:
package.json
src/account.ts
src/api/account.ts
src/composables/useEmitter.ts
src/composables/useHttp.ts
src/init.ts
src/ipc/account.ts
src/main.ts
src/render/App.vue
src/render/components/controllers/helpers.ts
src/render/components/controllers/inputItem.control.audio.ts
src/render/components/controllers/inputItem.control.text.ts
src/render/components/controllers/messenger.control.ts
src/render/components/header.vue
src/render/components/inputItem.vue
src/render/components/login.vue
src/render/components/messenger.vue
src/render/components/settings.vue
src/render/composables/useProfile.ts
src/render/ipc.ts
src/session.ts
src/types.ts
src/window.ts

index 2b4b7fdcac8b51aa1a952b8023037a3b8ae2a2a4..7fff91a28b217451a8f6879505339efa8724f4ec 100644 (file)
@@ -73,7 +73,9 @@
     "lintOnSave": false,
     "pluginOptions": {
       "electronBuilder": {
-        "preload": "src/renderer/preload.ts",
+        "mainProcessFile": "./src/init.ts",
+        "rendererProcessFile": "./src/render/main.ts",
+        "preload": "./src/render/preload.ts",
         "builderOptions": {
           "appId": "com.crimata.ElectronUpdaterApp",
           "artifactName": "${productName}-${version}.${ext}",
index 4884135800c15d2d53647fc442cf43d1d0adcaf6..95fe6298973c9b0b6ac561b7b1c7f4c7c4a0f741 100644 (file)
@@ -1,7 +1,7 @@
 
 import { postAuth, postLogin, postLogout } from "@/api/account";
 import { endSession, launchSession } from "@/session";
-import { getToken, clearToken, setToken } from "@/composables/store";
+import { getToken, clearToken, setToken } from "./store";
 import { parseAuthRes } from "./auth";
 
 export const accountAuth = async (): Promise<Error | AuthState> => {
@@ -57,29 +57,6 @@ export const accountLogin: IpcHandlerCallback<AccountCredentials, Profile> = asy
      }
 }
 
-// export const accountLogin = async (account: Account): Promise<Error | Profile> => {
-//
-//     try {
-//
-//         // attempt login with email password
-//         const res = await postLogin(account.email, account.password);
-//         const parsed = parseAuthRes(res);
-//
-//         // save jwt token and profile
-//         setToken(parsed.token)
-//
-//         // launch session
-//         launchSession(parsed.token)
-//
-//         // return profile to renderer
-//         return parsed.profile;
-//
-//     } catch(e) {
-//         console.log('[ACCOUNT]', e);
-//         throw (new Error('Failed to authenticate'));
-//     }
-//
-// }
 
 export const accountLogout = async (): Promise<Error | void> => {
 
index a907dfbc9f28b9ba7a5fee89f694958b756b238d..59872c8020e5d68bdebccb61fb76163e6d045f1a 100644 (file)
@@ -1,5 +1,5 @@
 
-import { useHttp } from "@/composables/http";
+import useHttp from "@/composables/useHttp";
 import axios from "axios";
 import {config} from "@/config";
 
index ee6bb5eb3835c3bb9defab2b097a548471a0c501..240c557477af21aa81716665fc54e81c6c4e1950 100644 (file)
@@ -1,15 +1,16 @@
-/* eslint-disable */
 
 // Backend emitter
-
+//
 const EventEmitter = require('events');
 class BackgroundMitt extends EventEmitter { }
 
 export const backgroundMitt = new BackgroundMitt();
 
-export default function ipcEmit (channel: string, payload: any) {
+export const ipcEmit = (channel: string, payload: any) => {
     backgroundMitt.emit('ipc-renderer', {
         endpoint: channel,
         message: payload
     });
-}
+};
+
+
index e789afa94f58fa36980988e41ae3627b05fc4044..6b9ee568878c2ecb1459eb8ecd7cf4f75fae2658 100644 (file)
@@ -22,7 +22,7 @@ const makeQuery = (reqQuery: Record<string, any>) => {
 };
 
 
-export const useHttp = () => {
+export default function useHttp() {
 
     const api = axios.create({
         baseURL,
index e68e76601dc5ac7c6957186826cb29ae751c51be..9a0fdf64e9bdff2b8d0da6b7ff1df06b8b6ba058 100644 (file)
@@ -8,6 +8,7 @@
 import { app, protocol } from "electron";
 import createWindow from "./window";
 import main from "./main";
+import { backgroundMitt } from '@/composables/useEmitter';
 
 console.log('Starting Crimata electron app.');
 
@@ -18,6 +19,13 @@ protocol.registerSchemesAsPrivileged([
 
 const isDev = require('electron-is-dev');
 
+let win: boolean;
+
+// Listen for window creation.
+backgroundMitt.on('window-active', (state: boolean) => {
+    win = state;
+});
+
 /* Start main process on ready */
 app.on("ready", async () => {
     await main();
index 531d1a758407959105cfb0c98385a26d550f9a04..7759d12afde510f4eb6d2fad32b6869b8dfad43a 100644 (file)
@@ -2,7 +2,7 @@
 "use strict";
 
 import { accountLogin, accountLogout } from "@/account";
-import {IpcHandler} from "@/composables/ipcHandler";
+import {IpcHandler} from "@/composables/useIpcMain";
 
 const LOGIN_CHANNEL = "account-login";
 const LOGOUT_CHANNEL = "account-logout";
index b015cd990af52cc4d880b768425f642e16f93a08..9103cae552a3e411a034b4ea3f6e428cd99588ad 100644 (file)
@@ -12,7 +12,7 @@
 import useIpc from "@/ipc/index";
 import  { accountAuth } from "./account";
 import { launchSession } from "./session";
-import ipcEmit from "./composables/emitter";
+import { ipcEmit } from "./composables/useEmitter";
 import createWindow from "./window";
 
 let authState: AuthState | null;
@@ -31,8 +31,12 @@ export default async function main() {
         console.log('AUTH:', e);
         authState = null;
     } finally {
-        if (authState) launchSession(authState.token as string);
-        ipcEmit("set-profile", authState?.profile);
+        let profile = null;
+        if (authState) {
+            launchSession(authState.token as string);
+            profile = authState.profile;
+        }
+        ipcEmit("set-profile", profile);
     }
 
 }
index d90bcc07c497352dd4b22332e5c0ac997bcd8800..dfdaeb916ef5f410ef39ed097b844e155247b850 100644 (file)
@@ -21,8 +21,8 @@
 
 <script lang="ts">
 
-import { defineComponent, onMounted, onUnmounted, Ref } from "vue";
-import { invokeProfile } from "@/ipc/account";
+import { defineComponent, onMounted, onUnmounted, Ref, ref } from "vue";
+import { invokeProfile } from "@/render/ipc";
 
 import Splash from "@/render/components/splash.vue";
 import Messenger from "@/render/components/messenger.vue";
@@ -47,7 +47,7 @@ export default defineComponent({
 
       /* listen for auth related messages */
       window.addEventListener("update-auth", (event: any) => {
-        state.value = event.data;
+        // state.value = event.data;
       });
 
     });
index 7509bf071c745f4226a97a8b87c0b031f7330f8a..23976a898b00296c20f308b523e3bb4210be2322 100644 (file)
@@ -92,7 +92,7 @@ export function newMessage ({
     audio=false,
     context=false,
     uid=uuidv4()
-}): Message {
+}) {
     return {
         text: text,
         audio: audio,
index b69940533e208367a744af8b092d9639c88c3215..facf30c100a736c0d984af9efbe4bd40df5f9259 100644 (file)
@@ -1,9 +1,7 @@
-import anime from "animejs";
-import { useIpc } from '@/modules/ipc';
 import { onMounted, onUnmounted, ref, Ref } from "vue";
-import { postMessage } from "@/ipc/session";
+import { postMessage } from "@/render/ipc";
 import { newMessage, animateAudioInput } from "./helpers";
-import { invokeStopRecord, postAudioChunk } from "@/ipc/audio";
+import { invokeReturnAudio, postAudioChunk } from "@/render/ipc";
 
 export default function useAudioInputController (typing: Ref) {
 
@@ -28,7 +26,7 @@ export default function useAudioInputController (typing: Ref) {
 
         // get audio and post new message to backend
         mediaRecorder.addEventListener('stop', (_e: Event) => {
-            invokeStopRecord().then((audio: ArrayBuffer[] | Error) => {
+            invokeReturnAudio().then((audio: ArrayBuffer[] | Error) => {
                 console.log(audio);
                 // postMessage(newMessage({audio: audio}));
             });
index 21ada72780ea211b0f7dbbe4ca57566a1569cc25..941ae89f2a6dc9bf817c74d650ec2fe18199cfdc 100644 (file)
@@ -1,10 +1,10 @@
 import { Ref, ref, watch, onMounted, onUnmounted } from "vue";
-import { postMessage } from "@/ipc/session";
+import { postMessage } from "@/render/ipc";
 import { newMessage, animateTextInput } from "./helpers";
 
 
 export default function useTextInputController(elementX: Ref) {
-    
+
     let textInput: HTMLInputElement | null;
 
     const { side, show, hide, switchSide } = animateTextInput();
@@ -37,10 +37,10 @@ export default function useTextInputController(elementX: Ref) {
 
             // Send it to the backend for processing.
             const message = newMessage({
-                text: textInput.value
+                text: false
             });
 
-            postMessage(message);
+            // postMessage(message);
 
             clearInput()
         }
index a0f9b09c19647efa08463faf8704ca755a26f26f..b9c3a9680fa9ca88780ace485ab1845a34609b6d 100644 (file)
@@ -1,5 +1,5 @@
 import { ref } from 'vue';
-import useScroll from "@/render/composables/scroll";
+import useScroll from "@/render/composables/useScroll";
 
 const messagesRef = ref();
 
index f0afc8a8e2a715b976d133d9c42ebf0e6e245993..63716c859270aa87ff8a2b3ddc718aea5d1a67c5 100644 (file)
 
 <script lang="ts">
 
-    import { postNavBarExit, postNavBarMin } from "@/render/ipc";
-    
-    setup() {
+    // import { postNavBarExit, postNavBarMin } from "@/render/ipc";
+    import { defineComponent } from "vue";
+
+    export default defineComponent({
+        name: "Header",
+        setup() {
+        const postNavBarExit = () => {};
+        const postNavBarMin = () => {};
         return {
             postNavBarExit,
             postNavBarMin
         }
-    }
+        }
+
+    });
+
 
 </script>
 
@@ -78,4 +86,4 @@
 .minimizeButton:active {
   background-color: #c08e38;
 }
-</style>
\ No newline at end of file
+</style>
index 30978b3a5e954c32e7a94f750de22fa066ba82bc..edd844f80233223b7b55e68a6f040b5d789b14d6 100644 (file)
@@ -6,16 +6,16 @@
     :style="{ top: `${elementY}px`, left: `${elementX}px` }"
   >
     <div>{{ initials }}</div>
-    
+
 
     <!-- Recording animation on space bar -->
     <span v-if="recording" class="play"></span>
     <span v-if="recording" class="pause"></span>
 
     <!-- Show text input on key-down -->
-    <input 
-      id="textInput" 
-      type="text" 
+    <input
+      id="textInput"
+      type="text"
     />
 
     <!-- Show suggestions menu on click -->
 <script lang="ts">
 
 import { defineComponent } from "vue";
-import draggify from "@/modules/draggify";
+import draggify from "@/render/composables/useDraggify";
 
-import TextInput from "@/components/textInput.vue";
 
-import useTextInputController from 
-  "@/components/controllers/inputItem.control.audio";
-import useAudioInputController from 
-  "@/components/controllers/inputItem.control.text";
+import useTextInputController from
+  "@/render/components/controllers/inputItem.control.text";
+import useAudioInputController from
+  "@/render/components/controllers/inputItem.control.audio";
 
 export default defineComponent({
   name: "InputItem",
 
   props: ["initials"],
 
-  components: {
-    TextInput
-  },
-
   setup() {
 
     // Default values for position.
index 5ed0ad0580a192dfc244e7892998c62dad900fe6..b54d471e3d9b586cbfc88e76b5e4caddbaa19967 100644 (file)
 <script lang="ts">
 
 import { defineComponent, ref } from "vue";
-import { useIpc } from "@/modules/ipc";
-import { authRequest } from '@/modules/message';
-import { useProfile } from '@/modules/auth';
-import { invokeLogin } from "@/ipcRend/account";
-import { postInitSession } from "@/ipcRend/session";
+import { useProfile } from '@/render/composables/useProfile';
+import { invokeLogin } from "@/render/ipc";
 
 export default defineComponent({
   name: "Login",
@@ -49,6 +46,8 @@ export default defineComponent({
     const usr = ref("");
     const pwd = ref("");
 
+    const { setProfile } = useProfile();
+
     // Submit login credentials to the backend.
     const submitForm = async () => {
 
@@ -57,12 +56,14 @@ export default defineComponent({
           const profile = await invokeLogin({
               email: usr.value,
               password: pwd.value
-          });
+          }) as Profile;
+
+          setProfile(profile)
 
-          /* emit event to app.vue */
-          window.postMessage(profile);
 
-      } catch (e) console.log(e);
+      } catch(e) {
+          console.log(e);
+      };
 
     }
 
index 9bc64483298c22e2028db60b3c50b25bc6870dc5..d0dd382d1d12e1864758e4f8f59ef985f13c6bd8 100644 (file)
@@ -20,7 +20,6 @@
 <script lang="ts">
 
 import { defineComponent, onMounted, onUnmounted } from "vue";
-import Message from "@/render/components/message.vue";
 import InputItem from "@/render/components/inputItem.vue";
 import Settings from "@/render/components/settings.vue";
 import useMessages from "./controllers/messenger.control";
@@ -31,7 +30,6 @@ export default defineComponent({
   props: ["profile", "messages"],
 
   components: {
-    Message,
     InputItem,
     Settings
   },
@@ -39,7 +37,7 @@ export default defineComponent({
   setup(props) {
 
     // Handle messages in view.
-    const { messagesRef, updateMessageView } = useMessages();
+    const { messagesRef } = useMessages();
 
     onMounted(() => {
 
index 9b4f3e56575614775acec308128ea9ed4b20bb23..c6933566dccb5640d872669ef7a2bf3da0401644 100644 (file)
@@ -28,9 +28,7 @@
 <script lang="ts">
 
   import { defineComponent, ref } from "vue";
-  import  { useIpc } from "@/modules/ipc";
-  import { logoutRequest } from '@/modules/message';
-  import { useProfile } from "@/modules/auth"
+  import { useProfile } from "@/render/composables/useProfile"
   import { invokeLogout } from "@/render/ipc";
 
   export default defineComponent({
@@ -39,8 +37,6 @@
     setup() {
       const toggleSettings = ref(false);
 
-      const { post, invoke } = useIpc();
-
       const { clearProfile } = useProfile();
 
       // Listen for escape key to close settings.
@@ -63,8 +59,8 @@
         console.log("Submitting logout request.");
 
         try {
-            clearProfile();
             await invokeLogout();
+            clearProfile();
         } catch(e) {
             console.log('error')
         }
index dea4bd1c4598098eb66fbd37e82397e8a8f47b6c..e813dadcc40bd684f8c7d971cd7cebfa3493d63e 100644 (file)
@@ -6,6 +6,8 @@ export const useProfile = () => {
 
     const setProfile = (payload: Profile) => {
         profile.value = payload;
+        /* emit event to app.vue */
+        window.postMessage(profile, 'profile');
     }
 
     const clearProfile = () => {
index a232f7fbe7ffb9508879a0761aaf91596ca851ec..7a7e1dc7118816a16c5785935c7f5f490f9b4905 100644 (file)
@@ -1,13 +1,13 @@
 
-import useIpc from "@/render/composables/ipc";
+import useIpc from "@/render/composables/useIpcRend";
 
 const { post, invoke } = useIpc();
 
 /**
- * 
+ *
  * Account and auth related endpoints
- * 
- */ 
+ *
+ */
 
 export const invokeProfile = async (): Promise<Profile | Error> => (
     await invoke('user-profile', null)
@@ -24,9 +24,9 @@ export const invokeLogout = async (): Promise<void> => (
 );
 
 /**
- * 
+ *
  * Audio endpoints
- * 
+ *
  */
 
 export const postAudioChunk = (chunk: ArrayBuffer): void => (
@@ -38,9 +38,9 @@ export const invokeReturnAudio = async (): Promise<ArrayBuffer[] | Error> => (
 );
 
 /**
- * 
+ *
  * Crimata Platform (session) endpoints
- * 
+ *
  */
 
 export const invokeSession = async (cid: string): Promise<Profile | Error> => (
@@ -49,4 +49,4 @@ export const invokeSession = async (cid: string): Promise<Profile | Error> => (
 
 export const postMessage = (payload: Message): void => (
     post('client-message', payload)
-);
\ No newline at end of file
+);
index 158c41ec704128bb233523f6e1dc2c362d6d5949..e08ce4c047b330054ff2ccecb2217be395022031 100644 (file)
@@ -3,8 +3,8 @@
 
 
 // import useAudio from "@/audio";
-import ipcEmit from "@/composables/emitter";
-import useWebsockets from "./composables/websockets";
+import ipcEmit from "@/composables/useEmitter";
+import useWebsockets from "./composables/useWebsockets";
 import {config} from "@/config";
 
 /* data structure of messages that's tied to the UI */
index 583371e598dd1890a8e231c0eba5999bcd559596..4dfa705e5e5fe7de7c88fec9e4b41584187480d2 100644 (file)
@@ -4,7 +4,6 @@ interface Message {
     context: boolean | string;
     audio: boolean | string;
     type: 1 | 2 | 3;
-    time: number;
     uid: string;
 }
 
index 807064a38d82259961205ea308a577461ff56fb2..a456e3cfe487e15a6d345c80edbc460c7b0dccee 100644 (file)
@@ -2,8 +2,8 @@
 
 import { BrowserWindow, ipcMain, app } from "electron";
 import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
-import { backgroundMitt } from './composables/emitter';
-import { saveToJson } from "./composables/json";
+import { backgroundMitt } from './composables/useEmitter';
+import { saveToJson } from "./composables/useSaveToJSON";
 import * as path from "path";
 import fs from 'fs';
 import { config } from "@/config";