fix get size with screen ratio function

fix chat sending area ui #LINQT-2068

print debug logs in linphone files for futur debugging

fix call history details ui when no video conference factory set

use remote name of each call if in local conference #LINQT-2058
This commit is contained in:
Gaelle Braud 2025-10-20 10:46:20 +02:00
parent 7825646edd
commit b17bc8cc27
38 changed files with 597 additions and 545 deletions

View file

@ -435,10 +435,10 @@ void App::setSelf(QSharedPointer<App>(me)) {
mCliModelConnection->makeConnectToCore(&App::receivedMessage, [this](int, const QByteArray &byteArray) {
QString command(byteArray);
if (command.isEmpty()) {
lDebug() << log().arg("Check with CliModel for commands");
lInfo() << log().arg("Check with CliModel for commands");
mCliModelConnection->invokeToModel([]() { CliModel::getInstance()->runProcess(); });
} else {
qInfo() << QStringLiteral("Received command from other application: `%1`.").arg(command);
lInfo() << log().arg("Received command from other application: `%1`.").arg(command);
mCliModelConnection->invokeToModel([command]() { CliModel::getInstance()->executeCommand(command); });
}
});

View file

@ -60,7 +60,10 @@ AccountCore::AccountCore(const std::shared_ptr<linphone::Account> &account) : QO
mRegisterEnabled = params->registerEnabled();
mMwiServerAddress =
params->getMwiServerAddress() ? Utils::coreStringToAppString(params->getMwiServerAddress()->asString()) : "";
mTransports << "UDP" << "TCP" << "TLS" << "DTLS";
mTransports << "UDP"
<< "TCP"
<< "TLS"
<< "DTLS";
mTransport = LinphoneEnums::toString(LinphoneEnums::fromLinphone(params->getTransport()));
mRegistrarUri =
params->getServerAddress() ? Utils::coreStringToAppString(params->getServerAddress()->asString()) : "";
@ -384,7 +387,7 @@ void AccountCore::onRegistrationStateChanged(const std::shared_ptr<linphone::Acc
linphone::RegistrationState state,
const std::string &message) {
mRegistrationState = LinphoneEnums::fromLinphone(state);
lDebug() << log().arg(Q_FUNC_INFO) << mRegistrationState;
qDebug() << log().arg(Q_FUNC_INFO) << mRegistrationState;
emit registrationStateChanged(Utils::coreStringToAppString(message));
}

View file

@ -22,6 +22,7 @@
#include "CallCore.hpp"
#include "CallGui.hpp"
#include "core/App.hpp"
#include "model/tool/ToolModel.hpp"
#include <QSharedPointer>
#include <linphone++/linphone.hh>
@ -96,34 +97,26 @@ void CallList::setSelf(QSharedPointer<CallList> me) {
bool enablingVideo = false;
if (currentCall) enablingVideo = currentCall->getCurrentParams()->videoEnabled();
if (!conference) {
auto parameters = core->createConferenceParams(conference);
auto audioVideoConfFactoryUri =
core->getDefaultAccount()->getParams()->getAudioVideoConferenceFactoryAddress();
if (audioVideoConfFactoryUri) {
parameters->setConferenceFactoryAddress(audioVideoConfFactoryUri);
parameters->setSubject("Meeting");
QString subject = audioVideoConfFactoryUri
//: Remote group call
? tr("remote_group_call")
//: "Local group call"
: tr("local_group_call");
auto conference = ToolModel::createConference(subject, nullptr);
if (!conference) {
lWarning() << log().arg("Failed to merge calls");
mModelConnection->invokeToCore([] {
Utils::showInformationPopup(tr("info_popup_error_title"),
//: Failed to merge calls !
tr("info_popup_merge_calls_failed_message"), false);
});
return;
} else {
parameters->setSubject("Local meeting");
}
parameters->enableVideo(enablingVideo);
conference = core->createConferenceWithParams(parameters);
}
std::list<std::shared_ptr<linphone::Address>> allLinphoneAddresses;
std::list<std::shared_ptr<linphone::Address>> newCalls;
std::list<std::shared_ptr<linphone::Call>> runningCallsToAdd;
for (auto call : currentCalls) {
if (!call->getConference()) {
runningCallsToAdd.push_back(call);
conference->addParticipants(currentCalls);
}
}
// 1) Add running calls
if (runningCallsToAdd.size() > 0) {
conference->addParticipants(runningCallsToAdd);
}
// emit lUpdate();
});
});

View file

