mirror of
https://git.jami.net/savoirfairelinux/jami-client-qt.git
synced 2025-10-30 07:53:33 +08:00
Compare commits
27 Commits
ee0a754b6a
...
stable/202
| Author | SHA1 | Date | |
|---|---|---|---|
| f8d74fb170 | |||
| 7a03b4d410 | |||
| 77a9b447f1 | |||
| 98f868fb5e | |||
| 0ff0ee2bd8 | |||
| 002af53f81 | |||
| 4289545f94 | |||
| bd3552a049 | |||
| 03bcd905e5 | |||
| 9bfd149d45 | |||
| 6c5ab1e483 | |||
| faba758254 | |||
| d8f548261d | |||
| fe504827fa | |||
| ca02cf172a | |||
| ba44b70f97 | |||
| 87e38c2bf5 | |||
| 98a300d36f | |||
| 5ac31130d0 | |||
| 9c11ec6233 | |||
| c9ab1a8e24 | |||
| 76e1bd9eb1 | |||
| ffb20d6767 | |||
| 87e63724c3 | |||
| 9fad769040 | |||
| 4106b8c752 | |||
| fd6e733433 |
2
3rdparty/md4c
vendored
2
3rdparty/md4c
vendored
Submodule 3rdparty/md4c updated: ad8d41127b...635f296735
@ -58,10 +58,8 @@ else()
|
||||
set(DAEMON_DIR ${PROJECT_SOURCE_DIR}/daemon)
|
||||
endif()
|
||||
|
||||
# For now only MSVC is supported for building Jami-core within the
|
||||
# client cmake.
|
||||
if(JAMICORE_AS_SUBDIR)
|
||||
add_subdirectory(${DAEMON_DIR})
|
||||
add_subdirectory(${DAEMON_DIR} EXCLUDE_FROM_ALL)
|
||||
set(LIBJAMI_LIB jami-core)
|
||||
endif()
|
||||
|
||||
|
||||
@ -29,7 +29,7 @@ sudo apt-get update && sudo apt-get install libqt-jami
|
||||
|
||||
#### Install libqt-jami, Debian based
|
||||
|
||||
To install libqt-jami on Debian, execute these commands replacing `debian_<VERSION>` by your distribution version. For example "debian_11"
|
||||
To install libqt-jami on Debian, execute these commands replacing `debian_<VERSION>` by your distribution version. For example "debian_12"
|
||||
|
||||
```bash
|
||||
sudo apt install gnupg dirmngr ca-certificates curl --no-install-recommends
|
||||
@ -295,12 +295,12 @@ Once the build has finished, you should then be able to use the Visual Studio So
|
||||
|
||||
**Set up**
|
||||
|
||||
- macOS minimum version 11.0
|
||||
- macOS minimum version 12.0
|
||||
- install python3
|
||||
- download xcode
|
||||
- install Qt 6.6
|
||||
- install Qt 6.8
|
||||
|
||||
Qt 6.6 can be installed via brew
|
||||
Qt 6.8 can be installed via brew
|
||||
|
||||
```bash
|
||||
brew install qt
|
||||
|
||||
2
daemon
2
daemon
Submodule daemon updated: 7e2e18ff7b...798c1fcf69
@ -87,12 +87,27 @@
|
||||
</developer>
|
||||
|
||||
<releases>
|
||||
<release version="20250912.0" date="2025-09-12">
|
||||
<url type="details">https://git.jami.net/savoirfairelinux/jami-client-qt/-/wikis/Changelog#nightlystable-20250912</url>
|
||||
</release>
|
||||
<release version="20250815.1" date="2025-08-17">
|
||||
<url type="detials">https://git.jami.net/savoirfairelinux/jami-client-qt/-/wikis/Changelog#stable-20250817</url>
|
||||
</release>
|
||||
<release version="20250718.0" date="2025-07-18">
|
||||
<url type="details">https://git.jami.net/savoirfairelinux/jami-client-qt/-/wikis/Changelog#nightlystable-20250718</url>
|
||||
</release>
|
||||
<release version="20250613.0" date="2025-06-13">
|
||||
<url type="details">https://git.jami.net/savoirfairelinux/jami-client-qt/-/wikis/Changelog#nightlystable-20250613</url>
|
||||
</release>
|
||||
<release version="20250610.0" date="2025-06-10">
|
||||
<url type="details">https://git.jami.net/savoirfairelinux/jami-client-qt/-/wikis/Changelog#nightlystable-20250610</url>
|
||||
</release>
|
||||
<release version="20250523.0" date="2025-05-23">
|
||||
<url type="details">https://git.jami.net/savoirfairelinux/jami-client-qt/-/wikis/Changelog#nightlystable-20250523</url>
|
||||
</release>
|
||||
<release version="20250430.1" date="2025-04-30">
|
||||
<url type="details">https://git.jami.net/savoirfairelinux/jami-client-qt/-/wikis/Changelog#nightlystable-20250430</url>
|
||||
</release>
|
||||
</releases>
|
||||
|
||||
<branding>
|
||||
@ -1295,232 +1310,82 @@
|
||||
<!-- Officially GIF is not an allowed video format, but it appears to work nonetheless -->
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image type="source" width="1310" height="650">https://dl.jami.net/media-resources/screenshots/jami_linux_audiovideo.png</image>
|
||||
<caption>Send chat messages and talk with audio and video</caption>
|
||||
<caption xml:lang="ab">Ачат адырраҭарақәа рышьҭра, аудиои авидеои рыла аицәажәара</caption>
|
||||
<caption xml:lang="af">Stuur kletsboodskappe en praat met oudio en video</caption>
|
||||
<caption xml:lang="am">የውይይት መልዕክቶችን ይላኩ እና በድምጽ እና በቪዲዮ ይናገሩ</caption>
|
||||
<caption xml:lang="ar">إرسال رسائل الدردشة والتحدث بالصوت والفيديو</caption>
|
||||
<caption xml:lang="az">Çat mesajları göndərin və audio və video ilə danışın</caption>
|
||||
<caption xml:lang="be">Адпраўляйце паведамленні ў чаце і размаўляйце з аўдыё і відэа</caption>
|
||||
<caption xml:lang="bg">Изпращайте чат съобщения и говорете с аудио и видео</caption>
|
||||
<caption xml:lang="bn">চ্যাট বার্তা পাঠান এবং অডিও এবং ভিডিওর মাধ্যমে কথা বলুন</caption>
|
||||
<caption xml:lang="ca">Envia missatges de xat i parla amb àudio i vídeo</caption>
|
||||
<caption xml:lang="cs">Odesílejte chatové zprávy a mluvte se zvukem a videem</caption>
|
||||
<caption xml:lang="da">Send chatbeskeder og tal med lyd og video</caption>
|
||||
<caption xml:lang="de">Senden Sie Chatnachrichten und sprechen Sie mit Audio und Video</caption>
|
||||
<caption xml:lang="el">Στείλτε μηνύματα συνομιλίας και μιλήστε με ήχο και βίντεο</caption>
|
||||
<caption xml:lang="eo">Sendu babilajn mesaĝojn kaj parolu per audio kaj video</caption>
|
||||
<caption xml:lang="es">Envía mensajes de chat y habla con audio y video.</caption>
|
||||
<caption xml:lang="et">Saatke vestlussõnumeid ja rääkige heli ja videoga</caption>
|
||||
<caption xml:lang="fa">پیام های چت بفرستید و با صدا و تصویر صحبت کنید</caption>
|
||||
<caption xml:lang="fi">Lähetä chat-viestejä ja keskustele äänen ja videon avulla</caption>
|
||||
<caption xml:lang="fil">Magpadala ng mga mensahe sa chat at makipag-usap gamit ang audio at video</caption>
|
||||
<caption xml:lang="fr">Envoyez des messages de chat et discutez avec audio et vidéo</caption>
|
||||
<caption xml:lang="gl">Envía mensaxes de chat e fala con audio e vídeo</caption>
|
||||
<caption xml:lang="he">שלח הודעות צ'אט ודבר עם אודיו ווידאו</caption>
|
||||
<caption xml:lang="hi">चैट संदेश भेजें और ऑडियो और वीडियो के साथ बात करें</caption>
|
||||
<caption xml:lang="hr">Šaljite chat poruke i razgovarajte uz zvuk i video</caption>
|
||||
<caption xml:lang="hu">Csevegőüzenetek küldése, valamint hang- és videobeszélgetés</caption>
|
||||
<caption xml:lang="hy">Ուղարկեք զրույցի հաղորդագրություններ և խոսեք աուդիո և վիդեո</caption>
|
||||
<caption xml:lang="id">Kirim pesan obrolan dan berbicara dengan audio dan video</caption>
|
||||
<caption xml:lang="is">Sendu spjallskilaboð og talaðu með hljóði og myndböndum</caption>
|
||||
<caption xml:lang="it">Invia messaggi di chat e parla con audio e video</caption>
|
||||
<caption xml:lang="ja">チャットメッセージを送信し、音声とビデオで会話する</caption>
|
||||
<caption xml:lang="ka">გაგზავნეთ ჩატის შეტყობინებები და ისაუბრეთ აუდიო და ვიდეოთი</caption>
|
||||
<caption xml:lang="km">ផ្ញើសារជជែក និងនិយាយជាមួយអូឌីយ៉ូ និងវីដេអូ</caption>
|
||||
<caption xml:lang="kn">ಚಾಟ್ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಿ ಮತ್ತು ಆಡಿಯೋ ಮತ್ತು ವೀಡಿಯೊದೊಂದಿಗೆ ಮಾತನಾಡಿ</caption>
|
||||
<caption xml:lang="ko">채팅 메시지를 보내고 오디오와 비디오로 대화하세요</caption>
|
||||
<caption xml:lang="ky">Чат билдирүүлөрүн жөнөтүңүз жана аудио жана видео менен сүйлөшүңүз</caption>
|
||||
<caption xml:lang="la">Mitte chat nuntios et colloqui cum audio et video</caption>
|
||||
<caption xml:lang="lo">ສົ່ງຂໍ້ຄວາມສົນທະນາ ແລະສົນທະນາດ້ວຍສຽງ ແລະວິດີໂອ</caption>
|
||||
<caption xml:lang="lt">Siųskite pokalbių pranešimus ir kalbėkite naudodami garso ir vaizdo įrašus</caption>
|
||||
<caption xml:lang="lv">Sūtiet tērzēšanas ziņas un runājiet ar audio un video</caption>
|
||||
<caption xml:lang="mk">Испраќајте пораки за разговор и разговарајте со аудио и видео</caption>
|
||||
<caption xml:lang="ml">ചാറ്റ് സന്ദേശങ്ങൾ അയച്ച് ഓഡിയോ, വീഡിയോ ഉപയോഗിച്ച് സംസാരിക്കുക</caption>
|
||||
<caption xml:lang="mn">Чат мессеж илгээж, аудио болон видеотой ярилцаарай</caption>
|
||||
<caption xml:lang="mr">चॅट संदेश पाठवा आणि ऑडिओ आणि व्हिडिओसह बोला</caption>
|
||||
<caption xml:lang="ms">Hantar mesej sembang dan bercakap dengan audio dan video</caption>
|
||||
<caption xml:lang="my">ချတ်မက်ဆေ့ခ်ျများပို့ပြီး အသံနှင့် ဗီဒီယိုဖြင့် စကားပြောပါ။</caption>
|
||||
<caption xml:lang="ne">अडियो र भिडियो मार्फत च्याट सन्देशहरू पठाउनुहोस् र कुरा गर्नुहोस्</caption>
|
||||
<caption xml:lang="nl">Verstuur chatberichten en praat met audio en video</caption>
|
||||
<caption xml:lang="no">Send chat-meldinger og snakk med lyd og video</caption>
|
||||
<caption xml:lang="pl">Wysyłaj wiadomości czatu i rozmawiaj z dźwiękiem i obrazem</caption>
|
||||
<caption xml:lang="pt-BR">Envie mensagens de bate-papo e fale com áudio e vídeo</caption>
|
||||
<caption xml:lang="pt-PT">Envie mensagens de chat e fale com áudio e vídeo</caption>
|
||||
<caption xml:lang="ro">Trimiteți mesaje de chat și vorbiți cu audio și video</caption>
|
||||
<caption xml:lang="ru">Отправляйте сообщения в чате и общайтесь с помощью аудио и видео</caption>
|
||||
<caption xml:lang="si">කතාබස් පණිවිඩ යවන්න සහ ශ්රව්ය සහ දෘශ්ය සමඟ කතා කරන්න</caption>
|
||||
<caption xml:lang="sk">Posielajte četové správy a rozprávajte sa so zvukom a videom</caption>
|
||||
<caption xml:lang="sl">Pošiljajte sporočila v klepetu in se pogovarjajte z zvokom in videom</caption>
|
||||
<caption xml:lang="sq">Dërgoni mesazhe bisede dhe bisedoni me audio dhe video</caption>
|
||||
<caption xml:lang="sr">Шаљите поруке за ћаскање и разговарајте уз аудио и видео</caption>
|
||||
<caption xml:lang="sv">Skicka chattmeddelanden och prata med ljud och video</caption>
|
||||
<caption xml:lang="sw">Tuma ujumbe wa gumzo na zungumza na sauti na video</caption>
|
||||
<caption xml:lang="ta">அரட்டை செய்திகளை அனுப்பவும், ஆடியோ மற்றும் வீடியோ மூலம் பேசவும்</caption>
|
||||
<caption xml:lang="te">చాట్ సందేశాలను పంపండి మరియు ఆడియో మరియు వీడియోతో మాట్లాడండి</caption>
|
||||
<caption xml:lang="th">ส่งข้อความแชทและพูดคุยด้วยเสียงและวิดีโอ</caption>
|
||||
<caption xml:lang="tl">Magpadala ng mga mensahe sa chat at makipag-usap gamit ang audio at video</caption>
|
||||
<caption xml:lang="tr">Sohbet mesajları gönderin ve sesli ve görüntülü konuşun</caption>
|
||||
<caption xml:lang="uk">Надсилайте повідомлення чату та спілкуйтеся з аудіо та відео</caption>
|
||||
<caption xml:lang="vi">Gửi tin nhắn trò chuyện và nói chuyện bằng âm thanh và video</caption>
|
||||
<caption xml:lang="zh-CN">发送聊天消息并通过音频和视频进行交谈</caption>
|
||||
<caption xml:lang="zh-HK">發送聊天訊息並透過音訊和視訊進行交談</caption>
|
||||
<caption xml:lang="zh-TW">發送聊天訊息並透過音訊和視訊進行交談</caption>
|
||||
<caption xml:lang="zu">Thumela imilayezo yengxoxo futhi ukhulume ngomsindo nevidiyo</caption>
|
||||
<image>https://dl.jami.net/media-resources/screenshots/flathub/jami_linux_welcome.PNG</image>
|
||||
<caption>Share, freely and privately</caption>
|
||||
<caption xml:lang="ab">Ацеиҩшара, хақәиҭла, хала</caption>
|
||||
<caption xml:lang="af">Deel, vrylik en privaat</caption>
|
||||
<caption xml:lang="am">በነጻ እና በግል ያካፍሉ።</caption>
|
||||
<caption xml:lang="ar">شارك بحرية وبشكل خاص</caption>
|
||||
<caption xml:lang="az">Sərbəst və gizli şəkildə paylaşın</caption>
|
||||
<caption xml:lang="be">Падзяліцеся свабодна і прыватна</caption>
|
||||
<caption xml:lang="bg">Споделяйте, свободно и частно</caption>
|
||||
<caption xml:lang="bn">শেয়ার করুন, অবাধে এবং গোপনে</caption>
|
||||
<caption xml:lang="ca">Comparteix, lliurement i de forma privada</caption>
|
||||
<caption xml:lang="cs">Sdílejte svobodně a soukromě</caption>
|
||||
<caption xml:lang="da">Del, frit og privat</caption>
|
||||
<caption xml:lang="de">Teilen, frei und privat</caption>
|
||||
<caption xml:lang="el">Κοινοποιήστε, ελεύθερα και ιδιωτικά</caption>
|
||||
<caption xml:lang="eo">Kunhavigu, libere kaj private</caption>
|
||||
<caption xml:lang="es">Comparte, libre y privadamente</caption>
|
||||
<caption xml:lang="et">Jaga, vabalt ja privaatselt</caption>
|
||||
<caption xml:lang="fa">به اشتراک بگذارید، آزادانه و خصوصی</caption>
|
||||
<caption xml:lang="fi">Jaa, vapaasti ja yksityisesti</caption>
|
||||
<caption xml:lang="fil">Ibahagi, libre at pribado</caption>
|
||||
<caption xml:lang="fr">Partagez, librement, gratuitement et en toute confidentialité</caption>
|
||||
<caption xml:lang="gl">Comparte, de xeito libre e privado</caption>
|
||||
<caption xml:lang="he">שתפו, באופן חופשי ופרטי</caption>
|
||||
<caption xml:lang="hi">स्वतंत्र रूप से और निजी तौर पर साझा करें</caption>
|
||||
<caption xml:lang="hr">Dijelite, slobodno i privatno</caption>
|
||||
<caption xml:lang="hu">Megosztás, szabadon és bizalmasan</caption>
|
||||
<caption xml:lang="hy">Տարածեք, ազատ և մասնավոր</caption>
|
||||
<caption xml:lang="id">Berbagi, secara bebas dan pribadi</caption>
|
||||
<caption xml:lang="is">Deildu, frjálslega og einslega</caption>
|
||||
<caption xml:lang="it">Condividere, liberamente e privatamente</caption>
|
||||
<caption xml:lang="ja">自由に、プライベートに共有</caption>
|
||||
<caption xml:lang="ka">გააზიარეთ, თავისუფლად და პირადად</caption>
|
||||
<caption xml:lang="km">ចែករំលែកដោយសេរី និងឯកជន</caption>
|
||||
<caption xml:lang="kn">ಮುಕ್ತವಾಗಿ ಮತ್ತು ಖಾಸಗಿಯಾಗಿ ಹಂಚಿಕೊಳ್ಳಿ</caption>
|
||||
<caption xml:lang="ko">자유롭고 비공개적으로 공유하세요</caption>
|
||||
<caption xml:lang="ky">Бөлүшүү, эркин жана купуя</caption>
|
||||
<caption xml:lang="la">Communicantes, libere et privatim</caption>
|
||||
<caption xml:lang="lo">ແບ່ງປັນ, ຢ່າງເສລີແລະເປັນສ່ວນຕົວ</caption>
|
||||
<caption xml:lang="lt">Dalintis, laisvai ir privačiai</caption>
|
||||
<caption xml:lang="lv">Kopīgojiet, brīvi un privāti</caption>
|
||||
<caption xml:lang="mk">Споделете, слободно и приватно</caption>
|
||||
<caption xml:lang="ml">സ്വതന്ത്രമായും സ്വകാര്യമായും പങ്കിടുക</caption>
|
||||
<caption xml:lang="mn">Чөлөөт, хувийн байдлаар хуваалцах</caption>
|
||||
<caption xml:lang="mr">सामायिक करा, मुक्तपणे आणि खाजगीरित्या</caption>
|
||||
<caption xml:lang="ms">Kongsi, secara bebas dan peribadi</caption>
|
||||
<caption xml:lang="my">လွတ်လပ်စွာ သီးသန့်မျှဝေပါ။</caption>
|
||||
<caption xml:lang="ne">स्वतन्त्र र गोप्य रूपमा सेयर गर्नुहोस्</caption>
|
||||
<caption xml:lang="nl">Deel, vrij en privé</caption>
|
||||
<caption xml:lang="no">Del, fritt og privat</caption>
|
||||
<caption xml:lang="pl">Udostępniaj swobodnie i prywatnie</caption>
|
||||
<caption xml:lang="pt-BR">Compartilhe, livre e privadamente</caption>
|
||||
<caption xml:lang="pt-PT">Partilhe, livre e privadamente</caption>
|
||||
<caption xml:lang="ro">Distribuie, în mod liber și privat</caption>
|
||||
<caption xml:lang="ru">Делитесь, свободно и конфиденциально</caption>
|
||||
<caption xml:lang="si">නිදහසේ සහ පෞද්ගලිකව බෙදා ගන්න</caption>
|
||||
<caption xml:lang="sk">Zdieľajte, slobodne a súkromne</caption>
|
||||
<caption xml:lang="sl">Delite brezplačno in zasebno</caption>
|
||||
<caption xml:lang="sq">Shpërndaje, lirisht dhe privatisht</caption>
|
||||
<caption xml:lang="sr">Делите, слободно и приватно</caption>
|
||||
<caption xml:lang="sv">Dela, fritt och privat</caption>
|
||||
<caption xml:lang="sw">Shiriki, kwa uhuru na kwa faragha</caption>
|
||||
<caption xml:lang="ta">பகிரவும், சுதந்திரமாகவும் தனிப்பட்ட முறையிலும்</caption>
|
||||
<caption xml:lang="te">ఉచితంగా మరియు ప్రైవేట్గా షేర్ చేయండి</caption>
|
||||
<caption xml:lang="th">แบ่งปันได้อย่างอิสระและเป็นส่วนตัว</caption>
|
||||
<caption xml:lang="tl">Ibahagi, libre at pribado</caption>
|
||||
<caption xml:lang="tr">Özgürce ve özel olarak paylaşın</caption>
|
||||
<caption xml:lang="uk">Поділіться вільно та приватно</caption>
|
||||
<caption xml:lang="vi">Chia sẻ, tự do và riêng tư</caption>
|
||||
<caption xml:lang="zh-CN">自由且私密地分享</caption>
|
||||
<caption xml:lang="zh-HK">自由且私密地分享</caption>
|
||||
<caption xml:lang="zh-TW">自由且私密地分享</caption>
|
||||
<caption xml:lang="zu">Yabelana, ngokukhululekile nangasese</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<image type="source" width="1016" height="659">https://dl.jami.net/media-resources/screenshots/jami_linux_screenshare.png</image>
|
||||
<caption>Screen sharing</caption>
|
||||
<caption xml:lang="ab">Аекран аимадара</caption>
|
||||
<caption xml:lang="af">Skermdeling</caption>
|
||||
<caption xml:lang="am">ማያ ገጽ ማጋራት።</caption>
|
||||
<caption xml:lang="ar">مشاركة الشاشة</caption>
|
||||
<caption xml:lang="az">Ekran paylaşımı</caption>
|
||||
<caption xml:lang="be">Агульны доступ да экрана</caption>
|
||||
<caption xml:lang="bg">Споделяне на екрана</caption>
|
||||
<caption xml:lang="bn">স্ক্রিন শেয়ারিং</caption>
|
||||
<caption xml:lang="ca">Compartició de pantalla</caption>
|
||||
<caption xml:lang="cs">Sdílení obrazovky</caption>
|
||||
<caption xml:lang="da">Skærmdeling</caption>
|
||||
<caption xml:lang="de">Bildschirmfreigabe</caption>
|
||||
<caption xml:lang="el">Κοινή χρήση οθόνης</caption>
|
||||
<caption xml:lang="eo">Kundivido de ekrano</caption>
|
||||
<caption xml:lang="es">Compartir pantalla</caption>
|
||||
<caption xml:lang="et">Ekraani jagamine</caption>
|
||||
<caption xml:lang="fa">اشتراک گذاری صفحه نمایش</caption>
|
||||
<caption xml:lang="fi">Näytön jakaminen</caption>
|
||||
<caption xml:lang="fil">Pagbabahagi ng screen</caption>
|
||||
<caption xml:lang="fr">Partage d'écran</caption>
|
||||
<caption xml:lang="gl">Compartir pantalla</caption>
|
||||
<caption xml:lang="he">שיתוף מסך</caption>
|
||||
<caption xml:lang="hi">स्क्रीन शेयरिंग</caption>
|
||||
<caption xml:lang="hr">Dijeljenje zaslona</caption>
|
||||
<caption xml:lang="hu">Képernyőmegosztás</caption>
|
||||
<caption xml:lang="hy">Էկրանի փոխանակում</caption>
|
||||
<caption xml:lang="id">Berbagi layar</caption>
|
||||
<caption xml:lang="is">Skjádeiling</caption>
|
||||
<caption xml:lang="it">Condivisione dello schermo</caption>
|
||||
<caption xml:lang="ja">画面共有</caption>
|
||||
<caption xml:lang="ka">ეკრანის გაზიარება</caption>
|
||||
<caption xml:lang="km">ការចែករំលែកអេក្រង់</caption>
|
||||
<caption xml:lang="kn">ಪರದೆ ಹಂಚಿಕೆ</caption>
|
||||
<caption xml:lang="ko">화면 공유</caption>
|
||||
<caption xml:lang="ky">Экранды бөлүшүү</caption>
|
||||
<caption xml:lang="la">Screen sharing</caption>
|
||||
<caption xml:lang="lo">ການແບ່ງປັນໜ້າຈໍ</caption>
|
||||
<caption xml:lang="lt">Ekrano bendrinimas</caption>
|
||||
<caption xml:lang="lv">Ekrāna koplietošana</caption>
|
||||
<caption xml:lang="mk">Споделување екран</caption>
|
||||
<caption xml:lang="ml">സ്ക്രീൻ പങ്കിടൽ</caption>
|
||||
<caption xml:lang="mn">Дэлгэц хуваалцах</caption>
|
||||
<caption xml:lang="mr">स्क्रीन शेअरिंग</caption>
|
||||
<caption xml:lang="ms">Perkongsian skrin</caption>
|
||||
<caption xml:lang="my">မျက်နှာပြင်မျှဝေခြင်း။</caption>
|
||||
<caption xml:lang="ne">स्क्रिन सेयरिङ</caption>
|
||||
<caption xml:lang="nl">Scherm delen</caption>
|
||||
<caption xml:lang="no">Skjermdeling</caption>
|
||||
<caption xml:lang="pl">Udostępnianie ekranu</caption>
|
||||
<caption xml:lang="pt-BR">Compartilhamento de tela</caption>
|
||||
<caption xml:lang="pt-PT">Partilha de tela</caption>
|
||||
<caption xml:lang="ro">Partajarea ecranului</caption>
|
||||
<caption xml:lang="ru">Совместное использование экрана</caption>
|
||||
<caption xml:lang="si">තිර බෙදා ගැනීම</caption>
|
||||
<caption xml:lang="sk">Zdieľanie obrazovky</caption>
|
||||
<caption xml:lang="sl">Skupna raba zaslona</caption>
|
||||
<caption xml:lang="sq">Ndarja e ekranit</caption>
|
||||
<caption xml:lang="sr">Дељење екрана</caption>
|
||||
<caption xml:lang="sv">Skärmdelning</caption>
|
||||
<caption xml:lang="sw">Kushiriki skrini</caption>
|
||||
<caption xml:lang="ta">திரைப் பகிர்வு</caption>
|
||||
<caption xml:lang="te">స్క్రీన్ షేరింగ్</caption>
|
||||
<caption xml:lang="th">การแชร์หน้าจอ</caption>
|
||||
<caption xml:lang="tl">Pagbabahagi ng screen</caption>
|
||||
<caption xml:lang="tr">Ekran paylaşımı</caption>
|
||||
<caption xml:lang="uk">Спільне використання екрана</caption>
|
||||
<caption xml:lang="vi">Chia sẻ màn hình</caption>
|
||||
<caption xml:lang="zh-CN">屏幕共享</caption>
|
||||
<caption xml:lang="zh-HK">螢幕分享</caption>
|
||||
<caption xml:lang="zh-TW">螢幕分享</caption>
|
||||
<caption xml:lang="zu">Ukwabelana kwesikrini</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<video container="webm" codec="vp9" width="600" height="400">https://dl.jami.net/media-resources/gifs_features/conversiongif_webm/audio-call_web.webm</video>
|
||||
<caption>Crystal clear audio</caption>
|
||||
<caption xml:lang="ab">Ицқьоу аудио</caption>
|
||||
<caption xml:lang="af">Kristalhelder klank</caption>
|
||||
<caption xml:lang="am">ክሪስታል ግልጽ ኦዲዮ</caption>
|
||||
<caption xml:lang="ar">صوت نقي للغاية</caption>
|
||||
<caption xml:lang="az">Kristal təmiz səs</caption>
|
||||
<caption xml:lang="be">Крышталёва чысты аўдыё</caption>
|
||||
<caption xml:lang="bg">Кристално чист звук</caption>
|
||||
<caption xml:lang="bn">স্ফটিক স্বচ্ছ অডিও</caption>
|
||||
<caption xml:lang="ca">Àudio cristal·lí</caption>
|
||||
<caption xml:lang="cs">Křišťálově čistý zvuk</caption>
|
||||
<caption xml:lang="da">Krystalklar lyd</caption>
|
||||
<caption xml:lang="de">Kristallklarer Klang</caption>
|
||||
<caption xml:lang="el">Κρυστάλλινος ήχος</caption>
|
||||
<caption xml:lang="eo">Kristalklara aŭdio</caption>
|
||||
<caption xml:lang="es">Audio cristalina</caption>
|
||||
<caption xml:lang="et">Kristallselge heli</caption>
|
||||
<caption xml:lang="fa">صدای شفاف</caption>
|
||||
<caption xml:lang="fi">Kristallinkirkas ääni</caption>
|
||||
<caption xml:lang="fil">Malinaw na audio</caption>
|
||||
<caption xml:lang="fr">Un son cristallin</caption>
|
||||
<caption xml:lang="gl">Audio cristalino</caption>
|
||||
<caption xml:lang="he">אודיו צלול</caption>
|
||||
<caption xml:lang="hi">क्रिस्टल स्पष्ट ऑडियो</caption>
|
||||
<caption xml:lang="hr">Kristalno čist zvuk</caption>
|
||||
<caption xml:lang="hu">Kristálytiszta hang</caption>
|
||||
<caption xml:lang="hy">Բյուրեղյա մաքուր աուդիո</caption>
|
||||
<caption xml:lang="id">Audio sebening kristal</caption>
|
||||
<caption xml:lang="is">Kristaltært hljóð</caption>
|
||||
<caption xml:lang="it">Audio cristallino</caption>
|
||||
<caption xml:lang="ja">非常にクリアな音声</caption>
|
||||
<caption xml:lang="ka">კრისტალურად სუფთა აუდიო</caption>
|
||||
<caption xml:lang="km">សំឡេងច្បាស់ល្អ</caption>
|
||||
<caption xml:lang="kn">ಸ್ಫಟಿಕ ಸ್ಪಷ್ಟ ಆಡಿಯೋ</caption>
|
||||
<caption xml:lang="ko">매우 선명한 오디오</caption>
|
||||
<caption xml:lang="ky">Кристалл таза аудио</caption>
|
||||
<caption xml:lang="la">Patet Crystal audio</caption>
|
||||
<caption xml:lang="lo">ສຽງທີ່ຊັດເຈນ</caption>
|
||||
<caption xml:lang="lt">Krištolo skaidrumo garsas</caption>
|
||||
<caption xml:lang="lv">Kristāldzidra audio</caption>
|
||||
<caption xml:lang="mk">Кристално чист звук</caption>
|
||||
<caption xml:lang="ml">ക്രിസ്റ്റൽ ക്ലിയർ ഓഡിയോ</caption>
|
||||
<caption xml:lang="mn">Кристал тунгалаг аудио</caption>
|
||||
<caption xml:lang="mr">क्रिस्टल क्लियर ऑडिओ</caption>
|
||||
<caption xml:lang="ms">Audio yang jernih</caption>
|
||||
<caption xml:lang="my">ကြည်လင်ပြတ်သားသော အသံ</caption>
|
||||
<caption xml:lang="ne">क्रिस्टल क्लियर अडियो</caption>
|
||||
<caption xml:lang="nl">Kristalheldere audio</caption>
|
||||
<caption xml:lang="no">Krystallklar lyd</caption>
|
||||
<caption xml:lang="pl">Krystalicznie czysty dźwięk</caption>
|
||||
<caption xml:lang="pt-BR">Áudio cristalino</caption>
|
||||
<caption xml:lang="pt-PT">Áudio cristalino</caption>
|
||||
<caption xml:lang="ro">Sunet clar de cristal</caption>
|
||||
<caption xml:lang="ru">Кристально чистый звук</caption>
|
||||
<caption xml:lang="si">ස්ඵටික පැහැදිලි ශ්රව්ය</caption>
|
||||
<caption xml:lang="sk">Krištáľovo čistý zvuk</caption>
|
||||
<caption xml:lang="sl">Kristalno čist zvok</caption>
|
||||
<caption xml:lang="sq">Audio i pastër kristal</caption>
|
||||
<caption xml:lang="sr">Кристално чист звук</caption>
|
||||
<caption xml:lang="sv">Kristallklart ljud</caption>
|
||||
<caption xml:lang="sw">Sauti safi kabisa</caption>
|
||||
<caption xml:lang="ta">தெளிவான ஆடியோ</caption>
|
||||
<caption xml:lang="te">క్రిస్టల్ క్లియర్ ఆడియో</caption>
|
||||
<caption xml:lang="th">เสียงชัดใส</caption>
|
||||
<caption xml:lang="tl">Malinaw na audio</caption>
|
||||
<caption xml:lang="tr">Kristal netliğinde ses</caption>
|
||||
<caption xml:lang="uk">Кришталево чистий звук</caption>
|
||||
<caption xml:lang="vi">Âm thanh trong trẻo</caption>
|
||||
<caption xml:lang="zh-CN">清晰的音频</caption>
|
||||
<caption xml:lang="zh-HK">清晰的音訊</caption>
|
||||
<caption xml:lang="zh-TW">清晰的音訊</caption>
|
||||
<caption xml:lang="zu">Umsindo ocacile we-Crystal</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<video container="webm" codec="vp9" width="600" height="400">https://dl.jami.net/media-resources/gifs_features/conversiongif_webm/conference_web.webm</video>
|
||||
<image>https://dl.jami.net/media-resources/screenshots/flathub/jami_linux_swarm.PNG</image>
|
||||
<caption>Group calls with an unlimited number of participants</caption>
|
||||
<caption xml:lang="ab">Ԥынгыла змам алахәылацәа зцу агәыԥтәи аԥхьарақәа</caption>
|
||||
<caption xml:lang="af">Groepoproepe met 'n onbeperkte aantal deelnemers</caption>
|
||||
@ -1595,7 +1460,7 @@
|
||||
<caption xml:lang="zu">Izingcingo zeqembu ezinenombolo engenamkhawulo yabahlanganyeli</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<video container="webm" codec="vp9" width="600" height="400">https://dl.jami.net/media-resources/gifs_features/conversiongif_webm/chat_web.webm</video>
|
||||
<image>https://dl.jami.net/media-resources/screenshots/flathub/jami_linux_chat_full.PNG</image>
|
||||
<caption>Encrypted and secure text messaging without servers</caption>
|
||||
<caption xml:lang="ab">Ишәарҭоу, насгьы ишәарҭам атексттә дырраҭарақәа асерверқәа рыда</caption>
|
||||
<caption xml:lang="af">Geënkripteerde en veilige teksboodskappe sonder bedieners</caption>
|
||||
@ -1669,81 +1534,6 @@
|
||||
<caption xml:lang="zh-TW">無需伺服器的加密安全短信</caption>
|
||||
<caption xml:lang="zu">Imiyalezo yombhalo ebethelwe futhi evikelekile ngaphandle kwamaseva</caption>
|
||||
</screenshot>
|
||||
<screenshot>
|
||||
<video container="webm" codec="vp9" width="600" height="400">https://dl.jami.net/media-resources/gifs_features/conversiongif_webm/files-share_web.webm</video>
|
||||
<caption>Transfer files of any size</caption>
|
||||
<caption xml:lang="ab">Иарбанзаалак ашәагаа змоу афаилқәа аиагара</caption>
|
||||
<caption xml:lang="af">Dra lêers van enige grootte oor</caption>
|
||||
<caption xml:lang="am">ማንኛውንም መጠን ያላቸውን ፋይሎች ያስተላልፉ</caption>
|
||||
<caption xml:lang="ar">نقل الملفات بأي حجم</caption>
|
||||
<caption xml:lang="az">İstənilən ölçüdə faylları köçürün</caption>
|
||||
<caption xml:lang="be">Перадача файлаў любога памеру</caption>
|
||||
<caption xml:lang="bg">Прехвърляне на файлове с всякакъв размер</caption>
|
||||
<caption xml:lang="bn">যেকোনো আকারের ফাইল স্থানান্তর করুন</caption>
|
||||
<caption xml:lang="ca">Transfereix fitxers de qualsevol mida</caption>
|
||||
<caption xml:lang="cs">Přenášejte soubory libovolné velikosti</caption>
|
||||
<caption xml:lang="da">Overfør filer af enhver størrelse</caption>
|
||||
<caption xml:lang="de">Übertragen Sie Dateien jeder Größe</caption>
|
||||
<caption xml:lang="el">Μεταφορά αρχείων οποιουδήποτε μεγέθους</caption>
|
||||
<caption xml:lang="eo">Transloki dosierojn de ajna grandeco</caption>
|
||||
<caption xml:lang="es">Transfiere archivos de cualquier tamaño</caption>
|
||||
<caption xml:lang="et">Edastage mis tahes suurusega faile</caption>
|
||||
<caption xml:lang="fa">انتقال فایل در هر اندازه</caption>
|
||||
<caption xml:lang="fi">Siirrä minkä tahansa kokoisia tiedostoja</caption>
|
||||
<caption xml:lang="fil">Maglipat ng mga file sa anumang laki</caption>
|
||||
<caption xml:lang="fr">Transférer des fichiers de toute taille</caption>
|
||||
<caption xml:lang="gl">Transferir ficheiros de calquera tamaño</caption>
|
||||
<caption xml:lang="he">העבר קבצים בכל גודל</caption>
|
||||
<caption xml:lang="hi">किसी भी आकार की फ़ाइलें स्थानांतरित करें</caption>
|
||||
<caption xml:lang="hr">Prijenos datoteka bilo koje veličine</caption>
|
||||
<caption xml:lang="hu">Bármilyen méretű fájl küldése</caption>
|
||||
<caption xml:lang="hy">Փոխանցել ցանկացած չափի ֆայլեր</caption>
|
||||
<caption xml:lang="id">Transfer file dengan ukuran apa pun</caption>
|
||||
<caption xml:lang="is">Flytja skrár af hvaða stærð sem er</caption>
|
||||
<caption xml:lang="it">Trasferisci file di qualsiasi dimensione</caption>
|
||||
<caption xml:lang="ja">あらゆるサイズのファイルを転送</caption>
|
||||
<caption xml:lang="ka">ნებისმიერი ზომის ფაილების გადატანა</caption>
|
||||
<caption xml:lang="km">ផ្ទេរឯកសារគ្រប់ទំហំ</caption>
|
||||
<caption xml:lang="kn">ಯಾವುದೇ ಗಾತ್ರದ ಫೈಲ್ಗಳನ್ನು ವರ್ಗಾಯಿಸಿ</caption>
|
||||
<caption xml:lang="ko">모든 크기의 파일 전송</caption>
|
||||
<caption xml:lang="ky">Каалаган өлчөмдөгү файлдарды өткөрүңүз</caption>
|
||||
<caption xml:lang="la">De translatione cuiuslibet magnitudinis files</caption>
|
||||
<caption xml:lang="lo">ໂອນໄຟລ໌ທຸກຂະຫນາດ</caption>
|
||||
<caption xml:lang="lt">Perkelkite bet kokio dydžio failus</caption>
|
||||
<caption xml:lang="lv">Pārsūtiet jebkura izmēra failus</caption>
|
||||
<caption xml:lang="mk">Пренесувајте датотеки од која било големина</caption>
|
||||
<caption xml:lang="ml">ഏത് വലുപ്പത്തിലുള്ള ഫയലുകളും കൈമാറുക</caption>
|
||||
<caption xml:lang="mn">Ямар ч хэмжээтэй файлуудыг шилжүүлэх</caption>
|
||||
<caption xml:lang="mr">कोणत्याही आकाराच्या फायली हस्तांतरित करा</caption>
|
||||
<caption xml:lang="ms">Pindahkan fail dari sebarang saiz</caption>
|
||||
<caption xml:lang="my">မည်သည့်အရွယ်အစား ဖိုင်များကို လွှဲပြောင်းပါ။</caption>
|
||||
<caption xml:lang="ne">कुनै पनि आकारका फाइलहरू स्थानान्तरण गर्नुहोस्</caption>
|
||||
<caption xml:lang="nl">Bestanden van elke grootte overbrengen</caption>
|
||||
<caption xml:lang="no">Overfør filer i alle størrelser</caption>
|
||||
<caption xml:lang="pl">Przesyłaj pliki o dowolnym rozmiarze</caption>
|
||||
<caption xml:lang="pt-BR">Transferir arquivos de qualquer tamanho</caption>
|
||||
<caption xml:lang="pt-PT">Transferir ficheiros de qualquer tamanho</caption>
|
||||
<caption xml:lang="ro">Transferați fișiere de orice dimensiune</caption>
|
||||
<caption xml:lang="ru">Передача файлов любого размера</caption>
|
||||
<caption xml:lang="si">ඕනෑම ප්රමාණයක ගොනු මාරු කරන්න</caption>
|
||||
<caption xml:lang="sk">Prenášajte súbory akejkoľvek veľkosti</caption>
|
||||
<caption xml:lang="sl">Prenesite datoteke poljubne velikosti</caption>
|
||||
<caption xml:lang="sq">Transferoni skedarë të çdo madhësie</caption>
|
||||
<caption xml:lang="sr">Пренесите датотеке било које величине</caption>
|
||||
<caption xml:lang="sv">Överför filer av valfri storlek</caption>
|
||||
<caption xml:lang="sw">Hamisha faili za ukubwa wowote</caption>
|
||||
<caption xml:lang="ta">எந்த அளவிலான கோப்புகளையும் மாற்றவும்</caption>
|
||||
<caption xml:lang="te">ఏ పరిమాణంలోనైనా ఫైళ్లను బదిలీ చేయండి</caption>
|
||||
<caption xml:lang="th">ถ่ายโอนไฟล์ได้ทุกขนาด</caption>
|
||||
<caption xml:lang="tl">Maglipat ng mga file sa anumang laki</caption>
|
||||
<caption xml:lang="tr">Herhangi bir boyuttaki dosyaları aktarın</caption>
|
||||
<caption xml:lang="uk">Передача файлів будь-якого розміру</caption>
|
||||
<caption xml:lang="vi">Chuyển các tập tin có bất kỳ kích thước nào</caption>
|
||||
<caption xml:lang="zh-CN">传输任意大小的文件</caption>
|
||||
<caption xml:lang="zh-HK">傳輸任意大小的文件</caption>
|
||||
<caption xml:lang="zh-TW">傳輸任意大小的文件</caption>
|
||||
<caption xml:lang="zu">Dlulisa amafayela anoma yimuphi usayizi</caption>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
|
||||
<launchable type="desktop-id">net.jami.Jami.desktop</launchable>
|
||||
|
||||
@ -160,8 +160,8 @@ endif
|
||||
# Traditionally built packages (in Docker containers).
|
||||
#
|
||||
DISTRIBUTIONS := \
|
||||
debian_11 \
|
||||
debian_12 \
|
||||
debian_13 \
|
||||
debian_testing \
|
||||
debian_unstable \
|
||||
ubuntu_22.04 \
|
||||
|
||||
@ -1,19 +1,15 @@
|
||||
FROM debian:bullseye
|
||||
FROM debian:trixie
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get clean
|
||||
RUN apt-get update && \
|
||||
RUN apt-get update --allow-releaseinfo-change && \
|
||||
apt-get install -y -o Acquire::Retries=10 \
|
||||
devscripts \
|
||||
equivs \
|
||||
python-is-python3 \
|
||||
wget \
|
||||
curl
|
||||
|
||||
# nodejs
|
||||
RUN curl -sL https://deb.nodesource.com/setup_20.x | bash -
|
||||
RUN apt install nodejs -y
|
||||
nasm
|
||||
|
||||
ADD extras/packaging/gnu-linux/scripts/prebuild-package-debian.sh /opt/prebuild-package-debian.sh
|
||||
|
||||
@ -23,16 +19,8 @@ RUN /opt/prebuild-package-debian.sh qt-deps
|
||||
COPY extras/packaging/gnu-linux/rules/debian/control /tmp/builddeps/debian/control
|
||||
RUN /opt/prebuild-package-debian.sh jami-deps
|
||||
|
||||
# Install CMake 3.21 for Qt 6
|
||||
ADD extras/packaging/gnu-linux/scripts/install-cmake.sh /opt/install-cmake.sh
|
||||
RUN /opt/install-cmake.sh
|
||||
RUN apt-get remove -y libre2-dev libre2-11
|
||||
|
||||
ADD extras/packaging/gnu-linux/scripts/install-ffmpeg-for-qt.sh /opt/install-ffmpeg-for-qt.sh
|
||||
ADD extras/packaging/gnu-linux/scripts/build-package-debian.sh /opt/build-package-debian.sh
|
||||
|
||||
# Setting this variable so that FFmpeg gets built without pipewiregrab
|
||||
# (see daemon/contrib/bootstrap and daemon/contrib/src/ffmpeg/rules.mak)
|
||||
# We rely on PipeWire for screen sharing on Wayland, but the version available on Debian 11 is too old.
|
||||
ENV DISABLE_PIPEWIRE=true
|
||||
|
||||
CMD ["/opt/build-package-debian.sh"]
|
||||
@ -2,7 +2,7 @@
|
||||
# https://snapcraft.io/docs/build-on-docker
|
||||
# https://github.com/canonical/snapcraft/issues/5079#issuecomment-2414199613
|
||||
|
||||
ARG UBUNTU=jammy
|
||||
ARG UBUNTU=noble
|
||||
|
||||
FROM ubuntu:$UBUNTU AS builder
|
||||
ARG UBUNTU
|
||||
@ -16,11 +16,6 @@ RUN apt-get install --yes \
|
||||
jq \
|
||||
squashfs-tools
|
||||
|
||||
# Download and unpack the core22 snap
|
||||
RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core22' | jq '.download_url' -r) --output core22.snap
|
||||
RUN mkdir -p /snap/core22
|
||||
RUN unsquashfs -d /snap/core22/current core22.snap
|
||||
|
||||
# Download and unpack the core24 snap
|
||||
RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core24' | jq '.download_url' -r) --output core24.snap
|
||||
RUN mkdir -p /snap/core24
|
||||
@ -43,7 +38,6 @@ RUN chmod +x /snap/bin/snapcraft
|
||||
# time so they can be cached.
|
||||
FROM ubuntu:$UBUNTU
|
||||
|
||||
COPY --from=builder /snap/core22 /snap/core22
|
||||
COPY --from=builder /snap/core24 /snap/core24
|
||||
COPY --from=builder /snap/snapcraft /snap/snapcraft
|
||||
COPY --from=builder /snap/bin/snapcraft /snap/bin/snapcraft
|
||||
|
||||
@ -45,8 +45,7 @@ Build-Depends: debhelper (>= 9),
|
||||
libvdpau-dev,
|
||||
libssl-dev,
|
||||
libargon2-dev | libargon2-0-dev,
|
||||
# TODO: remove libpipewire-0.2-dev once we stop supporting Ubuntu 20.04
|
||||
libpipewire-0.3-dev | libpipewire-0.2-dev,
|
||||
libpipewire-0.3-dev,
|
||||
# other
|
||||
nasm,
|
||||
yasm,
|
||||
|
||||
@ -91,10 +91,10 @@ if [ -f /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
|
||||
# Set-up Jami repository end tag
|
||||
if [ "${VERSION_CODENAME}" = "bullseye" ] || [ "${ID}_${VERSION_ID}" = "debian_11" ]; then
|
||||
ENDTAG="debian_11"
|
||||
elif [ "${VERSION_CODENAME}" = "bookworm" ] || [ "${ID}_${VERSION_ID}" = "debian_12" ]; then
|
||||
if [ "${VERSION_CODENAME}" = "bookworm" ] || [ "${ID}_${VERSION_ID}" = "debian_12" ]; then
|
||||
ENDTAG="debian_12"
|
||||
elif [ "${VERSION_CODENAME}" = "trixie" ] || [ "${ID}_${VERSION_ID}" = "debian_13" ]; then
|
||||
ENDTAG="debian_13"
|
||||
elif [ "${UBUNTU_CODENAME}" = "jammy" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_22.04" ]; then
|
||||
ENDTAG="ubuntu_22.04"
|
||||
elif [ "${UBUNTU_CODENAME}" = "noble" ] || [ "${ID}_${VERSION_ID}" = "ubuntu_24.04" ]; then
|
||||
|
||||
@ -95,6 +95,7 @@ override_dh_auto_build:
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DLIBJAMI_BUILD_DIR=$(CURDIR)/daemon/src \
|
||||
-DENABLE_LIBWRAP=true \
|
||||
-DBUILD_TESTING=Off \
|
||||
$(CMAKE_OPTIONS) ..
|
||||
make -C build -j$(NO_CPUS) VERBOSE=1
|
||||
|
||||
|
||||
@ -75,6 +75,7 @@ cd %{_builddir}/jami-%{version} && \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DBUILD_VERSION=${BUILD_VERSION} \
|
||||
-DCMAKE_PREFIX_PATH=%{QT_JAMI_PREFIX} \
|
||||
-DBUILD_TESTING=Off \
|
||||
..
|
||||
make -C %{_builddir}/jami-%{version}/build %{_smp_mflags} VERBOSE=1
|
||||
|
||||
|
||||
@ -98,13 +98,13 @@ description: |
|
||||
|
||||
confinement: strict
|
||||
grade: stable
|
||||
base: core22
|
||||
base: core24
|
||||
|
||||
plugs:
|
||||
gnome-3-38-2004:
|
||||
gnome-46-2404:
|
||||
interface: content
|
||||
target: $SNAP/gnome-platform
|
||||
default-provider: gnome-3-38-2004:gnome-3-38-2004
|
||||
default-provider: gnome-46-2404
|
||||
gtk-3-themes:
|
||||
interface: content
|
||||
target: $SNAP/data-dir/themes
|
||||
@ -117,6 +117,10 @@ plugs:
|
||||
interface: content
|
||||
target: $SNAP/data-dir/sounds
|
||||
default-provider: gtk-common-themes:sounds-themes
|
||||
gpu-2404:
|
||||
interface: content
|
||||
target: $SNAP/gpu-2404
|
||||
default-provider: mesa-2404
|
||||
|
||||
slots:
|
||||
dbus-jami:
|
||||
@ -129,22 +133,24 @@ slots:
|
||||
name: cx.ring.Ring
|
||||
|
||||
layout:
|
||||
/usr/lib/$CRAFT_ARCH_TRIPLET/alsa-lib:
|
||||
bind: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET/alsa-lib
|
||||
/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/alsa-lib:
|
||||
bind: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/alsa-lib
|
||||
/usr/share/alsa:
|
||||
bind: $SNAP/usr/share/alsa
|
||||
/usr/share/X11/xkb:
|
||||
bind: $SNAP/usr/share/X11/xkb
|
||||
/usr/share/X11/XErrorDB:
|
||||
symlink: $SNAP/gpu-2404/X11/XErrorDB
|
||||
|
||||
environment:
|
||||
XDG_CURRENT_DESKTOP: Unity
|
||||
QT_BASE_DIR: "/usr/lib/libqt-jami"
|
||||
LD_LIBRARY_PATH: "${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$SNAP$QT_BASE_DIR/lib"
|
||||
LD_LIBRARY_PATH: "${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$SNAP$QT_BASE_DIR/lib:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/pulseaudio:$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libproxy"
|
||||
|
||||
apps:
|
||||
jami:
|
||||
command: usr/bin/jami
|
||||
command-chain:
|
||||
- bin/gpu-2404-wrapper
|
||||
- bin/desktop-launch
|
||||
- snap/command-chain/alsa-launch
|
||||
- bin/jami-wrapper
|
||||
@ -153,8 +159,8 @@ apps:
|
||||
desktop: usr/share/applications/net.jami.Jami.desktop
|
||||
environment:
|
||||
PIPEWIRE_CONFIG_NAME: "$SNAP/usr/share/pipewire/pipewire.conf"
|
||||
PIPEWIRE_MODULE_DIR: "$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET/pipewire-0.3"
|
||||
SPA_PLUGIN_DIR: "$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET/spa-0.2"
|
||||
PIPEWIRE_MODULE_DIR: "$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/pipewire-0.3"
|
||||
SPA_PLUGIN_DIR: "$SNAP/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/spa-0.2"
|
||||
slots:
|
||||
- dbus-jami
|
||||
- dbus-ring
|
||||
@ -185,7 +191,7 @@ package-repositories:
|
||||
components: [main]
|
||||
suites: [jami]
|
||||
key-id: A295D773307D25A33AE72F2F64CD5FA175348F84
|
||||
url: https://dl.jami.net/internal/ubuntu_22.04/
|
||||
url: https://dl.jami.net/internal/ubuntu_24.04/
|
||||
|
||||
parts:
|
||||
desktop-launch:
|
||||
@ -244,10 +250,15 @@ parts:
|
||||
- -usr/lib/x86_64-linux-gnu/libproxy.so*
|
||||
- -usr/share/doc/libp11-kit0/changelog.Debian.gz
|
||||
- -usr/share/doc/libproxy1v5/changelog.Debian.gz
|
||||
- -usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so
|
||||
- -usr/lib/x86_64-linux-gnu/libdconf.so.1.0.0
|
||||
- -usr/libexec/dconf-service
|
||||
- -usr/share/doc/libdconf1/changelog.Debian.gz
|
||||
- -usr/share/man/man1/dconf-service.1.gz
|
||||
build-packages:
|
||||
- libasound2-dev
|
||||
stage-packages:
|
||||
- libasound2
|
||||
- libasound2t64
|
||||
- libasound2-plugins
|
||||
- yad
|
||||
|
||||
@ -272,8 +283,6 @@ parts:
|
||||
sed -i -E 's|(tmpName) << (PACKAGE_NAME << "_shm_")|\1 << "snap.jami." << \2|' ./daemon/src/media/video/sinkclient.cpp
|
||||
sed -i -E 's|^Icon=.*|Icon=${SNAP}/usr/share/icons/hicolor/scalable/apps/net.jami.Jami.svg|' extras/data/net.jami.Jami.desktop
|
||||
override-build: |
|
||||
$CRAFT_PART_BUILD/extras/packaging/gnu-linux/scripts/install-pipewire-from-source.sh
|
||||
|
||||
cd $CRAFT_PART_BUILD/daemon/contrib
|
||||
mkdir -p native
|
||||
cd native
|
||||
@ -288,19 +297,19 @@ parts:
|
||||
DESTDIR=$CRAFT_PART_INSTALL make install
|
||||
|
||||
cd $CRAFT_PART_BUILD/
|
||||
mkdir build
|
||||
mkdir -p build
|
||||
cd build
|
||||
cmake .. -DENABLE_LIBWRAP=true \
|
||||
-DLIBJAMI_BUILD_DIR=$CRAFT_PART_BUILD/daemon/src \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_PREFIX_PATH=$QT_BASE_DIR \
|
||||
-DBUILD_VERSION=BUILD_VERSION_PLACEHOLDER
|
||||
-DBUILD_VERSION=BUILD_VERSION_PLACEHOLDER \
|
||||
-DBUILD_TESTING=Off
|
||||
make -j$CRAFT_PARALLEL_BUILD_COUNT
|
||||
DESTDIR=$CRAFT_PART_INSTALL make install
|
||||
build-packages:
|
||||
- autoconf
|
||||
- autoconf-archive
|
||||
- automake
|
||||
- autopoint
|
||||
- bzip2
|
||||
@ -311,8 +320,8 @@ parts:
|
||||
- gettext
|
||||
- gzip
|
||||
- libnotify-dev
|
||||
- libpipewire-0.3-dev
|
||||
- libqrencode-dev
|
||||
- libsndfile1-dev
|
||||
- libspeex-dev
|
||||
- python3
|
||||
- python3-dev
|
||||
@ -320,13 +329,9 @@ parts:
|
||||
- yasm
|
||||
- wget
|
||||
- nasm # ffmpeg
|
||||
- libavcodec-dev
|
||||
- libavdevice-dev
|
||||
- libavformat-dev
|
||||
- libswscale-dev
|
||||
- libva-dev
|
||||
- libvdpau-dev
|
||||
- libargon2-0-dev # opendht
|
||||
- libargon2-dev # opendht
|
||||
- libexpat1-dev
|
||||
- libjsoncpp-dev
|
||||
- libnm-dev # connectivityChanged()
|
||||
@ -339,55 +344,45 @@ parts:
|
||||
- libgl-dev
|
||||
- libvulkan-dev
|
||||
- libgnutls28-dev # TLS
|
||||
- gnutls-bin
|
||||
- libssl-dev
|
||||
- git # PipeWire build dependencies
|
||||
- meson #
|
||||
- libasound2-dev #
|
||||
- libdbus-1-dev # These packages are needed by the
|
||||
- libglib2.0-dev # install-pipewire-from-source.sh
|
||||
- ninja-build # script in order to build PipeWire
|
||||
- pkg-config # from source.
|
||||
stage-packages:
|
||||
- libgnutls30
|
||||
- libavutil56
|
||||
- libdouble-conversion3
|
||||
- libegl1
|
||||
- libgbm1
|
||||
- libgudev-1.0-0
|
||||
- libjsoncpp25
|
||||
- libllvm12
|
||||
- libminizip1
|
||||
- libminizip1t64
|
||||
- libnm0
|
||||
- libnotify4
|
||||
- libnspr4
|
||||
- libnss3
|
||||
- libopengl0
|
||||
- libopus0
|
||||
- liborc-0.4-0
|
||||
- libpcre2-16-0
|
||||
- libpcre2-8-0
|
||||
- pipewire-bin
|
||||
- libqrencode4
|
||||
- libqt-jami
|
||||
- libsnappy1v5
|
||||
- libspeex1
|
||||
- libproxy1v5
|
||||
- libwayland-server0
|
||||
- libwebpdemux2
|
||||
- libwebpmux3
|
||||
- libxkbfile1
|
||||
- libxtst6
|
||||
- ocl-icd-libopencl1
|
||||
- libva-drm2
|
||||
- libva-glx2
|
||||
- libva-wayland2
|
||||
- libva2
|
||||
- libvdpau-va-gl1
|
||||
- libvdpau1
|
||||
- va-driver-all
|
||||
prime:
|
||||
- -usr/lib/libqt-jami/bin/
|
||||
- -usr/lib/libqt-jami/docs/
|
||||
- -usr/lib/libqt-jami/examples/
|
||||
- -usr/lib/$CRAFT_ARCH_TRIPLET/libLLVM-*.so*
|
||||
- -usr/lib/$CRAFT_ARCH_TRIPLET/libclang-*.so*
|
||||
- -usr/lib/$CRAFT_ARCH_TRIPLET/libflite*.so*
|
||||
- -usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libLLVM-*.so*
|
||||
- -usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libclang-*.so*
|
||||
- -usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/libflite*.so*
|
||||
|
||||
gpu-2404:
|
||||
after: [jami]
|
||||
source: https://github.com/canonical/gpu-snap.git
|
||||
plugin: dump
|
||||
override-prime: |
|
||||
craftctl default
|
||||
${CRAFT_PART_SRC}/bin/gpu-2404-cleanup mesa-2404
|
||||
# Workaround for https://bugs.launchpad.net/snapd/+bug/2055273
|
||||
mkdir -p "${CRAFT_PRIME}/gpu-2404"
|
||||
prime:
|
||||
- bin/gpu-2404-wrapper
|
||||
@ -32,7 +32,7 @@ sed -i "s/RELEASE_VERSION/${RELEASE_VERSION}/g" snapcraft.yaml
|
||||
# set the build version of the app
|
||||
sed -i "s/BUILD_VERSION_PLACEHOLDER/${BUILD_VERSION}/g" snapcraft.yaml
|
||||
|
||||
snapcraft # requires snapcraft >= 4.8
|
||||
snapcraft pack
|
||||
|
||||
# move the built snap to output
|
||||
mv *.snap /opt/output/
|
||||
|
||||
@ -1,30 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# The purpose of this script is to build PipeWire from source in a snap based on core22 / Ubuntu 22.04
|
||||
# It must be called in the "override-build" section of the relevant part in snapcraft.yaml
|
||||
|
||||
set -e
|
||||
|
||||
OLD_WD=$(pwd)
|
||||
cd /tmp
|
||||
|
||||
# Build PipeWire 1.0.5 and install it in the /usr directory of the build environment
|
||||
wget -q https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/1.0.5/pipewire-1.0.5.tar.gz
|
||||
echo "c5a5de26d684a1a84060ad7b6131654fb2835e03fccad85059be92f8e3ffe993 pipewire-1.0.5.tar.gz" | sha256sum --check
|
||||
tar xzf pipewire-1.0.5.tar.gz
|
||||
cd pipewire-1.0.5
|
||||
meson setup builddir -Dsession-managers=media-session -Dalsa=disabled -Dprefix=/usr
|
||||
meson compile -C builddir
|
||||
meson install -C builddir
|
||||
|
||||
# The files installed by the previous command are only for the "Build" step of the snap
|
||||
# creation process (https://snapcraft.io/docs/how-snapcraft-builds). In order to ensure
|
||||
# that PipeWire is installed in the final snap archive, we also need to copy all the
|
||||
# required files under the $SNAPCRAFT_PART_INSTALL directory.
|
||||
meson configure builddir -Dprefix=$SNAPCRAFT_PART_INSTALL/usr/
|
||||
meson install -C builddir
|
||||
|
||||
# Cleanup
|
||||
cd /tmp
|
||||
rm -rf pipewire-1.0.5 pipewire-1.0.5.tar.gz
|
||||
cd $OLD_WD
|
||||
@ -34,7 +34,7 @@ cat << EOFILE > ${REPO_FOLDER}/${SPARKLE_FILE}
|
||||
<pubDate>$DATE_RFC2822</pubDate>
|
||||
<sparkle:version>${BUILD}</sparkle:version>
|
||||
<sparkle:shortVersionString>${VERSION}</sparkle:shortVersionString>
|
||||
<sparkle:minimumSystemVersion>11.0</sparkle:minimumSystemVersion>
|
||||
<sparkle:minimumSystemVersion>12.0</sparkle:minimumSystemVersion>
|
||||
<enclosure url="${REPO_URL}/$(basename ${PACKAGE})" type="application/octet-stream" $(./sign_update ${PACKAGE}) />
|
||||
</item>
|
||||
$(echo -e "${ITEMS}")
|
||||
|
||||
@ -129,6 +129,11 @@ else
|
||||
BUILD_DIR="build"
|
||||
fi
|
||||
|
||||
BUILD_TYPE="Release"
|
||||
if [ "${debug}" = "true" ]; then
|
||||
BUILD_TYPE="Debug"
|
||||
fi
|
||||
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
#detect arch for macos
|
||||
CMAKE_OSX_ARCHITECTURES="arm64"
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>11.0</string>
|
||||
<string>12.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 522 KiB After Width: | Height: | Size: 298 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 528 KiB After Width: | Height: | Size: 410 KiB |
@ -84,9 +84,9 @@ extern const QString defaultDownloadPath;
|
||||
// Additional key-value pairs for non-APPSTORE builds including donation
|
||||
// related settings.
|
||||
#define KEYS COMMON_KEYS \
|
||||
X(Donation2023VisibleDate, "2023-11-27 05:00") \
|
||||
X(Donation2025StartDate, "2025-09-15 00:00") \
|
||||
X(IsDonationVisible, true) \
|
||||
X(Donation2023EndDate2, "2024-04-01 00:00")
|
||||
X(Donation2025EndDate, "2025-11-16 00:00")
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
@ -84,6 +84,12 @@ Item {
|
||||
}
|
||||
|
||||
function updateImageSource(downloadUrl, localPath, defaultImage) {
|
||||
// TODO: this is a temporary fix to load bundled resources directly from qrc
|
||||
// we need to investigate why we use a cached image for bundled resources
|
||||
if (downloadUrl.startsWith("qrc:")) {
|
||||
image.source = downloadUrl;
|
||||
return;
|
||||
}
|
||||
if (downloadUrl === "") {
|
||||
image.source = defaultImage;
|
||||
return;
|
||||
|
||||
@ -45,6 +45,7 @@ Rectangle {
|
||||
color: JamiTheme.chatviewBgColor
|
||||
|
||||
property var mapPositions: PositionManager.mapStatus
|
||||
property bool isConversationEndedFlag: false
|
||||
|
||||
// The purpose of this alias is to make the message bar
|
||||
// accessible to the EmojiPicker
|
||||
@ -85,6 +86,32 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
|
||||
function isConversationEnded() {
|
||||
if (!CurrentConversation.isSwarm)
|
||||
return false;
|
||||
var myRole = UtilsAdapter.getParticipantRole(CurrentAccount.id, CurrentConversation.id, CurrentAccount.uri);
|
||||
var info = ConversationsAdapter.getConvInfoMap(CurrentConversation.id);
|
||||
var peers = info && info.uris ? info.uris : [];
|
||||
peers = peers.filter(function(u) { return u !== CurrentAccount.uri; });
|
||||
for (var i = 0; i < peers.length; i++) {
|
||||
var role = UtilsAdapter.getParticipantRole(CurrentAccount.id, CurrentConversation.id, peers[i]);
|
||||
if (!(role === Member.Role.LEFT || role === Member.Role.BANNED)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (CurrentConversation.isCoreDialog) {
|
||||
return true
|
||||
}
|
||||
return myRole !== Member.Role.ADMIN;
|
||||
}
|
||||
|
||||
function updateConversationEndedFlag() {
|
||||
var newVal = isConversationEnded();
|
||||
if (isConversationEndedFlag !== newVal) {
|
||||
isConversationEndedFlag = newVal;
|
||||
}
|
||||
}
|
||||
|
||||
// Used externally to switch to a extras panel.
|
||||
function switchToPanel(panel, toggle = true) {
|
||||
extrasPanel.switchToPanel(panel, toggle);
|
||||
@ -102,16 +129,33 @@ Rectangle {
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: LRCInstance
|
||||
function onConversationUpdated(convId, accountId) {
|
||||
if (convId === CurrentConversation.id) {
|
||||
updateConversationEndedFlag();
|
||||
}
|
||||
}
|
||||
}
|
||||
Connections {
|
||||
target: CurrentConversation.members
|
||||
function onCountChanged() {
|
||||
updateConversationEndedFlag();
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: CurrentConversation
|
||||
function onIdChanged() {
|
||||
MessagesAdapter.loadMoreMessages();
|
||||
updateConversationEndedFlag();
|
||||
}
|
||||
}
|
||||
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
chatViewSplitView.resolvePanes(true);
|
||||
Qt.callLater(updateConversationEndedFlag);
|
||||
}
|
||||
}
|
||||
|
||||
@ -196,6 +240,29 @@ Rectangle {
|
||||
visible: false
|
||||
}
|
||||
|
||||
Control {
|
||||
id: conversationEndedBanner
|
||||
Layout.fillWidth: true
|
||||
visible: isConversationEndedFlag
|
||||
|
||||
padding: 10
|
||||
background: Rectangle {
|
||||
color: JamiTheme.infoRectangleColor
|
||||
radius: 5
|
||||
}
|
||||
contentItem: RowLayout {
|
||||
spacing: 8
|
||||
Label {
|
||||
text: JamiStrings.conversationEnded
|
||||
color: JamiTheme.textColor
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NotificationArea {
|
||||
id: notificationArea
|
||||
Layout.fillWidth: true
|
||||
@ -333,6 +400,8 @@ Rectangle {
|
||||
return false;
|
||||
else if (CurrentConversation.isRequest)
|
||||
return false;
|
||||
else if (isConversationEndedFlag)
|
||||
return false;
|
||||
return CurrentConversation.isSwarm || CurrentConversation.isTemporary;
|
||||
}
|
||||
|
||||
|
||||
@ -73,28 +73,37 @@ ContextMenuAutoLoader {
|
||||
onClicked: MessagesAdapter.clearConversationHistory(responsibleAccountId, responsibleConvUid)
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: removeContact
|
||||
id: removeConversation
|
||||
|
||||
canTrigger: !hasCall && !root.isBanned
|
||||
itemName: {
|
||||
if (mode !== Conversation.Mode.NON_SWARM)
|
||||
return JamiStrings.removeConversation;
|
||||
else
|
||||
return JamiStrings.removeContact;
|
||||
}
|
||||
itemName: mode === Conversation.Mode.ONE_TO_ONE ? JamiStrings.removeConversation : JamiStrings.leaveGroup
|
||||
iconSource: JamiResources.ic_hangup_participant_24dp_svg
|
||||
onClicked: {
|
||||
var dlg = viewCoordinator.presentDialog(appWindow, "commoncomponents/ConfirmDialog.qml", {
|
||||
"title": JamiStrings.confirmAction,
|
||||
"textLabel": JamiStrings.confirmLeaveConversation,
|
||||
"confirmLabel": JamiStrings.optionLeave
|
||||
});
|
||||
"title": JamiStrings.confirmAction,
|
||||
"textLabel": mode === Conversation.Mode.ONE_TO_ONE ? JamiStrings.confirmRemoveOneToOneConversation : JamiStrings.confirmLeaveGroup,
|
||||
"confirmLabel": mode === Conversation.Mode.ONE_TO_ONE ? JamiStrings.optionRemove : JamiStrings.optionLeave
|
||||
});
|
||||
dlg.accepted.connect(function () {
|
||||
if (mode !== Conversation.Mode.NON_SWARM)
|
||||
MessagesAdapter.removeConversation(responsibleConvUid);
|
||||
else
|
||||
MessagesAdapter.removeContact(responsibleConvUid);
|
||||
});
|
||||
MessagesAdapter.removeConversation(responsibleConvUid, true);
|
||||
});
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: removeContact
|
||||
|
||||
canTrigger: !hasCall && !root.isBanned && mode === Conversation.Mode.ONE_TO_ONE
|
||||
itemName: JamiStrings.removeContact
|
||||
iconSource: JamiResources.kick_member_svg
|
||||
onClicked: {
|
||||
var dlg = viewCoordinator.presentDialog(appWindow, "commoncomponents/ConfirmDialog.qml", {
|
||||
"title": JamiStrings.confirmAction,
|
||||
"textLabel": JamiStrings.confirmRemoveContact,
|
||||
"confirmLabel": JamiStrings.optionRemove
|
||||
});
|
||||
dlg.accepted.connect(function () {
|
||||
MessagesAdapter.removeContact(responsibleConvUid);
|
||||
});
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
@ -129,13 +138,13 @@ ContextMenuAutoLoader {
|
||||
iconSource: JamiResources.block_black_24dp_svg
|
||||
onClicked: {
|
||||
var dlg = viewCoordinator.presentDialog(appWindow, "commoncomponents/ConfirmDialog.qml", {
|
||||
"title": JamiStrings.confirmAction,
|
||||
"textLabel": JamiStrings.confirmBlockConversation,
|
||||
"confirmLabel": JamiStrings.optionBlock
|
||||
});
|
||||
"title": JamiStrings.confirmAction,
|
||||
"textLabel": JamiStrings.confirmBlockContact,
|
||||
"confirmLabel": JamiStrings.optionBlock
|
||||
});
|
||||
dlg.accepted.connect(function () {
|
||||
MessagesAdapter.blockConversation(responsibleConvUid);
|
||||
});
|
||||
MessagesAdapter.blockConversation(responsibleConvUid);
|
||||
});
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
@ -155,11 +164,11 @@ ContextMenuAutoLoader {
|
||||
onClicked: {
|
||||
if (isCoreDialog) {
|
||||
viewCoordinator.presentDialog(appWindow, "mainview/components/UserProfile.qml", {
|
||||
"aliasText": aliasText,
|
||||
"registeredNameText": registeredNameText,
|
||||
"idText": idText,
|
||||
"convId": responsibleConvUid
|
||||
});
|
||||
"aliasText": aliasText,
|
||||
"registeredNameText": registeredNameText,
|
||||
"idText": idText,
|
||||
"convId": responsibleConvUid
|
||||
});
|
||||
} else {
|
||||
root.showSwarmDetails();
|
||||
}
|
||||
|
||||
@ -32,7 +32,7 @@ Control {
|
||||
// Calculate the time 7 days from now
|
||||
var futureDate = new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000);
|
||||
var formattedDate = Qt.formatDateTime(futureDate, "yyyy-MM-dd hh:mm");
|
||||
UtilsAdapter.setAppValue(Settings.Key.Donation2023VisibleDate, formattedDate);
|
||||
UtilsAdapter.setAppValue(Settings.Key.Donation2025StartDate, formattedDate);
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
|
||||
@ -297,7 +297,7 @@ Rectangle {
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
anchors.margins: JamiTheme.preferredMarginSize
|
||||
text: JamiStrings.leaveConversation
|
||||
text: CurrentConversation.modeString.indexOf("group") >= 0 ? JamiStrings.leaveGroup : JamiStrings.removeConversation
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
font.kerning: true
|
||||
elide: Text.ElideRight
|
||||
@ -312,13 +312,49 @@ Rectangle {
|
||||
enabled: parent.visible
|
||||
onTapped: function onTapped(eventPoint) {
|
||||
var dlg = viewCoordinator.presentDialog(appWindow, "commoncomponents/ConfirmDialog.qml", {
|
||||
"title": JamiStrings.confirmAction,
|
||||
"textLabel": JamiStrings.confirmLeaveConversation,
|
||||
"confirmLabel": JamiStrings.optionLeave
|
||||
});
|
||||
"title": JamiStrings.confirmAction,
|
||||
"textLabel": CurrentConversation.modeString.indexOf("group") >= 0 ? JamiStrings.confirmLeaveGroup : JamiStrings.confirmRemoveOneToOneConversation,
|
||||
"confirmLabel": CurrentConversation.modeString.indexOf("group") >= 0 ? JamiStrings.optionLeave : JamiStrings.optionRemove
|
||||
});
|
||||
dlg.accepted.connect(function () {
|
||||
MessagesAdapter.removeConversation(LRCInstance.selectedConvUid);
|
||||
});
|
||||
MessagesAdapter.removeConversation(LRCInstance.selectedConvUid, true);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SwarmDetailsItem {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: JamiTheme.settingsFontSize + 2 * JamiTheme.preferredMarginSize + 4
|
||||
visible: CurrentConversation.isCoreDialog
|
||||
|
||||
Text {
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.top: parent.top
|
||||
anchors.margins: JamiTheme.preferredMarginSize
|
||||
text: JamiStrings.removeContact
|
||||
font.pixelSize: JamiTheme.settingsDescriptionPixelSize
|
||||
font.kerning: true
|
||||
elide: Text.ElideRight
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
color: JamiTheme.textColor
|
||||
}
|
||||
|
||||
TapHandler {
|
||||
target: parent
|
||||
enabled: parent.visible
|
||||
onTapped: function onTapped(eventPoint) {
|
||||
var dlg = viewCoordinator.presentDialog(appWindow, "commoncomponents/ConfirmDialog.qml", {
|
||||
"title": JamiStrings.confirmAction,
|
||||
"textLabel": JamiStrings.confirmRemoveContact,
|
||||
"confirmLabel": JamiStrings.optionRemove
|
||||
});
|
||||
dlg.accepted.connect(function () {
|
||||
MessagesAdapter.removeConversation(LRCInstance.selectedConvUid);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -500,8 +536,6 @@ Rectangle {
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
|
||||
color: JamiTheme.textColor
|
||||
|
||||
|
||||
}
|
||||
|
||||
Text {
|
||||
|
||||
@ -480,10 +480,10 @@ MessagesAdapter::clearConversationHistory(const QString& accountId, const QStrin
|
||||
}
|
||||
|
||||
void
|
||||
MessagesAdapter::removeConversation(const QString& convUid)
|
||||
MessagesAdapter::removeConversation(const QString& convUid, bool keepContact)
|
||||
{
|
||||
auto& accInfo = lrcInstance_->getCurrentAccountInfo();
|
||||
accInfo.conversationModel->removeConversation(convUid);
|
||||
accInfo.conversationModel->removeConversation(convUid, false, keepContact);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@ -113,7 +113,7 @@ public:
|
||||
Q_INVOKABLE void loadMoreMessages();
|
||||
Q_INVOKABLE void connectConversationModel();
|
||||
Q_INVOKABLE void sendConversationRequest();
|
||||
Q_INVOKABLE void removeConversation(const QString& convUid);
|
||||
Q_INVOKABLE void removeConversation(const QString& convUid, bool keepContact = false);
|
||||
Q_INVOKABLE void addConversationMember(const QString& convUid, const QString& participantUri);
|
||||
Q_INVOKABLE void removeConversationMember(const QString& convUid, const QString& participantUri);
|
||||
Q_INVOKABLE void removeContact(const QString& convUid, bool banContact = false);
|
||||
|
||||
@ -103,8 +103,8 @@ Item {
|
||||
// The banner is visible if the current date is after the date set in the settings and before the end date
|
||||
// And if the donation toggle is checked
|
||||
const isVisible = UtilsAdapter.getAppValue(Settings.Key.IsDonationVisible);
|
||||
const endDate = Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2023EndDate2));
|
||||
const startDate = Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2023VisibleDate));
|
||||
const endDate = Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2025EndDate));
|
||||
const startDate = Date.parse(UtilsAdapter.getAppValue(Settings.Key.Donation2025StartDate));
|
||||
const now = new Date();
|
||||
return isVisible && now < endDate && now >= startDate;
|
||||
}
|
||||
|
||||
@ -46,7 +46,7 @@ Item {
|
||||
property string buildID: qsTr("Build ID")
|
||||
property string version: qsTr("Version")
|
||||
property string declarationYear: "Copyright © 2015–2025"
|
||||
property string slogan: "Εἰρήνη"
|
||||
property string slogan: "Atlas"
|
||||
property string declaration: qsTr('Jami, a GNU package, is software for universal and distributed peer-to-peer communication that respects the freedom and privacy of its users. Visit <a href="https://jami.net" style="color: ' + JamiTheme.buttonTintedBlue + '">jami.net</a>' + ' to learn more.')
|
||||
property string noWarranty: qsTr('This program comes with absolutely no warranty. See the <a href="https://www.gnu.org/licenses/gpl-3.0.html" style="color: ' + JamiTheme.buttonTintedBlue + '">GNU General Public License</a>, version 3 or later for details.')
|
||||
property string contribute: qsTr('Contribute')
|
||||
@ -282,9 +282,13 @@ Item {
|
||||
property string startVideoCall: qsTr("Start video call")
|
||||
property string deleteConversation: qsTr("Delete conversation")
|
||||
property string confirmAction: qsTr("Confirm action")
|
||||
property string removeConversation: qsTr("Leave conversation")
|
||||
property string confirmLeaveConversation: qsTr("Do you want to leave this conversation?")
|
||||
property string confirmBlockConversation: qsTr("Do you want to block this conversation?")
|
||||
property string removeConversation: qsTr("Remove conversation")
|
||||
property string confirmRemoveConversation: qsTr("Do you want to leave this conversation?")
|
||||
property string leaveGroup: qsTr("Leave group")
|
||||
property string confirmLeaveGroup: qsTr("Are you sure you want to leave this group?")
|
||||
property string confirmRemoveContact: qsTr("Do you want to remove this contact? The existing conversation will be deleted.")
|
||||
property string confirmBlockContact: qsTr("Do you want to block this contact?")
|
||||
property string confirmRemoveOneToOneConversation: qsTr("Are you sure you want to remove this conversation? The contact will not be removed.")
|
||||
property string removeContact: qsTr("Remove contact")
|
||||
property string blockContact: qsTr("Block contact")
|
||||
property string convDetails: qsTr("Conversation details")
|
||||
@ -366,6 +370,9 @@ Item {
|
||||
property string deletedMedia: qsTr("%1 deleted a media")
|
||||
property string returnToCall: qsTr("Return to call")
|
||||
|
||||
// Conversation ended banner
|
||||
property string conversationEnded: qsTr("This conversation has ended.")
|
||||
|
||||
// MessagesResearch
|
||||
property string jumpTo: qsTr("Jump to")
|
||||
property string messages: qsTr("Messages")
|
||||
@ -828,7 +835,6 @@ Item {
|
||||
property string ignoreNotificationsTooltip: qsTr("Ignore all notifications from this conversation")
|
||||
property string chooseAColor: qsTr("Color")
|
||||
property string defaultCallHost: qsTr("Default host (calls)")
|
||||
property string leaveConversation: qsTr("Leave conversation")
|
||||
property string typeOfSwarm: qsTr("Conversation type")
|
||||
property string none: qsTr("None")
|
||||
|
||||
|
||||
@ -65,7 +65,7 @@ ColumnLayout {
|
||||
titleField: JamiStrings.caCertificate
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
onClick: openFileDialog(JamiStrings.selectCACert, CurrentAccount.certificateListFile_TLS, JamiStrings.certificateFile, function (file) {
|
||||
onSettingMaterialButtonClicked: openFileDialog(JamiStrings.selectCACert, CurrentAccount.certificateListFile_TLS, JamiStrings.certificateFile, function (file) {
|
||||
CurrentAccount.certificateListFile_TLS = UtilsAdapter.getAbsPath(file.toString());
|
||||
})
|
||||
}
|
||||
@ -80,7 +80,7 @@ ColumnLayout {
|
||||
titleField: JamiStrings.userCertificate
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
onClick: openFileDialog(JamiStrings.selectUserCert, CurrentAccount.certificateFile_TLS, JamiStrings.certificateFile, function (file) {
|
||||
onSettingMaterialButtonClicked: openFileDialog(JamiStrings.selectUserCert, CurrentAccount.certificateFile_TLS, JamiStrings.certificateFile, function (file) {
|
||||
CurrentAccount.certificateFile_TLS = UtilsAdapter.getAbsPath(file.toString());
|
||||
})
|
||||
}
|
||||
@ -95,7 +95,7 @@ ColumnLayout {
|
||||
titleField: JamiStrings.privateKey
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
onClick: openFileDialog(JamiStrings.selectPrivateKey, CurrentAccount.privateKeyFile_TLS, JamiStrings.keyFile, function (file) {
|
||||
onSettingMaterialButtonClicked: openFileDialog(JamiStrings.selectPrivateKey, CurrentAccount.privateKeyFile_TLS, JamiStrings.keyFile, function (file) {
|
||||
CurrentAccount.privateKeyFile_TLS = UtilsAdapter.getAbsPath(file.toString());
|
||||
})
|
||||
}
|
||||
|
||||
@ -84,7 +84,7 @@ ColumnLayout {
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.certificateListFile_TLS) !== "" ? UtilsAdapter.toFileInfoName(CurrentAccount.certificateListFile_TLS) : JamiStrings.selectCACertDefault
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
onClick: openFileDialog(JamiStrings.selectCACert, CurrentAccount.certificateListFile_TLS, JamiStrings.certificateFile, function (file) {
|
||||
onSettingMaterialButtonClicked: openFileDialog(JamiStrings.selectCACert, CurrentAccount.certificateListFile_TLS, JamiStrings.certificateFile, function (file) {
|
||||
CurrentAccount.certificateListFile_TLS = UtilsAdapter.getAbsPath(file.toString());
|
||||
})
|
||||
}
|
||||
@ -99,7 +99,7 @@ ColumnLayout {
|
||||
itemWidth: root.itemWidth
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.certificateFile_TLS) !== "" ? UtilsAdapter.toFileInfoName(CurrentAccount.certificateFile_TLS) : JamiStrings.selectCACertDefault
|
||||
|
||||
onClick: openFileDialog(JamiStrings.selectUserCert, CurrentAccount.certificateFile_TLS, JamiStrings.certificateFile, function (file) {
|
||||
onSettingMaterialButtonClicked: openFileDialog(JamiStrings.selectUserCert, CurrentAccount.certificateFile_TLS, JamiStrings.certificateFile, function (file) {
|
||||
CurrentAccount.certificateFile_TLS = UtilsAdapter.getAbsPath(file.toString());
|
||||
})
|
||||
}
|
||||
@ -114,7 +114,7 @@ ColumnLayout {
|
||||
itemWidth: root.itemWidth
|
||||
textField: UtilsAdapter.toFileInfoName(CurrentAccount.privateKeyFile_TLS) !== "" ? UtilsAdapter.toFileInfoName(CurrentAccount.privateKeyFile_TLS) : JamiStrings.selectCACertDefault
|
||||
|
||||
onClick: openFileDialog(JamiStrings.selectPrivateKey, CurrentAccount.privateKeyFile_TLS, JamiStrings.keyFile, function (file) {
|
||||
onSettingMaterialButtonClicked: openFileDialog(JamiStrings.selectPrivateKey, CurrentAccount.privateKeyFile_TLS, JamiStrings.keyFile, function (file) {
|
||||
CurrentAccount.privateKeyFile_TLS = UtilsAdapter.getAbsPath(file.toString());
|
||||
})
|
||||
}
|
||||
|
||||
@ -154,7 +154,7 @@ SettingsPageBase {
|
||||
titleField: JamiStrings.selectCustomRingtone
|
||||
itemWidth: root.itemWidth
|
||||
|
||||
onClick: {
|
||||
onSettingMaterialButtonClicked: {
|
||||
var dlg = viewCoordinator.presentDialog(appWindow, "commoncomponents/JamiFileDialog.qml", {
|
||||
"title": JamiStrings.selectNewRingtone,
|
||||
"fileMode": JamiFileDialog.OpenFile,
|
||||
|
||||
@ -31,7 +31,7 @@ RowLayout {
|
||||
property string source
|
||||
property int itemWidth
|
||||
|
||||
signal click
|
||||
signal settingMaterialButtonClicked
|
||||
|
||||
Text {
|
||||
id: title
|
||||
@ -59,6 +59,6 @@ RowLayout {
|
||||
iconSource: root.source
|
||||
secondary: true
|
||||
|
||||
onClicked: click()
|
||||
onClicked: settingMaterialButtonClicked()
|
||||
}
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ SettingsPageBase {
|
||||
onSwitchToggled: {
|
||||
UtilsAdapter.setAppValue(Settings.Key.IsDonationVisible, checked);
|
||||
if (checked) {
|
||||
UtilsAdapter.setToDefault(Settings.Key.Donation2023VisibleDate);
|
||||
UtilsAdapter.setToDefault(Settings.Key.Donation2025StartDate);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -246,7 +246,7 @@ SettingsPageBase {
|
||||
UtilsAdapter.setToDefault(Settings.Key.LANG);
|
||||
UtilsAdapter.setToDefault(Settings.Key.EnableExperimentalSwarm);
|
||||
UtilsAdapter.setToDefault(Settings.Key.IsDonationVisible);
|
||||
UtilsAdapter.setToDefault(Settings.Key.Donation2023VisibleDate);
|
||||
UtilsAdapter.setToDefault(Settings.Key.Donation2025StartDate);
|
||||
enableDonation.checked = Qt.binding(() => UtilsAdapter.getAppValue(Settings.Key.IsDonationVisible));
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,8 +100,8 @@ UtilsAdapter::setAppValue(const Settings::Key key, const QVariant& value)
|
||||
#if !APPSTORE
|
||||
// Any donation campaign-related keys can trigger a donation campaign check
|
||||
else if (key == Settings::Key::IsDonationVisible
|
||||
|| key == Settings::Key::Donation2023VisibleDate
|
||||
|| key == Settings::Key::Donation2023EndDate2)
|
||||
|| key == Settings::Key::Donation2025StartDate
|
||||
|| key == Settings::Key::Donation2025EndDate)
|
||||
Q_EMIT donationCampaignSettingsChanged();
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -291,7 +291,7 @@ Rectangle {
|
||||
id: confirmButton
|
||||
text: JamiStrings.optionConfirm
|
||||
primary: true
|
||||
enabled: !passwordField.visible || passwordField.dynamicText.length > 0
|
||||
enabled: true
|
||||
onClicked: {
|
||||
AccountAdapter.provideAccountAuthentication(passwordField.visible ? passwordField.dynamicText : "");
|
||||
}
|
||||
|
||||
@ -191,8 +191,9 @@ public:
|
||||
* Remove a conversation and the contact if it's a dialog
|
||||
* @param uid of the conversation
|
||||
* @param banned if we want to ban the contact.
|
||||
* @param keepContact if we want to keep the contact. New conversation could be created
|
||||
*/
|
||||
void removeConversation(const QString& uid, bool banned = false);
|
||||
void removeConversation(const QString& uid, bool banned = false, bool keepContact = false);
|
||||
/**
|
||||
* Get the action wanted by the user when they click on the conversation
|
||||
* @param uid of the conversation
|
||||
|
||||
@ -319,18 +319,21 @@ getFormattedCallDuration(const std::time_t duration)
|
||||
return QString("%1d %2h %3m %4s")
|
||||
.arg(days)
|
||||
.arg(hours)
|
||||
.arg(minutes, 2, 10, QChar('0'))
|
||||
.arg(seconds, 2, 10, QChar('0'));
|
||||
.arg(minutes)
|
||||
.arg(seconds);
|
||||
} else if (hours > 0) {
|
||||
minutes = minutes % 60;
|
||||
return QString("%1h %2m %3s")
|
||||
.arg(hours)
|
||||
.arg(minutes, 2, 10, QChar('0'))
|
||||
.arg(seconds, 2, 10, QChar('0'));
|
||||
.arg(minutes)
|
||||
.arg(seconds);
|
||||
} else if (minutes > 0) {
|
||||
return QString("%1m %2s").arg(minutes).arg(seconds, 2, 10, QChar('0'));
|
||||
return QString("%1m %2s")
|
||||
.arg(minutes)
|
||||
.arg(seconds);
|
||||
} else {
|
||||
return QString("%1s").arg(seconds);
|
||||
return QString("%1s")
|
||||
.arg(seconds);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -819,7 +819,7 @@ ConversationModel::selectConversation(const QString& uid) const
|
||||
}
|
||||
|
||||
void
|
||||
ConversationModel::removeConversation(const QString& uid, bool banned)
|
||||
ConversationModel::removeConversation(const QString& uid, bool banned, bool keepContact)
|
||||
{
|
||||
// Get conversation
|
||||
auto conversationIdx = pimpl_->indexOf(uid);
|
||||
@ -837,7 +837,7 @@ ConversationModel::removeConversation(const QString& uid, bool banned)
|
||||
"participant.";
|
||||
return;
|
||||
}
|
||||
if (conversation.isSwarm() && !banned && !conversation.isCoreDialog()) {
|
||||
if (conversation.isSwarm() && !banned && (!conversation.isCoreDialog() || keepContact)) {
|
||||
if (conversation.isRequest) {
|
||||
ConfigurationManager::instance().declineConversationRequest(owner.id, uid);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user