diff --git a/CMakeLists.txt b/CMakeLists.txt index ec73ec796..e2d9be890 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -163,7 +163,7 @@ add_option(OPTION_LIST ENABLE_FFMPEG "Build mediastreamer2 with ffmpeg video sup add_option(OPTION_LIST ENABLE_LDAP "Enable LDAP support." YES) add_option(OPTION_LIST ENABLE_NON_FREE_CODECS "Enable the use of non free codecs" YES) add_option(OPTION_LIST ENABLE_NON_FREE_FEATURES "Enable the use of non free codecs" ${ENABLE_NON_FREE_CODECS}) -add_option(OPTION_LIST ENABLE_QT_KEYCHAIN "Build QtKeychain to manage VFS from System key stores." ON) +add_option(OPTION_LIST ENABLE_QT_KEYCHAIN "Build QtKeychain to manage VFS from System key stores." OFF) add_option(OPTION_LIST ENABLE_QRCODE "Enable QRCode support" OFF)#Experimental add_option(OPTION_LIST ENABLE_RELATIVE_PREFIX "Set Internal packages relative to the binary" ON) add_option(OPTION_LIST ENABLE_SANITIZER "Enable sanitizer." OFF) diff --git a/Linphone/core/chat/ChatCore.cpp b/Linphone/core/chat/ChatCore.cpp index f4e9f70ab..fa3b78701 100644 --- a/Linphone/core/chat/ChatCore.cpp +++ b/Linphone/core/chat/ChatCore.cpp @@ -20,6 +20,7 @@ #include "ChatCore.hpp" #include "core/App.hpp" +#include "core/chat/message/content/ChatMessageContentGui.hpp" #include "core/friend/FriendCore.hpp" #include "core/setting/SettingsCore.hpp" #include "model/tool/ToolModel.hpp" @@ -208,6 +209,21 @@ void ChatCore::setSelf(QSharedPointer me) { linMessage->send(); }); }); + mChatModelConnection->makeConnectToCore(&ChatCore::lSendMessage, [this](QString message, QVariantList files) { + if (Utils::isEmptyMessage(message) && files.size() == 0) return; + QList> filesContent; + for (auto &file : files) { + auto contentGui = qvariant_cast(file); + if (contentGui) { + auto contentCore = contentGui->mCore; + filesContent.append(contentCore->getContentModel()); + } + } + mChatModelConnection->invokeToModel([this, message, filesContent]() { + auto linMessage = mChatModel->createMessage(message, filesContent); + linMessage->send(); + }); + }); mChatModelConnection->makeConnectToModel( &ChatModel::chatMessageSending, [this](const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) { diff --git a/Linphone/core/chat/ChatCore.hpp b/Linphone/core/chat/ChatCore.hpp index 65c20323b..37026113b 100644 --- a/Linphone/core/chat/ChatCore.hpp +++ b/Linphone/core/chat/ChatCore.hpp @@ -147,6 +147,7 @@ signals: void lUpdateUnreadCount(); void lUpdateLastUpdatedTime(); void lSendTextMessage(QString message); + void lSendMessage(QString message, QVariantList files); void lCompose(); void lLeave(); void lSetMuted(bool muted); diff --git a/Linphone/core/chat/message/content/ChatMessageContentList.cpp b/Linphone/core/chat/message/content/ChatMessageContentList.cpp index af49fb9cc..102e9139c 100644 --- a/Linphone/core/chat/message/content/ChatMessageContentList.cpp +++ b/Linphone/core/chat/message/content/ChatMessageContentList.cpp @@ -81,6 +81,117 @@ int ChatMessageContentList::findFirstUnreadIndex() { return it == chatList.end() ? -1 : std::distance(chatList.begin(), it); } +void ChatMessageContentList::addFiles(const QStringList &paths) { + mustBeInMainThread(log().arg(Q_FUNC_INFO)); + + QStringList finalList; + QList fileList; + + int nbNotFound = 0; + QString lastNotFound; + int nbExcess = 0; + int count = rowCount(); + + for (auto &path : paths) { + QFileInfo file(path.toUtf8()); + // #ifdef _WIN32 + // // A bug from FileDialog suppose that the file is local and overwrite the uri by removing "\\". + // if (!file.exists()) { + // path.prepend("\\\\"); + // file.setFileName(path); + // } + // #endif + if (!file.exists()) { + ++nbNotFound; + lastNotFound = path; + continue; + } + + if (count + finalList.count() >= 12) { + ++nbExcess; + continue; + } + finalList.append(path); + fileList.append(file); + } + if (nbNotFound > 0) { + //: Error adding file + Utils::showInformationPopup(tr("popup_error_title"), + //: File was not found: %1 + (nbNotFound == 1 ? tr("popup_error_path_does_not_exist_message").arg(lastNotFound) + //: %n files were not found + : tr("popup_error_nb_files_not_found_message").arg(nbNotFound)), + false); + } + if (nbExcess > 0) { + //: Error + Utils::showInformationPopup(tr("popup_error_title"), + //: You can send 12 files maximum at a time. %n files were ignored + tr("popup_error_max_files_count_message", "", nbExcess), false); + } + + mModelConnection->invokeToModel([this, finalList, fileList] { + int nbTooBig = 0; + int nbMimeError = 0; + QString lastMimeError; + QList> contentList; + for (auto &file : fileList) { + qint64 fileSize = file.size(); + if (fileSize > Constants::FileSizeLimit) { + ++nbTooBig; + qWarning() << QString("Unable to send file. (Size limit=%1)").arg(Constants::FileSizeLimit); + continue; + } + auto name = file.fileName().toStdString(); + auto path = file.filePath(); + std::shared_ptr content = CoreModel::getInstance()->getCore()->createContent(); + QStringList mimeType = QMimeDatabase().mimeTypeForFile(path).name().split('/'); + if (mimeType.length() != 2) { + ++nbMimeError; + lastMimeError = path; + qWarning() << QString("Unable to get supported mime type for: `%1`.").arg(path); + continue; + } + content->setType(Utils::appStringToCoreString(mimeType[0])); + content->setSubtype(Utils::appStringToCoreString(mimeType[1])); + content->setSize(size_t(fileSize)); + content->setName(name); + content->setFilePath(Utils::appStringToCoreString(path)); + contentList.append(ChatMessageContentCore::create(content, nullptr)); + } + if (nbTooBig > 0) { + //: Error adding file + Utils::showInformationPopup( + tr("popup_error_title"), + //: %n files were ignored cause they exceed the maximum size. (Size limit=%2) + tr("popup_error_file_too_big_message").arg(nbTooBig).arg(Constants::FileSizeLimit), false); + } + if (nbMimeError > 0) { + //: Error adding file + Utils::showInformationPopup(tr("popup_error_title"), + //: Unable to get supported mime type for: `%1`. + (nbMimeError == 1 + ? tr("popup_error_unsupported_file_message").arg(lastMimeError) + //: Unable to get supported mime type for %1 files. + : tr("popup_error_unsupported_files_message").arg(nbMimeError)), + false); + } + + mModelConnection->invokeToCore([this, contentList] { + for (auto &contentCore : contentList) { + connect(contentCore.get(), &ChatMessageContentCore::isFileChanged, this, [this, contentCore] { + int i = -1; + get(contentCore.get(), &i); + emit dataChanged(index(i), index(i)); + }); + add(contentCore); + contentCore->lCreateThumbnail( + true); // Was not created because linphone::Content is not considered as a file (yet) + } + }); + }); +} + void ChatMessageContentList::setSelf(QSharedPointer me) { mModelConnection = SafeConnection::create(me, CoreModel::getInstance()); @@ -101,57 +212,8 @@ void ChatMessageContentList::setSelf(QSharedPointer me) } resetData(contents); }); - mModelConnection->makeConnectToCore(&ChatMessageContentList::lAddFile, [this](const QString &path) { - QFile file(path); - // #ifdef _WIN32 - // // A bug from FileDialog suppose that the file is local and overwrite the uri by removing "\\". - // if (!file.exists()) { - // path.prepend("\\\\"); - // file.setFileName(path); - // } - // #endif - if (!file.exists()) return; - if (rowCount() >= 12) { - //: Error - Utils::showInformationPopup(tr("popup_error_title"), - //: You can add 12 files maximum - tr("popup_error_max_files_count_message"), false); - return; - } - - qint64 fileSize = file.size(); - if (fileSize > Constants::FileSizeLimit) { - qWarning() << QStringLiteral("Unable to send file. (Size limit=%1)").arg(Constants::FileSizeLimit); - return; - } - auto name = QFileInfo(file).fileName().toStdString(); - mModelConnection->invokeToModel([this, path, fileSize, name] { - std::shared_ptr content = CoreModel::getInstance()->getCore()->createContent(); - { - QStringList mimeType = QMimeDatabase().mimeTypeForFile(path).name().split('/'); - if (mimeType.length() != 2) { - qWarning() << QStringLiteral("Unable to get supported mime type for: `%1`.").arg(path); - return; - } - content->setType(Utils::appStringToCoreString(mimeType[0])); - content->setSubtype(Utils::appStringToCoreString(mimeType[1])); - } - content->setSize(size_t(fileSize)); - content->setName(name); - content->setFilePath(Utils::appStringToCoreString(path)); - auto contentCore = ChatMessageContentCore::create(content, nullptr); - mModelConnection->invokeToCore([this, contentCore] { - connect(contentCore.get(), &ChatMessageContentCore::isFileChanged, this, [this, contentCore] { - int i = -1; - get(contentCore.get(), &i); - emit dataChanged(index(i), index(i)); - }); - add(contentCore); - contentCore->lCreateThumbnail( - true); // Was not created because linphone::Content is not considered as a file (yet) - }); - }); - }); + mModelConnection->makeConnectToCore(&ChatMessageContentList::lAddFiles, + [this](const QStringList &paths) { addFiles(paths); }); emit lUpdate(); } diff --git a/Linphone/core/chat/message/content/ChatMessageContentList.hpp b/Linphone/core/chat/message/content/ChatMessageContentList.hpp index 4d5fa9fa4..fbb3e7c7f 100644 --- a/Linphone/core/chat/message/content/ChatMessageContentList.hpp +++ b/Linphone/core/chat/message/content/ChatMessageContentList.hpp @@ -44,11 +44,13 @@ public: int findFirstUnreadIndex(); + void addFiles(const QStringList &paths); + void setSelf(QSharedPointer me); virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; signals: - void lAddFile(QString path); + void lAddFiles(QStringList paths); void isFileChanged(); void lUpdate(); void chatMessageChanged(); diff --git a/Linphone/core/chat/message/content/ChatMessageContentProxy.cpp b/Linphone/core/chat/message/content/ChatMessageContentProxy.cpp index 34e822124..fbcea8c11 100644 --- a/Linphone/core/chat/message/content/ChatMessageContentProxy.cpp +++ b/Linphone/core/chat/message/content/ChatMessageContentProxy.cpp @@ -68,9 +68,9 @@ void ChatMessageContentProxy::setChatMessageGui(ChatMessageGui *chat) { // return nullptr; // } -void ChatMessageContentProxy::addFile(const QString &path) { +void ChatMessageContentProxy::addFiles(const QStringList &paths) { auto model = getListModel(); - if (model) emit model->lAddFile(path.toUtf8()); + if (model) emit model->lAddFiles(paths); } void ChatMessageContentProxy::removeContent(ChatMessageContentGui *contentGui) { diff --git a/Linphone/core/chat/message/content/ChatMessageContentProxy.hpp b/Linphone/core/chat/message/content/ChatMessageContentProxy.hpp index 8544b3622..9bceeb067 100644 --- a/Linphone/core/chat/message/content/ChatMessageContentProxy.hpp +++ b/Linphone/core/chat/message/content/ChatMessageContentProxy.hpp @@ -47,7 +47,7 @@ public: void setSourceModel(QAbstractItemModel *sourceModel) override; - Q_INVOKABLE void addFile(const QString &path); + Q_INVOKABLE void addFiles(const QStringList &paths); Q_INVOKABLE void removeContent(ChatMessageContentGui *contentGui); Q_INVOKABLE void clear(); diff --git a/Linphone/core/proxy/LimitProxy.cpp b/Linphone/core/proxy/LimitProxy.cpp index 7a3c61547..bce6bdd73 100644 --- a/Linphone/core/proxy/LimitProxy.cpp +++ b/Linphone/core/proxy/LimitProxy.cpp @@ -71,6 +71,15 @@ QVariant LimitProxy::getAt(const int &atIndex) const { return sourceModel()->data(mapToSource(modelIndex), 0); } +QVariantList LimitProxy::getAll() const { + QVariantList ret; + for (int i = 0; i < getCount(); ++i) { + auto modelIndex = index(i, 0); + if (modelIndex.isValid()) ret.append(sourceModel()->data(mapToSource(modelIndex), 0)); + } + return ret; +} + int LimitProxy::getCount() const { return rowCount(); } diff --git a/Linphone/core/proxy/LimitProxy.hpp b/Linphone/core/proxy/LimitProxy.hpp index 9891013f1..2c5f8a689 100644 --- a/Linphone/core/proxy/LimitProxy.hpp +++ b/Linphone/core/proxy/LimitProxy.hpp @@ -47,6 +47,7 @@ public: Q_INVOKABLE void displayMore(); Q_INVOKABLE QVariant getAt(const int &index) const; + Q_INVOKABLE QVariantList getAll() const; virtual int getCount() const; // Get the item following by what is shown from 2 lists diff --git a/Linphone/data/languages/de.ts b/Linphone/data/languages/de.ts index 88beed79e..d9390284c 100644 --- a/Linphone/data/languages/de.ts +++ b/Linphone/data/languages/de.ts @@ -523,74 +523,74 @@ App - + remote_provisioning_dialog Voulez-vous télécharger et appliquer la configuration depuis cette adresse ? Möchten Sie die Remote-Konfiguration von dieser Adresse herunterladen und anwenden? - + application_description "A free and open source SIP video-phone." Ein kostenloses Open-Source SIP Video-Telefon. - + command_line_arg_order "Send an order to the application towards a command line" Kommandozeilen-Befehl an die Anwendung schicken - + command_line_option_show_help Zeige Hilfe - + command_line_option_show_app_version Zeige App-Version - + command_line_option_config_to_fetch "Specify the linphone configuration file to be fetched. It will be merged with the current configuration." Abzurufende Linphone-Konfigurationsdatei angeben. Sie wird mit der aktuellen Konfiguration zusammengeführt. - + command_line_option_config_to_fetch_arg "URL, path or file" URL, Pfad oder Datei - + command_line_option_minimized - + command_line_option_log_to_stdout Debug-Informationen auf der Standardausgabe ausgeben - + command_line_option_print_app_logs_only "Print only logs from the application" Nur Anwendungs-Logs ausgeben - + hide_action "Cacher" "Afficher" Ausblenden - + show_action Zeigen - + quit_action "Quitter" Beenden @@ -1712,45 +1712,54 @@ ChatCore - + info_toast_deleted_title Deleted - + info_toast_deleted_message_history Message history has been deleted + + ChatDroppableTextArea + + + chat_view_send_area_placeholder_text + Say something… : placeholder text for sending message text area + + + ChatListView - + chat_message_is_writing_info %1 is writing… - + chat_message_draft_sending_text - + chat_room_delete "Supprimer" - + chat_list_delete_chat_popup_title Delete the chat ? - + chat_list_delete_chat_popup_message This chat and all its messages will be deleted. Do You want to continue ? @@ -1759,46 +1768,127 @@ ChatMessage - + chat_message_copy_selection "Copy selection" - + chat_message_copy "Copy" - + chat_message_copied_to_clipboard_title Copied - + chat_message_copied_to_clipboard_toast "to clipboard" - + chat_message_delete "Delete" + + ChatMessageContentCore + + + popup_error_title + Error + + + + + popup_open_file_error_does_not_exist_message + Could not open file : unknown path %1 + + + + + ChatMessageContentList + + + + + + popup_error_title + Error adding file +---------- +Error + + + + + popup_error_path_does_not_exist_message + File was not found: %1 + + + + + popup_error_nb_files_not_found_message + + + + + popup_error_max_files_count_message + You can send 12 files maximum at a time. %1 files were ignored + + + + + + + + popup_error_file_too_big_message + %n files were ignored cause they exceed the maximum size. (Size limit=%2) + + + + + popup_error_unsupported_files_message + + + + + popup_error_unsupported_file_message + Unable to get supported mime type for: `%1`. + + + + + ChatMessageContentModel + + + popup_error_title + Error + + + + + popup_download_error_message + This file was already downloaded and is no more on the server. Your peer have to resend it if you want to get it + + + ChatMessageCore - + info_toast_deleted_title Deleted - + info_toast_deleted_message The message has been deleted @@ -1851,20 +1941,20 @@ ChatMessagesListView - + chat_message_list_encrypted_header_title End to end encrypted chat - + chat_message_list_encrypted_header_message Les messages de cette conversation sont chiffrés de bout en bout. Seul votre correspondant peut les déchiffrer. - + chat_message_is_writing_info %1 is writing… @@ -2736,13 +2826,104 @@ - FileView + EventLogCore - - fileTransferCancel - 'Cancel' : Message link to cancel a transfer (upload/download) + + conference_created_event + + + conference_created_terminated + + + + + conference_participant_added_event + + + + + conference_participant_removed_event + + + + + + conference_security_event + + + + + conference_ephemeral_message_enabled_event + + + + + conference_ephemeral_message_lifetime_changed_event + + + + + conference_ephemeral_message_disabled_event + + + + + conference_subject_changed_event + + + + + conference_participant_unset_admin_event + + + + + conference_participant_set_admin_event + + + + + nMinute + + + + + + + + nHour + + + + + + + + + nDay + + + + + + + + nWeek + + + + + + + + nSeconds + + + + + FriendCore @@ -4320,49 +4501,43 @@ Pour les activer dans un projet commercial, merci de nous contacter. SelectedChatView - - chat_view_send_area_placeholder_text - Say something… : placeholder text for sending message text area - - - - + chat_view_detail_other_actions_title Other actions - + chat_view_detail_leave_room_toast_button "Leave Chat Room" - + chat_view_detail_leave_room_toast_title Leave Chat Room ? - + chat_view_detail_leave_room_toast_message All the messages will be removed from the chat room. Do you want to continue ? - + chat_view_detail_delete_history_button "Delete history" - + chat_view_detail_delete_history_toast_title Delete history ? - + chat_view_detail_delete_history_toast_message All the messages will be removed from the chat room. Do you want to continue ? @@ -4513,8 +4688,8 @@ Pour les activer dans un projet commercial, merci de nous contacter. - - + + information_popup_error_title Error ---------- @@ -4575,40 +4750,40 @@ Failed to create 1-1 conversation with %1 ! Gestern - + call_zrtp_token_verification_possible_characters "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 - - + + information_popup_chatroom_creation_error_message Failed to create 1-1 conversation with %1 ! - + contact_presence_status_available - + contact_presence_status_away - + contact_presence_status_busy Beschäftigt - + contact_presence_status_do_not_disturb Nicht stören - + contact_presence_status_offline Offline @@ -4775,1117 +4950,1117 @@ Failed to create 1-1 conversation with %1 ! country - + Afghanistan Afghanistan - + Albania Albanien - + Algeria Algerien - + AmericanSamoa Amerikanisch-Samoa - + Andorra Andorra - + Angola Angola - + Anguilla Anguilla - + AntiguaAndBarbuda Antigua und Barbuda - + Argentina Argentinien - + Armenia Armenien - + Aruba Aruba - + Australia Australien - + Austria Österreich - + Azerbaijan Aserbaidschan - + Bahamas Bahamas - + Bahrain Bahrain - + Bangladesh Bangladesch - + Barbados Barbados - + Belarus Belarus - + Belgium Belgien - + Belize Belize - + Benin Benin - + Bermuda Bermuda - + Bhutan Bhutan - + Bolivia Bolivien - + BosniaAndHerzegowina Bosnien und Herzegowina - + Botswana Botswana - + Brazil Brasilien - + Brunei Brunei - + Bulgaria Bulgarien - + BurkinaFaso Burkina Faso - + Burundi Burundi - + Cambodia Kambodscha - + Cameroon Kamerun - + Canada Kanada - + CapeVerde Kap Verde - + CaymanIslands Caymaninseln - + CentralAfricanRepublic Zentralafrikanische Republik - + Chad Tschad - + Chile Chile - + China China - + Colombia Kolumbien - + Comoros Komoren - + PeoplesRepublicOfCongo Volksrepublik Kongo - + CookIslands Cookinseln - + CostaRica Kosta Rica - + IvoryCoast Elfenbeinküste - + Croatia Kroatien - + Cuba Kuba - + Cyprus Zypern - + CzechRepublic Tschechische Republik - + Denmark Dänemark - + Djibouti Dschibuti - + Dominica Dominica - + DominicanRepublic Dominikanische Republik - + Ecuador Ecuador - + Egypt Ägypten - + ElSalvador El Salvador - + EquatorialGuinea Äquatorialguinea - + Eritrea Eritrea - + Estonia Estland - + Ethiopia Äthiopien - + FalklandIslands Falklandinseln - + FaroeIslands Färöer-Inseln - + Fiji Fidschi - + Finland Finnland - + France Frankreich - + FrenchGuiana Französisch-Guayana - + FrenchPolynesia Französisch-Polynesien - + Gabon Gabon - + Gambia Gambia - + Georgia Georgien - + Germany Deutschland - + Ghana Ghana - + Gibraltar Gibraltar - + Greece Griechenland - + Greenland Grönland - + Grenada Grenada - + Guadeloupe Guadeloupe - + Guam Guam - + Guatemala Guatemala - + Guinea Guinea - + GuineaBissau Guinea-Bissau - + Guyana Guyana - + Haiti Haiti - + Honduras Honduras - + DemocraticRepublicOfCongo Demokratische Republik Kongo - + HongKong Hongkong - + Hungary Ungarn - + Iceland Island - + India Indien - + Indonesia Indonesien - + Iran Iran - + Iraq Irak - + Ireland Irland - + Israel Israel - + Italy Italien - + Jamaica Jamaika - + Japan Japan - + Jordan Jordanien - + Kazakhstan Kasachstan - + Kenya Kenia - + Kiribati Kiribati - + DemocraticRepublicOfKorea Demokratische Volksrepublik Korea - + RepublicOfKorea Republik Korea - + Kuwait Kuwait - + Kyrgyzstan Kirgisistan - + Laos Laos - + Latvia Lettland - + Lebanon Libanon - + Lesotho Lesotho - + Liberia Liberien - + Libya Libyen - + Liechtenstein Liechtenstein - + Lithuania Litauen - + Luxembourg Luxemburg - + Macau Macau - + Macedonia Mazedonien - + Madagascar Madagaskar - + Malawi Malawi - + Malaysia Malaysien - + Maldives Malediven - + Mali Mali - + Malta Malta - + MarshallIslands Marshallinseln - + Martinique Martinique - + Mauritania Mauretanien - + Mauritius Mauritius - + Mayotte Mayotte - + Mexico Mexiko - + Micronesia Föderierte Staaten von Mikronesien - + Moldova Moldawien - + Monaco Monaco - + Mongolia Mongolei - + Montenegro Montenegro - + Montserrat Montserrat - + Morocco Marokko - + Mozambique Mosambik - + Myanmar Myanmar - + Namibia Namibia - + NauruCountry Nauru - + Nepal Nepal - + Netherlands Niederlande - + NewCaledonia Neukaledonien - + NewZealand Neuseeland - + Nicaragua Nicaragua - + Niger Niger - + Nigeria Nigeria - + Niue Niue - + NorfolkIsland Norfolkinsel - + NorthernMarianaIslands Nördliche Marianeninseln - + Norway Norwegen - + Oman Oman - + Pakistan Pakistan - + Palau Palau - + PalestinianTerritories Palästinensische Gebiete - + Panama Panama - + PapuaNewGuinea Papua-Neuguinea - + Paraguay Paraguay - + Peru Peru - + Philippines Philippinen - + Poland Polen - + Portugal Portugal - + PuertoRico Puerto Rico - + Qatar Katar - + Reunion Réunion - + Romania Rumänien - + RussianFederation Russische Föderation - + Rwanda Ruanda - + SaintHelena Sankt Helena - + SaintKittsAndNevis Sankt Kitts und Nevis - + SaintLucia Sankt Lucia - + SaintPierreAndMiquelon Sankt Pierre und Miquelon - + SaintVincentAndTheGrenadines Sankt Vincent und die Grenadinen - + Samoa Samoa - + SanMarino San Marino - + SaoTomeAndPrincipe São Tomé und Príncipe - + SaudiArabia Saudi-Arabien - + Senegal Senegal - + Serbia Serbien - + Seychelles Seychellen - + SierraLeone Sierra Leone - + Singapore Singapur - + Slovakia Slowakei - + Slovenia Slowenien - + SolomonIslands Salomonen - + Somalia Somalia - + SouthAfrica Südafrika - + Spain Spanien - + SriLanka Sri Lanka - + Sudan Sudan - + Suriname Suriname - + Swaziland Eswatini - + Sweden Schweden - + Switzerland Schweiz - + Syria Syrien - + Taiwan Taiwan - + Tajikistan Tadschikistan - + Tanzania Tansania - + Thailand Thailand - + Togo Togo - + Tokelau Tokelau - + Tonga Tonga - + TrinidadAndTobago Trinidad und Tobago - + Tunisia Tunesien - + Turkey Türkei - + Turkmenistan Turkmenistan - + TurksAndCaicosIslands Turks- und Caicosinseln - + Tuvalu Tuvalu - + Uganda Uganda - + Ukraine Ukraine - + UnitedArabEmirates Vereinigte Arabische Emirate - + UnitedKingdom Vereinigtes Königreich - + UnitedStates Vereinigte Staaten - + Uruguay Uruguay - + Uzbekistan Usbekistan - + Vanuatu Vanuatu - + Venezuela Venezuela - + Vietnam Vietnam - + WallisAndFutunaIslands Wallis und Futuna Inseln - + Yemen Jemen - + Zambia Sambia - + Zimbabwe Simbabwe diff --git a/Linphone/data/languages/en.ts b/Linphone/data/languages/en.ts index 0f99ef390..cd71eba41 100644 --- a/Linphone/data/languages/en.ts +++ b/Linphone/data/languages/en.ts @@ -523,74 +523,74 @@ App - + remote_provisioning_dialog Voulez-vous télécharger et appliquer la configuration depuis cette adresse ? Do you want to download and apply remote provisioning from this address ? - + application_description "A free and open source SIP video-phone." A free and open source SIP video-phone. - + command_line_arg_order "Send an order to the application towards a command line" Send an order to the application towards a command line - + command_line_option_show_help Show this help - + command_line_option_show_app_version Show app version - + command_line_option_config_to_fetch "Specify the linphone configuration file to be fetched. It will be merged with the current configuration." Specify the linphone configuration file to be fetched. It will be merged with the current configuration. - + command_line_option_config_to_fetch_arg "URL, path or file" URL, path or file - + command_line_option_minimized Minimize - + command_line_option_log_to_stdout Log to stdout some debug information while running - + command_line_option_print_app_logs_only "Print only logs from the application" Print only logs from the application - + hide_action "Cacher" "Afficher" Hide - + show_action Show - + quit_action "Quitter" Quit @@ -1674,45 +1674,54 @@ ChatCore - + info_toast_deleted_title Deleted Deleted - + info_toast_deleted_message_history Message history has been deleted Message history has been deleted + + ChatDroppableTextArea + + + chat_view_send_area_placeholder_text + Say something… : placeholder text for sending message text area + Say something… + + ChatListView - + chat_message_is_writing_info %1 is writing… %1 is writing… - + chat_message_draft_sending_text Draft : %1 - + chat_room_delete "Supprimer" Delete - + chat_list_delete_chat_popup_title Delete the chat ? Delete the chat ? - + chat_list_delete_chat_popup_message This chat and all its messages will be deleted. Do You want to continue ? This chat and all its messages will be deleted. Do You want to continue ? @@ -1721,46 +1730,127 @@ ChatMessage - + chat_message_copy_selection "Copy selection" Copy selection - + chat_message_copy "Copy" Copy - + chat_message_copied_to_clipboard_title Copied Copied - + chat_message_copied_to_clipboard_toast "to clipboard" in clipboard - + chat_message_delete "Delete" Delete + + ChatMessageContentCore + + + popup_error_title + Error + Error + + + + popup_open_file_error_does_not_exist_message + Could not open file : unknown path %1 + Could not open file : unknown path %1 + + + + ChatMessageContentList + + + + + + popup_error_title + Error adding file +---------- +Error + Error adding file + + + + popup_error_path_does_not_exist_message + File was not found: %1 + File was not found: %1 + + + + popup_error_nb_files_not_found_message + %1 files were not found + + + + popup_error_max_files_count_message + You can send 12 files maximum at a time. %1 files were ignored + + You can send 12 files maximum at a time. %n file was ignored + You can send 12 files maximum at a time. %n files were ignored + + + + + popup_error_file_too_big_message + %n files were ignored cause they exceed the maximum size. (Size limit=%2) + %n files were ignored cause they exceed the maximum size. (Size limit=%2) + + + + popup_error_unsupported_files_message + Unable to get supported mime type for %1 files. + + + + popup_error_unsupported_file_message + Unable to get supported mime type for: `%1`. + Unable to get supported mime type for: `%1`. + + + + ChatMessageContentModel + + + popup_error_title + Error + Error + + + + popup_download_error_message + This file was already downloaded and is no more on the server. Your peer have to resend it if you want to get it + This file was already downloaded and is no more on the server. Your peer have to resend it if you want to get it + + ChatMessageCore - + info_toast_deleted_title Deleted Deleted - + info_toast_deleted_message The message has been deleted The message has been deleted @@ -1813,13 +1903,13 @@ ChatMessagesListView - + chat_message_list_encrypted_header_title End to end encrypted chat End to end encrypted chat - + chat_message_list_encrypted_header_message Les messages de cette conversation sont chiffrés de bout en bout. Seul votre correspondant peut les déchiffrer. @@ -1827,7 +1917,7 @@ Only your correspondent can decrypt them. - + chat_message_is_writing_info %1 is writing… %1 is writing… @@ -2659,12 +2749,103 @@ Only your correspondent can decrypt them. - FileView + EventLogCore - - fileTransferCancel - 'Cancel' : Message link to cancel a transfer (upload/download) - Cancel + + conference_created_event + You have joined the group + + + + conference_created_terminated + You have left the group + + + + conference_participant_added_event + %1 has joined + + + + conference_participant_removed_event + %1 has left + + + + conference_participant_set_admin_event + %1 is now an admin + + + + conference_participant_unset_admin_event + %1 is no longer an admin + + + + + conference_security_event + Security level degraded by %1 + + + + conference_ephemeral_message_enabled_event + Ephemeral messages have been enabled: %1 + + + + conference_ephemeral_message_disabled_event + Ephemeral messages have been disabled + + + + conference_subject_changed_event + New subject: %1 + + + + conference_ephemeral_message_lifetime_changed_event + Ephemeral messages have been updated: %1 + + + + nSeconds + + %1 second + %1 seconds + + + + + nMinute + + %1 minute + %1 minutes + + + + + nHour + + %1 hour + %1 hours + + + + + + nDay + + %1 day + %1 days + + + + + nWeek + + %1 week + %1 weeks + @@ -2891,14 +3072,6 @@ Only your correspondent can decrypt them. Debug - - LinphoneEnums - - media_encryption_post_quantum - "ZRTP - Post quantique" - Post quantum ZRTP - - LoadingPopup @@ -4229,59 +4402,43 @@ To enable them in a commercial project, please contact us. SelectedChatView - Dites quelque chose… - Say something… : placeholder text for sending message text area - Say something… - - - Autres actions - Other actions - Other actions - - - - chat_view_send_area_placeholder_text - Say something… : placeholder text for sending message text area - Say something… - - - + chat_view_detail_other_actions_title Other actions Other actions - + chat_view_detail_delete_history_button "Delete history" Delete history - + chat_view_detail_delete_history_toast_title Delete history ? Delete history ? - + chat_view_detail_delete_history_toast_message All the messages will be removed from the chat room. Do you want to continue ? All the messages will be removed from the chat room. Do you want to continue ? - + chat_view_detail_leave_room_toast_button "Leave Chat Room" Leave chat room - + chat_view_detail_leave_room_toast_title Leave Chat Room ? Leave chat room ? - + chat_view_detail_leave_room_toast_message All the messages will be removed from the chat room. Do you want to continue ? You will not be able to send or receive messages in this room anymore, leave ? @@ -4424,27 +4581,27 @@ To enable them in a commercial project, please contact us. Utils - + contact_presence_status_available Available - + contact_presence_status_busy Busy - + contact_presence_status_do_not_disturb Do not disturb - + contact_presence_status_offline Offline - + contact_presence_status_away Idle/Away @@ -4457,8 +4614,8 @@ To enable them in a commercial project, please contact us. - - + + information_popup_error_title Error ---------- @@ -4519,14 +4676,14 @@ Failed to create 1-1 conversation with %1 ! Yesterday - + call_zrtp_token_verification_possible_characters "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 - - + + information_popup_chatroom_creation_error_message Failed to create 1-1 conversation with %1 ! Failed to create 1-1 conversation with %1 ! @@ -4694,1117 +4851,1117 @@ Failed to create 1-1 conversation with %1 ! country - + Afghanistan Afghanistan - + Albania Albania - + Algeria Algeria - + AmericanSamoa American Samoa - + Andorra Andorra - + Angola Angola - + Anguilla Anguilla - + AntiguaAndBarbuda Antigua-et-Barbuda - + Argentina Argentina - + Armenia Armenia - + Aruba Aruba - + Australia Australia - + Austria Austria - + Azerbaijan Azerbaijan - + Bahamas Bahamas - + Bahrain Bahrain - + Bangladesh Bangladesh - + Barbados Barbados - + Belarus Belarus - + Belgium Belgium - + Belize Belize - + Benin Benin - + Bermuda Bermuda - + Bhutan Bhutan - + Bolivia Bolivia - + BosniaAndHerzegowina Bosnia And Herzegowina - + Botswana Botswana - + Brazil Brazil - + Brunei Brunei - + Bulgaria Bulgaria - + BurkinaFaso Burkina Faso - + Burundi Burundi - + Cambodia Cambodia - + Cameroon Cameroon - + Canada Canada - + CapeVerde Cape Verde - + CaymanIslands Cayman Islands - + CentralAfricanRepublic Central African Republic - + Chad Chad - + Chile Chile - + China China - + Colombia Colombia - + Comoros Comoros - + PeoplesRepublicOfCongo Peoples Republic Of Congo - + CookIslands Cook Islands - + CostaRica Costa Rica - + IvoryCoast Ivory Coast - + Croatia Croatia - + Cuba Cuba - + Cyprus Cyprus - + CzechRepublic Czech Republic - + Denmark Denmark - + Djibouti Djibouti - + Dominica Dominica - + DominicanRepublic Dominican Republic - + Ecuador Ecuador - + Egypt Egypt - + ElSalvador El Salvador - + EquatorialGuinea Equatorial Guinea - + Eritrea Eritrea - + Estonia Estonia - + Ethiopia Ethiopia - + FalklandIslands Falkland Islands - + FaroeIslands Faroe Islands - + Fiji Fiji - + Finland Finland - + France France - + FrenchGuiana French Guiana - + FrenchPolynesia French Polynesia - + Gabon Gabon - + Gambia Gambia - + Georgia Georgia - + Germany Germany - + Ghana Ghana - + Gibraltar Gibraltar - + Greece Greece - + Greenland Greenland - + Grenada Grenada - + Guadeloupe Guadeloupe - + Guam Guam - + Guatemala Guatemala - + Guinea Guinea - + GuineaBissau Guinea-Bissau - + Guyana Guyana - + Haiti Haiti - + Honduras Honduras - + DemocraticRepublicOfCongo Democratic Republic Of Congo - + HongKong Hong Kong - + Hungary Hungary - + Iceland Iceland - + India India - + Indonesia Indonesia - + Iran Iran - + Iraq Iraq - + Ireland Ireland - + Israel Israel - + Italy Italie - + Jamaica Jamaica - + Japan Japan - + Jordan Jordan - + Kazakhstan Kazakhstan - + Kenya Kenya - + Kiribati Kiribati - + DemocraticRepublicOfKorea Democratic Republic Of Korea - + RepublicOfKorea Republic Of Korea - + Kuwait Kuwait - + Kyrgyzstan Kyrgyzstan - + Laos Laos - + Latvia Latvia - + Lebanon Lebanon - + Lesotho Lesotho - + Liberia Liberia - + Libya Libya - + Liechtenstein Liechtenstein - + Lithuania Lithuania - + Luxembourg Luxembourg - + Macau Macau - + Macedonia Macedonia - + Madagascar Madagascar - + Malawi Malawi - + Malaysia Malaysia - + Maldives Maldives - + Mali Mali - + Malta Malta - + MarshallIslands Marshall Islands - + Martinique Martinique - + Mauritania Mauritania - + Mauritius Mauritius - + Mayotte Mayotte - + Mexico Mexico - + Micronesia Micronesia - + Moldova Moldova - + Monaco Monaco - + Mongolia Mongolia - + Montenegro Montenegro - + Montserrat Montserrat - + Morocco Morocco - + Mozambique Mozambique - + Myanmar Myanmar - + Namibia Namibia - + NauruCountry Nauru Country - + Nepal Nepal - + Netherlands Netherlands - + NewCaledonia New-Caledonia - + NewZealand New-Zealand - + Nicaragua Nicaragua - + Niger Niger - + Nigeria Nigeria - + Niue Niue - + NorfolkIsland Norfolk Island - + NorthernMarianaIslands Northern Mariana Islands - + Norway Norway - + Oman Oman - + Pakistan Pakistan - + Palau Palau - + PalestinianTerritories Palestinian Territories - + Panama Panama - + PapuaNewGuinea Papua-New-Guinea - + Paraguay Paraguay - + Peru Peru - + Philippines Philippines - + Poland Poland - + Portugal Portugal - + PuertoRico Puerto Rico - + Qatar Qatar - + Reunion Reunion - + Romania Romania - + RussianFederation Russian Federation - + Rwanda Rwanda - + SaintHelena Saint-Helena - + SaintKittsAndNevis Saint-Kitts-And-Nevis - + SaintLucia Saint-Lucia - + SaintPierreAndMiquelon Saint-Pierre-And-Miquelon - + SaintVincentAndTheGrenadines Saint-Vincent And The Grenadines - + Samoa Samoa - + SanMarino San-Marino - + SaoTomeAndPrincipe Sao Tome-And-Principe - + SaudiArabia Saudi Arabia - + Senegal Senegal - + Serbia Serbia - + Seychelles Seychelles - + SierraLeone Sierra Leone - + Singapore Singapore - + Slovakia Slovakia - + Slovenia Slovenia - + SolomonIslands Solomon Islands - + Somalia Somalia - + SouthAfrica South Africa - + Spain Spain - + SriLanka Sri Lanka - + Sudan Sudan - + Suriname Suriname - + Swaziland Swaziland - + Sweden Sweden - + Switzerland Switzerland - + Syria Syria - + Taiwan Taiwan - + Tajikistan Tajikistan - + Tanzania Tanzania - + Thailand Thailand - + Togo Togo - + Tokelau Tokelau - + Tonga Tonga - + TrinidadAndTobago Trinidad-And-Tobago - + Tunisia Tunisia - + Turkey Turkey - + Turkmenistan Turkmenistan - + TurksAndCaicosIslands Turks And Caicos Islands - + Tuvalu Tuvalu - + Uganda Uganda - + Ukraine Ukraine - + UnitedArabEmirates United Arab Emirates - + UnitedKingdom United-Kingdom - + UnitedStates United-States - + Uruguay Uruguay - + Uzbekistan Uzbekistan - + Vanuatu Vanuatu - + Venezuela Venezuela - + Vietnam Vietnam - + WallisAndFutunaIslands Wallis And Futuna Islands - + Yemen Yemen - + Zambia Zambia - + Zimbabwe Zimbabwe @@ -5935,98 +6092,4 @@ Failed to create 1-1 conversation with %1 ! Ok - - EventLogCore - - conference_created_event - 'You have joined the group' : Little message to show on the event when the user join the chat group. - You have joined the group - - - conference_created_terminated - 'You have left the group' : Little message to show on the event when the user leave the chat group. - You have left the group - - - conference_participant_added_event - '%1 has joined' : Little message to show on the event when someone join the chat group. - %1 has joined - - - conference_participant_removed_event - '%1 has left' : Little message to show on the event when someone leave the chat group - %1 has left - - - conference_participant_set_admin_event - '%1 is now an admin' : Little message to show on the event when someone get the admin status. %1 is somebody - %1 is now an admin - - - conference_participant_unset_admin_event - '%1 is no longer an admin' : Little message to show on the event when somebody lost its admin status. %1 is somebody - %1 is no longer an admin - - - conference_security_event - 'Security level degraded by %1': Little message to show on the event when a security level has been lost. - Security level degraded by %1 - - - conference_ephemeral_message_enabled_event - 'Ephemeral messages have been enabled: %1' : Little message to show on the event when ephemeral has been activated. %1 is a date time - Ephemeral messages have been enabled: %1 - - - conference_ephemeral_message_disabled_event - 'Ephemeral messages have been disabled': Little message to show on the event when ephemeral has been deactivated. - Ephemeral messages have been disabled - - - conference_subject_changed_event - 'New subject : %1' : Little message to show on the event when the subject of the chat room has been changed. %1 is the new subject. - New subject: %1 - - - conference_ephemeral_message_lifetime_changed_event - 'Ephemeral messages have been updated: %1' : Little message to show on the event when ephemeral has been updated. %1 is a date time - Ephemeral messages have been updated: %1 - - - nSeconds - - %1 second - %1 seconds - - - - nMinute - - %1 minute - %1 minutes - - - - nHour - - %1 hour - %1 hours - - - - nDay - - %1 day - %1 days - - - - nWeek - - %1 week - %1 weeks - - - - diff --git a/Linphone/data/languages/fr_FR.ts b/Linphone/data/languages/fr_FR.ts index eb5776f14..161f2aa12 100644 --- a/Linphone/data/languages/fr_FR.ts +++ b/Linphone/data/languages/fr_FR.ts @@ -523,74 +523,74 @@ App - + remote_provisioning_dialog Voulez-vous télécharger et appliquer la configuration depuis cette adresse ? Voulez-vous télécharger et appliquer la configuration depuis cette adresse ? - + application_description "A free and open source SIP video-phone." A free and open source SIP video-phone. - + command_line_arg_order "Send an order to the application towards a command line" Send an order to the application towards a command line - + command_line_option_show_help Show this help - + command_line_option_show_app_version Afficher la version de l'application - + command_line_option_config_to_fetch "Specify the linphone configuration file to be fetched. It will be merged with the current configuration." Specify the linphone configuration file to be fetched. It will be merged with the current configuration. - + command_line_option_config_to_fetch_arg "URL, path or file" URL, path or file - + command_line_option_minimized Minimiser - + command_line_option_log_to_stdout Log to stdout some debug information while running - + command_line_option_print_app_logs_only "Print only logs from the application" Print only logs from the application - + hide_action "Cacher" "Afficher" Cacher - + show_action Afficher - + quit_action "Quitter" Quitter @@ -717,7 +717,7 @@ settings_call_forward_activation_success - + Transfert d'appel activé vers : %1 @@ -734,7 +734,7 @@ settings_call_forward_address_timeout - + Impossible d'établir le transfert d'appel, la requête a expiré @@ -749,7 +749,7 @@ settings_call_forward_address_progress_enabling - + Activer le transfert d'appel pour : @@ -989,12 +989,12 @@ call_forward_to_address_info - + Transférer l'appel à : call_forward_to_address_info_voicemail - + Boîte vocale @@ -1026,16 +1026,6 @@ "Lancer" Lancer - - history_group_call_start_dialog_subject_hint - "Nom du groupe" - Nom du groupe - - - required - "Requis" - Requis - @@ -1684,45 +1674,54 @@ ChatCore - + info_toast_deleted_title Deleted Supprimé - + info_toast_deleted_message_history Message history has been deleted L'historique des messages a été supprimé + + ChatDroppableTextArea + + + chat_view_send_area_placeholder_text + Say something… : placeholder text for sending message text area + Dites quelque chose… + + ChatListView - + chat_message_is_writing_info %1 is writing… %1 est en train d'écrire… - + chat_message_draft_sending_text Brouillon : %1 - + chat_room_delete "Supprimer" Supprimer - + chat_list_delete_chat_popup_title Delete the chat ? Supprimer la conversation ? - + chat_list_delete_chat_popup_message This chat and all its messages will be deleted. Do You want to continue ? La conversation et tous ses messages seront supprimés. Souhaitez-vous continuer ? @@ -1731,46 +1730,127 @@ ChatMessage - + chat_message_copy_selection "Copy selection" Copier la sélection - + chat_message_copy "Copy" Copier - + chat_message_copied_to_clipboard_title Copied Copié - + chat_message_copied_to_clipboard_toast "to clipboard" dans le presse-papiers - + chat_message_delete "Delete" Supprimer + + ChatMessageContentCore + + + popup_error_title + Error + Erreur + + + + popup_open_file_error_does_not_exist_message + Could not open file : unknown path %1 + Impossible d'ouvrir le fichier : chemin inconnu (%1) + + + + ChatMessageContentList + + + + + + popup_error_title + Error adding file +---------- +Error + Erreur lors de l'ajout de fichier + + + + popup_error_path_does_not_exist_message + File was not found: %1 + Le fichier n'a pas été trouvé : %1 + + + + popup_error_nb_files_not_found_message + %1 fichiers n'ont pas été trouvés + + + + popup_error_max_files_count_message + You can send 12 files maximum at a time. %1 files were ignored + + Vous pouvez envoyer 12 fichiers maximum. Un fichier a été ignoré. + Vous pouvez envoyer 12 fichiers maximum. %n fichiers ont été ignorés. + + + + + popup_error_file_too_big_message + %n files were ignored cause they exceed the maximum size. (Size limit=%2) + %n fichiers ont été ignorés car ils dépassent la taille maximale autorisée. (Taille max : %2) + + + + popup_error_unsupported_files_message + Impossible de trouver un type MIME pris en charge pour %1 fichiers. + + + + popup_error_unsupported_file_message + Unable to get supported mime type for: `%1`. + Impossible de trouver un type MIME pris en charge pour : '%1' + + + + ChatMessageContentModel + + + popup_error_title + Error + Erreur + + + + popup_download_error_message + This file was already downloaded and is no more on the server. Your peer have to resend it if you want to get it + Ce fichier a déjà été téléchargé et n'est plus sur le serveur. Votre correspondant devra vous le renvoyer si vous voulez y avoir accès. + + ChatMessageCore - + info_toast_deleted_title Deleted Supprimé - + info_toast_deleted_message The message has been deleted Le message a été supprimé @@ -1823,13 +1903,13 @@ ChatMessagesListView - + chat_message_list_encrypted_header_title End to end encrypted chat Conversation chiffrée de bout en bout - + chat_message_list_encrypted_header_message Les messages de cette conversation sont chiffrés de bout en bout. Seul votre correspondant peut les déchiffrer. @@ -1837,7 +1917,7 @@ en bout. Seul votre correspondant peut les déchiffrer. - + chat_message_is_writing_info %1 is writing… %1 est en train d'écrire… @@ -2669,12 +2749,103 @@ en bout. Seul votre correspondant peut les déchiffrer. - FileView + EventLogCore - - fileTransferCancel - 'Cancel' : Message link to cancel a transfer (upload/download) - Annuler + + conference_created_event + Vous avez rejoint le groupe + + + + conference_created_terminated + Vous avez quitté le groupe + + + + conference_participant_added_event + %1 a rejoint le groupe + + + + conference_participant_removed_event + %1 a quitté le groupe + + + + + conference_security_event + Niveau de sécurité dégradé par %1 + + + + conference_ephemeral_message_enabled_event + Les messages éphémères ont été activés : %1 + + + + conference_ephemeral_message_lifetime_changed_event + Les messages éphémères ont été mis à jour : %1 + + + + conference_ephemeral_message_disabled_event + Les messages éphémères ont été désactivés : %1 + + + + conference_subject_changed_event + Nouveau sujet : %1 + + + + conference_participant_unset_admin_event + %1 n'est plus admin + + + + conference_participant_set_admin_event + %1 est maintenant admin + + + + nMinute + + %1 minute + %1 minutes + + + + + nHour + + %1 heure + %1 heures + + + + + + nDay + + %1 jour + %1 jours + + + + + nWeek + + %1 semaine + %1 semaines + + + + + nSeconds + + %1 seconde + %1 secondes + @@ -3587,11 +3758,6 @@ en bout. Seul votre correspondant peut les déchiffrer. "Appels en cours" Appels en cours - - search_bar_look_for_contact_text - "Rechercher un contact" - Rechercher un contact - call_start_group_call_title @@ -3790,27 +3956,27 @@ en bout. Seul votre correspondant peut les déchiffrer. contact_presence_reset_status - + Réinitialiser le statut contact_presence_custom_status - + Statut personnalisé contact_presence_button_set_custom_status - + Définir contact_presence_button_edit_custom_status - + Editer contact_presence_button_delete_custom_status - + Supprimer @@ -3826,12 +3992,12 @@ en bout. Seul votre correspondant peut les déchiffrer. contact_presence_button_set_custom_status_title - + Définir un statut personnalisé contact_presence_button_save_custom_status - + Enregistrer @@ -3887,11 +4053,6 @@ en bout. Seul votre correspondant peut les déchiffrer. "Audio uniquement" Audio uniquement - - chat_dummy_subject - Dummy subject - Sujet par défaut - RegisterCheckingPage @@ -4241,49 +4402,43 @@ Pour les activer dans un projet commercial, merci de nous contacter. SelectedChatView - - chat_view_send_area_placeholder_text - Say something… : placeholder text for sending message text area - Dites quelque chose… - - - + chat_view_detail_other_actions_title Other actions Autres actions - + chat_view_detail_delete_history_button "Delete history" Supprimer l'historique - + chat_view_detail_delete_history_toast_title Delete history ? Supprimer l'historique ? - + chat_view_detail_delete_history_toast_message All the messages will be removed from the chat room. Do you want to continue ? Tous les messages seront supprimés. Souhaitez-vous continuer ? - + chat_view_detail_leave_room_toast_button "Leave Chat Room" Quitter la conversation - + chat_view_detail_leave_room_toast_title Leave Chat Room ? Quitter la conversation ? - + chat_view_detail_leave_room_toast_message All the messages will be removed from the chat room. Do you want to continue ? Vous ne recevrez ni pourrez envoyer des messages dans cette conversation, quitter ? @@ -4426,27 +4581,27 @@ Pour les activer dans un projet commercial, merci de nous contacter. Utils - + contact_presence_status_available Disponible - + contact_presence_status_busy Occupé - + contact_presence_status_do_not_disturb Ne pas déranger - + contact_presence_status_offline Hors ligne - + contact_presence_status_away Inactif/Absent @@ -4459,8 +4614,8 @@ Pour les activer dans un projet commercial, merci de nous contacter. - - + + information_popup_error_title Error ---------- @@ -4521,14 +4676,14 @@ Failed to create 1-1 conversation with %1 ! Hier - + call_zrtp_token_verification_possible_characters "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 - - + + information_popup_chatroom_creation_error_message Failed to create 1-1 conversation with %1 ! Erreur lors de la création de la conversation avec %1 @@ -4696,1117 +4851,1117 @@ Failed to create 1-1 conversation with %1 ! country - + Afghanistan Afghanistan - + Albania Albanie - + Algeria Algérie - + AmericanSamoa Samoa américaines - + Andorra Andorre - + Angola Angola - + Anguilla Anguilla - + AntiguaAndBarbuda Antigua-et-Barbuda - + Argentina Argentine - + Armenia Arménie - + Aruba Aruba - + Australia Australie - + Austria Autriche - + Azerbaijan Azerbaïdjan - + Bahamas Bahamas - + Bahrain Bahreïn - + Bangladesh Bangladesh - + Barbados Barbade - + Belarus Biélorussie - + Belgium Belgique - + Belize Belize - + Benin Bénin - + Bermuda Bermudes - + Bhutan Bhoutan - + Bolivia Bolivie - + BosniaAndHerzegowina Bosnie-Herzégovine - + Botswana Botswana - + Brazil Brésil - + Brunei Brunéi - + Bulgaria Bulgarie - + BurkinaFaso Burkina Faso - + Burundi Burundi - + Cambodia Cambodge - + Cameroon Cameroun - + Canada Canada - + CapeVerde Cap-Vert - + CaymanIslands Îles Caïmans - + CentralAfricanRepublic République centrafricaine - + Chad Tchad - + Chile Chili - + China Chine - + Colombia Colombie - + Comoros Comores - + PeoplesRepublicOfCongo République populaire du Congo - + CookIslands Îles Cook - + CostaRica Costa Rica - + IvoryCoast Côte d'Ivoire - + Croatia Croatie - + Cuba Cuba - + Cyprus Chypre - + CzechRepublic République Tchèque - + Denmark Danemark - + Djibouti Djibouti - + Dominica Dominique - + DominicanRepublic République dominicaine - + Ecuador Équateur - + Egypt Égypte - + ElSalvador El Salvador - + EquatorialGuinea Guinée équatoriale - + Eritrea Érythrée - + Estonia Estonie - + Ethiopia Éthiopie - + FalklandIslands Îles Falkland - + FaroeIslands Îles Féroé - + Fiji Fidji - + Finland Finlande - + France France - + FrenchGuiana Guyane française - + FrenchPolynesia Polynésie française - + Gabon Gabon - + Gambia Gambie - + Georgia Géorgie - + Germany Allemagne - + Ghana Ghana - + Gibraltar Gibraltar - + Greece Grèce - + Greenland Groenland - + Grenada Grenade - + Guadeloupe Guadeloupe - + Guam Guam - + Guatemala Guatemala - + Guinea Guinée - + GuineaBissau Guinée-Bissau - + Guyana Guyana - + Haiti Haïti - + Honduras Honduras - + DemocraticRepublicOfCongo République démocratique du Congo - + HongKong Hong Kong - + Hungary Hongrie - + Iceland Islande - + India Inde - + Indonesia Indonésie - + Iran Iran - + Iraq Irak - + Ireland Irlande - + Israel Israël - + Italy Italie - + Jamaica Jamaïque - + Japan Japon - + Jordan Jordanie - + Kazakhstan Kazakhstan - + Kenya Kenya - + Kiribati Kiribati - + DemocraticRepublicOfKorea Corée du Nord - + RepublicOfKorea Corée du Sud - + Kuwait Koweït - + Kyrgyzstan Kirghizistan - + Laos Laos - + Latvia Lettonie - + Lebanon Liban - + Lesotho Lesotho - + Liberia Libéria - + Libya Libye - + Liechtenstein Liechtenstein - + Lithuania Lituanie - + Luxembourg Luxembourg - + Macau Macao - + Macedonia Macédoine - + Madagascar Madagascar - + Malawi Malawi - + Malaysia Malaisie - + Maldives Maldives - + Mali Mali - + Malta Malte - + MarshallIslands Îles Marshall - + Martinique Martinique - + Mauritania Mauritanie - + Mauritius Maurice - + Mayotte Mayotte - + Mexico Mexique - + Micronesia Micronésie - + Moldova Moldavie - + Monaco Monaco - + Mongolia Mongolie - + Montenegro Montenegro - + Montserrat Montserrat - + Morocco Maroc - + Mozambique Mozambique - + Myanmar Myanmar - + Namibia Namibie - + NauruCountry Nauru - + Nepal Népal - + Netherlands Pays-Bas - + NewCaledonia Nouvelle-Calédonie - + NewZealand Nouvelle-Zélande - + Nicaragua Nicaragua - + Niger Niger - + Nigeria Nigeria - + Niue Niué - + NorfolkIsland Île Norfolk - + NorthernMarianaIslands Îles Mariannes du Nord - + Norway Norvège - + Oman Oman - + Pakistan Pakistan - + Palau Palaos - + PalestinianTerritories Palestine - + Panama Panama - + PapuaNewGuinea Papouasie-Nouvelle-Guinée - + Paraguay Paraguay - + Peru Pérou - + Philippines Philippines - + Poland Pologne - + Portugal Portugal - + PuertoRico Porto Rico - + Qatar Qatar - + Reunion La Réunion - + Romania Roumanie - + RussianFederation Russie - + Rwanda Rwanda - + SaintHelena Sainte-Hélène - + SaintKittsAndNevis Saint-Christophe-et-Niévès - + SaintLucia Sainte-Lucie - + SaintPierreAndMiquelon Saint-Pierre-et-Miquelon - + SaintVincentAndTheGrenadines Saint-Vincent et les Grenadines - + Samoa Samoa - + SanMarino Saint-Marin - + SaoTomeAndPrincipe Sao Tomé-et-Principe - + SaudiArabia Arabie saoudite - + Senegal Sénégal - + Serbia Serbie - + Seychelles Seychelles - + SierraLeone Sierra Leone - + Singapore Singapour - + Slovakia Slovaquie - + Slovenia Slovénie - + SolomonIslands Îles Salomon - + Somalia Somalie - + SouthAfrica Afrique du Sud - + Spain Espagne - + SriLanka Sri Lanka - + Sudan Soudan - + Suriname Suriname - + Swaziland Eswatini - + Sweden Suède - + Switzerland Suisse - + Syria Syrie - + Taiwan Taïwan - + Tajikistan Tadjikistan - + Tanzania Tanzanie - + Thailand Thaïlande - + Togo Togo - + Tokelau Tokelau - + Tonga Tonga - + TrinidadAndTobago Trinité-et-Tobago - + Tunisia Tunisie - + Turkey Turquie - + Turkmenistan Turkménistan - + TurksAndCaicosIslands Îles Turks et Caïques - + Tuvalu Tuvalu - + Uganda Ouganda - + Ukraine Ukraine - + UnitedArabEmirates Émirats arabes unis - + UnitedKingdom Royaume-Uni - + UnitedStates États-Unis - + Uruguay Uruguay - + Uzbekistan Ouzbékistan - + Vanuatu Vanuatu - + Venezuela Venezuela - + Vietnam Vietnam - + WallisAndFutunaIslands Wallis et Futuna - + Yemen Yémen - + Zambia Zambie - + Zimbabwe Zimbabwe diff --git a/Linphone/model/chat/ChatModel.cpp b/Linphone/model/chat/ChatModel.cpp index 0d503ef4f..807578537 100644 --- a/Linphone/model/chat/ChatModel.cpp +++ b/Linphone/model/chat/ChatModel.cpp @@ -132,6 +132,16 @@ std::shared_ptr ChatModel::createTextMessageFromText(QStr return mMonitor->createMessageFromUtf8(Utils::appStringToCoreString(text)); } +std::shared_ptr +ChatModel::createMessage(QString text, QList> filesContent) { + auto message = mMonitor->createEmptyMessage(); + for (auto &content : filesContent) { + message->addFileContent(content->getContent()); + } + if (!text.isEmpty()) message->addUtf8TextContent(Utils::appStringToCoreString(text)); + return message; +} + void ChatModel::compose() { mMonitor->compose(); } diff --git a/Linphone/model/chat/ChatModel.hpp b/Linphone/model/chat/ChatModel.hpp index 779c8aa04..655a1d573 100644 --- a/Linphone/model/chat/ChatModel.hpp +++ b/Linphone/model/chat/ChatModel.hpp @@ -21,6 +21,7 @@ #ifndef CHAT_MODEL_H_ #define CHAT_MODEL_H_ +#include "model/chat/message/content/ChatMessageContentModel.hpp" #include "model/listener/Listener.hpp" #include "tool/AbstractObject.hpp" #include "tool/LinphoneEnums.hpp" @@ -49,12 +50,13 @@ public: void deleteChatRoom(); void leave(); std::shared_ptr createTextMessageFromText(QString text); + std::shared_ptr createMessage(QString text, + QList> filesContent); void compose(); linphone::ChatRoom::State getState() const; void setMuted(bool muted); void enableEphemeral(bool enable); - signals: void historyDeleted(); void messagesRead(); diff --git a/Linphone/tool/providers/ThumbnailProvider.cpp b/Linphone/tool/providers/ThumbnailProvider.cpp index ce695bb5a..7a7419436 100644 --- a/Linphone/tool/providers/ThumbnailProvider.cpp +++ b/Linphone/tool/providers/ThumbnailProvider.cpp @@ -110,7 +110,11 @@ QImage ThumbnailAsyncImageResponse::createThumbnail(const QString &path, QImage else if (rotation == 7 || rotation == 8) transform.rotate(-90); thumbnail = thumbnail.transformed(transform); if (rotation == 2 || rotation == 4 || rotation == 5 || rotation == 7) +#if QT_VERSION < QT_VERSION_CHECK(6, 9, 0) + thumbnail = thumbnail.mirrored(true, false); +#else thumbnail = thumbnail.flipped(Qt::Horizontal); +#endif } } return thumbnail; diff --git a/Linphone/view/Control/Display/Chat/ChatListView.qml b/Linphone/view/Control/Display/Chat/ChatListView.qml index 7280731f8..2e34cae23 100644 --- a/Linphone/view/Control/Display/Chat/ChatListView.qml +++ b/Linphone/view/Control/Display/Chat/ChatListView.qml @@ -47,7 +47,6 @@ ListView { mainItem.currentIndex = indexToSelect } onLayoutChanged: { - var chatToSelect = getAt(mainItem.currentIndex) selectChat(mainItem.currentChatGui) } } diff --git a/Linphone/view/Control/Display/Chat/FileView.qml b/Linphone/view/Control/Display/Chat/FileView.qml index e6f26fa2e..d7bbf19f6 100644 --- a/Linphone/view/Control/Display/Chat/FileView.qml +++ b/Linphone/view/Control/Display/Chat/FileView.qml @@ -39,24 +39,28 @@ Item { property bool isOutgoing: false MouseArea { + anchors.fill: parent hoverEnabled: true propagateComposedEvents: true - // Changing of cursor seems not to work with the Loader - // Use override cursor for this case + function handleMouseMove (mouse) { + thumbnailProvider.state = Utils.pointIsInItem(this, thumbnailProvider, mouse) + ? 'hovered' + : '' + } + onMouseXChanged: (mouse) => handleMouseMove.call(this, mouse) + onMouseYChanged: (mouse) => handleMouseMove.call(this, mouse) onEntered: { - UtilsCpp.setGlobalCursor(Qt.PointingHandCursor) thumbnailProvider.state = 'hovered' } onExited: { - UtilsCpp.restoreGlobalCursor() thumbnailProvider.state = '' } - anchors.fill: parent onClicked: (mouse) => { mouse.accepted = false if(mainItem.isTransferring) { mainItem.contentGui.core.lCancelDownloadFile() mouse.accepted = true + thumbnailProvider.state = '' } else if(!mainItem.contentGui.core.wasDownloaded) { mouse.accepted = true @@ -64,6 +68,7 @@ Item { mainItem.contentGui.core.lDownloadFile() } else if (Utils.pointIsInItem(this, thumbnailProvider, mouse)) { mouse.accepted = true + thumbnailProvider.state = '' // if(SettingsModel.isVfsEncrypted){ // window.attachVirtualWindow(Utils.buildCommonDialogUri('FileViewDialog'), { // contentGui: mainItem.contentGui, @@ -290,5 +295,11 @@ Item { states: State { name: 'hovered' } + // Changing cursor in MouseArea seems not to work with the Loader + // Use override cursor for this case + onStateChanged: { + if (state === 'hovered') UtilsCpp.setGlobalCursor(Qt.PointingHandCursor) + else UtilsCpp.restoreGlobalCursor() + } } } \ No newline at end of file diff --git a/Linphone/view/Control/Input/Chat/ChatDroppableTextArea.qml b/Linphone/view/Control/Input/Chat/ChatDroppableTextArea.qml index c8ab575eb..6ef11ae5b 100644 --- a/Linphone/view/Control/Input/Chat/ChatDroppableTextArea.qml +++ b/Linphone/view/Control/Input/Chat/ChatDroppableTextArea.qml @@ -1,5 +1,6 @@ import QtQuick import QtQuick.Controls.Basic as Control + import QtQuick.Dialogs import QtQuick.Layouts import Linphone import UtilsCpp @@ -47,6 +48,12 @@ Control.Control { } } + FileDialog { + id: fileDialog + fileMode: FileDialog.OpenFiles + onAccepted: _emitFiles(fileDialog.selectedFiles) + } + // width: mainItem.implicitWidth // height: mainItem.height leftPadding: Math.round(15 * DefaultStyle.dp) @@ -80,7 +87,7 @@ Control.Control { style: ButtonStyle.noBackground icon.source: AppIcons.paperclip onClicked: { - console.log("TODO : open explorer to attach file") + fileDialog.open() } } Control.Control { @@ -144,10 +151,9 @@ Control.Control { onCursorRectangleChanged: sendingAreaFlickable.ensureVisible(cursorRectangle) wrapMode: TextEdit.WordWrap Keys.onPressed: (event) => { - if ((event.key == Qt.Key_Enter || event.key == Qt.Key_Return) - && (!(event.modifier & Qt.ShiftModifier))) { + if ((event.key == Qt.Key_Enter || event.key == Qt.Key_Return)) + if(!(event.modifiers & Qt.ShiftModifier)) { mainItem.sendText() - sendingTextArea.clear() event.accepted = true } } @@ -168,7 +174,6 @@ Control.Control { icon.source: AppIcons.paperPlaneRight onClicked: { mainItem.sendText() - sendingTextArea.clear() } } } diff --git a/Linphone/view/Page/Form/Chat/SelectedChatView.qml b/Linphone/view/Page/Form/Chat/SelectedChatView.qml index 219e0e6e5..8c3cfdbd0 100644 --- a/Linphone/view/Page/Form/Chat/SelectedChatView.qml +++ b/Linphone/view/Page/Form/Chat/SelectedChatView.qml @@ -147,10 +147,6 @@ RowLayout { bottomPadding: Math.round(12 * DefaultStyle.dp) leftPadding: Math.round(19 * DefaultStyle.dp) rightPadding: Math.round(19 * DefaultStyle.dp) - - function addFile(path) { - contents.addFile(path) - } Button { anchors.top: parent.top @@ -212,6 +208,14 @@ RowLayout { onClicked: contents.removeContent(modelData) } } + Control.ScrollBar.horizontal: selectedFilesScrollbar + } + ScrollBar { + id: selectedFilesScrollbar + active: true + anchors.bottom: selectedFilesArea.bottom + anchors.left: selectedFilesArea.left + anchors.right: selectedFilesArea.right } } ChatDroppableTextArea { @@ -228,9 +232,16 @@ RowLayout { } mainItem.chat.core.sendingText = text } - onSendText: mainItem.chat.core.lSendTextMessage(text) + onSendText: { + var filesContents = contents.getAll() + if (filesContents.length === 0) + mainItem.chat.core.lSendTextMessage(text) + else mainItem.chat.core.lSendMessage(text, filesContents) + messageSender.textArea.clear() + contents.clear() + } onDropped: (files) => { - files.forEach(selectedFilesArea.addFile) + contents.addFiles(files) } } } diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index c812204c1..0ef245c8a 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -1,8 +1,6 @@ add_subdirectory(linphone-sdk/) if(ENABLE_QT_KEYCHAIN) - function(add_linphone_keychain) - add_subdirectory(qtkeychain/) - endfunction() - add_linphone_keychain() + find_package(Qt6 REQUIRED COMPONENTS Test) + add_subdirectory(qtkeychain/) endif() \ No newline at end of file