diff --git a/audio/audioNode.ts b/audio/audioNode.ts deleted file mode 100644 index e69de29..0000000 diff --git a/package.json b/package.json index 081698f..24d13b1 100644 --- a/package.json +++ b/package.json @@ -66,9 +66,25 @@ "spectron": "11.0.0", "typescript": "~3.9.3", "vue-cli-plugin-electron-builder": "~2.0.0-rc.6", - "vue-jest": "^5.0.0-0", - "worker-loader": "^3.0.8", - "worklet-loader": "^1.0.0" + "vue-jest": "^5.0.0-0" + }, + "vue": { + "lintOnSave": false, + "pluginOptions": { + "electronBuilder": { + "mainProcessFile": "./src/init.ts", + "rendererProcessFile": "./src/render/main.ts", + "preload": "./src/render/preload.ts", + "builderOptions": { + "appId": "com.crimata.ElectronUpdaterApp", + "artifactName": "${productName}-${version}.${ext}", + "publish": { + "provider": "generic", + "url": "https://gitlab.com/api/v4/projects/25637892/jobs/artifacts/main/raw/dist_electron?job=build" + } + } + } + } }, "gitHooks": { "pre-commit": "lint-staged" diff --git a/public/processor.js b/public/processor.js deleted file mode 100644 index df735a5..0000000 --- a/public/processor.js +++ /dev/null @@ -1,12 +0,0 @@ - -class AudioProcessor extends AudioWorkletProcessor { - process (inputs, outputs, parameters) { - console.log(inputs); - console.log(outputs); - console.log(parameters); - return true - } -} - -registerProcessor('processor', AudioProcessor) - diff --git a/public/worklet/audioProcessor.ts b/public/worklet/audioProcessor.ts deleted file mode 100644 index 8c8336f..0000000 --- a/public/worklet/audioProcessor.ts +++ /dev/null @@ -1,33 +0,0 @@ -interface AudioWorkletProcessor { - readonly port: MessagePort; - process( - inputs: Float32Array[][], - outputs: Float32Array[][], - parameters: Record - ): boolean; -} - -declare let AudioWorkletProcessor: { - prototype: AudioWorkletProcessor; - new (options?: AudioWorkletNodeOptions): AudioWorkletProcessor; -}; - -declare function registerProcessor( - name: string, - processorCtor: (new ( - options?: AudioWorkletNodeOptions - ) => AudioWorkletProcessor) & { - parameterDescriptors?: AudioParamDescriptor[]; - } -): undefined; - -class AudioProcessor extends AudioWorkletProcessor { - process (inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record) { - console.log(inputs); - console.log(outputs); - console.log(parameters); - return true - } -} - -registerProcessor('audio-processor', AudioProcessor) diff --git a/src/account.ts b/src/account.ts index 965502c..581da0e 100644 --- a/src/account.ts +++ b/src/account.ts @@ -1,7 +1,7 @@ import { postAuth, postLogin, postLogout } from "@/api/account"; import { endSession, launchSession } from "@/session"; -import { getToken, setToken, setProfile, clearStore } from "./store"; +import { getToken, setToken, setProfile, getProfile, clearStore } from "./store"; import { parseAuthRes } from "./auth"; import { ipcEmit } from "@/composables/useEmitter"; @@ -83,4 +83,13 @@ export const accountLogout = async (): Promise => { } +export const updateAppState = (): void => { + + const profile = getProfile(); + + ipcEmit("set-profile", profile); + + // ipcEmit('messages') etc + +} diff --git a/src/composables/useIpcMain.ts b/src/composables/useIpcMain.ts index 4c3ba24..ebfc4bc 100644 --- a/src/composables/useIpcMain.ts +++ b/src/composables/useIpcMain.ts @@ -71,10 +71,12 @@ export class IpcListener implements IIpcListener { ipcMain.removeAllListeners(this.channel); } - private _onPost = (_e: IpcMainEvent, payload: InputParam): void => { + private _onPost = (_e: IpcMainEvent, payload?: string | null): void => { console.log(`[IPC] Post: ${this.channel}`); - this._listenerCallback(payload); + + const params = payload ? JSON.parse(payload) : null; + this._listenerCallback(params); } } diff --git a/src/composables/useWebsockets.ts b/src/composables/useWebsockets.ts index aed517c..d1cfc02 100644 --- a/src/composables/useWebsockets.ts +++ b/src/composables/useWebsockets.ts @@ -11,13 +11,7 @@ let _connectionCheckInterval: ReturnType; export default function useWebSockets( messageCallback: (message: string) => void, - connectionStatusCallback: (status: string) => void, - statusOptions?: { - openMessage: string, - pongMessage: string, - closeMessage: string, - pingErrorMessage: string, - }, + connectionStatusCallback: (alive: boolean) => void, ) { let socket: WebSocket; @@ -47,15 +41,13 @@ export default function useWebSockets( socket.send(JSON.stringify({key: secret})); - connectionStatusCallback(statusOptions ? statusOptions.openMessage : "Connection Opened"); - // ping server _connectionCheckInterval = setInterval(() => { socket.ping(null, true, (e: Error) => { if (e) { socket.close(); - connectionStatusCallback(statusOptions ? statusOptions.pingErrorMessage : "Connection Lost"); + connectionStatusCallback(false); setTimeout(() => connect(socketUrl, secret), _reconnectTimeout); } }); @@ -70,20 +62,15 @@ export default function useWebSockets( }); socket.on("close", (event: WebSocket.CloseEvent) => { - connectionStatusCallback(statusOptions ? statusOptions.closeMessage : "Connection Closed"); + connectionStatusCallback(false); clearInterval(_connectionCheckInterval); if (!event.wasClean) { - setTimeout(() => { - connect(socketUrl, secret), _reconnectTimeout - }); - + setTimeout(() => connect(socketUrl, secret), _reconnectTimeout); } }); - socket.on("pong", () => connectionStatusCallback(statusOptions ? statusOptions.pongMessage : "Pong")); - - socket.on('error', () => {}); + socket.on("pong", () => connectionStatusCallback(true)); } @@ -91,7 +78,7 @@ export default function useWebSockets( if (socket) { socket.close(); } - }; + } return { connect, diff --git a/src/ipc/handlers.ts b/src/ipc/handlers.ts index 7a9ba49..5529662 100644 --- a/src/ipc/handlers.ts +++ b/src/ipc/handlers.ts @@ -1,7 +1,7 @@ "use strict"; -import { accountLogin, accountLogout } from "@/account"; +import { accountLogin, accountLogout, accountProfile } from "@/account"; import { IpcHandler } from "@/composables/useIpcMain"; import { flush } from "@/audio"; diff --git a/src/ipc/listeners.ts b/src/ipc/listeners.ts index 17af103..8ef5d45 100644 --- a/src/ipc/listeners.ts +++ b/src/ipc/listeners.ts @@ -2,14 +2,11 @@ import { IpcListener } from "@/composables/useIpcMain" import { sendMessage } from '@/session'; import { collect } from "@/audio"; -import { updateAppState } from "@/session"; -import { onNavBar } from "@/window"; +import { updateAppState } from "@/account"; const CLIENT_MESSAGE_CHANNEL = "post-session-send" const GET_AUDIO_CHANNEL = "post-audio-collect"; const APP_MOUNT_CHANNEL = "post-app-mount"; -const NAV_BAR_CHANNEL = "post-nav-bar"; -const WINDOW_BLUR_CHANNEL = "post-window-focus"; export const messageListener = new IpcListener({ channel: CLIENT_MESSAGE_CHANNEL, @@ -25,22 +22,3 @@ export const appMountListener = new IpcListener({ channel: APP_MOUNT_CHANNEL, listenerCallback: updateAppState }); - -export const navBarListener = new IpcListener({ - channel: NAV_BAR_CHANNEL, - listenerCallback: onNavBar -}); - - -const onWindowFocus: IpcListenerCallback<{ isFocused: boolean }> = (payload) => { - if (payload.isFocused) { - console.log('window is focused') - } else { - console.log('window is blurred') - } -} - -export const windowFocusListener = new IpcListener({ - channel: WINDOW_BLUR_CHANNEL, - listenerCallback: onWindowFocus -}); diff --git a/src/main.ts b/src/main.ts index 6df9f6c..a360835 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,8 +10,8 @@ */ import initIpcMain from "@/ipc/index"; -import { accountAuth } from "./account"; -import { launchSession, updateAppState } from "./session"; +import { accountAuth, updateAppState } from "./account"; +import { launchSession } from "./session"; import createWindow from "./window"; let authState: AuthState | null; diff --git a/src/messages.ts b/src/messages.ts deleted file mode 100644 index 9a72b38..0000000 --- a/src/messages.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { ipcEmit } from "@/composables/useEmitter"; - -export default class Messages { - - messages: Message[]; - - constructor(messages: Message[]) { - console.log(messages); - this.messages = messages; - this.emit(); - } - - emit() { - ipcEmit("init-messages", this.messages); - } - - update(update: Update) { - - if (update.name === "add") { - this.messages.push(update.data as Message); - ipcEmit("add-message", update.data); - } - - else if (update.name === "annotate") { - this._annotate(update.data as Annotation); - ipcEmit("update-message", update.data); - } - - else { - this._delete(update.data as string); - ipcEmit("delete-message", update.data); - } - - } - - _annotate(annotation: Annotation) { - - for (let i in this.messages) { - - if (this.messages[i].uid == annotation.uid) { - - if (annotation.name == "content") { - this.messages[i].content = annotation.data as string[]; - } - - if (annotation.name == "context") { - this.messages[i].context = annotation.data as string; - } - - ipcEmit("update-message", annotation); - - } - - } - - } - - _delete(uid: string) { - for (var i = 0; i < this.messages.length; i++) { - if (this.messages[i].uid === uid) { - this.messages.splice(i, 1); - break; - } - } - } - -} \ No newline at end of file diff --git a/src/render/App.vue b/src/render/App.vue index ba56bac..686591b 100644 --- a/src/render/App.vue +++ b/src/render/App.vue @@ -21,7 +21,7 @@ - - - diff --git a/src/render/components/context.vue b/src/render/components/context.vue deleted file mode 100644 index 0efcb7a..0000000 --- a/src/render/components/context.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/render/components/controllers/helpers.ts b/src/render/components/controllers/helpers.ts index 017cfb3..23976a8 100644 --- a/src/render/components/controllers/helpers.ts +++ b/src/render/components/controllers/helpers.ts @@ -1,5 +1,6 @@ -import { ref, Ref } from "vue"; +import { ref } from "vue"; import anime from "animejs"; +import { v4 as uuidv4 } from 'uuid'; export function animateTextInput () { @@ -85,40 +86,17 @@ export function animateAudioInput () { } -// animate a message annotation. -//! probably could be improved. -export function annotateAnim (uid: string, val: string, contextRef: Ref) { - anime({ - targets: `#${uid} span`, - opacity: [1, 0], - duration: 250, - easing: 'easeOutExpo' - }) - - .finished.then(() => { - contextRef.value = val; - }) - - .then(() => { - anime({ - targets: `#${uid} span`, - opacity: [0, 1], - duration: 250, - easing: 'easeOutExpo' - }) - }) +export function newMessage ({ + text=false, + audio=false, + context=false, + uid=uuidv4() +}) { + return { + text: text, + audio: audio, + context: context, + uid: uid + }; } - -// Given index and length of content, return message child status. -export function calcChild (index: number, len: number) { - if (len === 1) { - return "none"; - } else if (index === 0) { - return "first-child"; - } else if (index === len - 1) { - return "last-child"; - } else { - return "middle-child"; - } -} \ No newline at end of file diff --git a/src/render/components/controllers/inputItem.control.audio.ts b/src/render/components/controllers/inputItem.control.audio.ts index 9852e53..facf30c 100644 --- a/src/render/components/controllers/inputItem.control.audio.ts +++ b/src/render/components/controllers/inputItem.control.audio.ts @@ -1,6 +1,6 @@ import { onMounted, onUnmounted, ref, Ref } from "vue"; import { postMessage } from "@/render/ipc"; -import { animateAudioInput } from "./helpers"; +import { newMessage, animateAudioInput } from "./helpers"; import { invokeReturnAudio, postAudioChunk } from "@/render/ipc"; export default function useAudioInputController (typing: Ref) { diff --git a/src/render/components/controllers/inputItem.control.text.ts b/src/render/components/controllers/inputItem.control.text.ts index 51edfe0..941ae89 100644 --- a/src/render/components/controllers/inputItem.control.text.ts +++ b/src/render/components/controllers/inputItem.control.text.ts @@ -1,6 +1,6 @@ import { Ref, ref, watch, onMounted, onUnmounted } from "vue"; import { postMessage } from "@/render/ipc"; -import { animateTextInput } from "./helpers"; +import { newMessage, animateTextInput } from "./helpers"; export default function useTextInputController(elementX: Ref) { @@ -36,12 +36,11 @@ export default function useTextInputController(elementX: Ref) { if (textInput) { // Send it to the backend for processing. - const message: Raw = { - text: textInput.value, - audio: false - }; + const message = newMessage({ + text: false + }); - postMessage(message); + // postMessage(message); clearInput() } diff --git a/src/render/components/controllers/messenger.control.ts b/src/render/components/controllers/messenger.control.ts new file mode 100644 index 0000000..b9c3a96 --- /dev/null +++ b/src/render/components/controllers/messenger.control.ts @@ -0,0 +1,38 @@ +import { ref } from 'vue'; +import useScroll from "@/render/composables/useScroll"; + +const messagesRef = ref(); + +/* seed the canvas with messages */ +const seedCanvas = (messages: Message[]) => { + messagesRef.value = messages; +} + +const addMessage = (message: Message) => { + messagesRef.value.push(message); +} + +const updateMessage = (message: Message) => { + + let target_message = messagesRef.value.filter((m: Message) => { + return m.uid = message.uid; + })[0]; + + if (target_message) { + target_message = message; + } + +} + +export default function useMessages() { + + const { updateScrollRef, adjustScroll } = useScroll("messenger"); + + return { + messagesRef, + seedCanvas, + addMessage, + updateMessage + }; + +} diff --git a/src/render/components/header.vue b/src/render/components/header.vue index a97f061..63716c8 100644 --- a/src/render/components/header.vue +++ b/src/render/components/header.vue @@ -9,7 +9,6 @@ class="menuButton minimizeButton" @click.prevent="postNavBarMin" /> - @@ -17,20 +16,16 @@ // import { postNavBarExit, postNavBarMin } from "@/render/ipc"; import { defineComponent } from "vue"; - import { postNavBar } from "@/render/ipc"; - - import ConnectionStatus from "./connectionStatus.vue"; export default defineComponent({ name: "Header", - components: { ConnectionStatus }, setup() { - const postNavBarExit = () => postNavBar('close'); - const postNavBarMin = () => postNavBar('min'); - return { - postNavBarExit, - postNavBarMin - } + const postNavBarExit = () => {}; + const postNavBarMin = () => {}; + return { + postNavBarExit, + postNavBarMin + } } }); diff --git a/src/render/components/inputItem.vue b/src/render/components/inputItem.vue index 5deb739..edd844f 100644 --- a/src/render/components/inputItem.vue +++ b/src/render/components/inputItem.vue @@ -32,7 +32,7 @@ import draggify from "@/render/composables/useDraggify"; import useTextInputController from "@/render/components/controllers/inputItem.control.text"; -// import useAudioInputController from +import useAudioInputController from "@/render/components/controllers/inputItem.control.audio"; export default defineComponent({ @@ -51,8 +51,7 @@ export default defineComponent({ // Controllers for text and audio. const { typing } = useTextInputController(elementX) - // const { recording } = useAudioInputController(typing) - const recording = false; + const { recording } = useAudioInputController(typing) return { elementX, diff --git a/src/render/components/login.vue b/src/render/components/login.vue index 1de47ca..bece6ea 100644 --- a/src/render/components/login.vue +++ b/src/render/components/login.vue @@ -35,7 +35,7 @@ - - - - diff --git a/src/render/components/messenger.vue b/src/render/components/messenger.vue index d1c27d7..ee56549 100644 --- a/src/render/components/messenger.vue +++ b/src/render/components/messenger.vue @@ -7,12 +7,11 @@
-
@@ -20,13 +19,13 @@