"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}",
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> => {
}
}
-// 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> => {
-import { useHttp } from "@/composables/http";
+import useHttp from "@/composables/useHttp";
import axios from "axios";
import {config} from "@/config";
-/* 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
});
-}
+};
+
+
};
-export const useHttp = () => {
+export default function useHttp() {
const api = axios.create({
baseURL,
import { app, protocol } from "electron";
import createWindow from "./window";
import main from "./main";
+import { backgroundMitt } from '@/composables/useEmitter';
console.log('Starting Crimata electron app.');
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();
"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";
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;
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);
}
}
<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";
/* listen for auth related messages */
window.addEventListener("update-auth", (event: any) => {
- state.value = event.data;
+ // state.value = event.data;
});
});
audio=false,
context=false,
uid=uuidv4()
-}): Message {
+}) {
return {
text: text,
audio: audio,
-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) {
// 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}));
});
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();
// Send it to the backend for processing.
const message = newMessage({
- text: textInput.value
+ text: false
});
- postMessage(message);
+ // postMessage(message);
clearInput()
}
import { ref } from 'vue';
-import useScroll from "@/render/composables/scroll";
+import useScroll from "@/render/composables/useScroll";
const messagesRef = ref();
<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>
.minimizeButton:active {
background-color: #c08e38;
}
-</style>
\ No newline at end of file
+</style>
: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.
<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",
const usr = ref("");
const pwd = ref("");
+ const { setProfile } = useProfile();
+
// Submit login credentials to the backend.
const submitForm = async () => {
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);
+ };
}
<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";
props: ["profile", "messages"],
components: {
- Message,
InputItem,
Settings
},
setup(props) {
// Handle messages in view.
- const { messagesRef, updateMessageView } = useMessages();
+ const { messagesRef } = useMessages();
onMounted(() => {
<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({
setup() {
const toggleSettings = ref(false);
- const { post, invoke } = useIpc();
-
const { clearProfile } = useProfile();
// Listen for escape key to close settings.
console.log("Submitting logout request.");
try {
- clearProfile();
await invokeLogout();
+ clearProfile();
} catch(e) {
console.log('error')
}
const setProfile = (payload: Profile) => {
profile.value = payload;
+ /* emit event to app.vue */
+ window.postMessage(profile, 'profile');
}
const clearProfile = () => {
-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)
);
/**
- *
+ *
* Audio endpoints
- *
+ *
*/
export const postAudioChunk = (chunk: ArrayBuffer): void => (
);
/**
- *
+ *
* Crimata Platform (session) endpoints
- *
+ *
*/
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
+);
// 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 */
context: boolean | string;
audio: boolean | string;
type: 1 | 2 | 3;
- time: number;
uid: string;
}
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";