Merge branch 'dev' into main
Some checks failed
SP Builds / build (push) Has been cancelled

This commit is contained in:
RoyceDa
2026-03-22 19:56:47 +02:00
5 changed files with 43 additions and 24 deletions

View File

@@ -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
rm: false

View File

@@ -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) {
<Flex gap={'sm'} direction={'row'}>
<Avatar bg={error ? colors.error : colors.brandColor} size={40}>
{!error && <>
{callerRole == "0" && (
<IconPhoneOutgoing color={'white'} size={22}></IconPhoneOutgoing>
{!caller && (
<IconPhoneIncoming color={'white'} size={22}></IconPhoneIncoming>
)}
{callerRole == "1" && (
<IconPhoneOutgoing color={'white'} size={22} style={{
transform: 'rotate(180deg)'
}}></IconPhoneOutgoing>
{caller && (
<IconPhoneOutgoing color={'white'} size={22}></IconPhoneOutgoing>
)}
</>}
{error && <>
@@ -45,7 +45,7 @@ export function MessageCall(props: AttachmentProps) {
</Avatar>
<Flex direction={'column'} gap={5}>
<Text size={'sm'}>{
error ? (callerRole == "0" ? "Missed call" : "Rejected call") : (callerRole == "0" ? "Incoming call" : "Outgoing call")
error ? (!caller ? "Missed call" : "Rejected call") : (!caller ? "Incoming call" : "Outgoing call")
}</Text>
{!error &&
<Text size={'xs'} c={colors.chevrons.active}>

View File

@@ -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 <Emoji size={40} unified={match.codePointAt(0)?.toString(16) || ''}></Emoji>;
}
return <Emoji unified={match.codePointAt(0)?.toString(16) || ''}></Emoji>;
},
flush: (match: string) => {
return <Emoji unified={match.codePointAt(0)?.toString(16) || ''}></Emoji>;
}
},
{
// :emoji_code:
pattern: [/:emoji_([a-zA-Z0-9_-]+):/],

View File

@@ -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 = () => {

View File

@@ -6,7 +6,7 @@ export enum AttachmentType {
MESSAGES = 1,
FILE = 2,
AVATAR = 3,
CALL
CALL = 4
}
export interface Attachment {