rename composable files to composable notation
This commit is contained in:
parent
d851db2fcc
commit
0a3c9f71d8
18 changed files with 217 additions and 202 deletions
187
src/audio.ts
187
src/audio.ts
|
|
@ -0,0 +1,187 @@
|
||||||
|
/* eslint @typescript-eslint/no-var-requires: "off" */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// where the audio goes
|
||||||
|
let buffer: ArrayBuffer[] = [];
|
||||||
|
|
||||||
|
// place audio data in buffer
|
||||||
|
export function collect (chunk: ArrayBuffer) {
|
||||||
|
buffer.push(chunk);
|
||||||
|
}
|
||||||
|
|
||||||
|
// return audio and clear buffer
|
||||||
|
export function flush () {
|
||||||
|
const bufferCopy = buffer;
|
||||||
|
buffer = [];
|
||||||
|
return bufferCopy;
|
||||||
|
}
|
||||||
|
|
||||||
|
// import { backgroundMitt } from '@/modules/emitter';
|
||||||
|
// const portAudio = require('naudiodon');
|
||||||
|
|
||||||
|
// // Audio in and out stream objects.
|
||||||
|
// let ai: typeof portAudio.AudioIO | boolean = false;
|
||||||
|
// let ao: typeof portAudio.AudioIO | boolean = false;
|
||||||
|
|
||||||
|
// // Whether activly recording.
|
||||||
|
// let record = false;
|
||||||
|
|
||||||
|
// const audioContainer = {
|
||||||
|
// input: '',
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const audioOptions = {
|
||||||
|
// channelCount: 1,
|
||||||
|
// sampleFormat: 16,
|
||||||
|
// sampleRate: 16000,
|
||||||
|
// deviceId: -1,
|
||||||
|
// closeOnError: false,
|
||||||
|
// }
|
||||||
|
|
||||||
|
// export const toggleRecord = (): void => { record = !record };
|
||||||
|
|
||||||
|
|
||||||
|
// export const fetchAudioInput = (): Promise<Error | string> => (
|
||||||
|
|
||||||
|
// new Promise((resolve, reject) => {
|
||||||
|
|
||||||
|
// try {
|
||||||
|
// resolve(audioContainer.input);
|
||||||
|
// toggleRecord();
|
||||||
|
// } catch (e) {
|
||||||
|
// reject(new Error('Failed to fetch the audio.'))
|
||||||
|
// }
|
||||||
|
|
||||||
|
// })
|
||||||
|
// )
|
||||||
|
|
||||||
|
|
||||||
|
// // Main audio function run by run.ts module.
|
||||||
|
// export function initAudioIO(): void {
|
||||||
|
// console.log("AUDIO:Starting io streams.")
|
||||||
|
|
||||||
|
// if (!ai) {
|
||||||
|
|
||||||
|
// // Initialize and start input stream.
|
||||||
|
// ai = new portAudio.AudioIO({ inOptions: audioOptions });
|
||||||
|
// ai.setEncoding("hex");
|
||||||
|
// ai.start();
|
||||||
|
|
||||||
|
// // On each data chunk...
|
||||||
|
// ai.on('data', (chunk: string) => {
|
||||||
|
|
||||||
|
// // If recording, we capture the data.
|
||||||
|
// if (record) {
|
||||||
|
// console.log('AUDIO:Recording...')
|
||||||
|
// audioContainer.input += chunk;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Else, we don't capture and also clear audioContainer.
|
||||||
|
// else {
|
||||||
|
// if (audioContainer.input.length) {
|
||||||
|
// audioContainer.input = "";
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (!ao) {
|
||||||
|
|
||||||
|
// // Initialize and start input stream.
|
||||||
|
// ao = new portAudio.AudioIO({ outOptions: audioOptions });
|
||||||
|
// ao.start();
|
||||||
|
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// // ---Audio playback--------------------------------------------
|
||||||
|
|
||||||
|
// // Split Buffer into an array of len-sized Buffers.
|
||||||
|
// function bufSplit(buf: Buffer, len: number): Array<Buffer> {
|
||||||
|
// const chunks = [];
|
||||||
|
// let i = 0;
|
||||||
|
// let L = len;
|
||||||
|
|
||||||
|
// while(i < buf.byteLength) {
|
||||||
|
// chunks.push(buf.slice(i, L));
|
||||||
|
// i = L;
|
||||||
|
// L += len;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return chunks;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Audio playback.
|
||||||
|
// export function play(input: string): void {
|
||||||
|
|
||||||
|
// // Format the audio.
|
||||||
|
// const audio = bufSplit(
|
||||||
|
// Buffer.from(input as string, 'hex'),
|
||||||
|
// 8192
|
||||||
|
// );
|
||||||
|
|
||||||
|
// // Called on end of write.
|
||||||
|
// const callback = () => {
|
||||||
|
|
||||||
|
// // We stop audio playback anim.
|
||||||
|
// backgroundMitt.emit('ipc-renderer', {
|
||||||
|
// endpoint: 'stop-playback-anim'
|
||||||
|
// });
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// write();
|
||||||
|
|
||||||
|
// // Iterate through audio array and write buffers to portAudio writable.
|
||||||
|
// function write() {
|
||||||
|
// let chunk: Buffer;
|
||||||
|
// let ok = true;
|
||||||
|
// let i = 0;
|
||||||
|
|
||||||
|
// do {
|
||||||
|
// chunk = audio[i];
|
||||||
|
// if (i === audio.length - 1) {
|
||||||
|
// // write last chunk.
|
||||||
|
// ao.write(chunk, null, callback);
|
||||||
|
// } else {
|
||||||
|
// // check for backpreassure.
|
||||||
|
// ok = ao.write(chunk, null);
|
||||||
|
// }
|
||||||
|
// i++;
|
||||||
|
// } while (i < audio.length && ok);
|
||||||
|
|
||||||
|
// if (i < audio.length) {
|
||||||
|
// // Had to stop early!
|
||||||
|
// // Write some more once it drains.
|
||||||
|
// ao.once('drain', write);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // -------------------------------------------------------------
|
||||||
|
|
||||||
|
// // Get's called on window close.
|
||||||
|
// export async function stopStream() {
|
||||||
|
// console.log("AUDIO:Stopping audio stream.")
|
||||||
|
// if (ai) {
|
||||||
|
// try {
|
||||||
|
// await ai.quit()
|
||||||
|
// } catch(e){
|
||||||
|
// console.log('AUDIO: Failed to shutdown audio input.');
|
||||||
|
// throw e;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if (ao) {
|
||||||
|
// try {
|
||||||
|
// await ao.quit()
|
||||||
|
// } catch(e){
|
||||||
|
// console.log('AUDIO: Failed to shutdown audio output.');
|
||||||
|
// throw e;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,187 +0,0 @@
|
||||||
/* eslint @typescript-eslint/no-var-requires: "off" */
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
// where the audio goes
|
|
||||||
let buffer: ArrayBuffer[] = [];
|
|
||||||
|
|
||||||
// place audio data in buffer
|
|
||||||
export function collect (chunk: ArrayBuffer) {
|
|
||||||
buffer.push(chunk);
|
|
||||||
}
|
|
||||||
|
|
||||||
// return audio and clear buffer
|
|
||||||
export function flush () {
|
|
||||||
const bufferCopy = buffer;
|
|
||||||
buffer = [];
|
|
||||||
return bufferCopy;
|
|
||||||
}
|
|
||||||
|
|
||||||
// import { backgroundMitt } from '@/modules/emitter';
|
|
||||||
// const portAudio = require('naudiodon');
|
|
||||||
|
|
||||||
// // Audio in and out stream objects.
|
|
||||||
// let ai: typeof portAudio.AudioIO | boolean = false;
|
|
||||||
// let ao: typeof portAudio.AudioIO | boolean = false;
|
|
||||||
|
|
||||||
// // Whether activly recording.
|
|
||||||
// let record = false;
|
|
||||||
|
|
||||||
// const audioContainer = {
|
|
||||||
// input: '',
|
|
||||||
// }
|
|
||||||
|
|
||||||
// const audioOptions = {
|
|
||||||
// channelCount: 1,
|
|
||||||
// sampleFormat: 16,
|
|
||||||
// sampleRate: 16000,
|
|
||||||
// deviceId: -1,
|
|
||||||
// closeOnError: false,
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export const toggleRecord = (): void => { record = !record };
|
|
||||||
|
|
||||||
|
|
||||||
// export const fetchAudioInput = (): Promise<Error | string> => (
|
|
||||||
|
|
||||||
// new Promise((resolve, reject) => {
|
|
||||||
|
|
||||||
// try {
|
|
||||||
// resolve(audioContainer.input);
|
|
||||||
// toggleRecord();
|
|
||||||
// } catch (e) {
|
|
||||||
// reject(new Error('Failed to fetch the audio.'))
|
|
||||||
// }
|
|
||||||
|
|
||||||
// })
|
|
||||||
// )
|
|
||||||
|
|
||||||
|
|
||||||
// // Main audio function run by run.ts module.
|
|
||||||
// export function initAudioIO(): void {
|
|
||||||
// console.log("AUDIO:Starting io streams.")
|
|
||||||
|
|
||||||
// if (!ai) {
|
|
||||||
|
|
||||||
// // Initialize and start input stream.
|
|
||||||
// ai = new portAudio.AudioIO({ inOptions: audioOptions });
|
|
||||||
// ai.setEncoding("hex");
|
|
||||||
// ai.start();
|
|
||||||
|
|
||||||
// // On each data chunk...
|
|
||||||
// ai.on('data', (chunk: string) => {
|
|
||||||
|
|
||||||
// // If recording, we capture the data.
|
|
||||||
// if (record) {
|
|
||||||
// console.log('AUDIO:Recording...')
|
|
||||||
// audioContainer.input += chunk;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Else, we don't capture and also clear audioContainer.
|
|
||||||
// else {
|
|
||||||
// if (audioContainer.input.length) {
|
|
||||||
// audioContainer.input = "";
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (!ao) {
|
|
||||||
|
|
||||||
// // Initialize and start input stream.
|
|
||||||
// ao = new portAudio.AudioIO({ outOptions: audioOptions });
|
|
||||||
// ao.start();
|
|
||||||
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// // ---Audio playback--------------------------------------------
|
|
||||||
|
|
||||||
// // Split Buffer into an array of len-sized Buffers.
|
|
||||||
// function bufSplit(buf: Buffer, len: number): Array<Buffer> {
|
|
||||||
// const chunks = [];
|
|
||||||
// let i = 0;
|
|
||||||
// let L = len;
|
|
||||||
|
|
||||||
// while(i < buf.byteLength) {
|
|
||||||
// chunks.push(buf.slice(i, L));
|
|
||||||
// i = L;
|
|
||||||
// L += len;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return chunks;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Audio playback.
|
|
||||||
// export function play(input: string): void {
|
|
||||||
|
|
||||||
// // Format the audio.
|
|
||||||
// const audio = bufSplit(
|
|
||||||
// Buffer.from(input as string, 'hex'),
|
|
||||||
// 8192
|
|
||||||
// );
|
|
||||||
|
|
||||||
// // Called on end of write.
|
|
||||||
// const callback = () => {
|
|
||||||
|
|
||||||
// // We stop audio playback anim.
|
|
||||||
// backgroundMitt.emit('ipc-renderer', {
|
|
||||||
// endpoint: 'stop-playback-anim'
|
|
||||||
// });
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
// write();
|
|
||||||
|
|
||||||
// // Iterate through audio array and write buffers to portAudio writable.
|
|
||||||
// function write() {
|
|
||||||
// let chunk: Buffer;
|
|
||||||
// let ok = true;
|
|
||||||
// let i = 0;
|
|
||||||
|
|
||||||
// do {
|
|
||||||
// chunk = audio[i];
|
|
||||||
// if (i === audio.length - 1) {
|
|
||||||
// // write last chunk.
|
|
||||||
// ao.write(chunk, null, callback);
|
|
||||||
// } else {
|
|
||||||
// // check for backpreassure.
|
|
||||||
// ok = ao.write(chunk, null);
|
|
||||||
// }
|
|
||||||
// i++;
|
|
||||||
// } while (i < audio.length && ok);
|
|
||||||
|
|
||||||
// if (i < audio.length) {
|
|
||||||
// // Had to stop early!
|
|
||||||
// // Write some more once it drains.
|
|
||||||
// ao.once('drain', write);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // -------------------------------------------------------------
|
|
||||||
|
|
||||||
// // Get's called on window close.
|
|
||||||
// export async function stopStream() {
|
|
||||||
// console.log("AUDIO:Stopping audio stream.")
|
|
||||||
// if (ai) {
|
|
||||||
// try {
|
|
||||||
// await ai.quit()
|
|
||||||
// } catch(e){
|
|
||||||
// console.log('AUDIO: Failed to shutdown audio input.');
|
|
||||||
// throw e;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if (ao) {
|
|
||||||
// try {
|
|
||||||
// await ao.quit()
|
|
||||||
// } catch(e){
|
|
||||||
// console.log('AUDIO: Failed to shutdown audio output.');
|
|
||||||
// throw e;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,20 +1,20 @@
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import useScroll from "@/render/composables/scroll";
|
import useScroll from "@/render/composables/scroll";
|
||||||
|
|
||||||
const canvas = ref();
|
const messagesRef = ref();
|
||||||
|
|
||||||
/* seed the canvas with messages */
|
/* seed the canvas with messages */
|
||||||
const seedCanvas = (messages: Message[]) => {
|
const seedCanvas = (messages: Message[]) => {
|
||||||
canvas.value = messages;
|
messagesRef.value = messages;
|
||||||
}
|
}
|
||||||
|
|
||||||
const addMessage = (message: Message) => {
|
const addMessage = (message: Message) => {
|
||||||
canvas.value.push(message);
|
messagesRef.value.push(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
const updateMessage = (message: Message) => {
|
const updateMessage = (message: Message) => {
|
||||||
|
|
||||||
let target_message = canvas.value.filter((m: Message) => {
|
let target_message = messagesRef.value.filter((m: Message) => {
|
||||||
return m.uid = message.uid;
|
return m.uid = message.uid;
|
||||||
})[0];
|
})[0];
|
||||||
|
|
||||||
|
|
@ -29,10 +29,10 @@ export default function useMessages() {
|
||||||
const { updateScrollRef, adjustScroll } = useScroll("messenger");
|
const { updateScrollRef, adjustScroll } = useScroll("messenger");
|
||||||
|
|
||||||
return {
|
return {
|
||||||
canvas,
|
messagesRef,
|
||||||
seedCanvas,
|
seedCanvas,
|
||||||
addMessage,
|
addMessage,
|
||||||
updateMessage
|
updateMessage
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,9 @@
|
||||||
<!-- List of message bubbles. -->
|
<!-- List of message bubbles. -->
|
||||||
<div id="messenger">
|
<div id="messenger">
|
||||||
<Bubble
|
<Bubble
|
||||||
v-for="message in messages"
|
v-for="message in messagesRef"
|
||||||
:text="message.text"
|
:text="message.text"
|
||||||
:context="message.context"
|
:context="message.context"
|
||||||
:child
|
|
||||||
:key="message[0]"
|
:key="message[0]"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -24,7 +23,7 @@ import { defineComponent, onMounted, onUnmounted } from "vue";
|
||||||
import Message from "@/render/components/message.vue";
|
import Message from "@/render/components/message.vue";
|
||||||
import InputItem from "@/render/components/inputItem.vue";
|
import InputItem from "@/render/components/inputItem.vue";
|
||||||
import Settings from "@/render/components/settings.vue";
|
import Settings from "@/render/components/settings.vue";
|
||||||
import useMessages from "@/render/composables/messages";
|
import useMessages from "./controllers/messenger.control";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "Messenger",
|
name: "Messenger",
|
||||||
|
|
@ -40,23 +39,23 @@ export default defineComponent({
|
||||||
setup(props) {
|
setup(props) {
|
||||||
|
|
||||||
// Handle messages in view.
|
// Handle messages in view.
|
||||||
const { messages, updateMessageView } = useMessages();
|
const { messagesRef, updateMessageView } = useMessages();
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|
||||||
/* seed messages */
|
/* seed messages */
|
||||||
window.ipcRenderer.on("init-messages", (e_: any, payload: any) => {
|
window.ipcRenderer.on("init-messages", (e_: any, payload: any) => {
|
||||||
seedMessages(payload.messages);
|
// seedMessages(payload.messages);
|
||||||
});
|
});
|
||||||
|
|
||||||
/* add a new message */
|
/* add a new message */
|
||||||
window.ipcRenderer.on("add-message", (_e: any, payload: any) => {
|
window.ipcRenderer.on("add-message", (_e: any, payload: any) => {
|
||||||
addMessage(payload.message);
|
// addMessage(payload.message);
|
||||||
});
|
});
|
||||||
|
|
||||||
/* update an existing message */
|
/* update an existing message */
|
||||||
window.ipcRenderer.on("update-message", (_e: any, payload: any) => {
|
window.ipcRenderer.on("update-message", (_e: any, payload: any) => {
|
||||||
updateMessage(payload.message);
|
// updateMessage(payload.message);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
@ -66,7 +65,7 @@ export default defineComponent({
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
messages
|
messagesRef
|
||||||
};
|
};
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
import { useIpc } from "@/modules/ipc";
|
import { useIpc } from "@/modules/ipc";
|
||||||
import { logoutRequest } from '@/modules/message';
|
import { logoutRequest } from '@/modules/message';
|
||||||
import { useProfile } from "@/modules/auth"
|
import { useProfile } from "@/modules/auth"
|
||||||
import { invokeLogout } from "@/ipcRend/account";
|
import { invokeLogout } from "@/render/ipc";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "Settings",
|
name: "Settings",
|
||||||
|
|
|
||||||
0
src/render/composables/useMessages.ts
Normal file
0
src/render/composables/useMessages.ts
Normal file
16
src/render/main.ts
Normal file
16
src/render/main.ts
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
|
||||||
|
// src/main.ts
|
||||||
|
|
||||||
|
import App from "./App.vue";
|
||||||
|
|
||||||
|
import mitt from "mitt";
|
||||||
|
import { createApp } from "vue";
|
||||||
|
|
||||||
|
|
||||||
|
// Handle events.
|
||||||
|
const emitter = mitt();
|
||||||
|
|
||||||
|
const app = createApp(App)
|
||||||
|
|
||||||
|
app.provide("mitt", emitter)
|
||||||
|
app.mount("#app");
|
||||||
Loading…
Reference in a new issue