diff --git a/.gitea/workflows/service-packs.yaml b/.gitea/workflows/service-packs.yaml index 43bff8e..5061cbb 100644 --- a/.gitea/workflows/service-packs.yaml +++ b/.gitea/workflows/service-packs.yaml @@ -88,8 +88,16 @@ jobs: find packs -maxdepth 3 -type f 2>/dev/null || true test -n "$(find packs -type f -print -quit 2>/dev/null)" || { echo "packs is empty"; exit 1; } - - name: Install SCP in Docker container - run: apt-get install -y openssh-client + - name: Clean files before upload + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.SDU_SSH_HOST }} + username: ${{ secrets.SDU_SSH_USERNAME }} + password: ${{ secrets.SDU_SSH_PASSWORD }} + port: 22 + script: | + mkdir -p "${{ secrets.SDU_SSH_PACKS }}" + find "${{ secrets.SDU_SSH_PACKS }}" -mindepth 1 -type f -delete - name: Upload to SSH using SCP uses: appleboy/scp-action@master @@ -101,4 +109,4 @@ jobs: source: "packs/*" target: "${{ secrets.SDU_SSH_PACKS }}" strip_components: 1 - rm: true \ No newline at end of file + rm: false \ No newline at end of file diff --git a/app/components/MessageAttachments/MessageCall.tsx b/app/components/MessageAttachments/MessageCall.tsx index 478afdd..aa9e28a 100644 --- a/app/components/MessageAttachments/MessageCall.tsx +++ b/app/components/MessageAttachments/MessageCall.tsx @@ -2,8 +2,9 @@ import { useAttachment } from "@/app/providers/AttachmentProvider/useAttachment" import { AttachmentProps } from "./MessageAttachments"; import { Avatar, Box, Flex, Text } from "@mantine/core"; import { useRosettaColors } from "@/app/hooks/useRosettaColors"; -import { IconPhoneOutgoing, IconX } from "@tabler/icons-react"; +import { IconPhoneIncoming, IconPhoneOutgoing, IconX } from "@tabler/icons-react"; import { translateDurationToTime } from "@/app/providers/CallProvider/translateDurationTime"; +import { usePublicKey } from "@/app/providers/AccountProvider/usePublicKey"; export function MessageCall(props: AttachmentProps) { const { @@ -13,9 +14,10 @@ export function MessageCall(props: AttachmentProps) { props.attachment, props.parent, ); + const publicKey = usePublicKey(); const preview = getPreview(); - const callerRole = preview.split("::")[0]; - const duration = parseInt(preview.split("::")[1]); + const caller = props.parent.from == publicKey; + const duration = parseInt(preview); const colors = useRosettaColors(); const error = duration == 0; @@ -30,13 +32,11 @@ export function MessageCall(props: AttachmentProps) { {!error && <> - {callerRole == "0" && ( - + {!caller && ( + )} - {callerRole == "1" && ( - + {caller && ( + )} } {error && <> @@ -45,7 +45,7 @@ export function MessageCall(props: AttachmentProps) { { - error ? (callerRole == "0" ? "Missed call" : "Rejected call") : (callerRole == "0" ? "Incoming call" : "Outgoing call") + error ? (!caller ? "Missed call" : "Rejected call") : (!caller ? "Incoming call" : "Outgoing call") } {!error && diff --git a/app/components/TextParser/TextParser.tsx b/app/components/TextParser/TextParser.tsx index 9cbdf4c..cf517b6 100644 --- a/app/components/TextParser/TextParser.tsx +++ b/app/components/TextParser/TextParser.tsx @@ -119,6 +119,20 @@ export function TextParser(props: TextParserProps) { return <>{match}; } }, + { + // unicode emojis + pattern: [/\p{Emoji_Presentation}/u], + render: (match: string) => { + let textWithoutEmojis = props.text.replace(/\p{Emoji_Presentation}/gu, ''); + if(textWithoutEmojis.length <= (props.oversizeIfTextSmallerThan ?? 0)) { + return ; + } + return ; + }, + flush: (match: string) => { + return ; + } + }, { // :emoji_code: pattern: [/:emoji_([a-zA-Z0-9_-]+):/], diff --git a/app/providers/CallProvider/CallProvider.tsx b/app/providers/CallProvider/CallProvider.tsx index bf1d342..052d83b 100644 --- a/app/providers/CallProvider/CallProvider.tsx +++ b/app/providers/CallProvider/CallProvider.tsx @@ -462,21 +462,18 @@ export function CallProvider(props : CallProviderProps) { * Отправляет сообщение в диалог с звонящим с информацией о звонке */ const generateCallAttachment = () => { - let preview = ""; - if(roleRef.current == CallRole.CALLER){ - preview += "1::"; + if(roleRef.current != CallRole.CALLER){ + /** + * Только звонящий отправляет информацию о звонке в виде вложения, чтобы ее можно было отобразить в UI диалога, например длительность звонка + */ + return; } - if(roleRef.current == CallRole.CALLEE){ - preview += "0::"; - } - preview += duration.toString(); - sendMessage(activeCall, "", [{ id: generateRandomKey(16), - preview: preview, + preview: duration.toString(), type: AttachmentType.CALL, blob: "" - }], false); + }], true); } const accept = () => { diff --git a/app/providers/ProtocolProvider/protocol/packets/packet.message.ts b/app/providers/ProtocolProvider/protocol/packets/packet.message.ts index 66ba616..323908b 100644 --- a/app/providers/ProtocolProvider/protocol/packets/packet.message.ts +++ b/app/providers/ProtocolProvider/protocol/packets/packet.message.ts @@ -6,7 +6,7 @@ export enum AttachmentType { MESSAGES = 1, FILE = 2, AVATAR = 3, - CALL + CALL = 4 } export interface Attachment {