Compare commits

..

2 Commits

Author SHA1 Message Date
RoyceDa
93ef692eb5 Подготовка голосовых сообщений 2026-04-09 16:53:57 +02:00
RoyceDa
8fdfe9b786 Исправдение failed to decompress data 2026-04-09 16:36:23 +02:00
3 changed files with 69 additions and 5 deletions

View File

@@ -1,7 +1,7 @@
import { useDialog } from "@/app/providers/DialogProvider/useDialog";
import { useRosettaColors } from "@/app/hooks/useRosettaColors";
import { Box, Divider, Flex, Menu, Popover, Text, Transition, useComputedColorScheme } from "@mantine/core";
import { IconBarrierBlock, IconCamera, IconDoorExit, IconFile, IconMoodSmile, IconPaperclip, IconSend } from "@tabler/icons-react";
import { IconBarrierBlock, IconCamera, IconDoorExit, IconFile, IconMicrophone, IconMoodSmile, IconPaperclip, IconSend } from "@tabler/icons-react";
import { useEffect, useRef, useState } from "react";
import { useBlacklist } from "@/app/providers/BlacklistProvider/useBlacklist";
import { filePrapareForNetworkTransfer, generateRandomKey, imagePrepareForNetworkTransfer } from "@/app/utils/utils";
@@ -64,6 +64,13 @@ export function DialogInput() {
}]
], [], true);
const hasText = message.trim().length > 0;
const showSendIcon = hasText || attachments.length > 0;
const onMicClick = () => {
console.info("Start voice record");
};
const fileDialog = useFileDialog({
multiple: false,
//naccept: '*',
@@ -435,9 +442,41 @@ export function DialogInput() {
/>
</Popover.Dropdown>
</Popover>
<IconSend stroke={1.5} color={message.trim() == "" && attachments.length <= 0 ? colors.chevrons.active : colors.brandColor} onClick={send} style={{
cursor: 'pointer'
}} size={25}></IconSend>
<Box pos="relative" w={25} h={25}>
<Transition mounted={showSendIcon} transition="pop" duration={180} timingFunction="ease">
{(styles) => (
<IconSend
stroke={1.5}
color={colors.brandColor}
onClick={send}
style={{
...styles,
position: 'absolute',
inset: 0,
cursor: 'pointer'
}}
size={25}
/>
)}
</Transition>
<Transition mounted={!showSendIcon} transition="pop" duration={180} timingFunction="ease">
{(styles) => (
<IconMicrophone
stroke={1.5}
color={colors.chevrons.active}
onClick={onMicClick}
style={{
...styles,
position: 'absolute',
inset: 0,
cursor: 'pointer'
}}
size={25}
/>
)}
</Transition>
</Box>
</Flex>
</Flex>}
{blocked && <Box mih={62} bg={colors.boxColor}>

View File

@@ -140,7 +140,7 @@ export function useDialogFiber() {
content: content,
timestamp: timestamp,
readed: idle ? 0 : 1,
chacha_key: groupKey,
chacha_key: Buffer.from(groupKey).toString('hex'),
from_me: fromPublicKey == publicKey ? 1 : 0,
plain_message: decryptedContent,
delivered: DeliveredMessageState.DELIVERED,

View File

@@ -0,0 +1,25 @@
import { createContext, useRef } from "react";
const PlayerContext = createContext(null);
/**
* Провайдер для Audio/Video плеера
*/
interface PlayerProviderProps {
children: React.ReactNode;
}
export function PlayerProvider(props : PlayerProviderProps) {
const audioRef = useRef<HTMLAudioElement>(null);
const playVoice = () => {
}
return (
<PlayerContext.Provider value={null}>
{props.children}
<audio ref={audioRef} />
</PlayerContext.Provider>
)
}