@ -323,16 +323,16 @@ void ChatMessageCore::setSelf(QSharedPointer<ChatMessageCore> me) {
mChatMessageModelConnection->makeConnectToModel(
&ChatMessageModel::fileTransferRecv,
[this](const std::shared_ptr<linphone::ChatMessage> &message, const std::shared_ptr<linphone::Content> &content,
const std::shared_ptr<const linphone::Buffer> &buffer) { qDebug() << "transfer received"; });
const std::shared_ptr<const linphone::Buffer> &buffer) { lInfo() << log().arg("transfer received"); });
mChatMessageModelConnection->makeConnectToModel(
&ChatMessageModel::fileTransferSend,
[this](const std::shared_ptr<linphone::ChatMessage> &message, const std::shared_ptr<linphone::Content> &content,
size_t offset, size_t size) { qDebug() << "transfer send"; });
size_t offset, size_t size) { lInfo() << log().arg("transfer send"); });
mChatMessageModelConnection->makeConnectToModel(
&ChatMessageModel::fileTransferSendChunk,
[this](const std::shared_ptr<linphone::ChatMessage> &message, const std::shared_ptr<linphone::Content> &content,
size_t offset, size_t size,
const std::shared_ptr<linphone::Buffer> &buffer) { qDebug() << "transfer send chunk"; });
const std::shared_ptr<linphone::Buffer> &buffer) { lInfo() << log().arg("transfer send chunk"); });
mChatMessageModelConnection->makeConnectToModel(
&ChatMessageModel::participantImdnStateChanged,
[this](const std::shared_ptr<linphone::ChatMessage> &message,

View file

@ -139,7 +139,7 @@ void ChatMessageContentList::addFiles(const QStringList &paths) {
qint64 fileSize = file.size();
if (fileSize > Constants::FileSizeLimit) {
++nbTooBig;
qWarning() << QString("Unable to send file. (Size limit=%1)").arg(Constants::FileSizeLimit);
lWarning() << log().arg("Unable to send file. (Size limit=%1)").arg(Constants::FileSizeLimit);
continue;
}
auto name = file.fileName().toStdString();
@ -149,7 +149,7 @@ void ChatMessageContentList::addFiles(const QStringList &paths) {
if (mimeType.length() != 2) {
++nbMimeError;
lastMimeError = path;
qWarning() << QString("Unable to get supported mime type for: `%1`.").arg(path);
lWarning() << log().arg("Unable to get supported mime type for: `%1`.").arg(path);
continue;
}
content->setType(Utils::appStringToCoreString(mimeType[0]));

View file

@ -105,7 +105,7 @@ void ConferenceInfoList::setSelf(QSharedPointer<ConferenceInfoList> me) {
&CoreModel::conferenceInfoReceived,
[this](const std::shared_ptr<linphone::Core> &core,
const std::shared_ptr<const linphone::ConferenceInfo> &conferenceInfo) {
lDebug() << log().arg("conference info received") << conferenceInfo->getSubject();
lInfo() << log().arg("conference info received") << conferenceInfo->getSubject();
// We must refresh all the conference infos cause we are not able to determine
// which account is concerned by the signal if multiple accounts are connected
emit lUpdate();

View file

@ -282,8 +282,8 @@ void Notifier::notifyReceivedCall(const shared_ptr<linphone::Call> &call) {
auto accountModel = Utils::makeQObject_ptr<AccountModel>(account);
accountModel->setSelf(accountModel);
if (!accountModel->getNotificationsAllowed()) {
qInfo()
<< "Notifications have been disabled for this account - not creating a notification for incoming call";
lInfo() << log().arg(
"Notifications have been disabled for this account - not creating a notification for incoming call");
if (accountModel->forwardToVoiceMailInDndPresence()) {
lInfo() << log().arg("Transferring call to voicemail");
auto voicemailAddress = linphone::Factory::get()->createAddress(
@ -341,8 +341,9 @@ void Notifier::notifyReceivedMessages(const std::shared_ptr<linphone::ChatRoom>
auto accountModel = Utils::makeQObject_ptr<AccountModel>(receiverAccount);
accountModel->setSelf(accountModel);
if (!accountModel->getNotificationsAllowed()) {
qInfo() << "Notifications have been disabled for this account - not creating a notification for "
"incoming message";
lInfo() << log().arg(
"Notifications have been disabled for this account - not creating a notification for "
"incoming message");
return;
}
}

View file

@ -164,7 +164,7 @@ static inline QString getAppRootCaFilePath() {
if (Paths::filePathExists(rootca)) { // Packaged
return rootca;
} else {
qDebug() << "Root ca path does not exist. Create it";
lInfo() << "Root ca path does not exist. Create it";
QFileInfo rootcaInfo(rootca);
if (!rootcaInfo.absoluteDir().exists()) {
QDir dataDir(getAppPackageDataDirPath());

View file

@ -140,7 +140,7 @@ void MagicSearchList::setSelf(QSharedPointer<MagicSearchList> me) {
emit resultsProcessed();
});
});
qDebug() << log().arg("Initialized");
lDebug() << log().arg("Initialized");
emit initialized();
});
});
@ -157,7 +157,7 @@ void MagicSearchList::setResults(const QList<QSharedPointer<FriendCore>> &contac
if (!isFriendCore) continue;
disconnect(isFriendCore.get());
}
qDebug() << log().arg("SetResults: %1").arg(contacts.size());
lDebug() << log().arg("SetResults: %1").arg(contacts.size());
resetData<FriendCore>(contacts);
for (auto it : contacts) {
connectContact(it.get());

View file

@ -39,45 +39,45 @@
<context>
<name>AccountCore</name>
<message>
<location filename="../../core/account/AccountCore.cpp" line="435"/>
<location filename="../../core/account/AccountCore.cpp" line="446"/>
<source>drawer_menu_account_connection_status_connected</source>
<extracomment>&quot;Connecté&quot;</extracomment>
<translation>Verbunden</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="438"/>
<location filename="../../core/account/AccountCore.cpp" line="449"/>
<source>drawer_menu_account_connection_status_refreshing</source>
<translation>Aktualisiere</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="441"/>
<location filename="../../core/account/AccountCore.cpp" line="452"/>
<source>drawer_menu_account_connection_status_progress</source>
<translation>Verbinde</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="444"/>
<location filename="../../core/account/AccountCore.cpp" line="455"/>
<source>drawer_menu_account_connection_status_failed</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="448"/>
<location filename="../../core/account/AccountCore.cpp" line="459"/>
<source>drawer_menu_account_connection_status_cleared</source>
<translation>Deaktiviert</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="482"/>
<location filename="../../core/account/AccountCore.cpp" line="493"/>
<source>manage_account_status_connected_summary</source>
<extracomment>&quot;Vous êtes en ligne et joignable.&quot;</extracomment>
<translation>Sie sind online und erreichbar.</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="485"/>
<location filename="../../core/account/AccountCore.cpp" line="496"/>
<source>manage_account_status_failed_summary</source>
<extracomment>&quot;Erreur de connexion, vérifiez vos paramètres.&quot;</extracomment>
<translation>Verbindungsfehler, überprüfen Sie Ihre Einstellungen.</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="489"/>
<location filename="../../core/account/AccountCore.cpp" line="500"/>
<source>manage_account_status_cleared_summary</source>
<extracomment>&quot;Compte désactivé, vous ne recevrez ni appel ni message.&quot;</extracomment>
<translation>Konto deaktiviert, Sie erhalten keine Anrufe oder Nachrichten.</translation>
@ -634,102 +634,101 @@
<context>
<name>App</name>
<message>
<location filename="../../core/App.cpp" line="357"/>
<location filename="../../core/App.cpp" line="356"/>
<source>remote_provisioning_dialog</source>
<extracomment>Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</extracomment>
<translation>Möchten Sie die Remote-Konfiguration von dieser Adresse herunterladen und anwenden?</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="394"/>
<location filename="../../core/App.cpp" line="648"/>
<location filename="../../core/App.cpp" line="393"/>
<location filename="../../core/App.cpp" line="658"/>
<source>info_popup_error_title</source>
<extracomment>Error</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/App.cpp" line="395"/>
<location filename="../../core/App.cpp" line="650"/>
<location filename="../../core/App.cpp" line="394"/>
<location filename="../../core/App.cpp" line="660"/>
<source>info_popup_configuration_failed_message</source>
<extracomment>Remote provisioning failed : %1</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/App.cpp" line="644"/>
<location filename="../../core/App.cpp" line="654"/>
<source>configuration_error_detail</source>
<extracomment>not reachable</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/App.cpp" line="916"/>
<location filename="../../core/App.cpp" line="926"/>
<source>application_description</source>
<extracomment>&quot;A free and open source SIP video-phone.&quot;</extracomment>
<translation>Ein kostenloses Open-Source SIP Video-Telefon.</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="918"/>
<location filename="../../core/App.cpp" line="928"/>
<source>command_line_arg_order</source>
<extracomment>&quot;Send an order to the application towards a command line&quot;</extracomment>
<translation>Kommandozeilen-Befehl an die Anwendung schicken</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="922"/>
<location filename="../../core/App.cpp" line="932"/>
<source>command_line_option_show_help</source>
<translation>Zeige Hilfe</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="927"/>
<location filename="../../core/App.cpp" line="937"/>
<source>command_line_option_show_app_version</source>
<translation type="unfinished">Zeige App-Version</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="935"/>
<location filename="../../core/App.cpp" line="945"/>
<source>command_line_option_config_to_fetch</source>
<extracomment>&quot;Specify the linphone configuration file to be fetched. It will be merged with the current configuration.&quot;</extracomment>
<translation>Abzurufende Linphone-Konfigurationsdatei angeben. Sie wird mit der aktuellen Konfiguration zusammengeführt.</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="937"/>
<location filename="../../core/App.cpp" line="947"/>
<source>command_line_option_config_to_fetch_arg</source>
<extracomment>&quot;URL, path or file&quot;</extracomment>
<translation>URL, Pfad oder Datei</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="942"/>
<location filename="../../core/App.cpp" line="952"/>
<source>command_line_option_minimized</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/App.cpp" line="945"/>
<location filename="../../core/App.cpp" line="955"/>
<source>command_line_option_log_to_stdout</source>
<translation>Debug-Informationen auf der Standardausgabe ausgeben</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="948"/>
<location filename="../../core/App.cpp" line="958"/>
<source>command_line_option_print_app_logs_only</source>
<extracomment>&quot;Print only logs from the application&quot;</extracomment>
<translation>Nur Anwendungs-Logs ausgeben</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1318"/>
<location filename="../../core/App.cpp" line="1329"/>
<source>hide_action</source>
<extracomment>&quot;Cacher&quot; &quot;Afficher&quot;</extracomment>
<translation>Ausblenden</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1318"/>
<location filename="../../core/App.cpp" line="1329"/>
<source>show_action</source>
<translation>Zeigen</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1333"/>
<location filename="../../core/App.cpp" line="1344"/>
<source>quit_action</source>
<extracomment>&quot;Quitter&quot;</extracomment>
<translation>Beenden</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1337"/>
<location filename="../../core/App.cpp" line="1448"/>
<source>mark_all_read_action</source>
<extracomment>&quot;Mark all as read&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
@ -946,7 +945,7 @@
<translation type="vanished">Offline</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="116"/>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="111"/>
<source>meeting_info_join_title</source>
<extracomment>&quot;Rejoindre la réunion&quot;</extracomment>
<translation>Besprechung beitreten</translation>
@ -1023,52 +1022,77 @@
<translation>Der Besprechungs-Link wurde in die Zwischenablage kopiert</translation>
</message>
</context>
<context>
<name>CallList</name>
<message>
<location filename="../../core/call/CallList.cpp" line="104"/>
<source>remote_group_call</source>
<extracomment>Remote group call</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/call/CallList.cpp" line="106"/>
<source>local_group_call</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/call/CallList.cpp" line="111"/>
<source>info_popup_error_title</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/call/CallList.cpp" line="113"/>
<source>info_popup_merge_calls_failed_message</source>
<extracomment>Failed to merge calls !</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CallListView</name>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="55"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="59"/>
<source>meeting</source>
<extracomment>&quot;Réunion</extracomment>
<translation>Besprechung</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="57"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="61"/>
<source>call</source>
<extracomment>&quot;Appel&quot;</extracomment>
<translation>Anruf</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="66"/>
<source>paused_call_or_meeting</source>
<extracomment>&quot;%1 en pause&quot;</extracomment>
<translation>%1 pausiert</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="64"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="68"/>
<source>ongoing_call_or_meeting</source>
<extracomment>&quot;%1 en cours&quot;</extracomment>
<translation>%1 laufend</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="84"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="88"/>
<source>transfer_call_name_accessible_name</source>
<extracomment>Transfer call %1</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="112"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="116"/>
<source>resume_call_name_accessible_name</source>
<extracomment>Resume %1 call</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="114"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="118"/>
<source>pause_call_name_accessible_name</source>
<extracomment>Pause %1 call</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="137"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="141"/>
<source>end_call_name_accessible_name</source>
<extracomment>End %1 call</extracomment>
<translation type="unfinished"></translation>
@ -2032,13 +2056,13 @@
<context>
<name>ChatDroppableTextArea</name>
<message>
<location filename="../../view/Control/Input/Chat/ChatDroppableTextArea.qml" line="152"/>
<location filename="../../view/Control/Input/Chat/ChatDroppableTextArea.qml" line="154"/>
<source>chat_view_send_area_placeholder_text</source>
<extracomment>Say something : placeholder text for sending message text area</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Input/Chat/ChatDroppableTextArea.qml" line="187"/>
<location filename="../../view/Control/Input/Chat/ChatDroppableTextArea.qml" line="190"/>
<source>cannot_record_while_in_call_tooltip</source>
<extracomment>Cannot record a message while a call is ongoing</extracomment>
<translation type="unfinished"></translation>
@ -2261,13 +2285,13 @@ Error</extracomment>
<context>
<name>ChatMessageContentModel</name>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="104"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="105"/>
<source>popup_error_title</source>
<extracomment>Error</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="107"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="108"/>
<source>popup_download_error_message</source>
<extracomment>This file was already downloaded and is no more on the server. Your peer have to resend it if you want to get it</extracomment>
<translation type="unfinished"></translation>
@ -4874,36 +4898,36 @@ Error</extracomment>
<context>
<name>Notifier</name>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="309"/>
<location filename="../../core/notifier/Notifier.cpp" line="310"/>
<source>new_call_alert_accessible_name</source>
<extracomment>New call from %1</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="361"/>
<location filename="../../core/notifier/Notifier.cpp" line="363"/>
<source>new_voice_message</source>
<extracomment>&apos;Voice message received!&apos; : message to warn the user in a notofication for voice messages.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="362"/>
<location filename="../../core/notifier/Notifier.cpp" line="364"/>
<source>new_file_message</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="365"/>
<location filename="../../core/notifier/Notifier.cpp" line="367"/>
<source>new_conference_invitation</source>
<extracomment>&apos;Conference invitation received!&apos; : Notification about receiving an invitation to a conference.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="385"/>
<location filename="../../core/notifier/Notifier.cpp" line="387"/>
<source>new_chat_room_messages</source>
<extracomment>&apos;New messages received!&apos; Notification that warn the user of new messages.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="392"/>
<location filename="../../core/notifier/Notifier.cpp" line="394"/>
<source>new_message_alert_accessible_name</source>
<extracomment>New message on chatroom %1</extracomment>
<translation type="unfinished"></translation>
@ -4923,102 +4947,102 @@ Error</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="123"/>
<location filename="../../model/auth/OIDCModel.cpp" line="125"/>
<source>oidc_authentication_granted_message</source>
<extracomment>Authentication granted</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="130"/>
<location filename="../../model/auth/OIDCModel.cpp" line="132"/>
<source>oidc_authentication_not_authenticated_message</source>
<extracomment>Not authenticated</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="136"/>
<location filename="../../model/auth/OIDCModel.cpp" line="138"/>
<source>oidc_authentication_refresh_message</source>
<extracomment>Refreshing token</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="141"/>
<location filename="../../model/auth/OIDCModel.cpp" line="143"/>
<source>oidc_authentication_temporary_credentials_message</source>
<extracomment>Temporary credentials received</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="159"/>
<location filename="../../model/auth/OIDCModel.cpp" line="161"/>
<source>oidc_authentication_network_error</source>
<extracomment>Network error</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="163"/>
<location filename="../../model/auth/OIDCModel.cpp" line="165"/>
<source>oidc_authentication_server_error</source>
<extracomment>Server error</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="167"/>
<location filename="../../model/auth/OIDCModel.cpp" line="169"/>
<source>oidc_authentication_token_not_found_error</source>
<extracomment>OAuth token not found</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="171"/>
<location filename="../../model/auth/OIDCModel.cpp" line="173"/>
<source>oidc_authentication_token_secret_not_found_error</source>
<extracomment>OAuth token secret not found</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="175"/>
<location filename="../../model/auth/OIDCModel.cpp" line="177"/>
<source>oidc_authentication_callback_not_verified_error</source>
<extracomment>OAuth callback not verified</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="186"/>
<location filename="../../model/auth/OIDCModel.cpp" line="188"/>
<source>oidc_authentication_request_auth_message</source>
<extracomment>Requesting authorization from browser</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="217"/>
<location filename="../../model/auth/OIDCModel.cpp" line="219"/>
<source>oidc_authentication_no_token_found_error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="230"/>
<location filename="../../model/auth/OIDCModel.cpp" line="232"/>
<source>oidc_authentication_request_token_message</source>
<extracomment>Requesting access token</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="235"/>
<location filename="../../model/auth/OIDCModel.cpp" line="237"/>
<source>oidc_authentication_refresh_token_message</source>
<extracomment>Refreshing access token</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="240"/>
<location filename="../../model/auth/OIDCModel.cpp" line="242"/>
<source>oidc_authentication_request_authorization_message</source>
<extracomment>Requesting authorization</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="245"/>
<location filename="../../model/auth/OIDCModel.cpp" line="247"/>
<source>oidc_authentication_request_temporary_credentials_message</source>
<extracomment>Requesting temporary credentials</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="272"/>
<location filename="../../model/auth/OIDCModel.cpp" line="274"/>
<source>oidc_authentication_no_auth_found_in_config_error</source>
<extracomment>No authorization endpoint found in OpenID configuration</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="287"/>
<location filename="../../model/auth/OIDCModel.cpp" line="289"/>
<source>oidc_authentication_no_token_found_in_config_error</source>
<extracomment>No token endpoint found in OpenID configuration</extracomment>
<translation type="unfinished"></translation>
@ -5690,37 +5714,37 @@ Pour les activer dans un projet commercial, merci de nous contacter.</source>
<translation>Start a group call ?</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="118"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="121"/>
<source>unencrypted_conversation_warning</source>
<extracomment>This conversation is not encrypted !</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="436"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="407"/>
<source>reply_to_label</source>
<extracomment>Reply to %1</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="637"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="607"/>
<source>shared_medias_title</source>
<extracomment>Shared medias</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="639"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="609"/>
<source>shared_documents_title</source>
<extracomment>Shared documents</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="668"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="638"/>
<source>forward_to_title</source>
<extracomment>Forward to</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="702"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="672"/>
<source>conversations_title</source>
<extracomment>Conversations</extracomment>
<translation type="unfinished"></translation>
@ -5859,38 +5883,38 @@ Pour les activer dans un projet commercial, merci de nous contacter.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="408"/>
<location filename="../../model/tool/ToolModel.cpp" line="413"/>
<source>group_call_error_participants_invite</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="412"/>
<location filename="../../model/tool/ToolModel.cpp" line="417"/>
<source>group_call_error_creation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="512"/>
<location filename="../../model/tool/ToolModel.cpp" line="517"/>
<source>voice_recording_duration</source>
<extracomment>&quot;Voice recording (%1)&quot; : %1 is the duration formated in mm:ss</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="520"/>
<location filename="../../model/tool/ToolModel.cpp" line="525"/>
<source>conference_invitation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="522"/>
<location filename="../../model/tool/ToolModel.cpp" line="527"/>
<source>conference_invitation_updated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="524"/>
<location filename="../../model/tool/ToolModel.cpp" line="529"/>
<source>conference_invitation_cancelled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="585"/>
<location filename="../../model/tool/ToolModel.cpp" line="591"/>
<source>unknown_audio_device_name</source>
<translation>Unbekannter Gerätename</translation>
</message>

View file

@ -39,45 +39,45 @@
<context>
<name>AccountCore</name>
<message>
<location filename="../../core/account/AccountCore.cpp" line="435"/>
<location filename="../../core/account/AccountCore.cpp" line="446"/>
<source>drawer_menu_account_connection_status_connected</source>
<extracomment>&quot;Connecté&quot;</extracomment>
<translation>Connected</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="438"/>
<location filename="../../core/account/AccountCore.cpp" line="449"/>
<source>drawer_menu_account_connection_status_refreshing</source>
<translation>Refreshing</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="441"/>
<location filename="../../core/account/AccountCore.cpp" line="452"/>
<source>drawer_menu_account_connection_status_progress</source>
<translation>Connecting</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="444"/>
<location filename="../../core/account/AccountCore.cpp" line="455"/>
<source>drawer_menu_account_connection_status_failed</source>
<translation>Error</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="448"/>
<location filename="../../core/account/AccountCore.cpp" line="459"/>
<source>drawer_menu_account_connection_status_cleared</source>
<translation>Disabled</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="482"/>
<location filename="../../core/account/AccountCore.cpp" line="493"/>
<source>manage_account_status_connected_summary</source>
<extracomment>&quot;Vous êtes en ligne et joignable.&quot;</extracomment>
<translation>You are online and reachable.</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="485"/>
<location filename="../../core/account/AccountCore.cpp" line="496"/>
<source>manage_account_status_failed_summary</source>
<extracomment>&quot;Erreur de connexion, vérifiez vos paramètres.&quot;</extracomment>
<translation>Connection error, check your settings.</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="489"/>
<location filename="../../core/account/AccountCore.cpp" line="500"/>
<source>manage_account_status_cleared_summary</source>
<extracomment>&quot;Compte désactivé, vous ne recevrez ni appel ni message.&quot;</extracomment>
<translation>Account disabled, you will not receive calls or messages.</translation>
@ -428,11 +428,6 @@
<extracomment>&quot;If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it.&quot;</extracomment>
<translation>If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it.</translation>
</message>
<message>
<source>account_settings_outbound_proxy_title</source>
<extracomment>&quot;Outbound proxy enabled&quot;</extracomment>
<translation type="vanished">Outbound proxy server enabled</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="157"/>
<source>account_settings_stun_server_url_title</source>
@ -634,103 +629,102 @@
<context>
<name>App</name>
<message>
<location filename="../../core/App.cpp" line="357"/>
<location filename="../../core/App.cpp" line="356"/>
<source>remote_provisioning_dialog</source>
<extracomment>Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</extracomment>
<translation>Do you want to download and apply remote provisioning from this address ?</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="394"/>
<location filename="../../core/App.cpp" line="648"/>
<location filename="../../core/App.cpp" line="393"/>
<location filename="../../core/App.cpp" line="658"/>
<source>info_popup_error_title</source>
<extracomment>Error</extracomment>
<translation>Error</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="395"/>
<location filename="../../core/App.cpp" line="650"/>
<location filename="../../core/App.cpp" line="394"/>
<location filename="../../core/App.cpp" line="660"/>
<source>info_popup_configuration_failed_message</source>
<extracomment>Remote provisioning failed : %1</extracomment>
<translation>Remote provisioning failed : %1</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="644"/>
<location filename="../../core/App.cpp" line="654"/>
<source>configuration_error_detail</source>
<extracomment>not reachable</extracomment>
<translation>not reachable</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="916"/>
<location filename="../../core/App.cpp" line="926"/>
<source>application_description</source>
<extracomment>&quot;A free and open source SIP video-phone.&quot;</extracomment>
<translation>A free and open source SIP video-phone.</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="918"/>
<location filename="../../core/App.cpp" line="928"/>
<source>command_line_arg_order</source>
<extracomment>&quot;Send an order to the application towards a command line&quot;</extracomment>
<translation>Send an order to the application towards a command line</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="922"/>
<location filename="../../core/App.cpp" line="932"/>
<source>command_line_option_show_help</source>
<translation>Show this help</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="927"/>
<location filename="../../core/App.cpp" line="937"/>
<source>command_line_option_show_app_version</source>
<translation>Show app version</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="935"/>
<location filename="../../core/App.cpp" line="945"/>
<source>command_line_option_config_to_fetch</source>
<extracomment>&quot;Specify the linphone configuration file to be fetched. It will be merged with the current configuration.&quot;</extracomment>
<translation>Specify the linphone configuration file to be fetched. It will be merged with the current configuration.</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="937"/>
<location filename="../../core/App.cpp" line="947"/>
<source>command_line_option_config_to_fetch_arg</source>
<extracomment>&quot;URL, path or file&quot;</extracomment>
<translation>URL, path or file</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="942"/>
<location filename="../../core/App.cpp" line="952"/>
<source>command_line_option_minimized</source>
<translation>Minimize</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="945"/>
<location filename="../../core/App.cpp" line="955"/>
<source>command_line_option_log_to_stdout</source>
<translation>Log to stdout some debug information while running</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="948"/>
<location filename="../../core/App.cpp" line="958"/>
<source>command_line_option_print_app_logs_only</source>
<extracomment>&quot;Print only logs from the application&quot;</extracomment>
<translation>Print only logs from the application</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1318"/>
<location filename="../../core/App.cpp" line="1329"/>
<source>hide_action</source>
<extracomment>&quot;Cacher&quot; &quot;Afficher&quot;</extracomment>
<translation>Hide</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1318"/>
<location filename="../../core/App.cpp" line="1329"/>
<source>show_action</source>
<translation>Show</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1333"/>
<location filename="../../core/App.cpp" line="1344"/>
<source>quit_action</source>
<extracomment>&quot;Quitter&quot;</extracomment>
<translation>Quit</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1337"/>
<location filename="../../core/App.cpp" line="1448"/>
<source>mark_all_read_action</source>
<extracomment>&quot;Mark all as read&quot;</extracomment>
<translation>Mark all as read</translation>
<translation>Marquer tout comme lu</translation>
</message>
</context>
<context>
@ -926,7 +920,7 @@
<context>
<name>CallHistoryLayout</name>
<message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="116"/>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="111"/>
<source>meeting_info_join_title</source>
<extracomment>&quot;Rejoindre la réunion&quot;</extracomment>
<translation>Join meeting</translation>
@ -1003,52 +997,77 @@
<translation>The meeting link has been copied to the clipboard</translation>
</message>
</context>
<context>
<name>CallList</name>
<message>
<location filename="../../core/call/CallList.cpp" line="104"/>
<source>remote_group_call</source>
<extracomment>Remote group call</extracomment>
<translation>Remote group call</translation>
</message>
<message>
<location filename="../../core/call/CallList.cpp" line="106"/>
<source>local_group_call</source>
<translation>Local group call</translation>
</message>
<message>
<location filename="../../core/call/CallList.cpp" line="111"/>
<source>info_popup_error_title</source>
<translation>Error</translation>
</message>
<message>
<location filename="../../core/call/CallList.cpp" line="113"/>
<source>info_popup_merge_calls_failed_message</source>
<extracomment>Failed to merge calls !</extracomment>
<translation>Failed to merge calls !</translation>
</message>
</context>
<context>
<name>CallListView</name>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="55"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="59"/>
<source>meeting</source>
<extracomment>&quot;Réunion</extracomment>
<translation>Meeting</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="57"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="61"/>
<source>call</source>
<extracomment>&quot;Appel&quot;</extracomment>
<translation>Call</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="66"/>
<source>paused_call_or_meeting</source>
<extracomment>&quot;%1 en pause&quot;</extracomment>
<translation>%1 paused</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="64"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="68"/>
<source>ongoing_call_or_meeting</source>
<extracomment>&quot;%1 en cours&quot;</extracomment>
<translation>Ongoing %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="84"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="88"/>
<source>transfer_call_name_accessible_name</source>
<extracomment>Transfer call %1</extracomment>
<translation>Transfer call %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="112"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="116"/>
<source>resume_call_name_accessible_name</source>
<extracomment>Resume %1 call</extracomment>
<translation>Resume %1 call</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="114"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="118"/>
<source>pause_call_name_accessible_name</source>
<extracomment>Pause %1 call</extracomment>
<translation>Pause %1 call</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="137"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="141"/>
<source>end_call_name_accessible_name</source>
<extracomment>End %1 call</extracomment>
<translation>End %1 call</translation>
@ -1994,13 +2013,13 @@
<context>
<name>ChatDroppableTextArea</name>
<message>
<location filename="../../view/Control/Input/Chat/ChatDroppableTextArea.qml" line="152"/>
<location filename="../../view/Control/Input/Chat/ChatDroppableTextArea.qml" line="154"/>
<source>chat_view_send_area_placeholder_text</source>
<extracomment>Say something : placeholder text for sending message text area</extracomment>
<translation>Say something</translation>
</message>
<message>
<location filename="../../view/Control/Input/Chat/ChatDroppableTextArea.qml" line="187"/>
<location filename="../../view/Control/Input/Chat/ChatDroppableTextArea.qml" line="190"/>
<source>cannot_record_while_in_call_tooltip</source>
<extracomment>Cannot record a message while a call is ongoing</extracomment>
<translation>Cannot record a message while a call is ongoing</translation>
@ -2223,13 +2242,13 @@ Error</extracomment>
<context>
<name>ChatMessageContentModel</name>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="104"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="105"/>
<source>popup_error_title</source>
<extracomment>Error</extracomment>
<translation>Error</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="107"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="108"/>
<source>popup_download_error_message</source>
<extracomment>This file was already downloaded and is no more on the server. Your peer have to resend it if you want to get it</extracomment>
<translation>This file was already downloaded and is no more on the server. Your peer have to resend it if you want to get it</translation>
@ -4771,36 +4790,36 @@ Expiration : %1</translation>
<context>
<name>Notifier</name>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="309"/>
<location filename="../../core/notifier/Notifier.cpp" line="310"/>
<source>new_call_alert_accessible_name</source>
<extracomment>New call from %1</extracomment>
<translation>New call from %1</translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="361"/>
<location filename="../../core/notifier/Notifier.cpp" line="363"/>
<source>new_voice_message</source>
<extracomment>&apos;Voice message received!&apos; : message to warn the user in a notofication for voice messages.</extracomment>
<translation>Voice message received!</translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="362"/>
<location filename="../../core/notifier/Notifier.cpp" line="364"/>
<source>new_file_message</source>
<translation>File received!</translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="365"/>
<location filename="../../core/notifier/Notifier.cpp" line="367"/>
<source>new_conference_invitation</source>
<extracomment>&apos;Conference invitation received!&apos; : Notification about receiving an invitation to a conference.</extracomment>
<translation>Conference invitation received !</translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="385"/>
<location filename="../../core/notifier/Notifier.cpp" line="387"/>
<source>new_chat_room_messages</source>
<extracomment>&apos;New messages received!&apos; Notification that warn the user of new messages.</extracomment>
<translation>New messages received !</translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="392"/>
<location filename="../../core/notifier/Notifier.cpp" line="394"/>
<source>new_message_alert_accessible_name</source>
<extracomment>New message on chatroom %1</extracomment>
<translation>New message on chatroom %1</translation>
@ -4820,102 +4839,102 @@ Expiration : %1</translation>
<translation>Timeout: Not authenticated</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="123"/>
<location filename="../../model/auth/OIDCModel.cpp" line="125"/>
<source>oidc_authentication_granted_message</source>
<extracomment>Authentication granted</extracomment>
<translation>Authentication granted</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="130"/>
<location filename="../../model/auth/OIDCModel.cpp" line="132"/>
<source>oidc_authentication_not_authenticated_message</source>
<extracomment>Not authenticated</extracomment>
<translation>Not authenticated</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="136"/>
<location filename="../../model/auth/OIDCModel.cpp" line="138"/>
<source>oidc_authentication_refresh_message</source>
<extracomment>Refreshing token</extracomment>
<translation>Refreshing token</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="141"/>
<location filename="../../model/auth/OIDCModel.cpp" line="143"/>
<source>oidc_authentication_temporary_credentials_message</source>
<extracomment>Temporary credentials received</extracomment>
<translation>Temporary credentials received</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="159"/>
<location filename="../../model/auth/OIDCModel.cpp" line="161"/>
<source>oidc_authentication_network_error</source>
<extracomment>Network error</extracomment>
<translation>Network error</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="163"/>
<location filename="../../model/auth/OIDCModel.cpp" line="165"/>
<source>oidc_authentication_server_error</source>
<extracomment>Server error</extracomment>
<translation>Server error</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="167"/>
<location filename="../../model/auth/OIDCModel.cpp" line="169"/>
<source>oidc_authentication_token_not_found_error</source>
<extracomment>OAuth token not found</extracomment>
<translation>OAuth token not found</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="171"/>
<location filename="../../model/auth/OIDCModel.cpp" line="173"/>
<source>oidc_authentication_token_secret_not_found_error</source>
<extracomment>OAuth token secret not found</extracomment>
<translation>OAuth token secret not found</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="175"/>
<location filename="../../model/auth/OIDCModel.cpp" line="177"/>
<source>oidc_authentication_callback_not_verified_error</source>
<extracomment>OAuth callback not verified</extracomment>
<translation>OAuth callback not verified</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="186"/>
<location filename="../../model/auth/OIDCModel.cpp" line="188"/>
<source>oidc_authentication_request_auth_message</source>
<extracomment>Requesting authorization from browser</extracomment>
<translation>Requesting authorization from browser</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="217"/>
<location filename="../../model/auth/OIDCModel.cpp" line="219"/>
<source>oidc_authentication_no_token_found_error</source>
<translation>No token found</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="230"/>
<location filename="../../model/auth/OIDCModel.cpp" line="232"/>
<source>oidc_authentication_request_token_message</source>
<extracomment>Requesting access token</extracomment>
<translation>Requesting access token</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="235"/>
<location filename="../../model/auth/OIDCModel.cpp" line="237"/>
<source>oidc_authentication_refresh_token_message</source>
<extracomment>Refreshing access token</extracomment>
<translation>Refreshing access token</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="240"/>
<location filename="../../model/auth/OIDCModel.cpp" line="242"/>
<source>oidc_authentication_request_authorization_message</source>
<extracomment>Requesting authorization</extracomment>
<translation>Requesting authorization</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="245"/>
<location filename="../../model/auth/OIDCModel.cpp" line="247"/>
<source>oidc_authentication_request_temporary_credentials_message</source>
<extracomment>Requesting temporary credentials</extracomment>
<translation>Requesting temporary credentials</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="272"/>
<location filename="../../model/auth/OIDCModel.cpp" line="274"/>
<source>oidc_authentication_no_auth_found_in_config_error</source>
<extracomment>No authorization endpoint found in OpenID configuration</extracomment>
<translation>No authorization endpoint found in OpenID configuration</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="287"/>
<location filename="../../model/auth/OIDCModel.cpp" line="289"/>
<source>oidc_authentication_no_token_found_in_config_error</source>
<extracomment>No token endpoint found in OpenID configuration</extracomment>
<translation>No token endpoint found in OpenID configuration</translation>
@ -5575,37 +5594,37 @@ To enable them in a commercial project, please contact us.</translation>
<translation>Start a group call ?</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="118"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="121"/>
<source>unencrypted_conversation_warning</source>
<extracomment>This conversation is not encrypted !</extracomment>
<translation>This conversation is not encrypted !</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="436"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="407"/>
<source>reply_to_label</source>
<extracomment>Reply to %1</extracomment>
<translation>Reply to %1</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="637"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="607"/>
<source>shared_medias_title</source>
<extracomment>Shared medias</extracomment>
<translation>Shared medias</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="639"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="609"/>
<source>shared_documents_title</source>
<extracomment>Shared documents</extracomment>
<translation>Shared documents</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="668"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="638"/>
<source>forward_to_title</source>
<extracomment>Forward to</extracomment>
<translation>Froward to</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="702"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="672"/>
<source>conversations_title</source>
<extracomment>Conversations</extracomment>
<translation>Conversations</translation>
@ -5658,11 +5677,6 @@ To enable them in a commercial project, please contact us.</translation>
<extracomment>&quot;Réunions&quot;</extracomment>
<translation>Meetings</translation>
</message>
<message>
<source>settings_security_title</source>
<extracomment>&quot;Affichage&quot; &quot;Security&quot;</extracomment>
<translation type="vanished">Security / Encryption</translation>
</message>
<message>
<location filename="../../view/Page/Form/Settings/SettingsPage.qml" line="29"/>
<source>settings_network_title</source>
@ -5744,38 +5758,38 @@ To enable them in a commercial project, please contact us.</translation>
<translation>No default account found, can&apos;t create group call</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="408"/>
<location filename="../../model/tool/ToolModel.cpp" line="413"/>
<source>group_call_error_participants_invite</source>
<translation>Couldn&apos;t invite participants to group call</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="412"/>
<location filename="../../model/tool/ToolModel.cpp" line="417"/>
<source>group_call_error_creation</source>
<translation>Group call couldn&apos;t be created</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="512"/>
<location filename="../../model/tool/ToolModel.cpp" line="517"/>
<source>voice_recording_duration</source>
<extracomment>&quot;Voice recording (%1)&quot; : %1 is the duration formated in mm:ss</extracomment>
<translation>Voice recording (%1)</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="585"/>
<location filename="../../model/tool/ToolModel.cpp" line="591"/>
<source>unknown_audio_device_name</source>
<translation>Unknown device name</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="520"/>
<location filename="../../model/tool/ToolModel.cpp" line="525"/>
<source>conference_invitation</source>
<translation>Meeting invitation</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="524"/>
<location filename="../../model/tool/ToolModel.cpp" line="529"/>
<source>conference_invitation_cancelled</source>
<translation>Meeting cancellation</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="522"/>
<location filename="../../model/tool/ToolModel.cpp" line="527"/>
<source>conference_invitation_updated</source>
<translation>Meeting modification</translation>
</message>

View file

@ -39,45 +39,45 @@
<context>
<name>AccountCore</name>
<message>
<location filename="../../core/account/AccountCore.cpp" line="435"/>
<location filename="../../core/account/AccountCore.cpp" line="446"/>
<source>drawer_menu_account_connection_status_connected</source>
<extracomment>&quot;Connecté&quot;</extracomment>
<translation>Connecté</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="438"/>
<location filename="../../core/account/AccountCore.cpp" line="449"/>
<source>drawer_menu_account_connection_status_refreshing</source>
<translation>En cours de rafraîchissement</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="441"/>
<location filename="../../core/account/AccountCore.cpp" line="452"/>
<source>drawer_menu_account_connection_status_progress</source>
<translation>Connexion</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="444"/>
<location filename="../../core/account/AccountCore.cpp" line="455"/>
<source>drawer_menu_account_connection_status_failed</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="448"/>
<location filename="../../core/account/AccountCore.cpp" line="459"/>
<source>drawer_menu_account_connection_status_cleared</source>
<translation>Désactivé</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="482"/>
<location filename="../../core/account/AccountCore.cpp" line="493"/>
<source>manage_account_status_connected_summary</source>
<extracomment>&quot;Vous êtes en ligne et joignable.&quot;</extracomment>
<translation>Vous êtes en ligne et joignable.</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="485"/>
<location filename="../../core/account/AccountCore.cpp" line="496"/>
<source>manage_account_status_failed_summary</source>
<extracomment>&quot;Erreur de connexion, vérifiez vos paramètres.&quot;</extracomment>
<translation>Erreur de connexion, vérifiez vos paramètres.</translation>
</message>
<message>
<location filename="../../core/account/AccountCore.cpp" line="489"/>
<location filename="../../core/account/AccountCore.cpp" line="500"/>
<source>manage_account_status_cleared_summary</source>
<extracomment>&quot;Compte désactivé, vous ne recevrez ni appel ni message.&quot;</extracomment>
<translation>Compte désactivé, vous ne recevrez ni appel ni message.</translation>
@ -428,11 +428,6 @@
<extracomment>&quot;If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it.&quot;</extracomment>
<translation>Si ce champ est rempli, loutbound proxy sera activé automatiquement. Laissez-le vide pour le désactiver.</translation>
</message>
<message>
<source>account_settings_outbound_proxy_title</source>
<extracomment>&quot;Outbound proxy enabled&quot;</extracomment>
<translation type="vanished">Serveur mandataire sortant</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="157"/>
<source>account_settings_stun_server_url_title</source>
@ -634,103 +629,102 @@
<context>
<name>App</name>
<message>
<location filename="../../core/App.cpp" line="357"/>
<location filename="../../core/App.cpp" line="356"/>
<source>remote_provisioning_dialog</source>
<extracomment>Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</extracomment>
<translation>Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="394"/>
<location filename="../../core/App.cpp" line="648"/>
<location filename="../../core/App.cpp" line="393"/>
<location filename="../../core/App.cpp" line="658"/>
<source>info_popup_error_title</source>
<extracomment>Error</extracomment>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="395"/>
<location filename="../../core/App.cpp" line="650"/>
<location filename="../../core/App.cpp" line="394"/>
<location filename="../../core/App.cpp" line="660"/>
<source>info_popup_configuration_failed_message</source>
<extracomment>Remote provisioning failed : %1</extracomment>
<translation>La configuration distante a échoué : %1</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="644"/>
<location filename="../../core/App.cpp" line="654"/>
<source>configuration_error_detail</source>
<extracomment>not reachable</extracomment>
<translation>indisponible</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="916"/>
<location filename="../../core/App.cpp" line="926"/>
<source>application_description</source>
<extracomment>&quot;A free and open source SIP video-phone.&quot;</extracomment>
<translation>A free and open source SIP video-phone.</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="918"/>
<location filename="../../core/App.cpp" line="928"/>
<source>command_line_arg_order</source>
<extracomment>&quot;Send an order to the application towards a command line&quot;</extracomment>
<translation>Send an order to the application towards a command line</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="922"/>
<location filename="../../core/App.cpp" line="932"/>
<source>command_line_option_show_help</source>
<translation>Show this help</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="927"/>
<location filename="../../core/App.cpp" line="937"/>
<source>command_line_option_show_app_version</source>
<translation>Afficher la version de l&apos;application</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="935"/>
<location filename="../../core/App.cpp" line="945"/>
<source>command_line_option_config_to_fetch</source>
<extracomment>&quot;Specify the linphone configuration file to be fetched. It will be merged with the current configuration.&quot;</extracomment>
<translation>Specify the linphone configuration file to be fetched. It will be merged with the current configuration.</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="937"/>
<location filename="../../core/App.cpp" line="947"/>
<source>command_line_option_config_to_fetch_arg</source>
<extracomment>&quot;URL, path or file&quot;</extracomment>
<translation>URL, path or file</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="942"/>
<location filename="../../core/App.cpp" line="952"/>
<source>command_line_option_minimized</source>
<translation>Minimiser</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="945"/>
<location filename="../../core/App.cpp" line="955"/>
<source>command_line_option_log_to_stdout</source>
<translation>Log to stdout some debug information while running</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="948"/>
<location filename="../../core/App.cpp" line="958"/>
<source>command_line_option_print_app_logs_only</source>
<extracomment>&quot;Print only logs from the application&quot;</extracomment>
<translation>Print only logs from the application</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1318"/>
<location filename="../../core/App.cpp" line="1329"/>
<source>hide_action</source>
<extracomment>&quot;Cacher&quot; &quot;Afficher&quot;</extracomment>
<translation>Cacher</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1318"/>
<location filename="../../core/App.cpp" line="1329"/>
<source>show_action</source>
<translation>Afficher</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1333"/>
<location filename="../../core/App.cpp" line="1344"/>
<source>quit_action</source>
<extracomment>&quot;Quitter&quot;</extracomment>
<translation>Quitter</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1337"/>
<location filename="../../core/App.cpp" line="1448"/>
<source>mark_all_read_action</source>
<extracomment>&quot;Mark all as read&quot;</extracomment>
<translation>Marquer tout comme lu</translation>
<translation>Mark all as read</translation>
</message>
</context>
<context>
@ -926,7 +920,7 @@
<context>
<name>CallHistoryLayout</name>
<message>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="116"/>
<location filename="../../view/Control/Container/Call/CallHistoryLayout.qml" line="111"/>
<source>meeting_info_join_title</source>
<extracomment>&quot;Rejoindre la réunion&quot;</extracomment>
<translation>Rejoindre la réunion</translation>
@ -1003,52 +997,77 @@
<translation>Le lien de la réunion a é copié dans le presse-papier</translation>
</message>
</context>
<context>
<name>CallList</name>
<message>
<location filename="../../core/call/CallList.cpp" line="104"/>
<source>remote_group_call</source>
<extracomment>Remote group call</extracomment>
<translation>Appel de groupe distant</translation>
</message>
<message>
<location filename="../../core/call/CallList.cpp" line="106"/>
<source>local_group_call</source>
<translation>Appel de groupe local</translation>
</message>
<message>
<location filename="../../core/call/CallList.cpp" line="111"/>
<source>info_popup_error_title</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../core/call/CallList.cpp" line="113"/>
<source>info_popup_merge_calls_failed_message</source>
<extracomment>Failed to merge calls !</extracomment>
<translation>La fusion des appels a échoué !</translation>
</message>
</context>
<context>
<name>CallListView</name>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="55"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="59"/>
<source>meeting</source>
<extracomment>&quot;Réunion</extracomment>
<translation>Réunion</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="57"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="61"/>
<source>call</source>
<extracomment>&quot;Appel&quot;</extracomment>
<translation>Appel</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="66"/>
<source>paused_call_or_meeting</source>
<extracomment>&quot;%1 en pause&quot;</extracomment>
<translation>%1 en pause</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="64"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="68"/>
<source>ongoing_call_or_meeting</source>
<extracomment>&quot;%1 en cours&quot;</extracomment>
<translation>%1 en cours</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="84"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="88"/>
<source>transfer_call_name_accessible_name</source>
<extracomment>Transfer call %1</extracomment>
<translation>Transférer l&apos;appel %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="112"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="116"/>
<source>resume_call_name_accessible_name</source>
<extracomment>Resume %1 call</extracomment>
<translation>Reprendre l&apos;appel %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="114"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="118"/>
<source>pause_call_name_accessible_name</source>
<extracomment>Pause %1 call</extracomment>
<translation>Mettre l&apos;appel %1 en pause</translation>
</message>
<message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="137"/>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="141"/>
<source>end_call_name_accessible_name</source>
<extracomment>End %1 call</extracomment>
<translation>Terminer l&apos;appel %1</translation>
@ -1994,13 +2013,13 @@
<context>
<name>ChatDroppableTextArea</name>
<message>
<location filename="../../view/Control/Input/Chat/ChatDroppableTextArea.qml" line="152"/>
<location filename="../../view/Control/Input/Chat/ChatDroppableTextArea.qml" line="154"/>
<source>chat_view_send_area_placeholder_text</source>
<extracomment>Say something : placeholder text for sending message text area</extracomment>
<translation>Dites quelque chose</translation>
</message>
<message>
<location filename="../../view/Control/Input/Chat/ChatDroppableTextArea.qml" line="187"/>
<location filename="../../view/Control/Input/Chat/ChatDroppableTextArea.qml" line="190"/>
<source>cannot_record_while_in_call_tooltip</source>
<extracomment>Cannot record a message while a call is ongoing</extracomment>
<translation>Impossible d&apos;enregistrer un message vocal pendant un appel</translation>
@ -2223,13 +2242,13 @@ Error</extracomment>
<context>
<name>ChatMessageContentModel</name>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="104"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="105"/>
<source>popup_error_title</source>
<extracomment>Error</extracomment>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="107"/>
<location filename="../../model/chat/message/content/ChatMessageContentModel.cpp" line="108"/>
<source>popup_download_error_message</source>
<extracomment>This file was already downloaded and is no more on the server. Your peer have to resend it if you want to get it</extracomment>
<translation>Ce fichier a déjà é téléchargé et n&apos;est plus sur le serveur. Votre correspondant devra vous le renvoyer si vous voulez y avoir accès.</translation>
@ -4771,36 +4790,36 @@ Expiration : %1</translation>
<context>
<name>Notifier</name>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="309"/>
<location filename="../../core/notifier/Notifier.cpp" line="310"/>
<source>new_call_alert_accessible_name</source>
<extracomment>New call from %1</extracomment>
<translation>Nouvel appel de %1</translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="361"/>
<location filename="../../core/notifier/Notifier.cpp" line="363"/>
<source>new_voice_message</source>
<extracomment>&apos;Voice message received!&apos; : message to warn the user in a notofication for voice messages.</extracomment>
<translation>Message vocal reçu !</translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="362"/>
<location filename="../../core/notifier/Notifier.cpp" line="364"/>
<source>new_file_message</source>
<translation>Fichier reçu !</translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="365"/>
<location filename="../../core/notifier/Notifier.cpp" line="367"/>
<source>new_conference_invitation</source>
<extracomment>&apos;Conference invitation received!&apos; : Notification about receiving an invitation to a conference.</extracomment>
<translation>Nouvelle invitation à une conférence !</translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="385"/>
<location filename="../../core/notifier/Notifier.cpp" line="387"/>
<source>new_chat_room_messages</source>
<extracomment>&apos;New messages received!&apos; Notification that warn the user of new messages.</extracomment>
<translation>Nouveaux messages reçus !</translation>
</message>
<message>
<location filename="../../core/notifier/Notifier.cpp" line="392"/>
<location filename="../../core/notifier/Notifier.cpp" line="394"/>
<source>new_message_alert_accessible_name</source>
<extracomment>New message on chatroom %1</extracomment>
<translation>Nouveau message sur la conversation %1</translation>
@ -4820,102 +4839,102 @@ Expiration : %1</translation>
<translation>Timeout : non authentifié</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="123"/>
<location filename="../../model/auth/OIDCModel.cpp" line="125"/>
<source>oidc_authentication_granted_message</source>
<extracomment>Authentication granted</extracomment>
<translation>Authentification accordée</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="130"/>
<location filename="../../model/auth/OIDCModel.cpp" line="132"/>
<source>oidc_authentication_not_authenticated_message</source>
<extracomment>Not authenticated</extracomment>
<translation>Non authentifié</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="136"/>
<location filename="../../model/auth/OIDCModel.cpp" line="138"/>
<source>oidc_authentication_refresh_message</source>
<extracomment>Refreshing token</extracomment>
<translation>Token en cours de rafraîchissement</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="141"/>
<location filename="../../model/auth/OIDCModel.cpp" line="143"/>
<source>oidc_authentication_temporary_credentials_message</source>
<extracomment>Temporary credentials received</extracomment>
<translation>Identifiants temporaires reçus</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="159"/>
<location filename="../../model/auth/OIDCModel.cpp" line="161"/>
<source>oidc_authentication_network_error</source>
<extracomment>Network error</extracomment>
<translation>Erreur réseau</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="163"/>
<location filename="../../model/auth/OIDCModel.cpp" line="165"/>
<source>oidc_authentication_server_error</source>
<extracomment>Server error</extracomment>
<translation>Erreur de serveur</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="167"/>
<location filename="../../model/auth/OIDCModel.cpp" line="169"/>
<source>oidc_authentication_token_not_found_error</source>
<extracomment>OAuth token not found</extracomment>
<translation>Token OAuth non trouvé</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="171"/>
<location filename="../../model/auth/OIDCModel.cpp" line="173"/>
<source>oidc_authentication_token_secret_not_found_error</source>
<extracomment>OAuth token secret not found</extracomment>
<translation>Token OAuth secret non trouvé</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="175"/>
<location filename="../../model/auth/OIDCModel.cpp" line="177"/>
<source>oidc_authentication_callback_not_verified_error</source>
<extracomment>OAuth callback not verified</extracomment>
<translation>Retour OAuth non vérifié</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="186"/>
<location filename="../../model/auth/OIDCModel.cpp" line="188"/>
<source>oidc_authentication_request_auth_message</source>
<extracomment>Requesting authorization from browser</extracomment>
<translation>En attente d&apos;autorisation du navigateur</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="217"/>
<location filename="../../model/auth/OIDCModel.cpp" line="219"/>
<source>oidc_authentication_no_token_found_error</source>
<translation>Token non trouvé</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="230"/>
<location filename="../../model/auth/OIDCModel.cpp" line="232"/>
<source>oidc_authentication_request_token_message</source>
<extracomment>Requesting access token</extracomment>
<translation>En attente du token d&apos;accès</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="235"/>
<location filename="../../model/auth/OIDCModel.cpp" line="237"/>
<source>oidc_authentication_refresh_token_message</source>
<extracomment>Refreshing access token</extracomment>
<translation>Token en cours de rafraîchissement</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="240"/>
<location filename="../../model/auth/OIDCModel.cpp" line="242"/>
<source>oidc_authentication_request_authorization_message</source>
<extracomment>Requesting authorization</extracomment>
<translation>Autorisation en cours</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="245"/>
<location filename="../../model/auth/OIDCModel.cpp" line="247"/>
<source>oidc_authentication_request_temporary_credentials_message</source>
<extracomment>Requesting temporary credentials</extracomment>
<translation>En attente d&apos;identifiants temporaires</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="272"/>
<location filename="../../model/auth/OIDCModel.cpp" line="274"/>
<source>oidc_authentication_no_auth_found_in_config_error</source>
<extracomment>No authorization endpoint found in OpenID configuration</extracomment>
<translation>Pas d&apos;autorisation trouvé dans la configuration OpenID</translation>
</message>
<message>
<location filename="../../model/auth/OIDCModel.cpp" line="287"/>
<location filename="../../model/auth/OIDCModel.cpp" line="289"/>
<source>oidc_authentication_no_token_found_in_config_error</source>
<extracomment>No token endpoint found in OpenID configuration</extracomment>
<translation>Pas de token trouvé dans la configuration OpenID</translation>
@ -5575,37 +5594,37 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
<translation>Démarrer un appel de groupe ?</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="118"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="121"/>
<source>unencrypted_conversation_warning</source>
<extracomment>This conversation is not encrypted !</extracomment>
<translation>Cette conversation n&apos;est pas chiffrée !</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="436"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="407"/>
<source>reply_to_label</source>
<extracomment>Reply to %1</extracomment>
<translation>Réponse à %1</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="637"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="607"/>
<source>shared_medias_title</source>
<extracomment>Shared medias</extracomment>
<translation>Médias partagés</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="639"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="609"/>
<source>shared_documents_title</source>
<extracomment>Shared documents</extracomment>
<translation>Documents partagés</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="668"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="638"/>
<source>forward_to_title</source>
<extracomment>Forward to</extracomment>
<translation>Transférer à</translation>
</message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="702"/>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="672"/>
<source>conversations_title</source>
<extracomment>Conversations</extracomment>
<translation>Conversations</translation>
@ -5658,11 +5677,6 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
<extracomment>&quot;Réunions&quot;</extracomment>
<translation>Réunions</translation>
</message>
<message>
<source>settings_security_title</source>
<extracomment>&quot;Affichage&quot; &quot;Security&quot;</extracomment>
<translation type="vanished">Sécurité / Chiffrement</translation>
</message>
<message>
<location filename="../../view/Page/Form/Settings/SettingsPage.qml" line="29"/>
<source>settings_network_title</source>
@ -5744,38 +5758,38 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
<translation>Impossible de créer l&apos;appel de groupe, le compte par défaut n&apos;est pas défini</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="408"/>
<location filename="../../model/tool/ToolModel.cpp" line="413"/>
<source>group_call_error_participants_invite</source>
<translation>Impossible d&apos;inviter les participants à l&apos;appel de groupe</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="412"/>
<location filename="../../model/tool/ToolModel.cpp" line="417"/>
<source>group_call_error_creation</source>
<translation>L&apos;appel de groupe n&apos;a pas pu être créé</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="512"/>
<location filename="../../model/tool/ToolModel.cpp" line="517"/>
<source>voice_recording_duration</source>
<extracomment>&quot;Voice recording (%1)&quot; : %1 is the duration formated in mm:ss</extracomment>
<translation>Message vocal (%1)</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="585"/>
<location filename="../../model/tool/ToolModel.cpp" line="591"/>
<source>unknown_audio_device_name</source>
<translation>Appareil inconnu</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="520"/>
<location filename="../../model/tool/ToolModel.cpp" line="525"/>
<source>conference_invitation</source>
<translation>Invitation à une réunion</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="524"/>
<location filename="../../model/tool/ToolModel.cpp" line="529"/>
<source>conference_invitation_cancelled</source>
<translation>Annulation d&apos;une réunion</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="522"/>
<location filename="../../model/tool/ToolModel.cpp" line="527"/>
<source>conference_invitation_updated</source>
<translation>Modification d&apos;une réunion</translation>
</message>

View file

@ -49,19 +49,19 @@ int main(int argc, char *argv[]) {
#endif
*/
// Useful to share camera on Fullscreen (other context) or multiscreens
qDebug() << "[Main] Setting ShareOpenGLContexts";
lDebug() << "[Main] Setting ShareOpenGLContexts";
QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
qDebug() << "[Main] Disabling VSync";
lDebug() << "[Main] Disabling VSync";
// Ignore vertical sync. This way, we avoid blinking on resizes(and other refresh like layouts etc.).
auto ignoreVSync = QSurfaceFormat::defaultFormat();
ignoreVSync.setSwapInterval(0);
QSurfaceFormat::setDefaultFormat(ignoreVSync);
// Disable QML cache. Avoid malformed cache.
qDebug() << "[Main] Disabling QML disk cache";
lDebug() << "[Main] Disabling QML disk cache";
qputenv("QML_DISABLE_DISK_CACHE", "true");
qDebug() << "[Main] Setting application to UTF8";
lDebug() << "[Main] Setting application to UTF8";
setlocale(LC_CTYPE, ".UTF8");
qDebug() << "[Main] Creating application";
lDebug() << "[Main] Creating application";
auto app = QSharedPointer<App>::create(argc, argv);
#ifdef ACCESSBILITY_WORKAROUND
QAccessible::installUpdateHandler(DummyUpdateHandler);
@ -69,29 +69,29 @@ int main(int argc, char *argv[]) {
#endif
if (app->isSecondary()) {
qDebug() << "[Main] Sending command from secondary application";
lDebug() << "[Main] Sending command from secondary application";
app->sendCommand();
qInfo() << QStringLiteral("[Main] Running secondary app success. Kill it now.");
app->clean();
cleanStream();
return EXIT_SUCCESS;
} else {
qDebug() << "[Main] Initializing core for primary application";
lDebug() << "[Main] Initializing core for primary application";
app->initCore();
qDebug() << "[Main] Preparing application's connections";
lDebug() << "[Main] Preparing application's connections";
app->setSelf(app);
}
int result = 0;
do {
qDebug() << "[Main] Sending command from primary application";
lDebug() << "[Main] Sending command from primary application";
app->sendCommand();
qInfo() << "[Main] Running application";
lInfo() << "[Main] Running application";
result = app->exec();
} while (result == (int)App::StatusCode::gRestartCode);
QString message = "[Main] Exiting app with the code : " + QString::number(result);
if (!result) qInfo() << message;
else qWarning() << message;
if (!result) lInfo() << message;
else lWarning() << message;
app->clean();
app = nullptr;
cleanStream();

View file

@ -189,7 +189,7 @@ void AccountManager::registerNewAccount(const QString &username,
const std::shared_ptr<const linphone::AccountManagerServicesRequest> &request, const std::string &data) {
if (request->getType() == linphone::AccountManagerServicesRequest::Type::AccountCreationRequestToken) {
QString verifyTokenUrl = Utils::coreStringToAppString(data);
qDebug() << "[AccountManager] request token succeed" << verifyTokenUrl;
lInfo() << "[AccountManager] request token succeed" << verifyTokenUrl;
QDesktopServices::openUrl(verifyTokenUrl);
auto creationToken = verifyTokenUrl.mid(verifyTokenUrl.lastIndexOf("/") + 1);
@ -206,7 +206,7 @@ void AccountManager::registerNewAccount(const QString &username,
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::
AccountCreationTokenFromAccountCreationRequestToken) {
qDebug() << "[AccountManager] request token conversion succeed" << data;
lInfo() << "[AccountManager] request token conversion succeed" << data;
emit tokenConversionSucceed(Utils::coreStringToAppString(data));
timer.stop();
mAccountManagerServicesModel->createAccountUsingToken(Utils::appStringToCoreString(username),
@ -225,24 +225,24 @@ void AccountManager::registerNewAccount(const QString &username,
createdSipIdentityAddress->getDomain() // Domain.
));
if (type == RegisterType::Email) {
qDebug() << "[AccountManager] creation succeed, email verification" << registerAddress;
lInfo() << "[AccountManager] creation succeed, email verification" << registerAddress;
mAccountManagerServicesModel->linkEmailByEmail(
ToolModel::interpretUrl(Utils::coreStringToAppString(data)),
Utils::appStringToCoreString(registerAddress));
} else {
qDebug() << "[AccountManager] creation succeed, sms verification" << registerAddress;
lInfo() << "[AccountManager] creation succeed, sms verification" << registerAddress;
mAccountManagerServicesModel->linkPhoneNumberBySms(
ToolModel::interpretUrl(Utils::coreStringToAppString(data)),
Utils::appStringToCoreString(registerAddress));
}
} else if (request->getType() ==
linphone::AccountManagerServicesRequest::Type::SendEmailLinkingCodeByEmail) {
qDebug() << "[AccountManager] send email succeed, link account using code";
lInfo() << "[AccountManager] send email succeed, link account using code";
emit newAccountCreationSucceed(mCreatedSipAddress, type, registerAddress);
mCreatedSipAddress.clear();
} else if (request->getType() ==
linphone::AccountManagerServicesRequest::Type::SendPhoneNumberLinkingCodeBySms) {
qDebug() << "[AccountManager] send phone number succeed, link account using code";
lInfo() << "[AccountManager] send phone number succeed, link account using code";
emit newAccountCreationSucceed(mCreatedSipAddress, type, registerAddress);
mCreatedSipAddress.clear();
}
@ -252,11 +252,11 @@ void AccountManager::registerNewAccount(const QString &username,
[this](const std::shared_ptr<const linphone::AccountManagerServicesRequest> &request, int statusCode,
const std::string &errorMessage, const std::shared_ptr<const linphone::Dictionary> &parameterErrors) {
if (request->getType() == linphone::AccountManagerServicesRequest::Type::AccountCreationRequestToken) {
qDebug() << "[AccountManager] error creating request token :" << errorMessage;
lInfo() << "[AccountManager] error creating request token :" << errorMessage;
emit registerNewAccountFailed(Utils::coreStringToAppString(errorMessage));
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::
AccountCreationTokenFromAccountCreationRequestToken) {
qDebug() << "[AccountManager] error converting token into creation token :" << errorMessage;
lInfo() << "[AccountManager] error converting token into creation token :" << errorMessage;
if (parameterErrors) {
timer.stop();
emit registerNewAccountFailed(Utils::coreStringToAppString(errorMessage));
@ -264,7 +264,7 @@ void AccountManager::registerNewAccount(const QString &username,
timer.start();
}
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::CreateAccountUsingToken) {
qDebug() << "[AccountManager] error creating account :" << errorMessage;
lInfo() << "[AccountManager] error creating account :" << errorMessage;
if (parameterErrors) {
for (const std::string &key : parameterErrors->getKeys()) {
emit errorInField(Utils::coreStringToAppString(key),
@ -275,7 +275,7 @@ void AccountManager::registerNewAccount(const QString &username,
}
} else if (request->getType() ==
linphone::AccountManagerServicesRequest::Type::SendEmailLinkingCodeByEmail) {
qDebug() << "[AccountManager] error sending code to email" << errorMessage;
lInfo() << "[AccountManager] error sending code to email" << errorMessage;
if (parameterErrors) {
for (const std::string &key : parameterErrors->getKeys()) {
emit errorInField(Utils::coreStringToAppString(key),
@ -286,7 +286,7 @@ void AccountManager::registerNewAccount(const QString &username,
}
} else if (request->getType() ==
linphone::AccountManagerServicesRequest::Type::SendPhoneNumberLinkingCodeBySms) {
qDebug() << "[AccountManager] error sending code to phone number" << errorMessage;
lInfo() << "[AccountManager] error sending code to phone number" << errorMessage;
if (parameterErrors) {
for (const std::string &key : parameterErrors->getKeys()) {
emit errorInField(Utils::coreStringToAppString(key),
@ -320,10 +320,10 @@ void AccountManager::linkNewAccountUsingCode(const QString &code,
mAccountManagerServicesModel.get(), &AccountManagerServicesModel::requestSuccessfull, this,
[this](const std::shared_ptr<const linphone::AccountManagerServicesRequest> &request, const std::string &data) {
if (request->getType() == linphone::AccountManagerServicesRequest::Type::LinkEmailUsingCode) {
qDebug() << "[AccountManager] link email to account succeed" << data;
lInfo() << "[AccountManager] link email to account succeed" << data;
emit linkingNewAccountWithCodeSucceed();
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::LinkPhoneNumberUsingCode) {
qDebug() << "[AccountManager] link phone number to account succeed" << data;
lInfo() << "[AccountManager] link phone number to account succeed" << data;
emit linkingNewAccountWithCodeSucceed();
}
});
@ -332,9 +332,9 @@ void AccountManager::linkNewAccountUsingCode(const QString &code,
[this](const std::shared_ptr<const linphone::AccountManagerServicesRequest> &request, int statusCode,
const std::string &errorMessage, const std::shared_ptr<const linphone::Dictionary> &parameterErrors) {
if (request->getType() == linphone::AccountManagerServicesRequest::Type::LinkEmailUsingCode) {
qDebug() << "[AccountManager] error linking email to account" << errorMessage;
lInfo() << "[AccountManager] error linking email to account" << errorMessage;
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::LinkPhoneNumberUsingCode) {
qDebug() << "[AccountManager] error linking phone number to account" << errorMessage;
lInfo() << "[AccountManager] error linking phone number to account" << errorMessage;
}
emit linkingNewAccountWithCodeFailed(Utils::coreStringToAppString(errorMessage));
});

View file

@ -52,7 +52,7 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
qDebug() << "OIDC Redirect URI Port set to [" << port << "]";
auto replyHandler = new OAuthHttpServerReplyHandler(port, this);
if (!replyHandler->isListening()) {
qWarning() << "OAuthHttpServerReplyHandler is not listening on port" << port;
lWarning() << log().arg("OAuthHttpServerReplyHandler is not listening on port") << port;
emit requestFailed(tr("OAuthHttpServerReplyHandler is not listening"));
emit finished();
return;
@ -99,7 +99,7 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
mTimeout.setInterval(1000 * 60 * 2); // 2minutes
connect(&mTimeout, &QTimer::timeout, [this]() {
qWarning() << log().arg("Timeout reached for OpenID connection.");
lWarning() << log().arg("Timeout reached for OpenID connection.");
dynamic_cast<OAuthHttpServerReplyHandler *>(mOidc.replyHandler())->close();
CoreModel::getInstance()->getCore()->abortAuthentication(mAuthInfo);
//: Timeout: Not authenticated
@ -108,11 +108,13 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
});
connect(mOidc.networkAccessManager(), &QNetworkAccessManager::authenticationRequired,
[=](QNetworkReply *reply, QAuthenticator *authenticator) {
lDebug() << "authenticationRequired url [" << reply->url() << "]";
lInfo() << "authenticationRequired url [" << reply->url() << "]";
if (mOidc.clientIdentifierSharedKey().isEmpty() == false) {
authenticator->setUser(mOidc.clientIdentifier());
authenticator->setPassword(mOidc.clientIdentifierSharedKey());
} else lWarning() << "client secret not found for client id [" << mOidc.clientIdentifier() << "]";
} else
lWarning() << log().arg("client secret not found for client id [") << mOidc.clientIdentifier()
<< "]";
});
connect(&mOidc, &QOAuth2AuthorizationCodeFlow::statusChanged, [=](QAbstractOAuth::Status status) {
@ -152,7 +154,7 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
const QMetaObject metaObject = QAbstractOAuth::staticMetaObject;
int index = metaObject.indexOfEnumerator("Error");
QMetaEnum metaEnum = metaObject.enumerator(index);
qWarning() << "RequestFailed:" << metaEnum.valueToKey(static_cast<int>(error));
lWarning() << log().arg("RequestFailed:") << metaEnum.valueToKey(static_cast<int>(error));
switch (error) {
case QAbstractOAuth::Error::NetworkError:
//: Network error
@ -213,7 +215,7 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
} else {
mIdToken.clear();
qWarning() << "No ID Token or Access Token found in the tokens.";
lWarning() << "No ID Token or Access Token found in the tokens.";
emit requestFailed(tr("oidc_authentication_no_token_found_error"));
emit finished();
}
@ -267,7 +269,7 @@ void OIDCModel::openIdConfigReceived() {
if (rootArray.contains("authorization_endpoint")) {
mOidc.setAuthorizationUrl(QUrl(rootArray["authorization_endpoint"].toString()));
} else {
qWarning() << "No authorization endpoint found in OpenID configuration";
lWarning() << log().arg("No authorization endpoint found in OpenID configuration");
//: No authorization endpoint found in OpenID configuration
emit requestFailed(tr("oidc_authentication_no_auth_found_in_config_error"));
emit finished();
@ -282,7 +284,7 @@ void OIDCModel::openIdConfigReceived() {
mAuthInfo->setTokenEndpointUri(
Utils::appStringToCoreString(QUrl(rootArray["token_endpoint"].toString()).toString()));
} else {
qWarning() << "No token endpoint found in OpenID configuration";
lWarning() << log().arg("No token endpoint found in OpenID configuration");
//: No token endpoint found in OpenID configuration
emit requestFailed(tr("oidc_authentication_no_token_found_in_config_error"));
emit finished();
@ -307,7 +309,7 @@ void OIDCModel::setBearers() {
mAuthInfo->setRefreshToken(refreshBearer);
} else {
qWarning() << "No refresh token found";
lWarning() << log().arg("No refresh token found");
}
CoreModel::getInstance()->getCore()->addAuthInfo(mAuthInfo);
emit CoreModel::getInstance()->bearerAccountAdded();

View file

@ -97,7 +97,7 @@ void CallModel::setPaused(bool paused) {
void CallModel::transferTo(const std::shared_ptr<linphone::Address> &address) {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
if (mMonitor->transferTo(address) == -1)
qWarning() << log()
lWarning() << log()
.arg(QStringLiteral("Unable to transfer: `%1`."))
.arg(Utils::coreStringToAppString(address->asStringUriOnly()));
}
@ -105,7 +105,7 @@ void CallModel::transferTo(const std::shared_ptr<linphone::Address> &address) {
void CallModel::transferToAnother(const std::shared_ptr<linphone::Call> &call) {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
if (mMonitor->transferToAnother(call) == -1)
qWarning() << log()
lWarning() << log()
.arg(QStringLiteral("Unable to transfer: `%1`."))
.arg(Utils::coreStringToAppString(call->getRemoteAddress()->asStringUriOnly()));
}
@ -331,14 +331,14 @@ void CallModel::setVideoSourceDescriptorModel(std::shared_ptr<VideoSourceDescrip
void CallModel::sendDtmf(const QString &dtmf) {
const char key = dtmf.constData()[0].toLatin1();
qInfo() << QStringLiteral("Send dtmf: `%1`.").arg(key);
lInfo() << log().arg("Send dtmf: `%1`.").arg(key);
if (mMonitor) mMonitor->sendDtmf(key);
CoreModel::getInstance()->getCore()->playDtmf(key, gDtmfSoundDelay);
}
void CallModel::updateCallErrorFromReason(linphone::Reason reason) {
QString error;
qDebug() << "call Error reason" << (int)reason;
lDebug() << log().arg("call Error reason") << (int)reason;
switch (reason) {
case linphone::Reason::None:
error = "";
@ -391,7 +391,7 @@ void CallModel::updateCallErrorFromReason(linphone::Reason reason) {
break;
}
if (!error.isEmpty()) qInfo() << QStringLiteral("Call terminated with error (%1):").arg(error) << this;
if (!error.isEmpty()) lInfo() << log().arg("Call terminated with error (%1):").arg(error) << this;
emit errorMessageChanged(error);
}

View file

@ -85,7 +85,7 @@ void ChatMessageContentModel::downloadFile(const QString &name) {
case linphone::ChatMessage::State::FileTransferInProgress:
return;
default:
qWarning() << QStringLiteral("Wrong message state when requesting downloading, state=.")
lWarning() << QStringLiteral("Wrong message state when requesting downloading, state=.")
<< LinphoneEnums::fromLinphone(mChatMessageModel->getState());
}
bool soFarSoGood;
@ -93,12 +93,13 @@ void ChatMessageContentModel::downloadFile(const QString &name) {
QStringLiteral("%1%2").arg(App::getInstance()->getSettings()->getDownloadFolder()).arg(name), &soFarSoGood);
if (!soFarSoGood) {
qWarning() << QStringLiteral("Unable to create safe file path for: %1.").arg(name);
lWarning() << QStringLiteral("Unable to create safe file path for: %1.").arg(name);
return;
}
mContent->setFilePath(Utils::appStringToCoreString(safeFilePath));
if (!mContent->isFileTransfer()) {
lWarning() << QStringLiteral("file transfer is not available");
Utils::showInformationPopup(
//: Error
tr("popup_error_title"),
@ -107,7 +108,7 @@ void ChatMessageContentModel::downloadFile(const QString &name) {
tr("popup_download_error_message"), false);
} else {
if (!mChatMessageModel->getMonitor()->downloadContent(mContent))
qWarning() << QStringLiteral("Unable to download file of entry %1.").arg(name);
lWarning() << QStringLiteral("Unable to download file of entry %1.").arg(name);
}
}

View file

@ -93,7 +93,7 @@ QString CliModel::parseFunctionName(const QString &command, bool isOptional) {
// mRegExpFunctionName.indexIn(command.toLower());
// if (mRegExpFunctionName.pos(1) == -1) {
if (!match.hasMatch()) {
if (!isOptional) qWarning() << QStringLiteral("Unable to parse function name of command: `%1`.").arg(command);
if (!isOptional) lWarning() << QStringLiteral("Unable to parse function name of command: `%1`.").arg(command);
return QString("");
}
@ -102,7 +102,7 @@ QString CliModel::parseFunctionName(const QString &command, bool isOptional) {
const QString functionName = texts[1];
if (!mCommands.contains(functionName)) {
if (!isOptional) qWarning() << QStringLiteral("This command doesn't exist: `%1`.").arg(functionName);
if (!isOptional) lWarning() << QStringLiteral("This command doesn't exist: `%1`.").arg(functionName);
return QString("");
}
@ -344,7 +344,7 @@ void CliModel::executeCommand(const QString &command) { //, CommandFormat *forma
const QString &functionName = parseFunctionName(command, false);
const QString configURI = QString(EXECUTABLE_NAME).toLower() + "-config";
if (!functionName.isEmpty()) { // It is a CLI
qInfo() << QStringLiteral("Detecting cli command: `%1`…").arg(command);
lInfo() << log().arg("Detecting cli command: `%1`…").arg(command);
QHash<QString, QString> args = parseArgs(command);
QHash<QString, QString> argsToProcess;
for (auto it = args.begin(); it != args.end(); ++it) {
@ -410,7 +410,7 @@ void CliModel::executeCommand(const QString &command) { //, CommandFormat *forma
address = linphone::Factory::get()->createAddress(
Utils::appStringToCoreString(transformedCommand)); // Test if command is an address
// if (format) *format = UriFormat;
qInfo() << QStringLiteral("Detecting URI command: `%1`…").arg(command);
lInfo() << log().arg("Detecting URI command: `%1`…").arg(command);
QString functionName;
if (address) {
functionName = Utils::coreStringToAppString(address->getHeader("method")).isEmpty()
@ -429,10 +429,10 @@ void CliModel::executeCommand(const QString &command) { //, CommandFormat *forma
}
functionName = functionName.toLower();
if (functionName.isEmpty()) {
qWarning() << QStringLiteral("There is no method set in `%1`.").arg(command);
lWarning() << log().arg("There is no method set in `%1`.").arg(command);
return;
} else if (!mCommands.contains(functionName)) {
qWarning() << QStringLiteral("This command doesn't exist: `%1`.").arg(functionName);
lWarning() << log().arg("This command doesn't exist: `%1`.").arg(functionName);
return;
}
QHash<QString, QString> headers;

View file

@ -183,20 +183,20 @@ void ConferenceModel::onActiveSpeakerParticipantDevice(
void ConferenceModel::onParticipantAdded(const std::shared_ptr<linphone::Conference> &conference,
const std::shared_ptr<linphone::Participant> &participant) {
lDebug() << "onParticipant Added" << participant->getAddress()->asStringUriOnly();
lInfo() << "onParticipant Added" << participant->getAddress()->asStringUriOnly();
emit participantAdded(participant);
emit participantDeviceCountChanged(conference, getParticipantDeviceCount());
}
void ConferenceModel::onParticipantRemoved(const std::shared_ptr<linphone::Conference> &conference,
const std::shared_ptr<const linphone::Participant> &participant) {
lDebug() << "onParticipant Removed" << participant->getAddress()->asStringUriOnly();
lInfo() << "onParticipant Removed" << participant->getAddress()->asStringUriOnly();
emit participantRemoved(participant);
emit participantDeviceCountChanged(conference, getParticipantDeviceCount());
}
void ConferenceModel::onParticipantDeviceAdded(const std::shared_ptr<linphone::Conference> &conference,
const std::shared_ptr<linphone::ParticipantDevice> &participantDevice) {
lDebug() << "onParticipantDeviceAdded";
lDebug() << "Me devices : " << conference->getMe()->getDevices().size();
lInfo() << "onParticipantDeviceAdded";
lInfo() << "Me devices : " << conference->getMe()->getDevices().size();
if (conference->getMe()->getDevices().size() > 1)
for (auto d : conference->getMe()->getDevices())
lDebug() << "\t--> " << d->getAddress()->asString().c_str();
@ -222,23 +222,23 @@ void ConferenceModel::onParticipantDeviceStateChanged(const std::shared_ptr<linp
}
void ConferenceModel::onParticipantAdminStatusChanged(const std::shared_ptr<linphone::Conference> &conference,
const std::shared_ptr<const linphone::Participant> &participant) {
lDebug() << "onParticipantAdminStatusChanged";
lInfo() << "onParticipantAdminStatusChanged";
emit participantAdminStatusChanged(participant);
}
void ConferenceModel::onParticipantDeviceMediaCapabilityChanged(
const std::shared_ptr<linphone::Conference> &conference,
const std::shared_ptr<const linphone::ParticipantDevice> &participantDevice) {
lDebug() << "onParticipantDeviceMediaCapabilityChanged: "
<< (int)participantDevice->getStreamCapability(linphone::StreamType::Video)
<< ". Device: " << participantDevice->getAddress()->asString().c_str();
lInfo() << "onParticipantDeviceMediaCapabilityChanged: "
<< (int)participantDevice->getStreamCapability(linphone::StreamType::Video)
<< ". Device: " << participantDevice->getAddress()->asString().c_str();
emit participantDeviceMediaCapabilityChanged(participantDevice);
}
void ConferenceModel::onParticipantDeviceMediaAvailabilityChanged(
const std::shared_ptr<linphone::Conference> &conference,
const std::shared_ptr<const linphone::ParticipantDevice> &participantDevice) {
lDebug() << "onParticipantDeviceMediaAvailabilityChanged: "
<< (int)participantDevice->getStreamAvailability(linphone::StreamType::Video)
<< ". Device: " << participantDevice->getAddress()->asString().c_str();
lInfo() << "onParticipantDeviceMediaAvailabilityChanged: "
<< (int)participantDevice->getStreamAvailability(linphone::StreamType::Video)
<< ". Device: " << participantDevice->getAddress()->asString().c_str();
emit participantDeviceMediaAvailabilityChanged(participantDevice);
}
void ConferenceModel::onParticipantDeviceIsSpeakingChanged(
@ -254,8 +254,8 @@ void ConferenceModel::onParticipantDeviceScreenSharingChanged(
const std::shared_ptr<linphone::Conference> &conference,
const std::shared_ptr<const linphone::ParticipantDevice> &device,
bool enabled) {
qDebug() << "onParticipantDeviceScreenSharingChanged: " << device->getAddress()->asString().c_str()
<< ". Enabled:" << enabled;
lInfo() << log().arg("onParticipantDeviceScreenSharingChanged: ") << device->getAddress()->asString().c_str()
<< ". Enabled:" << enabled;
emit participantDeviceScreenSharingChanged(device, enabled);
if (ToolModel::isLocal(mMonitor, device)) {
emit isLocalScreenSharingChanged(enabled);
@ -265,7 +265,7 @@ void ConferenceModel::onParticipantDeviceScreenSharingChanged(
void ConferenceModel::onStateChanged(const std::shared_ptr<linphone::Conference> &conference,
linphone::Conference::State newState) {
lDebug() << log().arg("onStateChanged:") << (int)newState;
lInfo() << log().arg("onStateChanged:") << (int)newState;
if (newState == linphone::Conference::State::Created) {
emit participantDeviceCountChanged(conference, mMonitor->getParticipantDeviceList().size());
if (mMonitor->getScreenSharingParticipant()) emit isScreenSharingEnabledChanged(true);
@ -275,7 +275,7 @@ void ConferenceModel::onStateChanged(const std::shared_ptr<linphone::Conference>
}
void ConferenceModel::onSubjectChanged(const std::shared_ptr<linphone::Conference> &conference,
const std::string &subject) {
lDebug() << "onSubjectChanged";
lInfo() << "onSubjectChanged";
emit subjectChanged(subject);
}
void ConferenceModel::onAudioDeviceChanged(const std::shared_ptr<linphone::Conference> &conference,
@ -286,7 +286,7 @@ void ConferenceModel::onAudioDeviceChanged(const std::shared_ptr<linphone::Confe
void ConferenceModel::onIsScreenSharingEnabledChanged() {
auto call = mMonitor->getCall();
std::shared_ptr<linphone::CallParams> params = CoreModel::getInstance()->getCore()->createCallParams(call);
lDebug() << log().arg("Old Layout=%1").arg((int)params->getConferenceVideoLayout());
lInfo() << log().arg("Old Layout=%1").arg((int)params->getConferenceVideoLayout());
if (params->getConferenceVideoLayout() == linphone::Conference::Layout::Grid && params->videoEnabled()) {
params->setConferenceVideoLayout(linphone::Conference::Layout::ActiveSpeaker);
}

View file

@ -59,7 +59,11 @@ void MagicSearchModel::search(QString filter,
// sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::ChatRooms;
// sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::ConferencesInfo;
}
qInfo() << log().arg("Searching ") << filter << " from " << sourceFlags << " with limit " << maxResults;
if (((sourceFlags & (int)LinphoneEnums::MagicSearchSource::RemoteCardDAV) > 0) &&
SettingsModel::getInstance()->getCardDAVMinCharResearch() > filter.size()) {
sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::RemoteCardDAV;
}
lInfo() << log().arg("Searching ") << filter << " from " << sourceFlags << " with limit " << maxResults;
mMonitor->getContactsListAsync(filter != "*" ? Utils::appStringToCoreString(filter) : "", "", sourceFlags,
LinphoneEnums::toLinphone(aggregation));
}
@ -80,7 +84,7 @@ void MagicSearchModel::setMaxResults(int maxResults) {
void MagicSearchModel::onSearchResultsReceived(const std::shared_ptr<linphone::MagicSearch> &magicSearch) {
auto results = magicSearch->getLastSearch();
qInfo() << log().arg("SDK send callback: onSearchResultsReceived : %1 results.").arg(results.size());
lInfo() << log().arg("SDK send callback: onSearchResultsReceived : %1 results.").arg(results.size());
auto appFriends = ToolModel::getAppFriendList();
auto ldapFriends = ToolModel::getLdapFriendList();
emit searchResultsReceived(results);

View file

@ -156,18 +156,18 @@ void SettingsModel::startCaptureGraph() {
// Media cards must not be used twice (capture card + call) else we will get latencies issues and bad echo
// calibrations in call.
if (!getIsInCall() && !mSimpleCaptureGraph) {
qDebug() << log().arg("Starting capture graph [%1]").arg(mCaptureGraphListenerCount);
lDebug() << log().arg("Starting capture graph [%1]").arg(mCaptureGraphListenerCount);
createCaptureGraph();
} else qDebug() << log().arg("Adding capture graph reference [%1]").arg(mCaptureGraphListenerCount);
} else lDebug() << log().arg("Adding capture graph reference [%1]").arg(mCaptureGraphListenerCount);
++mCaptureGraphListenerCount;
}
void SettingsModel::stopCaptureGraph() {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
if (--mCaptureGraphListenerCount == 0) {
qDebug() << log().arg("Stopping capture graph [%1]").arg(mCaptureGraphListenerCount);
lDebug() << log().arg("Stopping capture graph [%1]").arg(mCaptureGraphListenerCount);
deleteCaptureGraph();
} else if (mCaptureGraphListenerCount > 0)
qDebug() << log().arg("Removing capture graph reference [%1]").arg(mCaptureGraphListenerCount);
lDebug() << log().arg("Removing capture graph reference [%1]").arg(mCaptureGraphListenerCount);
else qCritical() << log().arg("Removing too much capture graph reference [%1]").arg(mCaptureGraphListenerCount);
}

View file

@ -82,7 +82,7 @@ bool SoundPlayerModel::play(QString source, bool fromStart) {
if (source == "") return false;
if (fromStart) stop();
if (!open(source)) {
qWarning() << QStringLiteral("Unable to open: `%1`").arg(source);
lWarning() << QStringLiteral("[SoundPlayerModel] %1 Unable to open: `%2`").arg(Q_FUNC_INFO).arg(source);
//: Unable to open: `%1`
emit errorChanged(QString("sound_player_open_error").arg(source));
return false;
@ -102,7 +102,7 @@ bool SoundPlayerModel::play(QString source, bool fromStart) {
void SoundPlayerModel::seek(QString source, int offset) {
if (!open(source)) {
qWarning() << QStringLiteral("Unable to open: `%1`").arg(source);
lWarning() << QStringLiteral("[SoundPlayerModel] %1 Unable to open: `%2`").arg(Q_FUNC_INFO).arg(source);
//: Unable to open: `%1`
emit errorChanged(QString("sound_player_open_error").arg(source));
return;

View file

@ -373,7 +373,7 @@ bool ToolModel::createCall(const QString &sipAddress,
*/
}
bool ToolModel::createGroupCall(QString subject, const std::list<QString> &participantAddresses, QString *message) {
std::shared_ptr<linphone::Conference> ToolModel::createConference(QString subject, QString *message) {
auto core = CoreModel::getInstance()->getCore();
auto conferenceParams = core->createConferenceParams(nullptr);
conferenceParams->enableVideo(true);
@ -381,7 +381,7 @@ bool ToolModel::createGroupCall(QString subject, const std::list<QString> &parti
if (!account) {
qWarning() << "No default account found, can't create group call";
*message = tr("group_call_error_no_account");
return false;
return nullptr;
}
conferenceParams->setAccount(account);
conferenceParams->setSubject(Utils::appStringToCoreString(subject));
@ -392,8 +392,13 @@ bool ToolModel::createGroupCall(QString subject, const std::list<QString> &parti
conferenceParams->enableChat(true);
auto conference = core->createConferenceWithParams(conferenceParams);
return core->createConferenceWithParams(conferenceParams);
}
bool ToolModel::createGroupCall(QString subject, const std::list<QString> &participantAddresses, QString *message) {
auto conference = createConference(subject, message);
if (conference) {
auto core = CoreModel::getInstance()->getCore();
auto callParams = core->createCallParams(nullptr);
callParams->enableVideo(true);
callParams->setVideoDirection(linphone::MediaDirection::RecvOnly);
@ -409,7 +414,7 @@ bool ToolModel::createGroupCall(QString subject, const std::list<QString> &parti
}
} else {
qWarning() << "Could not create group call";
*message = tr("group_call_error_creation");
if (message->isEmpty()) *message = tr("group_call_error_creation");
}
return conference != nullptr;
}
@ -534,7 +539,7 @@ QString ToolModel::getMessageFromContent(std::list<std::shared_ptr<linphone::Con
void ToolModel::loadDownloadedCodecs() {
mustBeInLinphoneThread(sLog().arg(Q_FUNC_INFO));
#if defined(Q_OS_LINUX) || defined(Q_OS_WIN)
qInfo() << QStringLiteral("Loading downloaded codecs in folder %1…").arg(Paths::getCodecsDirPath());
lInfo() << QStringLiteral("[ToolModel] Loading downloaded codecs in folder %1…").arg(Paths::getCodecsDirPath());
QDirIterator it(Paths::getCodecsDirPath());
while (it.hasNext()) {
QFileInfo info(it.next());
@ -543,9 +548,10 @@ void ToolModel::loadDownloadedCodecs() {
qInfo() << QStringLiteral("Loading `%1` symbols…").arg(filename);
auto library = QLibrary(info.filePath());
if (!library.load()) // lib.load())
qWarning() << QStringLiteral("Failed to load `%1` symbols.").arg(filename) << library.errorString();
else qInfo() << QStringLiteral("Loaded `%1` symbols…").arg(filename);
} else qWarning() << QStringLiteral("Found codec file `%1` that is not a library").arg(filename);
lWarning() << QStringLiteral("[ToolModel] Failed to load `%1` symbols.").arg(filename)
<< library.errorString();
else lInfo() << QStringLiteral("[ToolModel] Loaded `%1` symbols…").arg(filename);
} else lWarning() << QStringLiteral("[ToolModel] Found codec file `%1` that is not a library").arg(filename);
}
CoreModel::getInstance()->getCore()->reloadMsPlugins("");
qInfo() << QStringLiteral("Finished loading downloaded codecs.");
@ -664,11 +670,11 @@ std::shared_ptr<linphone::ChatRoom> ToolModel::lookupCurrentCallChat(std::shared
auto localAddress = call->getCallLog()->getLocalAddress();
std::list<std::shared_ptr<linphone::Address>> participants;
participants.push_back(remoteaddress->clone());
qDebug() << "Looking for chat with local address" << localAddress->asStringUriOnly() << "and participant"
<< remoteaddress->asStringUriOnly();
lInfo() << "[ToolModel] Looking for chat with local address" << localAddress->asStringUriOnly()
<< "and participant" << remoteaddress->asStringUriOnly();
auto existingChat = core->searchChatRoom(params, localAddress, nullptr, participants);
if (existingChat) qDebug() << "Found existing chat";
else qDebug() << "Did not find existing chat";
if (existingChat) lInfo() << "[ToolModel] Found existing chat";
else lInfo() << "[ToolModel] Did not find existing chat";
return existingChat;
}
}
@ -708,11 +714,11 @@ std::shared_ptr<linphone::ChatRoom> ToolModel::lookupChatForAddress(std::shared_
remoteAddress->clean();
participants.push_back(remoteAddress);
qDebug() << "Looking for chat with local address" << localAddress->asStringUriOnly() << "and participant"
<< remoteAddress->asStringUriOnly();
lInfo() << "Looking for chat with local address" << localAddress->asStringUriOnly() << "and participant"
<< remoteAddress->asStringUriOnly();
auto existingChat = core->searchChatRoom(params, localAddress, nullptr, participants);
if (existingChat) qDebug() << "Found existing chat";
else qDebug() << "Did not find existing chat";
if (existingChat) lInfo() << "Found existing chat";
else lInfo() << "Did not find existing chat";
return existingChat;
}

View file

@ -65,6 +65,7 @@ public:
linphone::MediaEncryption = linphone::MediaEncryption::None,
QString *errorMessage = nullptr);
static std::shared_ptr<linphone::Conference> createConference(QString subject, QString *message = nullptr);
static bool
createGroupCall(QString subject, const std::list<QString> &participantAddresses, QString *message = nullptr);

View file

@ -178,7 +178,7 @@ void Utils::createCall(const QString &sipAddress,
if (mediaEncryption == LinphoneEnums::MediaEncryption::None)
mediaEncryption =
App::getInstance()->getSettings()->getMediaEncryption()["id"].value<LinphoneEnums::MediaEncryption>();
lDebug() << "[Utils] create call with uri :" << sipAddress << mediaEncryption;
lInfo() << "[Utils] create call with uri :" << sipAddress << mediaEncryption;
App::postModelAsync([sipAddress, options, mediaEncryption, prepareTransfertAddress, headers]() {
QString errorMessage;
bool success = ToolModel::createCall(sipAddress, options, prepareTransfertAddress, headers,
@ -1586,15 +1586,15 @@ VariantObject *Utils::getCurrentCallChat(CallGui *call) {
auto chatCore = ChatCore::create(linphoneChatRoom);
return QVariant::fromValue(new ChatGui(chatCore));
} else {
qDebug() << "Did not find existing chat room, create one";
lInfo() << "[Utils] Did not find existing chat room, create one";
linphoneChatRoom = ToolModel::createCurrentCallChat(callModel);
if (linphoneChatRoom != nullptr) {
qDebug() << "Chatroom created with" << callModel->getRemoteAddress()->asStringUriOnly();
lInfo() << "[Utils] Chatroom created with" << callModel->getRemoteAddress()->asStringUriOnly();
auto id = linphoneChatRoom->getIdentifier();
auto chatCore = ChatCore::create(linphoneChatRoom);
return QVariant::fromValue(new ChatGui(chatCore));
} else {
qWarning() << "Failed to create 1-1 conversation with"
lWarning() << "[Utils] Failed to create 1-1 conversation with"
<< callModel->getRemoteAddress()->asStringUriOnly() << "!";
data->mConnection->invokeToCore([] {
//: Error
@ -1623,14 +1623,14 @@ VariantObject *Utils::getChatForAddress(QString address) {
auto chatCore = ChatCore::create(linphoneChatRoom);
return QVariant::fromValue(new ChatGui(chatCore));
} else {
qDebug() << "Did not find existing chat room, create one";
lInfo() << "[Utils] Did not find existing chat room, create one";
linphoneChatRoom = ToolModel::createChatForAddress(linAddr);
if (linphoneChatRoom != nullptr) {
qDebug() << "Chatroom created with" << linAddr->asStringUriOnly();
lInfo() << "[Utils] Chatroom created with" << linAddr->asStringUriOnly();
auto chatCore = ChatCore::create(linphoneChatRoom);
return QVariant::fromValue(new ChatGui(chatCore));
} else {
qWarning() << "Failed to create 1-1 conversation with" << linAddr->asStringUriOnly() << "!";
lWarning() << "[Utils] Failed to create 1-1 conversation with" << linAddr->asStringUriOnly() << "!";
//: Failed to create 1-1 conversation with %1 !
data->mConnection->invokeToCore([] {
showInformationPopup(tr("information_popup_error_title"),

View file

@ -70,7 +70,7 @@ void KeyboardShortcuts::onAcceptCallShortcut() {
auto callList = App::getInstance()->getCallList();
auto currentPendingCall = callList->getFirstIncommingPendingCall();
if (!currentPendingCall.isNull()) {
lDebug() << "Accept call with shortcut :" << currentPendingCall;
lInfo() << "Accept call with shortcut :" << currentPendingCall;
auto gui = new CallGui(currentPendingCall);
Utils::openCallsWindow(gui);
currentPendingCall->lAccept(false);
@ -82,7 +82,7 @@ void KeyboardShortcuts::onDeclineCallShortcut() {
auto callList = App::getInstance()->getCallList();
auto currentPendingCall = callList->getFirstIncommingPendingCall();
if (!currentPendingCall.isNull()) {
lDebug() << "Dcline call with shortcut :" << currentPendingCall;
lInfo() << "Decline call with shortcut :" << currentPendingCall;
currentPendingCall->lDecline();
}
}

View file

@ -26,6 +26,8 @@
#include "FileDownloader.hpp"
DEFINE_ABSTRACT_OBJECT(FileDownloader)
// =============================================================================
static QString getDownloadFilePath(const QString &folder, const QUrl &url, const bool &overwrite) {
@ -63,7 +65,7 @@ static bool isHttpRedirect(QNetworkReply *reply) {
void FileDownloader::download() {
if (mDownloading) {
qWarning() << "Unable to download file. Already downloading!";
lWarning() << log().arg("Unable to download file. Already downloading!");
return;
}
setDownloading(true);
@ -102,7 +104,8 @@ bool FileDownloader::remove() {
}
void FileDownloader::emitOutputError() {
qWarning() << QStringLiteral("Could not write into `%1` (%2).")
lWarning() << log()
.arg("Could not write into `%1` (%2).")
.arg(mDestinationFile.fileName())
.arg(mDestinationFile.errorString());
mNetworkReply->abort();
@ -123,18 +126,18 @@ void FileDownloader::handleDownloadFinished() {
if (mNetworkReply->error() != QNetworkReply::NoError) return;
if (isHttpRedirect(mNetworkReply)) {
qWarning() << QStringLiteral("Request was redirected.");
lWarning() << log().arg("Request was redirected.");
mDestinationFile.remove();
cleanDownloadEnd();
emit downloadFailed();
} else {
qInfo() << QStringLiteral("Download of %1 finished to %2").arg(mUrl.toString(), mDestinationFile.fileName());
lInfo() << log().arg("Download of %1 finished to %2").arg(mUrl.toString(), mDestinationFile.fileName());
mDestinationFile.close();
cleanDownloadEnd();
QString fileChecksum = Utils::getFileChecksum(mDestinationFile.fileName());
if (mCheckSum.isEmpty() || fileChecksum == mCheckSum) emit downloadFinished(mDestinationFile.fileName());
else {
qCritical() << "File cannot be downloaded : Bad checksum " << fileChecksum;
lCritical() << log().arg("File cannot be downloaded : Bad checksum ") << fileChecksum;
mDestinationFile.remove();
emit downloadFailed();
}
@ -143,8 +146,7 @@ void FileDownloader::handleDownloadFinished() {
void FileDownloader::handleError(QNetworkReply::NetworkError code) {
if (code != QNetworkReply::OperationCanceledError)
qWarning()
<< QStringLiteral("Download of %1 failed: %2").arg(mUrl.toString()).arg(mNetworkReply->errorString());
lWarning() << log().arg("Download of %1 failed: %2").arg(mUrl.toString()).arg(mNetworkReply->errorString());
mDestinationFile.remove();
cleanDownloadEnd();
@ -155,7 +157,7 @@ void FileDownloader::handleError(QNetworkReply::NetworkError code) {
void FileDownloader::handleSslErrors(const QList<QSslError> &sslErrors) {
#if QT_CONFIG(ssl)
for (const QSslError &error : sslErrors)
qWarning() << QStringLiteral("SSL error: %1").arg(error.errorString());
lWarning() << log().arg("SSL error: %1").arg(error.errorString());
#else
Q_UNUSED(sslErrors);
#endif
@ -163,7 +165,7 @@ void FileDownloader::handleSslErrors(const QList<QSslError> &sslErrors) {
void FileDownloader::handleTimeout() {
if (mReadBytes == mTimeoutReadBytes) {
qWarning() << QStringLiteral("Download of %1 failed: timeout.").arg(mUrl.toString());
lWarning() << log().arg("Download of %1 failed: timeout.").arg(mUrl.toString());
mNetworkReply->abort();
} else mTimeoutReadBytes = mReadBytes;
}
@ -181,15 +183,16 @@ QUrl FileDownloader::getUrl() const {
void FileDownloader::setUrl(const QUrl &url) {
if (mDownloading) {
qWarning() << QStringLiteral("Unable to set url, a file is downloading.");
lWarning() << log().arg("Unable to set url, a file is downloading.");
return;
}
if (mUrl != url) {
mUrl = url;
if (!QSslSocket::supportsSsl() && mUrl.scheme() == "https") {
qWarning() << "Https has been requested but SSL is not supported. Fallback to http. Install manually "
"OpenSSL libraries in your PATH.";
lWarning() << log().arg(
"Https has been requested but SSL is not supported. Fallback to http. Install manually "
"OpenSSL libraries in your PATH.");
mUrl.setScheme("http");
}
emit urlChanged(mUrl);
@ -202,7 +205,7 @@ QString FileDownloader::getDownloadFolder() const {
void FileDownloader::setDownloadFolder(const QString &downloadFolder) {
if (mDownloading) {
qWarning() << QStringLiteral("Unable to set download folder, a file is downloading.");
lWarning() << log().arg("Unable to set download folder, a file is downloading.");
return;
}
@ -224,7 +227,7 @@ QString
FileDownloader::synchronousDownload(const QUrl &url, const QString &destinationFolder, const bool &overwriteFile) {
QString filePath;
FileDownloader downloader;
if (url.isRelative()) qWarning() << "FileDownloader: The specified URL is not valid";
if (url.isRelative()) lWarning() << QStringLiteral("FileDownloader: The specified URL is not valid");
else {
bool isOver = false;
bool *pIsOver = &isOver;
@ -238,7 +241,7 @@ FileDownloader::synchronousDownload(const QUrl &url, const QString &destinationF
filePath = downloader.getDestinationFileName();
if (!QFile::exists(filePath)) {
filePath = "";
qWarning() << "FileDownloader: Cannot download the specified file";
lWarning() << QStringLiteral("FileDownloader: Cannot download the specified file");
}
}
}

View file

@ -21,6 +21,8 @@
#ifndef FILE_DOWNLOADER_H_
#define FILE_DOWNLOADER_H_
#include "tool/AbstractObject.hpp"
#include <QObject>
#include <QThread>
#include <QtNetwork>
@ -29,7 +31,7 @@
class QSslError;
class FileDownloader : public QObject {
class FileDownloader : public QObject, public AbstractObject {
Q_OBJECT;
// TODO: Add an error property to use in UI.
@ -121,6 +123,8 @@ private:
QTimer mTimeout;
static constexpr int DefaultTimeout = 5000;
DECLARE_ABSTRACT_OBJECT
};
#endif // FILE_DOWNLOADER_H_

View file

@ -29,6 +29,8 @@
#include "tool/Constants.hpp"
#include "tool/Utils.hpp"
DEFINE_ABSTRACT_OBJECT(FileExtractor)
// =============================================================================
using namespace std;
@ -41,7 +43,7 @@ FileExtractor::~FileExtractor() {
void FileExtractor::extract() {
if (mExtracting) {
qWarning() << "Unable to extract file. Already extracting!";
lWarning() << log().arg("Unable to extract file. Already extracting!");
return;
}
setExtracting(true);
@ -117,7 +119,7 @@ QString FileExtractor::getFile() const {
void FileExtractor::setFile(const QString &file) {
if (mExtracting) {
qWarning() << QStringLiteral("Unable to set file, a file is extracting.");
lWarning() << log().arg("Unable to set file, a file is extracting.");
return;
}
if (mFile != file) {
@ -132,7 +134,7 @@ QString FileExtractor::getExtractFolder() const {
void FileExtractor::setExtractFolder(const QString &extractFolder) {
if (mExtracting) {
qWarning() << QStringLiteral("Unable to set extract folder, a file is extracting.");
lWarning() << log().arg("Unable to set extract folder, a file is extracting.");
return;
}
if (mExtractFolder != extractFolder) {

View file

@ -21,6 +21,8 @@
#ifndef FILE_EXTRACTOR_H_
#define FILE_EXTRACTOR_H_
#include "tool/AbstractObject.hpp"
#include <QFile>
// =============================================================================
@ -28,7 +30,7 @@
class QTimer;
// Supports only bzip file.
class FileExtractor : public QObject {
class FileExtractor : public QObject, public AbstractObject {
Q_OBJECT;
@ -99,6 +101,8 @@ private:
qint64 mTotalBytes = 0;
QTimer *mTimer = nullptr;
DECLARE_ABSTRACT_OBJECT
};
#endif // FILE_EXTRACTOR_H_

View file

@ -56,7 +56,7 @@ Control.Button {
property var checkedImageColor: style?.image?.checked || Qt.darker(contentImageColor, 1.1)
property var pressedImageColor: style?.image?.pressed || Qt.darker(contentImageColor, 1.1)
icon.source: style?.iconSource || ""
property color colorizationColor: mainItem.checkable && mainItem.checked ? mainItem.checkedImageColor || mainItem.checkedColor || mainItem.pressedColor : mainItem.pressed ? mainItem.pressedImageColor : mainItem.hovered ? mainItem.hoveredImageColor : mainItem.contentImageColor
property color colorizationColor: mainItem.checkable && mainItem.checked ? mainItem.checkedImageColor : mainItem.pressed ? mainItem.pressedImageColor : mainItem.hovered ? mainItem.hoveredImageColor : mainItem.contentImageColor
// Size properties
spacing: Utils.getSizeWithScreenRatio(5)
property real radius: Math.ceil(height / 2)

View file

@ -104,27 +104,27 @@ ColumnLayout {
}
}
}
MediumButton {
visible: mainItem.isConference && !SettingsCpp.disableMeetingsFeature
Layout.alignment: Qt.AlignHCenter
//: "Rejoindre la réunion"
text: qsTr("meeting_info_join_title")
style: ButtonStyle.grey
onClicked: {
if (mainItem.conferenceInfo) {
var callsWindow = UtilsCpp.getCallsWindow()
callsWindow.setupConference(mainItem.conferenceInfo)
UtilsCpp.smartShowWindow(callsWindow)
}
}
}
RowLayout {
Layout.alignment: Qt.AlignHCenter
spacing: Math.round(72 * DefaultStyle.dp)
Layout.fillWidth: true
Layout.preferredHeight: childrenRect.height
MediumButton {
visible: mainItem.isConference && !SettingsCpp.disableMeetingsFeature
Layout.alignment: Qt.AlignHCenter
//: "Rejoindre la réunion"
text: qsTr("meeting_info_join_title")
style: ButtonStyle.grey
onClicked: {
if (mainItem.conferenceInfo) {
var callsWindow = UtilsCpp.getCallsWindow()
callsWindow.setupConference(mainItem.conferenceInfo)
UtilsCpp.smartShowWindow(callsWindow)
}
}
}
visible: !mainItem.isConference
LabelButton {
visible: !mainItem.isConference
width: Math.round(56 * DefaultStyle.dp)
height: Math.round(56 * DefaultStyle.dp)
button.icon.width: Math.round(24 * DefaultStyle.dp)
@ -138,7 +138,7 @@ ColumnLayout {
}
}
LabelButton {
visible: !mainItem.isConference && !SettingsCpp.disableChatFeature
visible: !SettingsCpp.disableChatFeature
width: Math.round(56 * DefaultStyle.dp)
height: Math.round(56 * DefaultStyle.dp)
button.icon.width: Math.round(24 * DefaultStyle.dp)
@ -158,7 +158,7 @@ ColumnLayout {
}
}
LabelButton {
visible: !mainItem.isConference && SettingsCpp.videoEnabled
visible: SettingsCpp.videoEnabled
width: Math.round(56 * DefaultStyle.dp)
height: Math.round(56 * DefaultStyle.dp)
button.icon.width: Math.round(24 * DefaultStyle.dp)

View file

@ -4,6 +4,7 @@ import QtQuick.Effects
import Linphone
import QtQml
import SettingsCpp
import UtilsCpp 1.0
import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle
@ -29,7 +30,11 @@ ListView {
width: mainItem.width
height: Math.round(45 * DefaultStyle.dp)
property var remoteNameObj: UtilsCpp.getDisplayName(modelData.core.remoteAddress)
property var callName : modelData.core.isConference ? modelData.core.conference.core.subject : remoteNameObj ? remoteNameObj.value : ""
property var callName : (modelData && !SettingsCpp.disableMeetingsFeature && modelData.core.isConference)
? modelData.core.conference.core.subject
: remoteNameObj
? remoteNameObj.value
: ""
Avatar {
id: delegateAvatar
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
@ -43,7 +48,6 @@ ListView {
spacing: 0
Text {
id: delegateName
property var remoteNameObj: UtilsCpp.getDisplayName(modelData.core.remoteAddress)
text: callInformationItem.callName
font.pixelSize: Math.round(14 * DefaultStyle.dp)
Layout.fillWidth: true

View file

@ -27,9 +27,9 @@ Control.Control {
property var msgState: chatMessage ? chatMessage.core.messageState : LinphoneEnums.ChatMessageState.StateIdle
hoverEnabled: true
property bool linkHovered: false
property real maxWidth: parent?.width || Math.round(300 * DefaultStyle.dp)
property real maxWidth: parent?.width || Utils.getSizeWithScreenRatio(300)
leftPadding: isRemoteMessage ? Math.round(5 * DefaultStyle.dp) : 0
leftPadding: isRemoteMessage ? Utils.getSizeWithScreenRatio(5) : 0
signal messageDeletionRequested()
signal isFileHoveringChanged(bool isFileHovering)
@ -63,11 +63,11 @@ Control.Control {
}
contentItem: ColumnLayout {
spacing: Math.round(5 * DefaultStyle.dp)
spacing: Utils.getSizeWithScreenRatio(5)
Text {
id: fromNameText
Layout.alignment: Qt.AlignTop
Layout.leftMargin: mainItem.isFromChatGroup ? Math.round(9 * DefaultStyle.dp) + avatar.width : 0
Layout.leftMargin: mainItem.isFromChatGroup ? Utils.getSizeWithScreenRatio(9) + avatar.width : 0
visible: mainItem.isFromChatGroup && mainItem.isRemoteMessage && mainItem.isFirstMessage && !replyLayout.visible
maximumLineCount: 1
width: implicitWidth
@ -81,15 +81,15 @@ Control.Control {
}
RowLayout {
id: forwardLayout
spacing: Math.round(8 * DefaultStyle.dp)
spacing: Utils.getSizeWithScreenRatio(8)
visible: mainItem.isForward
Layout.leftMargin: mainItem.isFromChatGroup ? Math.round(9 * DefaultStyle.dp) + avatar.width : 0
Layout.leftMargin: mainItem.isFromChatGroup ? Utils.getSizeWithScreenRatio(9) + avatar.width : 0
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft: Qt.AlignRight
EffectImage {
imageSource: AppIcons.forward
colorizationColor: DefaultStyle.main2_500_main
Layout.preferredWidth: Math.round(12 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(12 * DefaultStyle.dp)
Layout.preferredWidth: Utils.getSizeWithScreenRatio(12)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(12)
}
Text {
//: Forwarded
@ -104,20 +104,20 @@ Control.Control {
RowLayout {
id: replyLayout
visible: mainItem.isReply
Layout.leftMargin: mainItem.isFromChatGroup ? Math.round(9 * DefaultStyle.dp) + avatar.width : 0
Layout.leftMargin: mainItem.isFromChatGroup ? Utils.getSizeWithScreenRatio(9) + avatar.width : 0
layoutDirection: mainItem.isRemoteMessage ? Qt.LeftToRight : Qt.RightToLeft
ColumnLayout {
spacing: Math.round(5 * DefaultStyle.dp)
spacing: Utils.getSizeWithScreenRatio(5)
RowLayout {
id: replyLabel
spacing: Math.round(8 * DefaultStyle.dp)
spacing: Utils.getSizeWithScreenRatio(8)
Layout.fillWidth: false
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft : Qt.AlignRight
EffectImage {
imageSource: AppIcons.reply
colorizationColor: DefaultStyle.main2_500_main
Layout.preferredWidth: Math.round(12 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(12 * DefaultStyle.dp)
Layout.preferredWidth: Utils.getSizeWithScreenRatio(12)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(12)
}
Text {
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft: Qt.AlignRight
@ -143,16 +143,16 @@ Control.Control {
id: replyMessage
visible: mainItem.replyText !== ""
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft : Qt.AlignRight
spacing: Math.round(5 * DefaultStyle.dp)
topPadding: Math.round(12 * DefaultStyle.dp)
bottomPadding: Math.round(19 * DefaultStyle.dp)
leftPadding: Math.round(18 * DefaultStyle.dp)
rightPadding: Math.round(18 * DefaultStyle.dp)
spacing: Utils.getSizeWithScreenRatio(5)
topPadding: Utils.getSizeWithScreenRatio(12)
bottomPadding: Utils.getSizeWithScreenRatio(19)
leftPadding: Utils.getSizeWithScreenRatio(18)
rightPadding: Utils.getSizeWithScreenRatio(18)
Layout.preferredWidth: Math.min(implicitWidth, mainItem.maxWidth - avatar.implicitWidth)
background: Rectangle {
anchors.fill: parent
color: DefaultStyle.grey_200
radius: Math.round(16 * DefaultStyle.dp)
radius: Utils.getSizeWithScreenRatio(16)
}
contentItem: Text {
Layout.fillWidth: true
@ -172,30 +172,30 @@ Control.Control {
z: replyLayout.z + 1
spacing: 0
layoutDirection: mainItem.isRemoteMessage ? Qt.LeftToRight : Qt.RightToLeft
Layout.topMargin: replyMessage.visible ? Math.round(-20 * DefaultStyle.dp) : 0
Layout.topMargin: replyMessage.visible ? Utils.getSizeWithScreenRatio(-20) : 0
Avatar {
id: avatar
visible: mainItem.isFromChatGroup && mainItem.isRemoteMessage
Layout.preferredWidth: mainItem.isRemoteMessage ? 26 * DefaultStyle.dp : 0
Layout.preferredHeight: 26 * DefaultStyle.dp
Layout.preferredWidth: mainItem.isRemoteMessage ? 26 : 0
Layout.preferredHeight: 26
Layout.alignment: Qt.AlignTop
_address: chatMessage ? chatMessage.core.fromAddress : ""
}
Item {
id: bubbleContainer
// Layout.topMargin: isFirstMessage ? 16 * DefaultStyle.dp : 0
Layout.leftMargin: mainItem.isFromChatGroup ? Math.round(9 * DefaultStyle.dp) : 0
// Layout.topMargin: isFirstMessage ? 16 : 0
Layout.leftMargin: mainItem.isFromChatGroup ? Utils.getSizeWithScreenRatio(9) : 0
Layout.preferredHeight: childrenRect.height
Layout.preferredWidth: childrenRect.width
Control.Control {
id: chatBubble
spacing: Math.round(2 * DefaultStyle.dp)
topPadding: Math.round(12 * DefaultStyle.dp)
bottomPadding: Math.round(6 * DefaultStyle.dp)
leftPadding: Math.round(18 * DefaultStyle.dp)
rightPadding: Math.round(18 * DefaultStyle.dp)
spacing: Utils.getSizeWithScreenRatio(2)
topPadding: Utils.getSizeWithScreenRatio(12)
bottomPadding: Utils.getSizeWithScreenRatio(6)
leftPadding: Utils.getSizeWithScreenRatio(18)
rightPadding: Utils.getSizeWithScreenRatio(18)
width: Math.min(implicitWidth, mainItem.maxWidth - avatar.implicitWidth)
MouseArea { // Default mouse area. Each sub bubble can control the mouse and pass on to the main mouse handler. Child bubble mouse area must cover the entire bubble.
@ -211,31 +211,31 @@ Control.Control {
Rectangle {
anchors.fill: parent
color: mainItem.backgroundColor
radius: Math.round(16 * DefaultStyle.dp)
radius: Utils.getSizeWithScreenRatio(16)
}
Rectangle {
visible: mainItem.isFirstMessage && mainItem.isRemoteMessage
anchors.top: parent.top
anchors.left: parent.left
width: Math.round(parent.width / 4)
height: Math.round(parent.height / 4)
width: Utils.getSizeWithScreenRatio(parent.width / 4)
height: Utils.getSizeWithScreenRatio(parent.height / 4)
color: mainItem.backgroundColor
}
Rectangle {
visible: mainItem.isFirstMessage && !mainItem.isRemoteMessage
anchors.bottom: parent.bottom
anchors.right: parent.right
width: Math.round(parent.width / 4)
height: Math.round(parent.height / 4)
width: Utils.getSizeWithScreenRatio(parent.width / 4)
height: Utils.getSizeWithScreenRatio(parent.height / 4)
color: mainItem.backgroundColor
}
Rectangle {
id: highlightRectangle
anchors.fill: parent
radius: Math.round(16 * DefaultStyle.dp)
radius: Utils.getSizeWithScreenRatio(16)
color: Qt.lighter(mainItem.backgroundColor, 2)
border.color: mainItem.backgroundColor
border.width: Math.round(2 * DefaultStyle.dp)
border.width: Utils.getSizeWithScreenRatio(2)
opacity: 0
Behavior on opacity {
NumberAnimation {
@ -246,7 +246,7 @@ Control.Control {
}
}
contentItem: ColumnLayout {
spacing: Math.round(5 * DefaultStyle.dp)
spacing: Utils.getSizeWithScreenRatio(5)
ChatMessageContent {
id: chatBubbleContent
Layout.fillWidth: true
@ -263,9 +263,9 @@ Control.Control {
Layout.preferredHeight: childrenRect.height
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft : Qt.AlignRight
layoutDirection: mainItem.isRemoteMessage ? Qt.RightToLeft : Qt.LeftToRight
spacing: Math.round(7 * DefaultStyle.dp)
spacing: Utils.getSizeWithScreenRatio(7)
RowLayout {
spacing: Math.round(3 * DefaultStyle.dp)
spacing: Utils.getSizeWithScreenRatio(3)
Layout.preferredHeight: childrenRect.height
Text {
id: ephemeralTime
@ -281,12 +281,12 @@ Control.Control {
visible: mainItem.chatMessage.core.isEphemeral
imageSource: AppIcons.clockCountDown
colorizationColor: DefaultStyle.main2_500_main
Layout.preferredWidth: visible ? 14 * DefaultStyle.dp : 0
Layout.preferredHeight: visible ? 14 * DefaultStyle.dp : 0
Layout.preferredWidth: visible ? 14 : 0
Layout.preferredHeight: visible ? 14 : 0
}
}
RowLayout {
spacing: mainItem.isRemoteMessage ? 0 : Math.round(5 * DefaultStyle.dp)
spacing: mainItem.isRemoteMessage ? 0 : Utils.getSizeWithScreenRatio(5)
Layout.alignment: Qt.AlignVCenter
Layout.preferredHeight: childrenRect.height
Text {
@ -301,8 +301,8 @@ Control.Control {
EffectImage {
// Imdn status icon
visible: !mainItem.isRemoteMessage
Layout.preferredWidth: visible ? 14 * DefaultStyle.dp : 0
Layout.preferredHeight: visible ? 14 * DefaultStyle.dp : 0
Layout.preferredWidth: visible ? 14 : 0
Layout.preferredHeight: visible ? 14 : 0
Layout.alignment: Qt.AlignVCenter
colorizationColor: DefaultStyle.main1_500_main
imageSource: mainItem.msgState === LinphoneEnums.ChatMessageState.StateDelivered
@ -318,8 +318,8 @@ Control.Control {
: ""
BusyIndicator {
anchors.fill: parent
Layout.preferredWidth: visible ? 14 * DefaultStyle.dp : 0
Layout.preferredHeight: visible ? 14 * DefaultStyle.dp : 0
Layout.preferredWidth: visible ? 14 : 0
Layout.preferredHeight: visible ? 14 : 0
visible: mainItem.msgState === LinphoneEnums.ChatMessageState.StateIdle
|| mainItem.msgState === LinphoneEnums.ChatMessageState.StateInProgress
|| mainItem.msgState === LinphoneEnums.ChatMessageState.StateFileTransferInProgress
@ -346,30 +346,30 @@ Control.Control {
value: chatBubble.right
}
onClicked: mainItem.showReactionsForMessageRequested()
anchors.topMargin: Math.round(-6 * DefaultStyle.dp)
topPadding: Math.round(8 * DefaultStyle.dp)
bottomPadding: Math.round(8 * DefaultStyle.dp)
leftPadding: Math.round(8 * DefaultStyle.dp)
rightPadding: Math.round(8 * DefaultStyle.dp)
anchors.topMargin: Utils.getSizeWithScreenRatio(-6)
topPadding: Utils.getSizeWithScreenRatio(8)
bottomPadding: Utils.getSizeWithScreenRatio(8)
leftPadding: Utils.getSizeWithScreenRatio(8)
rightPadding: Utils.getSizeWithScreenRatio(8)
background: Rectangle {
color: DefaultStyle.grey_100
border.color: DefaultStyle.grey_0
border.width: Math.round(2 * DefaultStyle.dp)
radius: Math.round(20 * DefaultStyle.dp)
border.width: Utils.getSizeWithScreenRatio(2)
radius: Utils.getSizeWithScreenRatio(20)
}
contentItem: RowLayout {
spacing: Math.round(6 * DefaultStyle.dp)
spacing: Utils.getSizeWithScreenRatio(6)
Repeater {
id: reactionList
model: mainItem.chatMessage ? mainItem.chatMessage.core.reactionsSingleton : []
delegate: RowLayout {
spacing: Math.round(3 * DefaultStyle.dp)
spacing: Utils.getSizeWithScreenRatio(3)
Text {
text: UtilsCpp.encodeEmojiToQmlRichFormat(modelData.body)
textFormat: Text.RichText
font {
pixelSize: Math.round(15 * DefaultStyle.dp)
weight: Math.round(400 * DefaultStyle.dp)
pixelSize: Utils.getSizeWithScreenRatio(15)
weight: Utils.getSizeWithScreenRatio(400)
}
}
Text {
@ -389,11 +389,11 @@ Control.Control {
RowLayout {
id: actionsLayout
visible: mainItem.hovered || optionsMenu.hovered || optionsMenu.popup.opened || emojiButton.hovered || emojiButton.popup.opened
Layout.leftMargin: Math.round(8 * DefaultStyle.dp)
Layout.rightMargin: Math.round(8 * DefaultStyle.dp)
Layout.leftMargin: Utils.getSizeWithScreenRatio(8)
Layout.rightMargin: Utils.getSizeWithScreenRatio(8)
Layout.alignment: Qt.AlignVCenter
// Layout.fillWidth: true
spacing: Math.round(7 * DefaultStyle.dp)
spacing: Utils.getSizeWithScreenRatio(7)
layoutDirection: mainItem.isRemoteMessage ? Qt.LeftToRight : Qt.RightToLeft
PopupButton {
id: optionsMenu
@ -406,7 +406,7 @@ Control.Control {
text: qsTr("chat_message_reception_info")
icon.source: AppIcons.chatTeardropText
Layout.fillWidth: true
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(45)
onClicked: {
mainItem.showImdnStatusForMessageRequested()
optionsMenu.close()
@ -418,7 +418,7 @@ Control.Control {
text: qsTr("chat_message_reply")
icon.source: AppIcons.reply
Layout.fillWidth: true
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(45)
onClicked: {
mainItem.replyToMessageRequested()
optionsMenu.close()
@ -432,9 +432,9 @@ Control.Control {
//: "Copy"
: qsTr("chat_message_copy")
icon.source: AppIcons.copy
// spacing: Math.round(10 * DefaultStyle.dp)
// spacing: Utils.getSizeWithScreenRatio(10)
Layout.fillWidth: true
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(45)
onClicked: {
var success = UtilsCpp.copyToClipboard(chatBubbleContent.selectedText != "" ? chatBubbleContent.selectedText : mainItem.chatMessage.core.text)
//: Copied
@ -450,7 +450,7 @@ Control.Control {
text: qsTr("chat_message_forward")
icon.source: AppIcons.forward
Layout.fillWidth: true
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(45)
onClicked: {
mainItem.forwardMessageRequested()
optionsMenu.close()
@ -458,7 +458,7 @@ Control.Control {
}
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: Math.min(1, Math.round(1 * DefaultStyle.dp))
Layout.preferredHeight: Math.min(1, Utils.getSizeWithScreenRatio(1))
color: DefaultStyle.main2_400
}
IconLabelButton {
@ -466,9 +466,9 @@ Control.Control {
//: "Delete"
text: qsTr("chat_message_delete")
icon.source: AppIcons.trashCan
// spacing: Math.round(10 * DefaultStyle.dp)
// spacing: Utils.getSizeWithScreenRatio(10)
Layout.fillWidth: true
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(45)
onClicked: {
mainItem.messageDeletionRequested()
optionsMenu.close()
@ -504,8 +504,8 @@ Control.Control {
PopupButton {
id: emojiPickerButton
icon.source: AppIcons.plusCircle
popup.width: Math.round(393 * DefaultStyle.dp)
popup.height: Math.round(291 * DefaultStyle.dp)
popup.width: Utils.getSizeWithScreenRatio(393)
popup.height: Utils.getSizeWithScreenRatio(291)
popup.contentItem: EmojiPicker {
id: emojiPicker
onEmojiClicked: (emoji) => {

View file

@ -157,6 +157,7 @@ ColumnLayout {
id: list
width: mainItem.width
height: Math.round(250 * DefaultStyle.dp)
Layout.fillWidth: true
Layout.fillHeight: true
model: mainItem.categories
spacing: Math.round(30 * DefaultStyle.dp)

View file

@ -16,7 +16,6 @@ Control.Control {
property var textArea
property int selectedFilesCount: 0
// property alias cursorPosition: sendingTextArea.cursorPosition
property Popup emojiPicker
property bool dropEnabled: true
property bool isEphemeral : false
@ -77,14 +76,14 @@ Control.Control {
id: textAreaComp
RowLayout {
spacing: Math.round(16 * DefaultStyle.dp)
BigButton {
PopupButton {
id: emojiPickerButton
style: ButtonStyle.noBackground
checked: mainItem.emojiPicker?.visible || false
icon.source: checked ? AppIcons.closeX : AppIcons.smiley
onPressed: {
if (!checked) mainItem.emojiPicker.open()
else mainItem.emojiPicker.close()
popup.width: Math.round(393 * DefaultStyle.dp)
popup.height: Math.round(291 * DefaultStyle.dp)
popup.contentItem: EmojiPicker {
editor: sendingTextArea
}
}
BigButton {
@ -121,7 +120,9 @@ Control.Control {
id: sendingAreaFlickable
Layout.preferredHeight: Math.min(Math.round(100 * DefaultStyle.dp), contentHeight)
Layout.fillHeight: true
width: sendingControl.width - sendingControl.leftPadding - sendingControl.rightPadding
Layout.fillWidth: true
Layout.alignment: Qt.AlignCenter
contentHeight: sendingTextArea.contentHeight
contentWidth: width
@ -138,8 +139,9 @@ Control.Control {
TextArea {
id: sendingTextArea
// RectangleTest{anchors.fill: parent}
width: sendingAreaFlickable.width
height: sendingAreaFlickable.height
height: implicitHeight// sendingAreaFlickable.height
textFormat: TextEdit.AutoText
onTextChanged: {
mainItem.text = text
@ -180,6 +182,7 @@ Control.Control {
RowLayout {
id: stackButton
spacing: 0
Layout.preferredHeight: Math.max(recordButton.height, sendMessageButton.height)
BigButton {
id: recordButton
ToolTip.visible: !enabled && hovered
@ -196,6 +199,7 @@ Control.Control {
}
BigButton {
id: sendMessageButton
Layout.preferredHeight: height
visible: sendingTextArea.text.length !== 0 || mainItem.selectedFilesCount > 0
style: ButtonStyle.noBackgroundOrange
icon.source: AppIcons.paperPlaneRight

View file

@ -874,5 +874,7 @@ function getSizeWithScreenRatio(size){
if (size == 0) {
return size;
}
return Math.max(Math.round(size * Linphone.DefaultStyle.dp), 1);
return size > 0
? Math.max(Math.round(size * Linphone.DefaultStyle.dp), 1)
: Math.min(Math.round(size * Linphone.DefaultStyle.dp), -1);
}

View file

@ -295,40 +295,6 @@ FocusScope {
contentLoader.panelType = SelectedChatView.PanelType.ForwardToList
detailsPanel.visible = true
}
Popup {
id: emojiPickerPopup
y: Math.round(chatMessagesListView.y + chatMessagesListView.height - height - 8*DefaultStyle.dp)
x: Math.round(chatMessagesListView.x + 8*DefaultStyle.dp)
width: Math.round(393 * DefaultStyle.dp)
height: Math.round(291 * DefaultStyle.dp)
visible: false
modal: true
dim: false
closePolicy: Popup.CloseOnReleaseOutside
padding: 10 * DefaultStyle.dp
background: Item {
anchors.fill: parent
Rectangle {
id: buttonBackground
anchors.fill: parent
color: DefaultStyle.grey_0
radius: Math.round(20 * DefaultStyle.dp)
}
MultiEffect {
anchors.fill: buttonBackground
source: buttonBackground
shadowEnabled: true
shadowColor: DefaultStyle.grey_1000
shadowBlur: 0.1
shadowOpacity: 0.5
}
}
contentItem: EmojiPicker {
id: emojiPicker
editor: messageSender.textArea
}
}
}
ScrollBar {
id: scrollbar
@ -512,7 +478,6 @@ FocusScope {
Control.SplitView.minimumHeight: mainItem.chat?.core.isReadOnly ? 0 : Math.round(79 * DefaultStyle.dp)
chat: mainItem.chat
selectedFilesCount: contents.count
emojiPicker: emojiPickerPopup
callOngoing: mainItem.call != null
onChatChanged: {
if (chat) messageSender.text = mainItem.chat.core.sendingText