diff --git a/Linphone/core/App.cpp b/Linphone/core/App.cpp index 58cd6b34..24ce4fe6 100644 --- a/Linphone/core/App.cpp +++ b/Linphone/core/App.cpp @@ -1045,7 +1045,7 @@ void App::setCallsWindowProperty(const char *id, QVariant property) { } void App::closeCallsWindow() { - if (mCallsWindow) { + if (mCallsWindow && mCallList && !mCallList->getHaveCall()) { mCallsWindow->close(); mCallsWindow->deleteLater(); mCallsWindow = nullptr; diff --git a/Linphone/core/chat/ChatCore.cpp b/Linphone/core/chat/ChatCore.cpp index 79c54f08..e5d2c7dd 100644 --- a/Linphone/core/chat/ChatCore.cpp +++ b/Linphone/core/chat/ChatCore.cpp @@ -29,6 +29,8 @@ #include "model/tool/ToolModel.hpp" #include "tool/Utils.hpp" +#include + DEFINE_ABSTRACT_OBJECT(ChatCore) /***********************************************************************/ @@ -232,7 +234,16 @@ void ChatCore::setSelf(QSharedPointer me) { }); mChatModelConnection->makeConnectToCore(&ChatCore::lMarkAsRead, [this]() { - mChatModelConnection->invokeToModel([this]() { mChatModel->markAsRead(); }); + auto mainWindow = Utils::getMainWindow(); + if (mainWindow->isActive()) mChatModelConnection->invokeToModel([this]() { mChatModel->markAsRead(); }); + else { + connect(mainWindow, &QQuickWindow::activeChanged, this, [this, mainWindow] { + if (mainWindow->isActive()) { + disconnect(mainWindow, &QQuickWindow::activeChanged, this, nullptr); + mChatModelConnection->invokeToModel([this, mainWindow] { mChatModel->markAsRead(); }); + } + }); + } }); mChatModelConnection->makeConnectToModel(&ChatModel::messagesRead, [this]() { auto unread = mChatModel->getUnreadMessagesCount(); diff --git a/Linphone/core/chat/message/ChatMessageCore.cpp b/Linphone/core/chat/message/ChatMessageCore.cpp index c793c94c..39d724a3 100644 --- a/Linphone/core/chat/message/ChatMessageCore.cpp +++ b/Linphone/core/chat/message/ChatMessageCore.cpp @@ -22,6 +22,8 @@ #include "core/App.hpp" #include "model/tool/ToolModel.hpp" +#include + DEFINE_ABSTRACT_OBJECT(ChatMessageCore) /***********************************************************************/ @@ -213,7 +215,17 @@ void ChatMessageCore::setSelf(QSharedPointer me) { }); }); mChatMessageModelConnection->makeConnectToCore(&ChatMessageCore::lMarkAsRead, [this] { - mChatMessageModelConnection->invokeToModel([this] { mChatMessageModel->markAsRead(); }); + auto mainWindow = Utils::getMainWindow(); + if (mainWindow->isActive()) + mChatMessageModelConnection->invokeToModel([this] { mChatMessageModel->markAsRead(); }); + else { + connect(mainWindow, &QQuickWindow::activeChanged, this, [this, mainWindow] { + if (mainWindow->isActive()) { + disconnect(mainWindow, &QQuickWindow::activeChanged, this, nullptr); + mChatMessageModelConnection->invokeToModel([this, mainWindow] { mChatMessageModel->markAsRead(); }); + } + }); + } }); mChatMessageModelConnection->makeConnectToModel(&ChatMessageModel::messageRead, [this]() { mChatMessageModelConnection->invokeToCore([this] { setIsRead(true); }); diff --git a/Linphone/core/participant/ParticipantCore.cpp b/Linphone/core/participant/ParticipantCore.cpp index d6de6a3e..04d22c5e 100644 --- a/Linphone/core/participant/ParticipantCore.cpp +++ b/Linphone/core/participant/ParticipantCore.cpp @@ -54,8 +54,8 @@ ParticipantCore::ParticipantCore(const std::shared_ptr &p mDisplayName = Utils::coreStringToAppString(participantAddress->getDisplayName()); if (mDisplayName.isEmpty()) mDisplayName = ToolModel::getDisplayName(participantAddress); auto isFriend = ToolModel::findFriendByAddress(participantAddress); - mSecurityLevel = - isFriend ? LinphoneEnums::fromLinphone(isFriend->getSecurityLevel()) : LinphoneEnums::SecurityLevel::None; + if (isFriend && isFriend->getCore()) mSecurityLevel = LinphoneEnums::fromLinphone(isFriend->getSecurityLevel()); + else mSecurityLevel = LinphoneEnums::SecurityLevel::None; for (auto &device : participant->getDevices()) { auto name = Utils::coreStringToAppString(device->getName()); auto address = Utils::coreStringToAppString(device->getAddress()->asStringUriOnly()); diff --git a/Linphone/core/register/RegisterPage.cpp b/Linphone/core/register/RegisterPage.cpp index fd957ac3..06a1474b 100644 --- a/Linphone/core/register/RegisterPage.cpp +++ b/Linphone/core/register/RegisterPage.cpp @@ -38,15 +38,18 @@ RegisterPage::~RegisterPage() { void RegisterPage::registerNewAccount(const QString &username, const QString &password, const QString &email, + const QString &countryCallingCode, const QString &phoneNumber) { + App::postModelAsync([=]() { // Create on Model thread. - // registrationFailed(error); }); AccountManager::RegisterType registerType; QString address; if (email.isEmpty()) { registerType = AccountManager::RegisterType::PhoneNumber; - address = phoneNumber; + auto dialPlan = linphone::DialPlan::byCcc(Utils::appStringToCoreString(countryCallingCode)); + auto formattedPhoneNumber = dialPlan->formatPhoneNumber(Utils::appStringToCoreString(phoneNumber), false); + address = Utils::coreStringToAppString(formattedPhoneNumber); } else { registerType = AccountManager::RegisterType::Email; address = email; diff --git a/Linphone/core/register/RegisterPage.hpp b/Linphone/core/register/RegisterPage.hpp index e8f6b34c..ad96bf6d 100644 --- a/Linphone/core/register/RegisterPage.hpp +++ b/Linphone/core/register/RegisterPage.hpp @@ -39,8 +39,9 @@ public: Q_INVOKABLE void registerNewAccount(const QString &username, const QString &password, - const QString &email, - const QString &phoneNumber); + const QString &email = QString(), + const QString &countryCallingCode = QString(), + const QString &phoneNumber = QString()); Q_INVOKABLE void linkNewAccountUsingCode(const QString &code, bool registerWithEmail, const QString &sipIdentityAddress); diff --git a/Linphone/data/image/lock-simple-open.svg b/Linphone/data/image/lock-simple-open.svg index 203a421a..b5083816 100644 --- a/Linphone/data/image/lock-simple-open.svg +++ b/Linphone/data/image/lock-simple-open.svg @@ -1 +1,11 @@ - \ No newline at end of file + + + + + + + + + + + diff --git a/Linphone/data/languages/de.ts b/Linphone/data/languages/de.ts index 56edbee3..eeaa9022 100644 --- a/Linphone/data/languages/de.ts +++ b/Linphone/data/languages/de.ts @@ -25,13 +25,13 @@ AbstractWindow - + contact_dialog_pick_phone_number_or_sip_address_title "Choisissez un numéro ou adresse SIP" Telefonnummer oder SIP-Adresse wählen - + fps_counter %1 FPS @@ -958,7 +958,7 @@ Nachricht - + contact_video_call_action "Appel Video" Videoanruf @@ -1492,200 +1492,200 @@ Das Fenster wird gleich geschlossen. Dies beendet alle laufenden Anrufe. - + call_can_be_trusted_toast "Appareil authentifié" Gerät vertrauenswürdig - + call_dir %1 Anruf - + call_ended Appel terminé Anruf beendet - + conference_paused Meeting paused Besprechung pausiert - + call_paused Call paused Anruf pausiert - - + + call_srtp_point_to_point_encrypted Appel chiffré de point à point Punkt-zu-Punkt verschlüsselter Anruf - + call_zrtp_sas_validation_required Vérification nécessaire Validierung erforderlich - + call_zrtp_end_to_end_encrypted Appel chiffré de bout en bout Ende-zu-Ende verschlüsselter Anruf - + call_not_encrypted "Appel non chiffré" Unverschlüsselter Anruf - - + + call_waiting_for_encryption_info Waiting for encryption Warten auf Verschlüsselung - + call_paused_by_remote Call paused by remote - + conference_user_is_recording "You are recording the meeting" Sie nehmen die Besprechung auf - + call_user_is_recording "You are recording the call" Sie nehmen den Anruf auf - + conference_remote_is_recording "Someone is recording the meeting" Jemand nimmt die Besprechung auf - + call_remote_recording "%1 is recording the call" %1 nimmt den Anruf auf - + call_stop_recording "Stop recording" Aufnahme stoppen - + add Hinzufügen - + call_transfer_current_call_title "Transférer %1 à…" %1 weiterleiten an… - - + + call_transfer_confirm_dialog_tittle "Confirmer le transfert" Weiterleitung bestätigen - - + + call_transfer_confirm_dialog_message "Vous allez transférer %1 à %2." Sie werden %1 an %2 weiterleiten. - + call_action_start_new_call "Nouvel appel" Neuen Anruf starten - - + + call_action_show_dialer "Pavé numérique" Wähltastatur - + call_action_change_layout "Modifier la disposition" Layout ändern - + call_action_go_to_calls_list "Liste d'appel" Anrufliste - + Merger tous les appels call_action_merge_calls Alle Anrufe zusammenführen - - + + call_action_go_to_settings "Paramètres" Einstellungen - + conference_action_screen_sharing "Partage de votre écran" Bildschirm teilen - + conference_share_link_title Partager le lien de la réunion Besprechungs-Link teilen - + copied Copié Kopiert - + information_popup_meeting_address_copied_to_clipboard Le lien de la réunion a été copié dans le presse-papier Der Besprechungs-Link wurde in die Zwischenablage kopiert - - - + + + conference_participants_list_title "Participants (%1)" Teilnehmer (%1) - - + + group_call_participant_selected 1 ausgewählter Teilnehmer @@ -1693,194 +1693,194 @@ - + meeting_schedule_add_participants_title Teilnehmer hinzufügen - + call_encryption_title Chiffrement Verschlüsselung - + open_statistic_panel_accessible_name - + conference_user_is_sharing_screen "You are sharing your screen" - + call_stop_screen_sharing "Stop sharing" - + stop_recording_accessible_name Stop recording - + stop_screen_sharing_accessible_name "Stop screen sharing" - + call_stats_title Statistiques Statistiken - - + + call_action_end_call "Terminer l'appel" Anruf beenden - - + + call_action_resume_call "Reprendre l'appel" Anruf fortsetzen - - + + call_action_pause_call "Mettre l'appel en pause" Anruf pausieren - - + + call_action_transfer_call "Transférer l'appel" Anruf weiterleiten - - + + call_action_start_new_call_hint "Initier un nouvel appel" Neuen Anruf starten - - + + call_display_call_list_hint "Afficher la liste d'appels" Anrufliste anzeigen - - + + call_deactivate_video_hint "Désactiver la vidéo" "Activer la vidéo" Video deaktivieren - - + + call_activate_video_hint Video aktivieren - - + + call_activate_microphone "Activer le micro" Mikrofon aktivieren - - + + call_deactivate_microphone "Désactiver le micro" Mikrofon stummschalten - - + + call_share_screen_hint Partager l'écran… Bildschirm teilen… - - + + call_open_chat_hint Open chat… - - + + call_rise_hand_hint "Lever la main" Hand heben - - + + call_send_reaction_hint "Envoyer une réaction" Reaktion senden - - + + call_manage_participants_hint "Gérer les participants" Teilnehmer verwalten - - + + call_more_options_hint "Plus d'options…" Weitere Optionen… - + call_action_change_conference_layout "Modifier la disposition" Layout ändern - + call_action_full_screen "Mode Plein écran" Vollbildmodus - + call_action_stop_recording "Terminer l'enregistrement" Aufnahme beenden - + call_action_record "Enregistrer l'appel" Anruf aufnehmen - + call_activate_speaker_hint "Activer le son" Lautsprecher aktivieren - + call_deactivate_speaker_hint "Désactiver le son" Lautsprecher stummschalten @@ -2011,13 +2011,13 @@ ChatCore - + info_toast_deleted_title Deleted - + info_toast_deleted_message_history Message history has been deleted @@ -2270,19 +2270,19 @@ Error ChatMessageCore - + all_reactions_label "Reactions": all reactions for one message label - + info_toast_deleted_title Deleted - + info_toast_deleted_message The message has been deleted @@ -2342,45 +2342,58 @@ Error ChatMessagesListView - - + + popup_info_find_message_title Find message - + info_popup_no_result_message No result found - + info_popup_first_result_message First result reached - + info_popup_last_result_message Last result reached - + 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. + + unencrypted_conversation_warning + This conversation is not encrypted ! - + + chat_message_list_encrypted_header_message + Messages in this conversation are e2e encrypted. + Only your correspondent can decrypt them. + + + + + chat_message_list_not_encrypted_header_message + Messages are not end to end encrypted, + may sure you don't share any sensitive information ! + + + + chat_message_is_writing_info %1 is writing… @@ -4446,17 +4459,23 @@ Error MeetingListView - + meeting_info_cancelled "Réunion annulée" Besprechung abgesagt - + meetings_list_no_meeting_for_today "Aucune réunion aujourd'hui" Heute keine Besprechungen + + + meeting_info_delete + "Supprimer la réunion" + Besprechung löschen + MeetingPage @@ -4473,158 +4492,158 @@ Error Keine Besprechungen - + meeting_schedule_cancel_dialog_message "Souhaitez-vous annuler et supprimer cette réunion ?" Möchten Sie diese Besprechung absagen und löschen? - + meeting_schedule_delete_dialog_message Souhaitez-vous supprimer cette réunion ? Möchten Sie diese Besprechung löschen? - + meeting_schedule_cancel_and_delete_action "Annuler et supprimer" Absagen und löschen - + meeting_schedule_delete_only_action "Supprimer seulement" Nur löschen - + meeting_schedule_delete_action "Supprimer" Löschen - + back_action Retour Zurück - + meetings_list_title Réunions Besprechungen - + meetings_search_hint "Rechercher une réunion" Besprechung suchen - + list_filter_no_result_found "Aucun résultat…" Kein Ergebnis… - + meetings_empty_list "Aucune réunion" Keine Besprechungen - - + + meeting_schedule_title "Nouvelle réunion" Neue Besprechung - + create Erstellen - - - - - - + + + + + + information_popup_error_title Fehler - - + + meeting_schedule_mandatory_field_not_filled_toast Veuillez saisir un titre et sélectionner au moins un participant Bitte Titel bestimmen und mindestens einen Teilnehmer auswählen - - + + meeting_schedule_duration_error_toast "La fin de la conférence doit être plus récente que son début" Das Ende der Besprechung muss nach dem Beginn liegen - - + + meeting_schedule_creation_in_progress "Création de la réunion en cours …" Besprechung wird erstellt… - + meeting_info_created_toast "Réunion planifiée avec succès" Besprechung erfolgreich erstellt - + meeting_failed_to_schedule_toast "Échec de création de la réunion !" Besprechung konnte nicht erstellt werden! - + save Speichern - - + + saved "Enregistré" Gespeichert - + meeting_info_updated_toast "Réunion mise à jour" Besprechung geändert - + meeting_schedule_edit_in_progress "Modification de la réunion en cours…" Bersprechung wird geändert… - + meeting_failed_to_edit_toast "Échec de la modification de la réunion !" Besprechung konnte nicht geändert werden! - + meeting_schedule_add_participants_title "Ajouter des participants" Teilnehmer hinzufügen - + meeting_schedule_add_participants_apply Apply @@ -4633,7 +4652,7 @@ Error Hinzufügen - + group_call_participant_selected "%n participant(s) sélectionné(s)" @@ -4642,31 +4661,31 @@ Error - + meeting_info_delete "Supprimer la réunion" Besprechung löschen - + meeting_address_copied_to_clipboard_toast "Adresse de la réunion copiée" Besprechungs-URI kopiert - + meeting_schedule_timezone_title "Fuseau horaire" Zeitzone - + meeting_info_organizer_label "Organisateur" Organisator - + meeting_info_join_title "Rejoindre la réunion" Besprechung beitreten @@ -5017,13 +5036,13 @@ Error PhoneNumberInput - + prefix_phone_number_accessible_name %1 prefix - + number_phone_number_accessible_name %1 number @@ -5482,7 +5501,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + transport "Transport" Transport @@ -5510,33 +5529,34 @@ Pour les activer dans un projet commercial, merci de nous contacter. Bitte Domäne eingeben - + login_advanced_parameters_label Advanced parameters - - + + login_proxy_server_url "Outbound SIP Proxy URI" - + login_proxy_server_url_tooltip "If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it." - + + login_registrar_uri "Registrar URI" + - login_id "Authentication ID (if different)" @@ -5664,31 +5684,37 @@ Pour les activer dans un projet commercial, merci de nous contacter. Start a group call ? - + + unencrypted_conversation_warning + This conversation is not encrypted ! + + + + reply_to_label Reply to %1 - + shared_medias_title Shared medias - + shared_documents_title Shared documents - + forward_to_title Forward to… - + conversations_title Conversations @@ -5866,7 +5892,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. Utils - + nMinute @@ -5874,7 +5900,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + nHour @@ -5882,8 +5908,8 @@ Pour les activer dans un projet commercial, merci de nous contacter. + - nDay @@ -5891,7 +5917,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + nWeek @@ -5899,7 +5925,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + nSeconds @@ -5915,8 +5941,8 @@ Pour les activer dans un projet commercial, merci de nous contacter. - - + + information_popup_error_title Error ---------- @@ -5929,7 +5955,7 @@ Failed to create 1-1 conversation with %1 ! - + number_of_years %n an(s) @@ -5938,7 +5964,7 @@ Failed to create 1-1 conversation with %1 ! - + number_of_month "%n mois" @@ -5947,7 +5973,7 @@ Failed to create 1-1 conversation with %1 ! - + number_of_weeks %n semaine(s) @@ -5956,7 +5982,7 @@ Failed to create 1-1 conversation with %1 ! - + number_of_days %n jour(s) @@ -5965,25 +5991,25 @@ Failed to create 1-1 conversation with %1 ! - + today "Aujourd'hui" Heute - + yesterday "Hier Gestern - + duration_tomorrow Tomorrow - + duration_number_of_days %1 jour(s) @@ -5992,111 +6018,111 @@ Failed to create 1-1 conversation with %1 ! - + 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 - + recorder_error Error with the recorder - - - + + + chat_error - + chat_message_forward_error Cannot forward an invalid message - - - - - - + + + + + + info_popup_error_title Error - + info_popup_forward_message_error Could not forward message : %1 - + info_popup_send_forward_message_error_message Failed to create forward message - + chat_message_reply_error Cannot reply to invalid message - + info_popup_reply_message_error Could not send reply message : %1 - + info_popup_send_reply_message_error_message Failed to create reply message - + info_popup_send_voice_message_error_message Could not send voice message : %1 - + info_popup_send_voice_message_sending_error_message Failed to create message from record @@ -6265,1117 +6291,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 302d5989..f09b309c 100644 --- a/Linphone/data/languages/en.ts +++ b/Linphone/data/languages/en.ts @@ -25,13 +25,13 @@ AbstractWindow - + contact_dialog_pick_phone_number_or_sip_address_title "Choisissez un numéro ou adresse SIP" Choose a SIP number or address - + fps_counter %1 FPS @@ -938,7 +938,7 @@ Message - + contact_video_call_action "Appel Video" Video call @@ -1454,200 +1454,200 @@ The window is about to be closed. This will end all current calls. - + call_can_be_trusted_toast "Appareil authentifié" Device trusted - + call_dir %1 call - + call_ended Appel terminé Call ended - + conference_paused Meeting paused Meeting paused - + call_paused Call paused Call paused - - + + call_srtp_point_to_point_encrypted Appel chiffré de point à point Point-to-point encrypted call - + call_zrtp_sas_validation_required Vérification nécessaire Validation required - + call_zrtp_end_to_end_encrypted Appel chiffré de bout en bout End-to-end encrypted call - + call_not_encrypted "Appel non chiffré" Unencrypted call - - + + call_waiting_for_encryption_info Waiting for encryption Waiting for encryption - + call_paused_by_remote Call paused by remote Call paused by remote - + conference_user_is_recording "You are recording the meeting" You are recording the meeting - + call_user_is_recording "You are recording the call" You are recording the call - + conference_remote_is_recording "Someone is recording the meeting" Someone is recording the meeting - + call_remote_recording "%1 is recording the call" %1 records the call - + call_stop_recording "Stop recording" Stop recording - + add Add - + call_transfer_current_call_title "Transférer %1 à…" Transfer %1 to… - - + + call_transfer_confirm_dialog_tittle "Confirmer le transfert" Confirm transfer - - + + call_transfer_confirm_dialog_message "Vous allez transférer %1 à %2." You are going to transfer %1 to %2. - + call_action_start_new_call "Nouvel appel" New call - - + + call_action_show_dialer "Pavé numérique" Dialer - + call_action_change_layout "Modifier la disposition" Change layout - + call_action_go_to_calls_list "Liste d'appel" Call list - + Merger tous les appels call_action_merge_calls Merge all calls - - + + call_action_go_to_settings "Paramètres" Settings - + conference_action_screen_sharing "Partage de votre écran" Share your screen - + conference_share_link_title Partager le lien de la réunion Share meeting link - + copied Copié Copied - + information_popup_meeting_address_copied_to_clipboard Le lien de la réunion a été copié dans le presse-papier Meeting link has been copied to the clipboard - - - + + + conference_participants_list_title "Participants (%1)" Participants (%1) - - + + group_call_participant_selected %1 selected participant @@ -1655,194 +1655,194 @@ - + meeting_schedule_add_participants_title Add participants - + call_encryption_title Chiffrement Encryption - + open_statistic_panel_accessible_name Open statistic panel - + conference_user_is_sharing_screen "You are sharing your screen" You are sharing your screen - + call_stop_screen_sharing "Stop sharing" Stop - + stop_recording_accessible_name Stop recording Stop recording - + stop_screen_sharing_accessible_name "Stop screen sharing" Stop screen sharing - + call_stats_title Statistiques Statistics - - + + call_action_end_call "Terminer l'appel" End call - - + + call_action_resume_call "Reprendre l'appel" Resume call - - + + call_action_pause_call "Mettre l'appel en pause" Pause call - - + + call_action_transfer_call "Transférer l'appel" Transfer call - - + + call_action_start_new_call_hint "Initier un nouvel appel" Start new call - - + + call_display_call_list_hint "Afficher la liste d'appels" View call list - - + + call_deactivate_video_hint "Désactiver la vidéo" "Activer la vidéo" Turn off video - - + + call_activate_video_hint Enable video - - + + call_activate_microphone "Activer le micro" Activate microphone - - + + call_deactivate_microphone "Désactiver le micro" Mute microphone - - + + call_share_screen_hint Partager l'écran… Share screen… - - + + call_open_chat_hint Open chat… Open conversation… - - + + call_rise_hand_hint "Lever la main" Rise hand - - + + call_send_reaction_hint "Envoyer une réaction" Send reaction - - + + call_manage_participants_hint "Gérer les participants" Manage participants - - + + call_more_options_hint "Plus d'options…" More options… - + call_action_change_conference_layout "Modifier la disposition" Change layout - + call_action_full_screen "Mode Plein écran" Full screen mode - + call_action_stop_recording "Terminer l'enregistrement" End recording - + call_action_record "Enregistrer l'appel" Record call - + call_activate_speaker_hint "Activer le son" Activate speaker - + call_deactivate_speaker_hint "Désactiver le son" Mute speaker @@ -1973,13 +1973,13 @@ ChatCore - + info_toast_deleted_title Deleted Deleted - + info_toast_deleted_message_history Message history has been deleted Message history has been deleted @@ -2232,19 +2232,19 @@ Error ChatMessageCore - + all_reactions_label "Reactions": all reactions for one message label Reactions - + info_toast_deleted_title Deleted Deleted - + info_toast_deleted_message The message has been deleted The message has been deleted @@ -2304,46 +2304,60 @@ Error ChatMessagesListView - - + + popup_info_find_message_title Find message Find message - + info_popup_no_result_message No result found No result found - + info_popup_first_result_message First result reached First result reached - + info_popup_last_result_message Last result reached Last result reached - + chat_message_list_encrypted_header_title End to end encrypted chat End to end encrypted chat - + + unencrypted_conversation_warning + This conversation is not encrypted ! + This conversation is not encrypted ! + + + 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. + Messages in this conversation are e2e encrypted. + Only your correspondent can decrypt them. Messages in this conversation are e2e encrypted. Only your correspondent can decrypt them. - + + chat_message_list_not_encrypted_header_message + Messages are not end to end encrypted, + may sure you don't share any sensitive information ! + Messages are not end to end encrypted, + may sure you don't share any sensitive information ! + + + chat_message_is_writing_info %1 is writing… %1 is writing… @@ -4351,17 +4365,23 @@ Expiration : %1 MeetingListView - + meeting_info_cancelled "Réunion annulée" Meeting canceled - + meetings_list_no_meeting_for_today "Aucune réunion aujourd'hui" No meeting for today + + + meeting_info_delete + "Supprimer la réunion" + Delete meeting + MeetingPage @@ -4378,163 +4398,163 @@ Expiration : %1 No meeting - + meeting_schedule_cancel_dialog_message "Souhaitez-vous annuler et supprimer cette réunion ?" Would you like to cancel and delete this meeting? - + meeting_schedule_delete_dialog_message Souhaitez-vous supprimer cette réunion ? Would you like to delete this meeting? - + meeting_schedule_cancel_and_delete_action "Annuler et supprimer" Cancel and delete - + meeting_schedule_delete_only_action "Supprimer seulement" Delete only - + meeting_schedule_delete_action "Supprimer" Delete - + back_action Retour Back - + meetings_list_title Réunions Meetings - + meetings_search_hint "Rechercher une réunion" Find meeting - + list_filter_no_result_found "Aucun résultat…" No result… - + meetings_empty_list "Aucune réunion" No meeting - - + + meeting_schedule_title "Nouvelle réunion" New meeting - + create Create - - - - - - + + + + + + information_popup_error_title Error - - + + meeting_schedule_mandatory_field_not_filled_toast Veuillez saisir un titre et sélectionner au moins un participant Please fill the title and select at least one participant - - + + meeting_schedule_duration_error_toast "La fin de la conférence doit être plus récente que son début" The end of the conference must be more recent than its beginning - - + + meeting_schedule_creation_in_progress "Création de la réunion en cours …" Creation in progress… - + meeting_info_created_toast "Réunion planifiée avec succès" Meeting successfully created - + meeting_failed_to_schedule_toast "Échec de création de la réunion !" Failed to create meeting! - + save Save - - + + saved "Enregistré" Saved - + meeting_info_updated_toast "Réunion mise à jour" Meeting updated - + meeting_schedule_edit_in_progress "Modification de la réunion en cours…" Meeting update in progress… - + meeting_failed_to_edit_toast "Échec de la modification de la réunion !" Failed to update meeting ! - + meeting_schedule_add_participants_title "Ajouter des participants" Add participants - + meeting_schedule_add_participants_apply Apply - + group_call_participant_selected "%n participant(s) sélectionné(s)" @@ -4543,31 +4563,31 @@ Expiration : %1 - + meeting_info_delete "Supprimer la réunion" Delete meeting - + meeting_address_copied_to_clipboard_toast "Adresse de la réunion copiée" Meeting URI copied - + meeting_schedule_timezone_title "Fuseau horaire" Timezone - + meeting_info_organizer_label "Organisateur" Organizer - + meeting_info_join_title "Rejoindre la réunion" Join meeting @@ -4913,13 +4933,13 @@ Expiration : %1 PhoneNumberInput - + prefix_phone_number_accessible_name %1 prefix %1 prefix - + number_phone_number_accessible_name %1 number %1 number @@ -5366,7 +5386,7 @@ To enable them in a commercial project, please contact us. - + transport "Transport" Transport @@ -5394,33 +5414,34 @@ To enable them in a commercial project, please contact us. Please enter a domain - + login_advanced_parameters_label Advanced parameters Advanced parameters - - + + login_proxy_server_url "Outbound SIP Proxy URI" Outbound SIP Proxy URI - + login_proxy_server_url_tooltip "If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it." If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it. - + + login_registrar_uri "Registrar URI" Registrar URI + - login_id "Authentication ID (if different)" Authentication ID (if different) @@ -5548,31 +5569,37 @@ To enable them in a commercial project, please contact us. Start a group call ? - + + unencrypted_conversation_warning + This conversation is not encrypted ! + This conversation is not encrypted ! + + + reply_to_label Reply to %1 Reply to %1 - + shared_medias_title Shared medias Shared medias - + shared_documents_title Shared documents Shared documents - + forward_to_title Forward to… Froward to… - + conversations_title Conversations Conversations @@ -5750,7 +5777,7 @@ To enable them in a commercial project, please contact us. Utils - + nSeconds %1 second @@ -5758,7 +5785,7 @@ To enable them in a commercial project, please contact us. - + nMinute %1 minute @@ -5766,43 +5793,43 @@ To enable them in a commercial project, please contact us. - + chat_message_forward_error Cannot forward an invalid message Cannot forward an invalid message - + info_popup_forward_message_error Could not forward message : %1 Could not forward message : %1 - + info_popup_send_forward_message_error_message Failed to create forward message Failed to create forward message - + chat_message_reply_error Cannot reply to invalid message Cannot reply to invalid message - + info_popup_reply_message_error Could not send reply message : %1 Could not send reply message : %1 - + info_popup_send_reply_message_error_message Failed to create reply message Failed to create reply message - + nHour %1 hour @@ -5810,8 +5837,8 @@ To enable them in a commercial project, please contact us. + - nDay %1 day @@ -5819,7 +5846,7 @@ To enable them in a commercial project, please contact us. - + nWeek %1 week @@ -5827,27 +5854,27 @@ To enable them in a commercial project, please contact us. - + 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 @@ -5860,8 +5887,8 @@ To enable them in a commercial project, please contact us. - - + + information_popup_error_title Error ---------- @@ -5874,7 +5901,7 @@ Failed to create 1-1 conversation with %1 ! Group call couldn't be created - + number_of_years %n an(s) @@ -5883,7 +5910,7 @@ Failed to create 1-1 conversation with %1 ! - + number_of_month "%n mois" @@ -5892,7 +5919,7 @@ Failed to create 1-1 conversation with %1 ! - + number_of_weeks %n semaine(s) @@ -5901,7 +5928,7 @@ Failed to create 1-1 conversation with %1 ! - + number_of_days %n jour(s) @@ -5910,25 +5937,25 @@ Failed to create 1-1 conversation with %1 ! - + today "Aujourd'hui" Today - + yesterday "Hier Yesterday - + duration_tomorrow Tomorrow Tomorrow - + duration_number_of_days %1 jour(s) @@ -5937,50 +5964,50 @@ Failed to create 1-1 conversation with %1 ! - + 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 ! - + recorder_error Error with the recorder Error with the recorder - - - + + + chat_error Error in the chat - - - - - - + + + + + + info_popup_error_title Error Error - + info_popup_send_voice_message_error_message Could not send voice message : %1 Could not send voice message : %1 - + info_popup_send_voice_message_sending_error_message Failed to create message from record Failed to create message from record @@ -6149,1117 +6176,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 diff --git a/Linphone/data/languages/fr_FR.ts b/Linphone/data/languages/fr_FR.ts index ec07833d..4bdec858 100644 --- a/Linphone/data/languages/fr_FR.ts +++ b/Linphone/data/languages/fr_FR.ts @@ -25,13 +25,13 @@ AbstractWindow - + contact_dialog_pick_phone_number_or_sip_address_title "Choisissez un numéro ou adresse SIP" Choisissez un numéro ou adresse SIP - + fps_counter %1 FPS @@ -938,7 +938,7 @@ Message - + contact_video_call_action "Appel Video" Appel Vidéo @@ -1454,200 +1454,200 @@ La fenêtre est sur le point d'être fermée. Cela terminera tous les appels en cours. - + call_can_be_trusted_toast "Appareil authentifié" Appareil authentifié - + call_dir Appel %1 - + call_ended Appel terminé Appel terminé - + conference_paused Meeting paused Réunion mise en pause - + call_paused Call paused Appel mis en pause - - + + call_srtp_point_to_point_encrypted Appel chiffré de point à point Appel chiffré de point à point - + call_zrtp_sas_validation_required Vérification nécessaire Vérification nécessaire - + call_zrtp_end_to_end_encrypted Appel chiffré de bout en bout Appel chiffré de bout en bout - + call_not_encrypted "Appel non chiffré" Appel non chiffré - - + + call_waiting_for_encryption_info Waiting for encryption En attente de chiffrement - + call_paused_by_remote Call paused by remote Appel mis en pause par votre correspondant - + conference_user_is_recording "You are recording the meeting" Vous enregistrez la réunion - + call_user_is_recording "You are recording the call" Vous enregistrez l'appel - + conference_remote_is_recording "Someone is recording the meeting" Un participant enregistre la réunion - + call_remote_recording "%1 is recording the call" %1 enregistre l'appel - + call_stop_recording "Stop recording" Arrêter l'enregistrement - + add Ajouter - + call_transfer_current_call_title "Transférer %1 à…" Transférer %1 à… - - + + call_transfer_confirm_dialog_tittle "Confirmer le transfert" Confirmer le transfert - - + + call_transfer_confirm_dialog_message "Vous allez transférer %1 à %2." Vous allez transférer %1 à %2. - + call_action_start_new_call "Nouvel appel" Nouvel appel - - + + call_action_show_dialer "Pavé numérique" Pavé numérique - + call_action_change_layout "Modifier la disposition" Modifier la disposition - + call_action_go_to_calls_list "Liste d'appel" Liste d'appel - + Merger tous les appels call_action_merge_calls Merger tous les appels - - + + call_action_go_to_settings "Paramètres" Paramètres - + conference_action_screen_sharing "Partage de votre écran" Partage de votre écran - + conference_share_link_title Partager le lien de la réunion Partager le lien de la réunion - + copied Copié Copié - + information_popup_meeting_address_copied_to_clipboard Le lien de la réunion a été copié dans le presse-papier Le lien de la réunion a été copié dans le presse-papier - - - + + + conference_participants_list_title "Participants (%1)" Participants (%1) - - + + group_call_participant_selected %1 participant sélectionné @@ -1655,194 +1655,194 @@ - + meeting_schedule_add_participants_title Ajouter des participants - + call_encryption_title Chiffrement Chiffrement - + open_statistic_panel_accessible_name Ouvrir le panneau de statistiques - + conference_user_is_sharing_screen "You are sharing your screen" Vous partagez votre écran - + call_stop_screen_sharing "Stop sharing" Arrêter le partage - + stop_recording_accessible_name Stop recording Arrêter l'enregistrement - + stop_screen_sharing_accessible_name "Stop screen sharing" Arrêter le partage d'écran - + call_stats_title Statistiques Statistiques - - + + call_action_end_call "Terminer l'appel" Terminer l'appel - - + + call_action_resume_call "Reprendre l'appel" Reprendre l'appel - - + + call_action_pause_call "Mettre l'appel en pause" Mettre l'appel en pause - - + + call_action_transfer_call "Transférer l'appel" Transférer l'appel - - + + call_action_start_new_call_hint "Initier un nouvel appel" Initier un nouvel appel - - + + call_display_call_list_hint "Afficher la liste d'appels" Afficher la liste d'appels - - + + call_deactivate_video_hint "Désactiver la vidéo" "Activer la vidéo" Désactiver la vidéo - - + + call_activate_video_hint Activer la vidéo - - + + call_activate_microphone "Activer le micro" Activer le micro - - + + call_deactivate_microphone "Désactiver le micro" Désactiver le micro - - + + call_share_screen_hint Partager l'écran… Partager l'écran… - - + + call_open_chat_hint Open chat… Ouvrir le chat… - - + + call_rise_hand_hint "Lever la main" Lever la main - - + + call_send_reaction_hint "Envoyer une réaction" Envoyer une réaction - - + + call_manage_participants_hint "Gérer les participants" Gérer les participants - - + + call_more_options_hint "Plus d'options…" Plus d'options… - + call_action_change_conference_layout "Modifier la disposition" Modifier la disposition - + call_action_full_screen "Mode Plein écran" Mode Plein écran - + call_action_stop_recording "Terminer l'enregistrement" Terminer l'enregistrement - + call_action_record "Enregistrer l'appel" Enregistrer l'appel - + call_activate_speaker_hint "Activer le son" Activer le son - + call_deactivate_speaker_hint "Désactiver le son" Désactiver le son @@ -1973,13 +1973,13 @@ ChatCore - + info_toast_deleted_title Deleted Supprimé - + info_toast_deleted_message_history Message history has been deleted L'historique des messages a été supprimé @@ -2232,19 +2232,19 @@ Error ChatMessageCore - + all_reactions_label "Reactions": all reactions for one message label Réactions - + info_toast_deleted_title Deleted Supprimé - + info_toast_deleted_message The message has been deleted Le message a été supprimé @@ -2304,46 +2304,60 @@ Error ChatMessagesListView - - + + popup_info_find_message_title Find message Trouver un message - + info_popup_no_result_message No result found Aucun résultat trouvé - + info_popup_first_result_message First result reached Premier résultat atteint - + info_popup_last_result_message Last result reached Dernier résultat atteint - + chat_message_list_encrypted_header_title End to end encrypted chat Conversation chiffrée de bout en bout - + + unencrypted_conversation_warning + This conversation is not encrypted ! + Cette conversation n'est pas chiffrée ! + + + 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. + Messages in this conversation are e2e encrypted. + Only your correspondent can decrypt them. Les messages de cette conversation sont chiffrés de bout en bout. Seul votre correspondant peut les déchiffrer. - + + chat_message_list_not_encrypted_header_message + Messages are not end to end encrypted, + may sure you don't share any sensitive information ! + Les messages ne sont pas chiffrés de bout en bout, + assurez-vous de ne pas partager d’informations sensibles ! + + + chat_message_is_writing_info %1 is writing… %1 est en train d'écrire… @@ -4351,17 +4365,23 @@ Expiration : %1 MeetingListView - + meeting_info_cancelled "Réunion annulée" Réunion annulée - + meetings_list_no_meeting_for_today "Aucune réunion aujourd'hui" Aucune réunion aujourd'hui + + + meeting_info_delete + "Supprimer la réunion" + Supprimer la réunion + MeetingPage @@ -4378,163 +4398,163 @@ Expiration : %1 Aucune réunion - + meeting_schedule_cancel_dialog_message "Souhaitez-vous annuler et supprimer cette réunion ?" Souhaitez-vous annuler et supprimer cette réunion ? - + meeting_schedule_delete_dialog_message Souhaitez-vous supprimer cette réunion ? Souhaitez-vous supprimer cette réunion ? - + meeting_schedule_cancel_and_delete_action "Annuler et supprimer" Annuler et supprimer - + meeting_schedule_delete_only_action "Supprimer seulement" Supprimer seulement - + meeting_schedule_delete_action "Supprimer" Supprimer - + back_action Retour Retour - + meetings_list_title Réunions Réunions - + meetings_search_hint "Rechercher une réunion" Rechercher une réunion - + list_filter_no_result_found "Aucun résultat…" Aucun résultat… - + meetings_empty_list "Aucune réunion" Aucune réunion - - + + meeting_schedule_title "Nouvelle réunion" Nouvelle réunion - + create Créer - - - - - - + + + + + + information_popup_error_title Erreur - - + + meeting_schedule_mandatory_field_not_filled_toast Veuillez saisir un titre et sélectionner au moins un participant Veuillez saisir un titre et sélectionner au moins un participant - - + + meeting_schedule_duration_error_toast "La fin de la conférence doit être plus récente que son début" La fin de la conférence doit être plus récente que son début - - + + meeting_schedule_creation_in_progress "Création de la réunion en cours …" Création de la réunion en cours… - + meeting_info_created_toast "Réunion planifiée avec succès" Réunion planifiée avec succès - + meeting_failed_to_schedule_toast "Échec de création de la réunion !" Échec de création de la réunion ! - + save Enregistrer - - + + saved "Enregistré" Enregistré - + meeting_info_updated_toast "Réunion mise à jour" Réunion mise à jour - + meeting_schedule_edit_in_progress "Modification de la réunion en cours…" Modification de la réunion en cours… - + meeting_failed_to_edit_toast "Échec de la modification de la réunion !" Échec de la modification de la réunion ! - + meeting_schedule_add_participants_title "Ajouter des participants" Ajouter des participants - + meeting_schedule_add_participants_apply Appliquer - + group_call_participant_selected "%n participant(s) sélectionné(s)" @@ -4543,31 +4563,31 @@ Expiration : %1 - + meeting_info_delete "Supprimer la réunion" Supprimer la réunion - + meeting_address_copied_to_clipboard_toast "Adresse de la réunion copiée" Adresse de la réunion copiée - + meeting_schedule_timezone_title "Fuseau horaire" Fuseau horaire - + meeting_info_organizer_label "Organisateur" Organisateur - + meeting_info_join_title "Rejoindre la réunion" Rejoindre la réunion @@ -4913,13 +4933,13 @@ Expiration : %1 PhoneNumberInput - + prefix_phone_number_accessible_name %1 prefix - + number_phone_number_accessible_name %1 number %1 indicatif téléphonique @@ -5366,7 +5386,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + transport "Transport" Transport @@ -5394,33 +5414,34 @@ Pour les activer dans un projet commercial, merci de nous contacter.Veuillez saisir un nom de domaine - + login_advanced_parameters_label Advanced parameters Paramètres avancés - - + + login_proxy_server_url "Outbound SIP Proxy URI" URI du proxy SIP sortant - + login_proxy_server_url_tooltip "If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it." Si ce champ est rempli, l’outbound proxy sera activé automatiquement. Laissez-le vide pour le désactiver. - + + login_registrar_uri "Registrar URI" Registrar URI + - login_id "Authentication ID (if different)" Identifiant de connexion (si différent) @@ -5548,31 +5569,37 @@ Pour les activer dans un projet commercial, merci de nous contacter.Démarrer un appel de groupe ? - + + unencrypted_conversation_warning + This conversation is not encrypted ! + Cette conversation n'est pas chiffrée ! + + + reply_to_label Reply to %1 Réponse à %1 - + shared_medias_title Shared medias Médias partagés - + shared_documents_title Shared documents Documents partagés - + forward_to_title Forward to… Transférer à… - + conversations_title Conversations Conversations @@ -5750,7 +5777,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. Utils - + nMinute %1 minute @@ -5758,7 +5785,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + nHour %1 heure @@ -5766,8 +5793,8 @@ Pour les activer dans un projet commercial, merci de nous contacter. + - nDay %1 jour @@ -5775,7 +5802,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + nWeek %1 semaine @@ -5783,7 +5810,7 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + nSeconds %1 seconde @@ -5791,27 +5818,27 @@ Pour les activer dans un projet commercial, merci de nous contacter. - + 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 @@ -5824,8 +5851,8 @@ Pour les activer dans un projet commercial, merci de nous contacter. - - + + information_popup_error_title Error ---------- @@ -5838,7 +5865,7 @@ Failed to create 1-1 conversation with %1 ! L'appel de groupe n'a pas pu être créé - + number_of_years %n an(s) @@ -5847,7 +5874,7 @@ Failed to create 1-1 conversation with %1 ! - + number_of_month "%n mois" @@ -5856,7 +5883,7 @@ Failed to create 1-1 conversation with %1 ! - + number_of_weeks %n semaine(s) @@ -5865,7 +5892,7 @@ Failed to create 1-1 conversation with %1 ! - + number_of_days %n jour(s) @@ -5874,25 +5901,25 @@ Failed to create 1-1 conversation with %1 ! - + today "Aujourd'hui" Aujourd'hui - + yesterday "Hier Hier - + duration_tomorrow Tomorrow Demain - + duration_number_of_days %1 jour(s) @@ -5901,86 +5928,86 @@ Failed to create 1-1 conversation with %1 ! - + 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 - + recorder_error Error with the recorder Erreur avec l'enregistreur - - - + + + chat_error Erreur dans le chat - + chat_message_forward_error Cannot forward an invalid message Impossible de transférer : message invalide - - - - - - + + + + + + info_popup_error_title Error Erreur - + info_popup_forward_message_error Could not forward message : %1 Impossible de transférer le message : %1 - + info_popup_send_forward_message_error_message Failed to create forward message Impossible de créer le message - + chat_message_reply_error Cannot reply to invalid message Impossible de répondre : message invalide - + info_popup_reply_message_error Could not send reply message : %1 Impossible d'envoyer la réponse : %1 - + info_popup_send_reply_message_error_message Failed to create reply message Impossible de créer le message - + info_popup_send_voice_message_error_message Could not send voice message : %1 Impossible d'envoyer le message vocal : %1 - + info_popup_send_voice_message_sending_error_message Failed to create message from record Impossible de créer le message vocal @@ -6149,1117 +6176,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/call/CallModel.cpp b/Linphone/model/call/CallModel.cpp index b46e1bd1..f9664cb0 100644 --- a/Linphone/model/call/CallModel.cpp +++ b/Linphone/model/call/CallModel.cpp @@ -56,7 +56,7 @@ void CallModel::accept(bool withVideo) { params->setRecordFile( Paths::getCapturesDirPath() .append(Utils::generateSavedFilename(QString::fromStdString(mMonitor->getToAddress()->getUsername()), "")) - .append(".smff") + .append(".mkv") .toStdString()); // Answer with local call address. auto localAddress = mMonitor->getCallLog()->getLocalAddress(); diff --git a/Linphone/model/chat/ChatModel.cpp b/Linphone/model/chat/ChatModel.cpp index e1bba568..a8d9a52f 100644 --- a/Linphone/model/chat/ChatModel.cpp +++ b/Linphone/model/chat/ChatModel.cpp @@ -36,8 +36,8 @@ ChatModel::ChatModel(const std::shared_ptr &chatroom, QObjec mustBeInLinphoneThread(getClassName()); auto coreModel = CoreModel::getInstance(); if (coreModel) - connect(coreModel.get(), &CoreModel::messageReadInChatRoom, this, - [this](std::shared_ptr chatroom) { + connect(coreModel.get(), &CoreModel::chatRoomRead, this, + [this](const std::shared_ptr &core, std::shared_ptr chatroom) { if (chatroom == mMonitor) emit messagesRead(); }); } @@ -90,7 +90,7 @@ std::list> ChatModel::getChatMessageHisto return res; } -int ChatModel::getHistorySizeEvents() { +int ChatModel::getHistorySizeEvents() const { return mMonitor->getHistoryEventsSize(); } diff --git a/Linphone/model/chat/ChatModel.hpp b/Linphone/model/chat/ChatModel.hpp index 0e1cfbbc..9ed20975 100644 --- a/Linphone/model/chat/ChatModel.hpp +++ b/Linphone/model/chat/ChatModel.hpp @@ -57,7 +57,7 @@ public: std::list> getHistoryRangeNear(int before, int after, const std::shared_ptr firstEvent, int filters); std::list> getChatMessageHistory() const; - int getHistorySizeEvents(); + int getHistorySizeEvents() const; QString getIdentifier() const; void deleteHistory(); void deleteMessage(std::shared_ptr message); diff --git a/Linphone/model/tool/ToolModel.cpp b/Linphone/model/tool/ToolModel.cpp index 629f8d98..c2e69e78 100644 --- a/Linphone/model/tool/ToolModel.cpp +++ b/Linphone/model/tool/ToolModel.cpp @@ -330,7 +330,7 @@ bool ToolModel::createCall(const QString &sipAddress, params->setRecordFile( Paths::getCapturesDirPath() .append(Utils::generateSavedFilename(QString::fromStdString(address->getUsername()), "")) - .append(".smff") + .append(".mkv") .toStdString()); } diff --git a/Linphone/tool/Utils.cpp b/Linphone/tool/Utils.cpp index 2cf23f10..cfa390aa 100644 --- a/Linphone/tool/Utils.cpp +++ b/Linphone/tool/Utils.cpp @@ -233,8 +233,7 @@ void Utils::closeCallsWindow() { } QQuickWindow *Utils::getMainWindow() { - auto win = App::getInstance()->getMainWindow(); - return win; + return App::getInstance()->getMainWindow(); } QQuickWindow *Utils::getLastActiveWindow() { diff --git a/Linphone/view/Control/Button/Button.qml b/Linphone/view/Control/Button/Button.qml index 42984455..09d53d33 100644 --- a/Linphone/view/Control/Button/Button.qml +++ b/Linphone/view/Control/Button/Button.qml @@ -120,13 +120,11 @@ Control.Button { text: mainItem.text textFormat: mainItem.textFormat maximumLineCount: 1 - color: mainItem.checkable && mainItem.checked - ? mainItem.checkedColor || mainItem.pressedColor - : mainItem.pressed - ? mainItem.pressedTextColor - : mainItem.hovered - ? mainItem.hoveredTextColor - : mainItem.textColor + color: mainItem.checkable && mainItem.checked || mainItem.pressed + ? mainItem.pressedTextColor + : mainItem.hovered + ? mainItem.hoveredTextColor + : mainItem.textColor font { pixelSize: mainItem.textSize weight: mainItem.textWeight diff --git a/Linphone/view/Control/Button/CountryIndicatorCombobox.qml b/Linphone/view/Control/Button/CountryIndicatorCombobox.qml index dbb685f4..7625941a 100644 --- a/Linphone/view/Control/Button/CountryIndicatorCombobox.qml +++ b/Linphone/view/Control/Button/CountryIndicatorCombobox.qml @@ -4,210 +4,193 @@ import QtQuick.Layouts import QtQuick.Effects import Linphone -ColumnLayout { +Control.ComboBox { id: mainItem - property string label: "" - readonly property string currentText: combobox.model.getAt(combobox.currentIndex) ? "+" + combobox.model.getAt(combobox.currentIndex).countryCallingCode : "" property string defaultCallingCode: "" property bool enableBackgroundColors: false - - Text { - visible: mainItem.label.length > 0 - verticalAlignment: Text.AlignVCenter - text: mainItem.label - color: combobox.activeFocus ? DefaultStyle.main1_500_main : DefaultStyle.main2_600 - font { - pixelSize: Typography.p2.pixelSize - weight: Typography.p2.weight - bold: true + property string text: combobox.model.getAt(combobox.currentIndex) ? combobox.model.getAt(combobox.currentIndex).countryCallingCode : "" + currentIndex: phoneNumberModel.count > 0 ? Math.max(0, phoneNumberModel.findIndexByCountryCallingCode(defaultCallingCode)) : -1 + Accessible.name: mainItem.Accessible.name + model: PhoneNumberProxy { + id: phoneNumberModel + } + background: Rectangle { + anchors.fill: parent + radius: Math.round(63 * DefaultStyle.dp) + color: mainItem.enableBackgroundColor ? DefaultStyle.grey_100 : "transparent" + border.color: mainItem.enableBackgroundColors + ? (mainItem.errorMessage.length > 0 + ? DefaultStyle.danger_500_main + : textField.activeFocus + ? DefaultStyle.main1_500_main + : DefaultStyle.grey_200) + : "transparent" + } + contentItem: RowLayout { + readonly property var currentItem: combobox.model.getAt(combobox.currentIndex) + spacing: 0// Math.round(5 * DefaultStyle.dp) + Text { + id: selectedItemFlag + visible: text.length > 0 + font.pixelSize: Math.round(21 * DefaultStyle.dp) + text: parent.currentItem ? parent.currentItem.flag : "" + font.family: DefaultStyle.flagFont + } + // Rectangle{ + // id: mask + // visible: false + // layer.enabled: true + // anchors.centerIn: selectedItemFlag + // radius: Math.round(600 * DefaultStyle.dp) + // width: selectedItemFlag.width/2 + // height: selectedItemFlag.height/2 + // } + // MultiEffect { + // visible: selectedItemFlag.text.length > 0 + // anchors.centerIn: selectedItemFlag + // clip: true + // source: selectedItemFlag + // maskEnabled: true + // width: selectedItemFlag.width/2 + // height: selectedItemFlag.height/2 + // maskSource: mask + // } + Text { + id: countryCallingcode + text: parent.currentItem ? "+" + parent.currentItem.countryCallingCode : "" + color: DefaultStyle.main2_600 + elide: Text.ElideRight + font: Typography.p1 } } - Control.ComboBox { - id: combobox - currentIndex: phoneNumberModel.count > 0 ? Math.max(0, phoneNumberModel.findIndexByCountryCallingCode(defaultCallingCode)) : -1 - Accessible.name: mainItem.Accessible.name - model: PhoneNumberProxy { - id: phoneNumberModel - } - background: Rectangle { - implicitWidth: mainItem.implicitWidth - implicitHeight: mainItem.implicitHeight - radius: Math.round(63 * DefaultStyle.dp) - color: mainItem.enableBackgroundColor ? DefaultStyle.grey_100 : "transparent" - border.color: mainItem.enableBackgroundColors - ? (mainItem.errorMessage.length > 0 - ? DefaultStyle.danger_500_main - : textField.activeFocus - ? DefaultStyle.main1_500_main - : DefaultStyle.grey_200) - : "transparent" - } - contentItem: Item { - readonly property var currentItem: combobox.model.getAt(combobox.currentIndex) - anchors.leftMargin: Math.round(15 * DefaultStyle.dp) - Text { - id: selectedItemFlag - visible: text.length > 0 - font.pixelSize: Math.round(21 * DefaultStyle.dp) - text: parent.currentItem ? parent.currentItem.flag : "" - font.family: DefaultStyle.flagFont - anchors.rightMargin: Math.round(5 * DefaultStyle.dp) - anchors.verticalCenter: parent.verticalCenter - } - // Rectangle{ - // id: mask - // visible: false - // layer.enabled: true - // anchors.centerIn: selectedItemFlag - // radius: Math.round(600 * DefaultStyle.dp) - // width: selectedItemFlag.width/2 - // height: selectedItemFlag.height/2 - // } - // MultiEffect { - // visible: selectedItemFlag.text.length > 0 - // anchors.centerIn: selectedItemFlag - // clip: true - // source: selectedItemFlag - // maskEnabled: true - // width: selectedItemFlag.width/2 - // height: selectedItemFlag.height/2 - // maskSource: mask - // } - Text { - leftPadding: Math.round(5 * DefaultStyle.dp) - text: parent.currentItem ? "+" + parent.currentItem.countryCallingCode : "" - color: DefaultStyle.main2_600 + indicator: EffectImage { + id: indicImage + z: 1 + anchors.right: parent.right + anchors.rightMargin: Math.round(15 * DefaultStyle.dp) + anchors.verticalCenter: parent.verticalCenter + imageSource: AppIcons.downArrow + width: Math.round(15 * DefaultStyle.dp) + height: Math.round(15 * DefaultStyle.dp) + fillMode: Image.PreserveAspectFit + colorizationColor: mainItem.indicatorColor + } + + popup: Control.Popup { + id: listPopup + y: combobox.height - 1 + width: Math.round(311 * DefaultStyle.dp) + height: Math.round(250 * DefaultStyle.dp) + + contentItem: ListView { + id: listView + clip: true + anchors.fill: parent + model: PhoneNumberProxy{} + currentIndex: combobox.highlightedIndex >= 0 ? combobox.highlightedIndex : 0 + keyNavigationEnabled: true + keyNavigationWraps: true + maximumFlickVelocity: 1500 + spacing: Math.round(10 * DefaultStyle.dp) + highlight: Rectangle { + anchors.left: parent.left anchors.right: parent.right - anchors.left: selectedItemFlag.right - anchors.verticalCenter: parent.verticalCenter - elide: Text.ElideRight - font: Typography.p1 - } - } - - indicator: EffectImage { - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - imageSource: AppIcons.downArrow - colorizationColor: DefaultStyle.main2_600 - } - - popup: Control.Popup { - id: listPopup - y: combobox.height - 1 - width: Math.round(311 * DefaultStyle.dp) - height: Math.round(250 * DefaultStyle.dp) - - contentItem: ListView { - id: listView - clip: true - anchors.fill: parent - model: PhoneNumberProxy{} - currentIndex: combobox.highlightedIndex >= 0 ? combobox.highlightedIndex : 0 - keyNavigationEnabled: true - keyNavigationWraps: true - maximumFlickVelocity: 1500 - spacing: Math.round(10 * DefaultStyle.dp) - highlight: Rectangle { - anchors.left: parent.left - anchors.right: parent.right - width: listView.width - height: listView.height - color: DefaultStyle.main2_300 - // radius: Math.round(15 * DefaultStyle.dp) - } - - delegate: Item { - width: listView.width - height: contentLayout.implicitHeight - RowLayout { - id: contentLayout - anchors.fill: parent - anchors.leftMargin: Math.round(20 * DefaultStyle.dp) - spacing: 0 - - Text { - id: delegateImg - visible: text.length > 0 - text: $modelData.flag - font { - pixelSize: Math.round(28 * DefaultStyle.dp) - family: DefaultStyle.flagFont - } - } - - Text { - id: countryText - text: $modelData.country - elide: Text.ElideRight - color: DefaultStyle.main2_500_main - font { - pixelSize: Typography.p1.pixelSize - weight: Typography.p1.weight - } - } - - Rectangle { - id: separator - width: Math.max(Math.round(1 * DefaultStyle.dp), 1) - height: combobox.height / 2 - color: DefaultStyle.main2_500_main - } - - Text { - text: "+" + $modelData.countryCallingCode - elide: Text.ElideRight - color: DefaultStyle.main2_500_main - font { - pixelSize: Typography.p1.pixelSize - weight: Typography.p1.weight - } - } - Item { - Layout.fillWidth: true - } - } - MouseArea { - anchors.fill: parent - hoverEnabled: true - Rectangle { - anchors.fill: parent - opacity: 0.1 - radius: Math.round(15 * DefaultStyle.dp) - color: DefaultStyle.main2_500_main - visible: parent.containsMouse - } - onClicked: { - combobox.currentIndex = index - listPopup.close() - } - } - } - Control.ScrollIndicator.vertical: Control.ScrollIndicator { } + width: listView.width + height: listView.height + color: DefaultStyle.main2_300 + // radius: Math.round(15 * DefaultStyle.dp) } - onOpened: { - listView.positionViewAtIndex(listView.currentIndex, ListView.Center) - } - - background: Item { - anchors.fill: parent - Rectangle { - id: popupBg + delegate: Item { + width: listView.width + height: contentLayout.implicitHeight + RowLayout { + id: contentLayout anchors.fill: parent - radius: Math.round(15 * DefaultStyle.dp) - color: DefaultStyle.grey_100 + anchors.leftMargin: Math.round(20 * DefaultStyle.dp) + spacing: Math.round(5 * DefaultStyle.dp) + + Text { + id: delegateImg + visible: text.length > 0 + text: $modelData.flag + font { + pixelSize: Math.round(28 * DefaultStyle.dp) + family: DefaultStyle.flagFont + } + } + + Text { + id: countryText + text: $modelData.country + elide: Text.ElideRight + color: DefaultStyle.main2_500_main + font { + pixelSize: Typography.p1.pixelSize + weight: Typography.p1.weight + } + } + + Rectangle { + id: separator + width: Math.max(Math.round(1 * DefaultStyle.dp), 1) + height: combobox.height / 2 + color: DefaultStyle.main2_500_main + } + + Text { + text: "+" + $modelData.countryCallingCode + elide: Text.ElideRight + color: DefaultStyle.main2_500_main + font { + pixelSize: Typography.p1.pixelSize + weight: Typography.p1.weight + } + } + Item { + Layout.fillWidth: true + } } - MultiEffect { - anchors.fill: popupBg - source: popupBg - shadowEnabled: true - shadowColor: DefaultStyle.grey_1000 - shadowBlur: 0.1 - shadowOpacity: 0.1 + MouseArea { + anchors.fill: parent + hoverEnabled: true + Rectangle { + anchors.fill: parent + opacity: 0.1 + radius: Math.round(15 * DefaultStyle.dp) + color: DefaultStyle.main2_500_main + visible: parent.containsMouse + } + onClicked: { + combobox.currentIndex = index + listPopup.close() + } } } + Control.ScrollIndicator.vertical: Control.ScrollIndicator { } + } + + onOpened: { + listView.positionViewAtIndex(listView.currentIndex, ListView.Center) + } + + background: Item { + anchors.fill: parent + Rectangle { + id: popupBg + anchors.fill: parent + radius: Math.round(15 * DefaultStyle.dp) + color: DefaultStyle.grey_100 + } + MultiEffect { + anchors.fill: popupBg + source: popupBg + shadowEnabled: true + shadowColor: DefaultStyle.grey_1000 + shadowBlur: 0.1 + shadowOpacity: 0.1 + } } } } diff --git a/Linphone/view/Control/Container/Call/CallHistoryLayout.qml b/Linphone/view/Control/Container/Call/CallHistoryLayout.qml index 8c04c7d2..cd67b8fe 100644 --- a/Linphone/view/Control/Container/Call/CallHistoryLayout.qml +++ b/Linphone/view/Control/Container/Call/CallHistoryLayout.qml @@ -149,8 +149,12 @@ ColumnLayout { button.onClicked: { console.debug("[CallHistoryLayout.qml] Open conversation") if (mainItem.specificAddress === "") { - mainWindow.displayChatPage(mainItem.contact.core.defaultAddress) - } else mainWindow.displayChatPage(mainItem.specificAddress) + mainWindow.sendMessageToContact(mainItem.contact) + } + else { + console.log("specific address", mainItem.specificAddress) + mainWindow.displayChatPage(mainItem.specificAddress) + } } } LabelButton { diff --git a/Linphone/view/Control/Display/Chat/ChatListView.qml b/Linphone/view/Control/Display/Chat/ChatListView.qml index df0b9960..866c5a98 100644 --- a/Linphone/view/Control/Display/Chat/ChatListView.qml +++ b/Linphone/view/Control/Display/Chat/ChatListView.qml @@ -319,7 +319,7 @@ ListView { visible: modelData != undefined && modelData?.core.isBasic Layout.preferredWidth: visible ? 14 * DefaultStyle.dp : 0 Layout.preferredHeight: 14 * DefaultStyle.dp - colorizationColor: DefaultStyle.warning_500_main + colorizationColor: DefaultStyle.warning_700 imageSource: AppIcons.lockSimpleOpen } EffectImage { diff --git a/Linphone/view/Control/Display/Chat/ChatMessagesListView.qml b/Linphone/view/Control/Display/Chat/ChatMessagesListView.qml index 81aa3994..2acc3b41 100644 --- a/Linphone/view/Control/Display/Chat/ChatMessagesListView.qml +++ b/Linphone/view/Control/Display/Chat/ChatMessagesListView.qml @@ -16,6 +16,7 @@ ListView { property int lastIndexFoundWithFilter: -1 property real busyIndicatorSize: Math.round(60 * DefaultStyle.dp) property bool loading: false + property bool isEncrypted: chat && chat.core.isEncrypted verticalLayoutDirection: ListView.BottomToTop signal showReactionsForMessageRequested(ChatMessageGui chatMessage) @@ -127,7 +128,7 @@ ListView { } footer: Item { - visible: mainItem.chat && !mainItem.loading && mainItem.chat.core.isEncrypted && !eventLogProxy.haveMore + visible: mainItem.chat && !mainItem.loading height: visible ? headerMessage.height + headerMessage.topMargin + headerMessage.bottomMargin : Math.round(30 * DefaultStyle.dp) width: headerMessage.width anchors.horizontalCenter: parent.horizontalCenter @@ -149,24 +150,30 @@ ListView { EffectImage { Layout.preferredWidth: Math.round(23 * DefaultStyle.dp) Layout.preferredHeight: Math.round(23 * DefaultStyle.dp) - imageSource: AppIcons.lockSimple - colorizationColor: DefaultStyle.info_500_main + imageSource: mainItem.isEncrypted ? AppIcons.lockSimple : AppIcons.lockSimpleOpen + colorizationColor: mainItem.isEncrypted ? DefaultStyle.info_500_main : DefaultStyle.warning_700 } ColumnLayout { spacing: Math.round(2 * DefaultStyle.dp) Text { - //: End to end encrypted chat - text: qsTr("chat_message_list_encrypted_header_title") + text: mainItem.isEncrypted + //: End to end encrypted chat + ? qsTr("chat_message_list_encrypted_header_title") + //: This conversation is not encrypted ! + : qsTr("unencrypted_conversation_warning") Layout.fillWidth: true - color: DefaultStyle.info_500_main + color: mainItem.isEncrypted ? DefaultStyle.info_500_main : DefaultStyle.warning_700 font { pixelSize: Typography.p2.pixelSize weight: Typography.p2.weight } } Text { - //: Les messages de cette conversation sont chiffrés de bout \n en bout. Seul votre correspondant peut les déchiffrer. - text: qsTr("chat_message_list_encrypted_header_message") + text: mainItem.isEncrypted + //: Messages in this conversation are e2e encrypted. \n Only your correspondent can decrypt them. + ? qsTr("chat_message_list_encrypted_header_message") + //: Messages are not end to end encrypted, \n may sure you don't share any sensitive information ! + : qsTr("chat_message_list_not_encrypted_header_message") Layout.fillWidth: true color: DefaultStyle.grey_400 font { @@ -178,7 +185,7 @@ ListView { } } } - footerPositioning: ListView.PullBackFooter + footerPositioning: mainItem.contentHeight > mainItem.height ? ListView.InlineFooter : ListView.PullBackFooter headerPositioning: ListView.OverlayHeader header: Control.Control { visible: composeLayout.composingName !== "" && composeLayout.composingName !== undefined diff --git a/Linphone/view/Control/Display/Chat/FileView.qml b/Linphone/view/Control/Display/Chat/FileView.qml index a88b37f7..1db5ed52 100644 --- a/Linphone/view/Control/Display/Chat/FileView.qml +++ b/Linphone/view/Control/Display/Chat/FileView.qml @@ -119,7 +119,7 @@ Item { width: Math.round(24 * DefaultStyle.dp) height: Math.round(24 * DefaultStyle.dp) imageSource: AppIcons.playFill - colorizationColor: DefaultStyle.main2_000 + colorizationColor: DefaultStyle.main2_0 } Text { z: parent.z + 1 diff --git a/Linphone/view/Control/Display/Meeting/MeetingListView.qml b/Linphone/view/Control/Display/Meeting/MeetingListView.qml index 7f320884..c599ad60 100644 --- a/Linphone/view/Control/Display/Meeting/MeetingListView.qml +++ b/Linphone/view/Control/Display/Meeting/MeetingListView.qml @@ -8,6 +8,7 @@ import QtQml import UtilsCpp import 'qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js' as Utils +import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle ListView { id: mainItem @@ -24,6 +25,8 @@ ListView { spacing: Math.round(8 * DefaultStyle.dp) highlightFollowsCurrentItem: false + + signal meetingDeletionRequested(ConferenceInfoGui confInfo, bool canCancel) function selectIndex(index){ mainItem.currentIndex = index @@ -163,7 +166,7 @@ ListView { visible: !mainItem.loading height: Math.round(63 * DefaultStyle.dp) + (!isFirst && dateDay.visible ? topOffset : 0) width: mainItem.width - enabled: !isCanceled && haveModel + enabled: haveModel property var itemGui: $modelData // Do not use itemAtIndex because of caching items. Using getAt ensure to have a GUI @@ -307,12 +310,42 @@ ListView { } } MouseArea { + id: mouseArea hoverEnabled: mainItem.hoverEnabled anchors.fill: parent - cursorShape: Qt.PointingHandCursor + cursorShape: itemDelegate.isCanceled ? Qt.ArrowCursor : Qt.PointingHandCursor visible: itemDelegate.haveModel - onClicked: { - mainItem.selectIndex(index) + acceptedButtons: Qt.LeftButton | Qt.RightButton + onClicked: (mouse) => { + console.log("clicked", mouse.button) + if (mouse.button === Qt.RightButton) { + console.log("open popup") + deletePopup.x = mouse.x + deletePopup.y = mouse.y + deletePopup.open() + } + else if (!itemDelegate.isCanceled) mainItem.selectIndex(index) + } + Popup { + id: deletePopup + parent: mouseArea + padding: Utils.getSizeWithScreenRatio(10) + closePolicy: Popup.CloseOnPressOutsideParent | Popup.CloseOnPressOutside | Popup.CloseOnEscape + contentItem: IconLabelButton { + style: ButtonStyle.hoveredBackgroundRed + property var isMeObj: UtilsCpp.isMe(itemDelegate.itemGui?.core?.organizerAddress) + property bool canCancel: isMeObj && isMeObj.value && itemDelegate.itemGui?.core?.state !== LinphoneEnums.ConferenceInfoState.Cancelled + icon.source: AppIcons.trashCan + //: "Supprimer la réunion" + text: qsTr("meeting_info_delete") + + onClicked: { + if (itemDelegate.itemGui) { + mainItem.meetingDeletionRequested(itemDelegate.itemGui, canCancel) + deletePopup.close() + } + } + } } } } diff --git a/Linphone/view/Control/Input/Chat/ChatDroppableTextArea.qml b/Linphone/view/Control/Input/Chat/ChatDroppableTextArea.qml index 7534b8dc..03a483dd 100644 --- a/Linphone/view/Control/Input/Chat/ChatDroppableTextArea.qml +++ b/Linphone/view/Control/Input/Chat/ChatDroppableTextArea.qml @@ -277,7 +277,7 @@ Control.Control { Rectangle { id: hoverContent anchors.fill: parent - color: DefaultStyle.main2_000 + color: DefaultStyle.main2_0 visible: false radius: Math.round(20 * DefaultStyle.dp) diff --git a/Linphone/view/Control/Input/PhoneNumberInput.qml b/Linphone/view/Control/Input/PhoneNumberInput.qml index f45567c6..63ecb041 100644 --- a/Linphone/view/Control/Input/PhoneNumberInput.qml +++ b/Linphone/view/Control/Input/PhoneNumberInput.qml @@ -1,5 +1,5 @@ import QtQuick -import QtQuick.Controls.Basic +import QtQuick.Controls.Basic as Control import QtQuick.Layouts import Linphone import CustomControls 1.0 @@ -15,10 +15,12 @@ ColumnLayout { property real textInputWidth: width property string initialPhoneNumber readonly property string phoneNumber: textField.text - readonly property string countryCode: combobox.currentText + readonly property string countryCode: combobox.text property string defaultCallingCode property bool keyboardFocus: FocusHelper.keyboardFocus + spacing: Math.round(5 * DefaultStyle.dp) + Text { visible: label.length > 0 verticalAlignment: Text.AlignVCenter @@ -30,13 +32,13 @@ ColumnLayout { } } - Item { - Layout.preferredWidth: contentBackground.width - Layout.preferredHeight: contentBackground.height - Rectangle { + Control.Control { + Layout.preferredWidth: mainItem.width + Layout.preferredHeight: Math.round(49 * DefaultStyle.dp) + leftPadding: Math.round(16 * DefaultStyle.dp) + background: Rectangle { id: contentBackground - width: mainItem.textInputWidth - height: Math.round(49 * DefaultStyle.dp) + anchors.fill: parent radius: Math.round(63 * DefaultStyle.dp) color: DefaultStyle.grey_100 border.color: mainItem.errorMessage.length > 0 @@ -44,52 +46,51 @@ ColumnLayout { : (textField.hasActiveFocus || combobox.hasActiveFocus) ? DefaultStyle.main1_500_main : DefaultStyle.grey_200 - RowLayout { - anchors.fill: parent - CountryIndicatorCombobox { - id: combobox - implicitWidth: Math.round(110 * DefaultStyle.dp) - defaultCallingCode: mainItem.defaultCallingCode - property bool keyboardFocus: FocusHelper.keyboardFocus - //: %1 prefix - Accessible.name: qsTr("prefix_phone_number_accessible_name").arg(mainItem.Accessible.name) - } - Rectangle { - Layout.preferredWidth: Math.max(Math.round(1 * DefaultStyle.dp), 1) - Layout.fillHeight: true - Layout.topMargin: Math.round(10 * DefaultStyle.dp) - Layout.bottomMargin: Math.round(10 * DefaultStyle.dp) - color: DefaultStyle.main2_600 - } - TextField { - id: textField - Layout.fillWidth: true - placeholderText: mainItem.placeholderText - background: Item{} - initialText: initialPhoneNumber - validator: RegularExpressionValidator{ regularExpression: /[0-9]+/} - property bool keyboardFocus: FocusHelper.keyboardFocus - //: %1 number - Accessible.name: qsTr("number_phone_number_accessible_name").arg(mainItem.Accessible.name) - } + } + contentItem: RowLayout { + CountryIndicatorCombobox { + id: combobox + implicitWidth: Math.round(110 * DefaultStyle.dp) + Layout.fillHeight: true + defaultCallingCode: mainItem.defaultCallingCode + property bool keyboardFocus: FocusHelper.keyboardFocus + //: %1 prefix + Accessible.name: qsTr("prefix_phone_number_accessible_name").arg(mainItem.Accessible.name) + } + Rectangle { + Layout.preferredWidth: Math.max(Math.round(1 * DefaultStyle.dp), 1) + Layout.fillHeight: true + Layout.topMargin: Math.round(10 * DefaultStyle.dp) + Layout.bottomMargin: Math.round(10 * DefaultStyle.dp) + color: DefaultStyle.main2_600 + } + TextField { + id: textField + Layout.fillWidth: true + placeholderText: mainItem.placeholderText + background: Item{} + initialText: initialPhoneNumber + validator: RegularExpressionValidator{ regularExpression: /[0-9]+/} + property bool keyboardFocus: FocusHelper.keyboardFocus + //: %1 number + Accessible.name: qsTr("number_phone_number_accessible_name").arg(mainItem.Accessible.name) } } - TemporaryText { - id: errorText - anchors.top: contentBackground.bottom - // visible: mainItem.enableErrorText - text: mainItem.errorMessage - color: DefaultStyle.danger_500_main - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - wrapMode: Text.Wrap - font { - pixelSize: Math.round(13 * DefaultStyle.dp) - family: DefaultStyle.defaultFont - bold: true - } - Layout.preferredWidth: mainItem.textInputWidth - // Layout.preferredWidth: implicitWidth + } + TemporaryText { + id: errorText + Layout.fillWidth: true + Layout.topMargin: Math.round(-3 * DefaultStyle.dp) + // visible: mainItem.enableErrorText + text: mainItem.errorMessage + color: DefaultStyle.danger_500_main + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + wrapMode: Text.Wrap + font { + pixelSize: Math.round(13 * DefaultStyle.dp) + family: DefaultStyle.defaultFont + bold: true } } } diff --git a/Linphone/view/Page/Form/Chat/SelectedChatView.qml b/Linphone/view/Page/Form/Chat/SelectedChatView.qml index 2762490f..c3b4c00e 100644 --- a/Linphone/view/Page/Form/Chat/SelectedChatView.qml +++ b/Linphone/view/Page/Form/Chat/SelectedChatView.qml @@ -102,14 +102,23 @@ FocusScope { capitalization: Font.Capitalize } } - EffectImage { + RowLayout { visible: mainItem.chat != undefined && mainItem.chat.core.isBasic - Layout.preferredWidth: visible ? 14 * DefaultStyle.dp : 0 - Layout.preferredHeight: 14 * DefaultStyle.dp - colorizationColor: DefaultStyle.warning_500_main - imageSource: AppIcons.lockSimpleOpen + spacing: Math.round(8 * DefaultStyle.dp) + EffectImage { + Layout.preferredWidth: visible ? 14 * DefaultStyle.dp : 0 + Layout.preferredHeight: 14 * DefaultStyle.dp + colorizationColor: DefaultStyle.warning_700 + imageSource: AppIcons.lockSimpleOpen + } + Text { + Layout.fillWidth: true + color: DefaultStyle.warning_700 + //: This conversation is not encrypted ! + text: qsTr("unencrypted_conversation_warning") + font: Typography.p2 + } } - Layout.fillWidth: true EffectImage { visible: mainItem.chat?.core.muted || false Layout.preferredWidth: 20 * DefaultStyle.dp diff --git a/Linphone/view/Page/Form/Register/RegisterPage.qml b/Linphone/view/Page/Form/Register/RegisterPage.qml index aad98737..b42fac98 100644 --- a/Linphone/view/Page/Form/Register/RegisterPage.qml +++ b/Linphone/view/Page/Form/Register/RegisterPage.qml @@ -321,9 +321,9 @@ LoginLayout { console.log("[RegisterPage] User: Call register") mainItem.browserValidationRequested() if (bar.currentIndex === 0) - RegisterPageCpp.registerNewAccount(usernameInput.text, pwdInput.text, "", phoneNumberInput.completePhoneNumber) + RegisterPageCpp.registerNewAccount(usernameInput.text, pwdInput.text, "", phoneNumberInput.countryCode, phoneNumberInput.phoneNumber) else - RegisterPageCpp.registerNewAccount(usernameInput.text, pwdInput.text, emailInput.text, "") + RegisterPageCpp.registerNewAccount(usernameInput.text, pwdInput.text, emailInput.text) } } } diff --git a/Linphone/view/Page/Main/Call/CallSettingsPanel.qml b/Linphone/view/Page/Main/Call/CallSettingsPanel.qml index 870b3a3b..034d21e9 100644 --- a/Linphone/view/Page/Main/Call/CallSettingsPanel.qml +++ b/Linphone/view/Page/Main/Call/CallSettingsPanel.qml @@ -153,7 +153,7 @@ Control.Page { padding: 0 contentItem: Loader { id: contentLoader - width: contentcontrol.width - contentControl.rightPadding + width: contentControl.width - contentControl.rightPadding } } } diff --git a/Linphone/view/Page/Main/Contact/ContactPage.qml b/Linphone/view/Page/Main/Contact/ContactPage.qml index 208c8e4d..c1ad5566 100644 --- a/Linphone/view/Page/Main/Contact/ContactPage.qml +++ b/Linphone/view/Page/Main/Contact/ContactPage.qml @@ -411,7 +411,7 @@ FriendGui{ button.icon.height: Math.round(24 * DefaultStyle.dp) button.onClicked: { console.debug("[ContactLayout.qml] Open conversation") - mainWindow.displayChatPage(contactDetail.contact.core.defaultAddress) + mainWindow.sendMessageToContact(contactDetail.contact) } } LabelButton { diff --git a/Linphone/view/Page/Main/Meeting/MeetingPage.qml b/Linphone/view/Page/Main/Meeting/MeetingPage.qml index 45dbb2bd..06e0b169 100644 --- a/Linphone/view/Page/Main/Meeting/MeetingPage.qml +++ b/Linphone/view/Page/Main/Meeting/MeetingPage.qml @@ -81,6 +81,7 @@ AbstractMainPage { Dialog { id: cancelAndDeleteConfDialog + property ConferenceInfoGui confInfoToDelete property bool cancel: false signal cancelRequested() // width: Math.round(278 * DefaultStyle.dp) @@ -88,6 +89,13 @@ AbstractMainPage { text: cancel ? qsTr("meeting_schedule_cancel_dialog_message") //: Souhaitez-vous supprimer cette réunion ? : qsTr("meeting_schedule_delete_dialog_message") + + onCancelRequested: { + confInfoToDelete.core.lCancelConferenceInfo() + } + onAccepted: { + confInfoToDelete.core.lDeleteConferenceInfo() + } buttons: [ BigButton { visible: cancelAndDeleteConfDialog.cancel @@ -261,6 +269,11 @@ AbstractMainPage { onSelectedConferenceChanged: { mainItem.selectedConference = selectedConference } + onMeetingDeletionRequested: (confInfo, canCancel) => { + cancelAndDeleteConfDialog.confInfoToDelete = confInfo + cancelAndDeleteConfDialog.cancel = canCancel + cancelAndDeleteConfDialog.open() + } Keys.onPressed: (event) => { if(event.key == Qt.Key_Escape){ @@ -691,21 +704,12 @@ AbstractMainPage { onClicked: { if (mainItem.selectedConference) { + cancelAndDeleteConfDialog.confInfoToDelete = mainItem.selectedConference cancelAndDeleteConfDialog.cancel = canCancel cancelAndDeleteConfDialog.open() - // mainItem.contactDeletionRequested(mainItem.selectedConference) deletePopup.close() } } - Connections { - target: cancelAndDeleteConfDialog - function onCancelRequested() { - mainItem.selectedConference.core.lCancelConferenceInfo() - } - function onAccepted() { - mainItem.selectedConference.core.lDeleteConferenceInfo() - } - } } } } diff --git a/Linphone/view/Page/Window/AbstractWindow.qml b/Linphone/view/Page/Window/AbstractWindow.qml index b4d5d344..f7d9594e 100644 --- a/Linphone/view/Page/Window/AbstractWindow.qml +++ b/Linphone/view/Page/Window/AbstractWindow.qml @@ -51,96 +51,92 @@ ApplicationWindow { } } - Popup { - id: startCallPopup - property FriendGui contact - property bool videoEnabled - // if currentCall, transfer call to contact - property CallGui currentCall - onContactChanged: { - console.log("contact changed", contact) - } - underlineColor: DefaultStyle.main1_500_main - anchors.centerIn: parent - width: Math.round(370 * DefaultStyle.dp) - modal: true - leftPadding: Math.round(15 * DefaultStyle.dp) - rightPadding: Math.round(15 * DefaultStyle.dp) - topPadding: Math.round(20 * DefaultStyle.dp) - bottomPadding: Math.round(25 * DefaultStyle.dp) - contentItem: ColumnLayout { - spacing: Math.round(16 * DefaultStyle.dp) - RowLayout { - spacing: Math.round(5 * DefaultStyle.dp) - width: startCallPopup.width - Text { - //: "Choisissez un numéro ou adresse SIP" - text: qsTr("contact_dialog_pick_phone_number_or_sip_address_title") - wrapMode: Text.Wrap + Component { + id: addressChooserPopupComp + Popup { + id: addressChooserPopup + property FriendGui contact + signal addressChosen(string address) + underlineColor: DefaultStyle.main1_500_main + anchors.centerIn: parent + width: Math.round(370 * DefaultStyle.dp) + modal: true + leftPadding: Math.round(15 * DefaultStyle.dp) + rightPadding: Math.round(15 * DefaultStyle.dp) + topPadding: Math.round(20 * DefaultStyle.dp) + bottomPadding: Math.round(25 * DefaultStyle.dp) + contentItem: ColumnLayout { + spacing: Math.round(16 * DefaultStyle.dp) + RowLayout { + spacing: Math.round(5 * DefaultStyle.dp) + width: addressChooserPopup.width + Text { + //: "Choisissez un numéro ou adresse SIP" + text: qsTr("contact_dialog_pick_phone_number_or_sip_address_title") + wrapMode: Text.Wrap + Layout.fillWidth: true + font { + pixelSize: Typography.h4.pixelSize + weight: Typography.h4.weight + } + } + RoundButton { + Layout.alignment: Qt.AlignVCenter + style: ButtonStyle.noBackground + Layout.preferredWidth: Math.round(24 * DefaultStyle.dp) + Layout.preferredHeight: Math.round(24 * DefaultStyle.dp) + icon.source:AppIcons.closeX + onClicked: addressChooserPopup.close() + } + } + ListView { + id: popuplist + model: VariantList { + model: addressChooserPopup.contact && addressChooserPopup.contact.core.allAddresses || [] + } Layout.fillWidth: true - font { - pixelSize: Typography.h4.pixelSize - weight: Typography.h4.weight - } - } - RoundButton { - Layout.alignment: Qt.AlignVCenter - style: ButtonStyle.noBackground - Layout.preferredWidth: Math.round(24 * DefaultStyle.dp) - Layout.preferredHeight: Math.round(24 * DefaultStyle.dp) - icon.source:AppIcons.closeX - onClicked: startCallPopup.close() - } - } - ListView { - id: popuplist - model: VariantList { - model: startCallPopup.contact && startCallPopup.contact.core.allAddresses || [] - } - Layout.fillWidth: true - Layout.preferredHeight: contentHeight - spacing: Math.round(10 * DefaultStyle.dp) - delegate: Item { - width: popuplist.width - height: Math.round(56 * DefaultStyle.dp) - ColumnLayout { + Layout.preferredHeight: contentHeight + spacing: Math.round(10 * DefaultStyle.dp) + delegate: Item { width: popuplist.width - anchors.verticalCenter: parent.verticalCenter - spacing: Math.round(10 * DefaultStyle.dp) + height: Math.round(56 * DefaultStyle.dp) ColumnLayout { - spacing: Math.round(7 * DefaultStyle.dp) - Text { - Layout.leftMargin: Math.round(5 * DefaultStyle.dp) - text: modelData.label + " :" - font { - pixelSize: Typography.p2.pixelSize - weight: Typography.p2.weight + width: popuplist.width + anchors.verticalCenter: parent.verticalCenter + spacing: Math.round(10 * DefaultStyle.dp) + ColumnLayout { + spacing: Math.round(7 * DefaultStyle.dp) + Text { + Layout.leftMargin: Math.round(5 * DefaultStyle.dp) + text: modelData.label + " :" + font { + pixelSize: Typography.p2.pixelSize + weight: Typography.p2.weight + } + } + Text { + Layout.leftMargin: Math.round(5 * DefaultStyle.dp) + text: SettingsCpp.hideSipAddresses ? UtilsCpp.getUsername(modelData.address) : modelData.address + font { + pixelSize: Typography.p1.pixelSize + weight: Typography.p1.weight + } } } - Text { - Layout.leftMargin: Math.round(5 * DefaultStyle.dp) - text: SettingsCpp.hideSipAddresses ? UtilsCpp.getUsername(modelData.address) : modelData.address - font { - pixelSize: Typography.p1.pixelSize - weight: Typography.p1.weight - } + Rectangle { + visible: index != popuplist.model.count - 1 + Layout.fillWidth: true + Layout.preferredHeight: Math.max(Math.round(1 * DefaultStyle.dp), 1) + color: DefaultStyle.main2_200 } } - Rectangle { - visible: index != popuplist.model.count - 1 - Layout.fillWidth: true - Layout.preferredHeight: Math.max(Math.round(1 * DefaultStyle.dp), 1) - color: DefaultStyle.main2_200 - } - } - MouseArea { - anchors.fill: parent - hoverEnabled: true - cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor - onClicked: { - if (startCallPopup.currentCall) startCallPopup.currentCall.core.lTransferCall(modelData.address) - else UtilsCpp.createCall(modelData.address, {'localVideoEnabled': startCallPopup.videoEnabled}) - startCallPopup.close() + MouseArea { + anchors.fill: parent + hoverEnabled: true + cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor + onClicked: { + addressChooserPopup.addressChosen(modelData.address) + } } } } @@ -150,13 +146,17 @@ ApplicationWindow { function startCallWithContact(contact, videoEnabled, parentItem) { if (parentItem == undefined) parentItem = mainWindow.contentItem - startCallPopup.parent = parentItem if (contact) { console.log("START CALL WITH", contact.core.fullName, "addresses count", contact.core.allAddresses.length) if (contact.core.allAddresses.length > 1) { - startCallPopup.contact = contact - startCallPopup.videoEnabled = videoEnabled - startCallPopup.open() + var addressPopup = addressChooserPopupComp.createObject() + addressPopup.parent = parentItem + addressPopup.contact = contact + addressPopup.addressChosen.connect(function(address) { + UtilsCpp.createCall(address, {'localVideoEnabled': videoEnabled}) + addressPopup.close() + }) + addressPopup.open() } else { var addressToCall = contact.core.defaultAddress.length === 0 @@ -169,16 +169,41 @@ ApplicationWindow { } } + function sendMessageToContact(contact, parentItem) { + if (parentItem == undefined) parentItem = mainWindow.contentItem + if (contact) { + console.log("SEND MESSAGE TO", contact.core.fullName, "addresses count", contact.core.allAddresses.length) + if (contact.core.allAddresses.length > 1) { + var addressPopup = addressChooserPopupComp.createObject() + addressPopup.parent = parentItem + addressPopup.contact = contact + addressPopup.addressChosen.connect(function(address) { + displayChatPage(address) + addressPopup.close() + }) + addressPopup.open() + + } else { + displayChatPage(contact.core.defaultAddress) + if (addressToCall.length != 0) UtilsCpp.createCall(addressToCall, {'localVideoEnabled':videoEnabled}) + } + } + } + function transferCallToContact(call, contact, parentItem) { if (!call || !contact) return if (parentItem == undefined) parentItem = mainWindow.contentItem - startCallPopup.parent = parentItem if (contact) { console.log("[AbstractWindow] Transfer call to", contact.core.fullName, "addresses count", contact.core.allAddresses.length, call) if (contact.core.allAddresses.length > 1) { - startCallPopup.contact = contact - startCallPopup.currentCall = call - startCallPopup.open() + var addressPopup = addressChooserPopupComp.createObject() + addressPopup.parent = parentItem + addressPopup.contact = contact + addressPopup.addressChosen.connect(function(address) { + call.core.lTransferCall(address) + addressPopup.close() + }) + addressPopup.open() } else { var addressToCall = contact.core.defaultAddress.length === 0 diff --git a/Linphone/view/Page/Window/Call/CallsWindow.qml b/Linphone/view/Page/Window/Call/CallsWindow.qml index 58211ed1..5b9fef84 100644 --- a/Linphone/view/Page/Window/Call/CallsWindow.qml +++ b/Linphone/view/Page/Window/Call/CallsWindow.qml @@ -218,6 +218,8 @@ AbstractWindow { onHaveCallChanged: { if (!haveCall) { mainWindow.callEnded() + } else { + bottomButtonsLayout.setButtonsEnabled(true) } } } @@ -1277,7 +1279,7 @@ AbstractWindow { } function setButtonsEnabled(enabled) { for (var i = 0; i < children.length; ++i) { - children[i].enabled = false + children[i].enabled = enabled } } diff --git a/Linphone/view/Style/DefaultStyle.qml b/Linphone/view/Style/DefaultStyle.qml index 2eb9a8cf..3e8ee06d 100644 --- a/Linphone/view/Style/DefaultStyle.qml +++ b/Linphone/view/Style/DefaultStyle.qml @@ -15,7 +15,7 @@ QtObject { property color main1_600: currentTheme.main600 property color main1_700: currentTheme.main700 - property color main2_000: "#FAFEFF" + property color main2_0: "#FAFEFF" property color main2_100: "#EEF6F8" property color main2_200: "#DFECF2" property color main2_300: "#C0D1D9" @@ -38,6 +38,7 @@ QtObject { property color grey_1000: "#000000" property color warning_600: "#DBB820" + property color warning_700: "#AF9308" property color danger_500_main: "#DD5F5F" property color warning_500_main: "#FFDC2E" property color danger_700: "#9E3548" diff --git a/Linphone/view/Style/buttonStyle.js b/Linphone/view/Style/buttonStyle.js index 3d0df5d0..19759cb5 100644 --- a/Linphone/view/Style/buttonStyle.js +++ b/Linphone/view/Style/buttonStyle.js @@ -21,7 +21,7 @@ } var mainLightBorder = Object.assign({ borderColor : { - keybaordFocused: Linphone.DefaultStyle.main2_000 + keybaordFocused: Linphone.DefaultStyle.main2_0 } }, main) @@ -116,7 +116,7 @@ } var phoneRedLightBorder = Object.assign({ borderColor : { - keybaordFocused: Linphone.DefaultStyle.main2_000 + keybaordFocused: Linphone.DefaultStyle.main2_0 } }, phoneRed) @@ -151,7 +151,7 @@ pressed: Linphone.DefaultStyle.grey_0 }, borderColor: { - keybaordFocused: Linphone.DefaultStyle.main2_000 + keybaordFocused: Linphone.DefaultStyle.main2_0 }, image: { normal: Linphone.DefaultStyle.grey_0, @@ -205,7 +205,7 @@ } var noBackgroundLightBorder = Object.assign({ borderColor : { - keybaordFocused: Linphone.DefaultStyle.main2_000 + keybaordFocused: Linphone.DefaultStyle.main2_0 } }, noBackground)