making simpler with content instead of audioclips

This commit is contained in:
talksik
2022-05-29 12:09:57 -05:00
parent 1e809f9e43
commit 50e632550c
3 changed files with 32 additions and 28 deletions
+13 -17
View File
@@ -11,32 +11,28 @@ export interface IContent {
// ? persist length of clip for easier viewing for others...
// ?they have to load it anyway and will get metadata anyway?
export class AudioClip implements IContent {
export class ContentBlock implements IContent {
id: string;
constructor(
public creatorUserId: string,
public contentUrl: string,
public contentType: ContentType,
public blobType: string,
public createdDate: Timestamp = Timestamp.now(),
) {}
}
export class Link implements IContent {
id: string;
constructor(
public creatorUserId: string,
public contentUrl: string,
public createdDate: Timestamp = Timestamp.now(),
) {}
export enum ContentType {
audio = 'audio',
link = 'link',
image = 'image',
}
export class Image implements IContent {
id: string;
constructor(
public creatorUserId: string,
public contentUrl: string,
public thumbnailUrl?: string,
public createdDate: Timestamp = Timestamp.now(),
) {}
export function isUrlImage(url: string) {
return url.match(/\.(jpeg|jpg|gif|png)$/) != null;
}
+11 -6
View File
@@ -58,9 +58,8 @@ import {
joinConversation,
leaveConversation,
searchUsers,
sendAudioClipToConversation,
sendContentBlockToConversation,
} from '../firebase/firestore';
import { Link, AudioClip, Image } from '@nirvana/core/src/models/content.model';
import { useImmer } from 'use-immer';
import { User } from '@nirvana/core/src/models/user.model';
import { onSnapshot } from 'firebase/firestore';
@@ -71,6 +70,7 @@ import { useDebounce, useEffectOnce, useKeyPressEvent } from 'react-use';
import KeyboardShortcutLabel from './KeyboardShortcutLabel';
import Channels from '../electron/constants';
import { uploadAudioClip } from '../firebase/firebaseStorage';
import { ContentBlock, ContentType } from '@nirvana/core/src/models/content.model';
type ConversationMap = {
[conversationId: string]: Conversation;
};
@@ -80,7 +80,7 @@ type UserMap = {
};
type ConversationContentMap = {
[conversationId: string]: { audio: AudioClip[]; links: Link[]; images: Image[] };
[conversationId: string]: ContentBlock[];
};
interface ITerminalContext {
@@ -175,7 +175,7 @@ export function TerminalProvider({ children }: { children?: React.ReactNode }) {
return () => unsub();
}, [user, updateConversationMap, enqueueSnackbar]);
// cached listeners for audioClips
// cached listeners for a
// useEffect(() => {
// }, [])
@@ -296,8 +296,13 @@ export function TerminalProvider({ children }: { children?: React.ReactNode }) {
audioChunks[0],
);
const audioClip = new AudioClip(user.uid, downloadUrl);
await sendAudioClipToConversation(audioClip, selectedConversation.id);
const contentBlock = new ContentBlock(
user.uid,
downloadUrl,
ContentType.audio,
audioChunks[0].type,
);
await sendContentBlockToConversation(contentBlock, selectedConversation.id);
enqueueSnackbar('clip sent!', { variant: 'success' });
} catch (error) {
+8 -5
View File
@@ -32,7 +32,7 @@ import Conversation, {
MemberState,
} from '@nirvana/core/src/models/conversation.model';
import useAuth from '../providers/AuthProvider';
import { AudioClip } from '@nirvana/core/src/models/content.model';
import { ContentBlock } from '@nirvana/core/src/models/content.model';
interface Document {
id: string;
@@ -66,8 +66,8 @@ const db = {
conversation: (conversationId: string) =>
docPoint<Conversation>(`conversations/${conversationId}`),
conversationAudioClips: (conversationId: string) =>
collectionPoint<AudioClip>(`conversations/${conversationId}/audioClips`),
conversationContent: (conversationId: string) =>
collectionPoint<ContentBlock>(`conversations/${conversationId}/content`),
};
// enum COLLECTION {
@@ -203,9 +203,12 @@ export const createGroupConversation = async (
}
};
export const sendAudioClipToConversation = async (audioClip: AudioClip, conversationId: string) => {
export const sendContentBlockToConversation = async (
contentBlock: ContentBlock,
conversationId: string,
) => {
try {
await addDoc(db.conversationAudioClips(conversationId), audioClip);
await addDoc(db.conversationContent(conversationId), contentBlock);
} catch (e) {
console.error('Error ', e);