mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-17 03:18:07 +00:00
Fixes:
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:
parent
7825646edd
commit
b17bc8cc27
38 changed files with 597 additions and 545 deletions
|
|
@ -435,10 +435,10 @@ void App::setSelf(QSharedPointer<App>(me)) {
|
||||||
mCliModelConnection->makeConnectToCore(&App::receivedMessage, [this](int, const QByteArray &byteArray) {
|
mCliModelConnection->makeConnectToCore(&App::receivedMessage, [this](int, const QByteArray &byteArray) {
|
||||||
QString command(byteArray);
|
QString command(byteArray);
|
||||||
if (command.isEmpty()) {
|
if (command.isEmpty()) {
|
||||||
lDebug() << log().arg("Check with CliModel for commands");
|
lInfo() << log().arg("Check with CliModel for commands");
|
||||||
mCliModelConnection->invokeToModel([]() { CliModel::getInstance()->runProcess(); });
|
mCliModelConnection->invokeToModel([]() { CliModel::getInstance()->runProcess(); });
|
||||||
} else {
|
} 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); });
|
mCliModelConnection->invokeToModel([command]() { CliModel::getInstance()->executeCommand(command); });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,10 @@ AccountCore::AccountCore(const std::shared_ptr<linphone::Account> &account) : QO
|
||||||
mRegisterEnabled = params->registerEnabled();
|
mRegisterEnabled = params->registerEnabled();
|
||||||
mMwiServerAddress =
|
mMwiServerAddress =
|
||||||
params->getMwiServerAddress() ? Utils::coreStringToAppString(params->getMwiServerAddress()->asString()) : "";
|
params->getMwiServerAddress() ? Utils::coreStringToAppString(params->getMwiServerAddress()->asString()) : "";
|
||||||
mTransports << "UDP" << "TCP" << "TLS" << "DTLS";
|
mTransports << "UDP"
|
||||||
|
<< "TCP"
|
||||||
|
<< "TLS"
|
||||||
|
<< "DTLS";
|
||||||
mTransport = LinphoneEnums::toString(LinphoneEnums::fromLinphone(params->getTransport()));
|
mTransport = LinphoneEnums::toString(LinphoneEnums::fromLinphone(params->getTransport()));
|
||||||
mRegistrarUri =
|
mRegistrarUri =
|
||||||
params->getServerAddress() ? Utils::coreStringToAppString(params->getServerAddress()->asString()) : "";
|
params->getServerAddress() ? Utils::coreStringToAppString(params->getServerAddress()->asString()) : "";
|
||||||
|
|
@ -384,7 +387,7 @@ void AccountCore::onRegistrationStateChanged(const std::shared_ptr<linphone::Acc
|
||||||
linphone::RegistrationState state,
|
linphone::RegistrationState state,
|
||||||
const std::string &message) {
|
const std::string &message) {
|
||||||
mRegistrationState = LinphoneEnums::fromLinphone(state);
|
mRegistrationState = LinphoneEnums::fromLinphone(state);
|
||||||
lDebug() << log().arg(Q_FUNC_INFO) << mRegistrationState;
|
qDebug() << log().arg(Q_FUNC_INFO) << mRegistrationState;
|
||||||
emit registrationStateChanged(Utils::coreStringToAppString(message));
|
emit registrationStateChanged(Utils::coreStringToAppString(message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@
|
||||||
#include "CallCore.hpp"
|
#include "CallCore.hpp"
|
||||||
#include "CallGui.hpp"
|
#include "CallGui.hpp"
|
||||||
#include "core/App.hpp"
|
#include "core/App.hpp"
|
||||||
|
#include "model/tool/ToolModel.hpp"
|
||||||
#include <QSharedPointer>
|
#include <QSharedPointer>
|
||||||
#include <linphone++/linphone.hh>
|
#include <linphone++/linphone.hh>
|
||||||
|
|
||||||
|
|
@ -96,34 +97,26 @@ void CallList::setSelf(QSharedPointer<CallList> me) {
|
||||||
bool enablingVideo = false;
|
bool enablingVideo = false;
|
||||||
if (currentCall) enablingVideo = currentCall->getCurrentParams()->videoEnabled();
|
if (currentCall) enablingVideo = currentCall->getCurrentParams()->videoEnabled();
|
||||||
if (!conference) {
|
if (!conference) {
|
||||||
auto parameters = core->createConferenceParams(conference);
|
|
||||||
auto audioVideoConfFactoryUri =
|
auto audioVideoConfFactoryUri =
|
||||||
core->getDefaultAccount()->getParams()->getAudioVideoConferenceFactoryAddress();
|
core->getDefaultAccount()->getParams()->getAudioVideoConferenceFactoryAddress();
|
||||||
if (audioVideoConfFactoryUri) {
|
QString subject = audioVideoConfFactoryUri
|
||||||
parameters->setConferenceFactoryAddress(audioVideoConfFactoryUri);
|
//: Remote group call
|
||||||
parameters->setSubject("Meeting");
|
? 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 {
|
} else {
|
||||||
parameters->setSubject("Local meeting");
|
conference->addParticipants(currentCalls);
|
||||||
}
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1) Add running calls
|
|
||||||
if (runningCallsToAdd.size() > 0) {
|
|
||||||
conference->addParticipants(runningCallsToAdd);
|
|
||||||
}
|
|
||||||
|
|
||||||
// emit lUpdate();
|
// emit lUpdate();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -323,16 +323,16 @@ void ChatMessageCore::setSelf(QSharedPointer<ChatMessageCore> me) {
|
||||||
mChatMessageModelConnection->makeConnectToModel(
|
mChatMessageModelConnection->makeConnectToModel(
|
||||||
&ChatMessageModel::fileTransferRecv,
|
&ChatMessageModel::fileTransferRecv,
|
||||||
[this](const std::shared_ptr<linphone::ChatMessage> &message, const std::shared_ptr<linphone::Content> &content,
|
[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(
|
mChatMessageModelConnection->makeConnectToModel(
|
||||||
&ChatMessageModel::fileTransferSend,
|
&ChatMessageModel::fileTransferSend,
|
||||||
[this](const std::shared_ptr<linphone::ChatMessage> &message, const std::shared_ptr<linphone::Content> &content,
|
[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(
|
mChatMessageModelConnection->makeConnectToModel(
|
||||||
&ChatMessageModel::fileTransferSendChunk,
|
&ChatMessageModel::fileTransferSendChunk,
|
||||||
[this](const std::shared_ptr<linphone::ChatMessage> &message, const std::shared_ptr<linphone::Content> &content,
|
[this](const std::shared_ptr<linphone::ChatMessage> &message, const std::shared_ptr<linphone::Content> &content,
|
||||||
size_t offset, size_t size,
|
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(
|
mChatMessageModelConnection->makeConnectToModel(
|
||||||
&ChatMessageModel::participantImdnStateChanged,
|
&ChatMessageModel::participantImdnStateChanged,
|
||||||
[this](const std::shared_ptr<linphone::ChatMessage> &message,
|
[this](const std::shared_ptr<linphone::ChatMessage> &message,
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,7 @@ void ChatMessageContentList::addFiles(const QStringList &paths) {
|
||||||
qint64 fileSize = file.size();
|
qint64 fileSize = file.size();
|
||||||
if (fileSize > Constants::FileSizeLimit) {
|
if (fileSize > Constants::FileSizeLimit) {
|
||||||
++nbTooBig;
|
++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;
|
continue;
|
||||||
}
|
}
|
||||||
auto name = file.fileName().toStdString();
|
auto name = file.fileName().toStdString();
|
||||||
|
|
@ -149,7 +149,7 @@ void ChatMessageContentList::addFiles(const QStringList &paths) {
|
||||||
if (mimeType.length() != 2) {
|
if (mimeType.length() != 2) {
|
||||||
++nbMimeError;
|
++nbMimeError;
|
||||||
lastMimeError = path;
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
content->setType(Utils::appStringToCoreString(mimeType[0]));
|
content->setType(Utils::appStringToCoreString(mimeType[0]));
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ void ConferenceInfoList::setSelf(QSharedPointer<ConferenceInfoList> me) {
|
||||||
&CoreModel::conferenceInfoReceived,
|
&CoreModel::conferenceInfoReceived,
|
||||||
[this](const std::shared_ptr<linphone::Core> &core,
|
[this](const std::shared_ptr<linphone::Core> &core,
|
||||||
const std::shared_ptr<const linphone::ConferenceInfo> &conferenceInfo) {
|
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
|
// 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
|
// which account is concerned by the signal if multiple accounts are connected
|
||||||
emit lUpdate();
|
emit lUpdate();
|
||||||
|
|
|
||||||
|
|
@ -282,8 +282,8 @@ void Notifier::notifyReceivedCall(const shared_ptr<linphone::Call> &call) {
|
||||||
auto accountModel = Utils::makeQObject_ptr<AccountModel>(account);
|
auto accountModel = Utils::makeQObject_ptr<AccountModel>(account);
|
||||||
accountModel->setSelf(accountModel);
|
accountModel->setSelf(accountModel);
|
||||||
if (!accountModel->getNotificationsAllowed()) {
|
if (!accountModel->getNotificationsAllowed()) {
|
||||||
qInfo()
|
lInfo() << log().arg(
|
||||||
<< "Notifications have been disabled for this account - not creating a notification for incoming call";
|
"Notifications have been disabled for this account - not creating a notification for incoming call");
|
||||||
if (accountModel->forwardToVoiceMailInDndPresence()) {
|
if (accountModel->forwardToVoiceMailInDndPresence()) {
|
||||||
lInfo() << log().arg("Transferring call to voicemail");
|
lInfo() << log().arg("Transferring call to voicemail");
|
||||||
auto voicemailAddress = linphone::Factory::get()->createAddress(
|
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);
|
auto accountModel = Utils::makeQObject_ptr<AccountModel>(receiverAccount);
|
||||||
accountModel->setSelf(accountModel);
|
accountModel->setSelf(accountModel);
|
||||||
if (!accountModel->getNotificationsAllowed()) {
|
if (!accountModel->getNotificationsAllowed()) {
|
||||||
qInfo() << "Notifications have been disabled for this account - not creating a notification for "
|
lInfo() << log().arg(
|
||||||
"incoming message";
|
"Notifications have been disabled for this account - not creating a notification for "
|
||||||
|
"incoming message");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,7 @@ static inline QString getAppRootCaFilePath() {
|
||||||
if (Paths::filePathExists(rootca)) { // Packaged
|
if (Paths::filePathExists(rootca)) { // Packaged
|
||||||
return rootca;
|
return rootca;
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "Root ca path does not exist. Create it";
|
lInfo() << "Root ca path does not exist. Create it";
|
||||||
QFileInfo rootcaInfo(rootca);
|
QFileInfo rootcaInfo(rootca);
|
||||||
if (!rootcaInfo.absoluteDir().exists()) {
|
if (!rootcaInfo.absoluteDir().exists()) {
|
||||||
QDir dataDir(getAppPackageDataDirPath());
|
QDir dataDir(getAppPackageDataDirPath());
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@ void MagicSearchList::setSelf(QSharedPointer<MagicSearchList> me) {
|
||||||
emit resultsProcessed();
|
emit resultsProcessed();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
qDebug() << log().arg("Initialized");
|
lDebug() << log().arg("Initialized");
|
||||||
emit initialized();
|
emit initialized();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
@ -157,7 +157,7 @@ void MagicSearchList::setResults(const QList<QSharedPointer<FriendCore>> &contac
|
||||||
if (!isFriendCore) continue;
|
if (!isFriendCore) continue;
|
||||||
disconnect(isFriendCore.get());
|
disconnect(isFriendCore.get());
|
||||||
}
|
}
|
||||||
qDebug() << log().arg("SetResults: %1").arg(contacts.size());
|
lDebug() << log().arg("SetResults: %1").arg(contacts.size());
|
||||||
resetData<FriendCore>(contacts);
|
resetData<FriendCore>(contacts);
|
||||||
for (auto it : contacts) {
|
for (auto it : contacts) {
|
||||||
connectContact(it.get());
|
connectContact(it.get());
|
||||||
|
|
|
||||||
|
|
@ -39,45 +39,45 @@
|
||||||
<context>
|
<context>
|
||||||
<name>AccountCore</name>
|
<name>AccountCore</name>
|
||||||
<message>
|
<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>
|
<source>drawer_menu_account_connection_status_connected</source>
|
||||||
<extracomment>"Connecté"</extracomment>
|
<extracomment>"Connecté"</extracomment>
|
||||||
<translation>Verbunden</translation>
|
<translation>Verbunden</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>drawer_menu_account_connection_status_refreshing</source>
|
||||||
<translation>Aktualisiere…</translation>
|
<translation>Aktualisiere…</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>drawer_menu_account_connection_status_progress</source>
|
||||||
<translation>Verbinde…</translation>
|
<translation>Verbinde…</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>drawer_menu_account_connection_status_failed</source>
|
||||||
<translation>Fehler</translation>
|
<translation>Fehler</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>drawer_menu_account_connection_status_cleared</source>
|
||||||
<translation>Deaktiviert</translation>
|
<translation>Deaktiviert</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>manage_account_status_connected_summary</source>
|
||||||
<extracomment>"Vous êtes en ligne et joignable."</extracomment>
|
<extracomment>"Vous êtes en ligne et joignable."</extracomment>
|
||||||
<translation>Sie sind online und erreichbar.</translation>
|
<translation>Sie sind online und erreichbar.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>manage_account_status_failed_summary</source>
|
||||||
<extracomment>"Erreur de connexion, vérifiez vos paramètres."</extracomment>
|
<extracomment>"Erreur de connexion, vérifiez vos paramètres."</extracomment>
|
||||||
<translation>Verbindungsfehler, überprüfen Sie Ihre Einstellungen.</translation>
|
<translation>Verbindungsfehler, überprüfen Sie Ihre Einstellungen.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>manage_account_status_cleared_summary</source>
|
||||||
<extracomment>"Compte désactivé, vous ne recevrez ni appel ni message."</extracomment>
|
<extracomment>"Compte désactivé, vous ne recevrez ni appel ni message."</extracomment>
|
||||||
<translation>Konto deaktiviert, Sie erhalten keine Anrufe oder Nachrichten.</translation>
|
<translation>Konto deaktiviert, Sie erhalten keine Anrufe oder Nachrichten.</translation>
|
||||||
|
|
@ -634,102 +634,101 @@
|
||||||
<context>
|
<context>
|
||||||
<name>App</name>
|
<name>App</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="357"/>
|
<location filename="../../core/App.cpp" line="356"/>
|
||||||
<source>remote_provisioning_dialog</source>
|
<source>remote_provisioning_dialog</source>
|
||||||
<extracomment>Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</extracomment>
|
<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>
|
<translation>Möchten Sie die Remote-Konfiguration von dieser Adresse herunterladen und anwenden?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="394"/>
|
<location filename="../../core/App.cpp" line="393"/>
|
||||||
<location filename="../../core/App.cpp" line="648"/>
|
<location filename="../../core/App.cpp" line="658"/>
|
||||||
<source>info_popup_error_title</source>
|
<source>info_popup_error_title</source>
|
||||||
<extracomment>Error</extracomment>
|
<extracomment>Error</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="395"/>
|
<location filename="../../core/App.cpp" line="394"/>
|
||||||
<location filename="../../core/App.cpp" line="650"/>
|
<location filename="../../core/App.cpp" line="660"/>
|
||||||
<source>info_popup_configuration_failed_message</source>
|
<source>info_popup_configuration_failed_message</source>
|
||||||
<extracomment>Remote provisioning failed : %1</extracomment>
|
<extracomment>Remote provisioning failed : %1</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="644"/>
|
<location filename="../../core/App.cpp" line="654"/>
|
||||||
<source>configuration_error_detail</source>
|
<source>configuration_error_detail</source>
|
||||||
<extracomment>not reachable</extracomment>
|
<extracomment>not reachable</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="916"/>
|
<location filename="../../core/App.cpp" line="926"/>
|
||||||
<source>application_description</source>
|
<source>application_description</source>
|
||||||
<extracomment>"A free and open source SIP video-phone."</extracomment>
|
<extracomment>"A free and open source SIP video-phone."</extracomment>
|
||||||
<translation>Ein kostenloses Open-Source SIP Video-Telefon.</translation>
|
<translation>Ein kostenloses Open-Source SIP Video-Telefon.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="918"/>
|
<location filename="../../core/App.cpp" line="928"/>
|
||||||
<source>command_line_arg_order</source>
|
<source>command_line_arg_order</source>
|
||||||
<extracomment>"Send an order to the application towards a command line"</extracomment>
|
<extracomment>"Send an order to the application towards a command line"</extracomment>
|
||||||
<translation>Kommandozeilen-Befehl an die Anwendung schicken</translation>
|
<translation>Kommandozeilen-Befehl an die Anwendung schicken</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="922"/>
|
<location filename="../../core/App.cpp" line="932"/>
|
||||||
<source>command_line_option_show_help</source>
|
<source>command_line_option_show_help</source>
|
||||||
<translation>Zeige Hilfe</translation>
|
<translation>Zeige Hilfe</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="927"/>
|
<location filename="../../core/App.cpp" line="937"/>
|
||||||
<source>command_line_option_show_app_version</source>
|
<source>command_line_option_show_app_version</source>
|
||||||
<translation type="unfinished">Zeige App-Version</translation>
|
<translation type="unfinished">Zeige App-Version</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="935"/>
|
<location filename="../../core/App.cpp" line="945"/>
|
||||||
<source>command_line_option_config_to_fetch</source>
|
<source>command_line_option_config_to_fetch</source>
|
||||||
<extracomment>"Specify the linphone configuration file to be fetched. It will be merged with the current configuration."</extracomment>
|
<extracomment>"Specify the linphone configuration file to be fetched. It will be merged with the current configuration."</extracomment>
|
||||||
<translation>Abzurufende Linphone-Konfigurationsdatei angeben. Sie wird mit der aktuellen Konfiguration zusammengeführt.</translation>
|
<translation>Abzurufende Linphone-Konfigurationsdatei angeben. Sie wird mit der aktuellen Konfiguration zusammengeführt.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>command_line_option_config_to_fetch_arg</source>
|
||||||
<extracomment>"URL, path or file"</extracomment>
|
<extracomment>"URL, path or file"</extracomment>
|
||||||
<translation>URL, Pfad oder Datei</translation>
|
<translation>URL, Pfad oder Datei</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="942"/>
|
<location filename="../../core/App.cpp" line="952"/>
|
||||||
<source>command_line_option_minimized</source>
|
<source>command_line_option_minimized</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="945"/>
|
<location filename="../../core/App.cpp" line="955"/>
|
||||||
<source>command_line_option_log_to_stdout</source>
|
<source>command_line_option_log_to_stdout</source>
|
||||||
<translation>Debug-Informationen auf der Standardausgabe ausgeben</translation>
|
<translation>Debug-Informationen auf der Standardausgabe ausgeben</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>command_line_option_print_app_logs_only</source>
|
||||||
<extracomment>"Print only logs from the application"</extracomment>
|
<extracomment>"Print only logs from the application"</extracomment>
|
||||||
<translation>Nur Anwendungs-Logs ausgeben</translation>
|
<translation>Nur Anwendungs-Logs ausgeben</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="1318"/>
|
<location filename="../../core/App.cpp" line="1329"/>
|
||||||
<source>hide_action</source>
|
<source>hide_action</source>
|
||||||
<extracomment>"Cacher" "Afficher"</extracomment>
|
<extracomment>"Cacher" "Afficher"</extracomment>
|
||||||
<translation>Ausblenden</translation>
|
<translation>Ausblenden</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="1318"/>
|
<location filename="../../core/App.cpp" line="1329"/>
|
||||||
<source>show_action</source>
|
<source>show_action</source>
|
||||||
<translation>Zeigen</translation>
|
<translation>Zeigen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="1333"/>
|
<location filename="../../core/App.cpp" line="1344"/>
|
||||||
<source>quit_action</source>
|
<source>quit_action</source>
|
||||||
<extracomment>"Quitter"</extracomment>
|
<extracomment>"Quitter"</extracomment>
|
||||||
<translation>Beenden</translation>
|
<translation>Beenden</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="1337"/>
|
<location filename="../../core/App.cpp" line="1448"/>
|
||||||
<source>mark_all_read_action</source>
|
<source>mark_all_read_action</source>
|
||||||
<extracomment>"Mark all as read"</extracomment>
|
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
|
@ -946,7 +945,7 @@
|
||||||
<translation type="vanished">Offline</translation>
|
<translation type="vanished">Offline</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>meeting_info_join_title</source>
|
||||||
<extracomment>"Rejoindre la réunion"</extracomment>
|
<extracomment>"Rejoindre la réunion"</extracomment>
|
||||||
<translation>Besprechung beitreten</translation>
|
<translation>Besprechung beitreten</translation>
|
||||||
|
|
@ -1023,52 +1022,77 @@
|
||||||
<translation>Der Besprechungs-Link wurde in die Zwischenablage kopiert</translation>
|
<translation>Der Besprechungs-Link wurde in die Zwischenablage kopiert</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</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>
|
<context>
|
||||||
<name>CallListView</name>
|
<name>CallListView</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../view/Control/Display/Call/CallListView.qml" line="55"/>
|
<location filename="../../view/Control/Display/Call/CallListView.qml" line="59"/>
|
||||||
<source>meeting</source>
|
<source>meeting</source>
|
||||||
<extracomment>"Réunion</extracomment>
|
<extracomment>"Réunion</extracomment>
|
||||||
<translation>Besprechung</translation>
|
<translation>Besprechung</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>call</source>
|
||||||
<extracomment>"Appel"</extracomment>
|
<extracomment>"Appel"</extracomment>
|
||||||
<translation>Anruf</translation>
|
<translation>Anruf</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>paused_call_or_meeting</source>
|
||||||
<extracomment>"%1 en pause"</extracomment>
|
<extracomment>"%1 en pause"</extracomment>
|
||||||
<translation>%1 pausiert</translation>
|
<translation>%1 pausiert</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>ongoing_call_or_meeting</source>
|
||||||
<extracomment>"%1 en cours"</extracomment>
|
<extracomment>"%1 en cours"</extracomment>
|
||||||
<translation>%1 laufend</translation>
|
<translation>%1 laufend</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>transfer_call_name_accessible_name</source>
|
||||||
<extracomment>Transfer call %1</extracomment>
|
<extracomment>Transfer call %1</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>resume_call_name_accessible_name</source>
|
||||||
<extracomment>Resume %1 call</extracomment>
|
<extracomment>Resume %1 call</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>pause_call_name_accessible_name</source>
|
||||||
<extracomment>Pause %1 call</extracomment>
|
<extracomment>Pause %1 call</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>end_call_name_accessible_name</source>
|
||||||
<extracomment>End %1 call</extracomment>
|
<extracomment>End %1 call</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
|
@ -2032,13 +2056,13 @@
|
||||||
<context>
|
<context>
|
||||||
<name>ChatDroppableTextArea</name>
|
<name>ChatDroppableTextArea</name>
|
||||||
<message>
|
<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>
|
<source>chat_view_send_area_placeholder_text</source>
|
||||||
<extracomment>Say something… : placeholder text for sending message text area</extracomment>
|
<extracomment>Say something… : placeholder text for sending message text area</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>cannot_record_while_in_call_tooltip</source>
|
||||||
<extracomment>Cannot record a message while a call is ongoing</extracomment>
|
<extracomment>Cannot record a message while a call is ongoing</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
|
@ -2261,13 +2285,13 @@ Error</extracomment>
|
||||||
<context>
|
<context>
|
||||||
<name>ChatMessageContentModel</name>
|
<name>ChatMessageContentModel</name>
|
||||||
<message>
|
<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>
|
<source>popup_error_title</source>
|
||||||
<extracomment>Error</extracomment>
|
<extracomment>Error</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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>
|
<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>
|
<translation type="unfinished"></translation>
|
||||||
|
|
@ -4874,36 +4898,36 @@ Error</extracomment>
|
||||||
<context>
|
<context>
|
||||||
<name>Notifier</name>
|
<name>Notifier</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="309"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="310"/>
|
||||||
<source>new_call_alert_accessible_name</source>
|
<source>new_call_alert_accessible_name</source>
|
||||||
<extracomment>New call from %1</extracomment>
|
<extracomment>New call from %1</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="361"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="363"/>
|
||||||
<source>new_voice_message</source>
|
<source>new_voice_message</source>
|
||||||
<extracomment>'Voice message received!' : message to warn the user in a notofication for voice messages.</extracomment>
|
<extracomment>'Voice message received!' : message to warn the user in a notofication for voice messages.</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="362"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="364"/>
|
||||||
<source>new_file_message</source>
|
<source>new_file_message</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="365"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="367"/>
|
||||||
<source>new_conference_invitation</source>
|
<source>new_conference_invitation</source>
|
||||||
<extracomment>'Conference invitation received!' : Notification about receiving an invitation to a conference.</extracomment>
|
<extracomment>'Conference invitation received!' : Notification about receiving an invitation to a conference.</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="385"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="387"/>
|
||||||
<source>new_chat_room_messages</source>
|
<source>new_chat_room_messages</source>
|
||||||
<extracomment>'New messages received!' Notification that warn the user of new messages.</extracomment>
|
<extracomment>'New messages received!' Notification that warn the user of new messages.</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>new_message_alert_accessible_name</source>
|
||||||
<extracomment>New message on chatroom %1</extracomment>
|
<extracomment>New message on chatroom %1</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
|
@ -4923,102 +4947,102 @@ Error</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/auth/OIDCModel.cpp" line="123"/>
|
<location filename="../../model/auth/OIDCModel.cpp" line="125"/>
|
||||||
<source>oidc_authentication_granted_message</source>
|
<source>oidc_authentication_granted_message</source>
|
||||||
<extracomment>Authentication granted</extracomment>
|
<extracomment>Authentication granted</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_not_authenticated_message</source>
|
||||||
<extracomment>Not authenticated</extracomment>
|
<extracomment>Not authenticated</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/auth/OIDCModel.cpp" line="136"/>
|
<location filename="../../model/auth/OIDCModel.cpp" line="138"/>
|
||||||
<source>oidc_authentication_refresh_message</source>
|
<source>oidc_authentication_refresh_message</source>
|
||||||
<extracomment>Refreshing token</extracomment>
|
<extracomment>Refreshing token</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_temporary_credentials_message</source>
|
||||||
<extracomment>Temporary credentials received</extracomment>
|
<extracomment>Temporary credentials received</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/auth/OIDCModel.cpp" line="159"/>
|
<location filename="../../model/auth/OIDCModel.cpp" line="161"/>
|
||||||
<source>oidc_authentication_network_error</source>
|
<source>oidc_authentication_network_error</source>
|
||||||
<extracomment>Network error</extracomment>
|
<extracomment>Network error</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/auth/OIDCModel.cpp" line="163"/>
|
<location filename="../../model/auth/OIDCModel.cpp" line="165"/>
|
||||||
<source>oidc_authentication_server_error</source>
|
<source>oidc_authentication_server_error</source>
|
||||||
<extracomment>Server error</extracomment>
|
<extracomment>Server error</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_token_not_found_error</source>
|
||||||
<extracomment>OAuth token not found</extracomment>
|
<extracomment>OAuth token not found</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_token_secret_not_found_error</source>
|
||||||
<extracomment>OAuth token secret not found</extracomment>
|
<extracomment>OAuth token secret not found</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_callback_not_verified_error</source>
|
||||||
<extracomment>OAuth callback not verified</extracomment>
|
<extracomment>OAuth callback not verified</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_request_auth_message</source>
|
||||||
<extracomment>Requesting authorization from browser</extracomment>
|
<extracomment>Requesting authorization from browser</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_no_token_found_error</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_request_token_message</source>
|
||||||
<extracomment>Requesting access token</extracomment>
|
<extracomment>Requesting access token</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_refresh_token_message</source>
|
||||||
<extracomment>Refreshing access token</extracomment>
|
<extracomment>Refreshing access token</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_request_authorization_message</source>
|
||||||
<extracomment>Requesting authorization</extracomment>
|
<extracomment>Requesting authorization</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_request_temporary_credentials_message</source>
|
||||||
<extracomment>Requesting temporary credentials</extracomment>
|
<extracomment>Requesting temporary credentials</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_no_auth_found_in_config_error</source>
|
||||||
<extracomment>No authorization endpoint found in OpenID configuration</extracomment>
|
<extracomment>No authorization endpoint found in OpenID configuration</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_no_token_found_in_config_error</source>
|
||||||
<extracomment>No token endpoint found in OpenID configuration</extracomment>
|
<extracomment>No token endpoint found in OpenID configuration</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<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>
|
<translation>Start a group call ?</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>unencrypted_conversation_warning</source>
|
||||||
<extracomment>This conversation is not encrypted !</extracomment>
|
<extracomment>This conversation is not encrypted !</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>reply_to_label</source>
|
||||||
<extracomment>Reply to %1</extracomment>
|
<extracomment>Reply to %1</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>shared_medias_title</source>
|
||||||
<extracomment>Shared medias</extracomment>
|
<extracomment>Shared medias</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>shared_documents_title</source>
|
||||||
<extracomment>Shared documents</extracomment>
|
<extracomment>Shared documents</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>forward_to_title</source>
|
||||||
<extracomment>Forward to…</extracomment>
|
<extracomment>Forward to…</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>conversations_title</source>
|
||||||
<extracomment>Conversations</extracomment>
|
<extracomment>Conversations</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
|
@ -5859,38 +5883,38 @@ Pour les activer dans un projet commercial, merci de nous contacter.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>group_call_error_participants_invite</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="412"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="417"/>
|
||||||
<source>group_call_error_creation</source>
|
<source>group_call_error_creation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="512"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="517"/>
|
||||||
<source>voice_recording_duration</source>
|
<source>voice_recording_duration</source>
|
||||||
<extracomment>"Voice recording (%1)" : %1 is the duration formated in mm:ss</extracomment>
|
<extracomment>"Voice recording (%1)" : %1 is the duration formated in mm:ss</extracomment>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="520"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="525"/>
|
||||||
<source>conference_invitation</source>
|
<source>conference_invitation</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="522"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="527"/>
|
||||||
<source>conference_invitation_updated</source>
|
<source>conference_invitation_updated</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="524"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="529"/>
|
||||||
<source>conference_invitation_cancelled</source>
|
<source>conference_invitation_cancelled</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="585"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="591"/>
|
||||||
<source>unknown_audio_device_name</source>
|
<source>unknown_audio_device_name</source>
|
||||||
<translation>Unbekannter Gerätename</translation>
|
<translation>Unbekannter Gerätename</translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
||||||
|
|
@ -39,45 +39,45 @@
|
||||||
<context>
|
<context>
|
||||||
<name>AccountCore</name>
|
<name>AccountCore</name>
|
||||||
<message>
|
<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>
|
<source>drawer_menu_account_connection_status_connected</source>
|
||||||
<extracomment>"Connecté"</extracomment>
|
<extracomment>"Connecté"</extracomment>
|
||||||
<translation>Connected</translation>
|
<translation>Connected</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>drawer_menu_account_connection_status_refreshing</source>
|
||||||
<translation>Refreshing…</translation>
|
<translation>Refreshing…</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>drawer_menu_account_connection_status_progress</source>
|
||||||
<translation>Connecting…</translation>
|
<translation>Connecting…</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>drawer_menu_account_connection_status_failed</source>
|
||||||
<translation>Error</translation>
|
<translation>Error</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>drawer_menu_account_connection_status_cleared</source>
|
||||||
<translation>Disabled</translation>
|
<translation>Disabled</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>manage_account_status_connected_summary</source>
|
||||||
<extracomment>"Vous êtes en ligne et joignable."</extracomment>
|
<extracomment>"Vous êtes en ligne et joignable."</extracomment>
|
||||||
<translation>You are online and reachable.</translation>
|
<translation>You are online and reachable.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>manage_account_status_failed_summary</source>
|
||||||
<extracomment>"Erreur de connexion, vérifiez vos paramètres."</extracomment>
|
<extracomment>"Erreur de connexion, vérifiez vos paramètres."</extracomment>
|
||||||
<translation>Connection error, check your settings.</translation>
|
<translation>Connection error, check your settings.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>manage_account_status_cleared_summary</source>
|
||||||
<extracomment>"Compte désactivé, vous ne recevrez ni appel ni message."</extracomment>
|
<extracomment>"Compte désactivé, vous ne recevrez ni appel ni message."</extracomment>
|
||||||
<translation>Account disabled, you will not receive calls or messages.</translation>
|
<translation>Account disabled, you will not receive calls or messages.</translation>
|
||||||
|
|
@ -428,11 +428,6 @@
|
||||||
<extracomment>"If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it."</extracomment>
|
<extracomment>"If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it."</extracomment>
|
||||||
<translation>If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it.</translation>
|
<translation>If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>account_settings_outbound_proxy_title</source>
|
|
||||||
<extracomment>"Outbound proxy enabled"</extracomment>
|
|
||||||
<translation type="vanished">Outbound proxy server enabled</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="157"/>
|
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="157"/>
|
||||||
<source>account_settings_stun_server_url_title</source>
|
<source>account_settings_stun_server_url_title</source>
|
||||||
|
|
@ -634,103 +629,102 @@
|
||||||
<context>
|
<context>
|
||||||
<name>App</name>
|
<name>App</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="357"/>
|
<location filename="../../core/App.cpp" line="356"/>
|
||||||
<source>remote_provisioning_dialog</source>
|
<source>remote_provisioning_dialog</source>
|
||||||
<extracomment>Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</extracomment>
|
<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>
|
<translation>Do you want to download and apply remote provisioning from this address ?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="394"/>
|
<location filename="../../core/App.cpp" line="393"/>
|
||||||
<location filename="../../core/App.cpp" line="648"/>
|
<location filename="../../core/App.cpp" line="658"/>
|
||||||
<source>info_popup_error_title</source>
|
<source>info_popup_error_title</source>
|
||||||
<extracomment>Error</extracomment>
|
<extracomment>Error</extracomment>
|
||||||
<translation>Error</translation>
|
<translation>Error</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="395"/>
|
<location filename="../../core/App.cpp" line="394"/>
|
||||||
<location filename="../../core/App.cpp" line="650"/>
|
<location filename="../../core/App.cpp" line="660"/>
|
||||||
<source>info_popup_configuration_failed_message</source>
|
<source>info_popup_configuration_failed_message</source>
|
||||||
<extracomment>Remote provisioning failed : %1</extracomment>
|
<extracomment>Remote provisioning failed : %1</extracomment>
|
||||||
<translation>Remote provisioning failed : %1</translation>
|
<translation>Remote provisioning failed : %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="644"/>
|
<location filename="../../core/App.cpp" line="654"/>
|
||||||
<source>configuration_error_detail</source>
|
<source>configuration_error_detail</source>
|
||||||
<extracomment>not reachable</extracomment>
|
<extracomment>not reachable</extracomment>
|
||||||
<translation>not reachable</translation>
|
<translation>not reachable</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="916"/>
|
<location filename="../../core/App.cpp" line="926"/>
|
||||||
<source>application_description</source>
|
<source>application_description</source>
|
||||||
<extracomment>"A free and open source SIP video-phone."</extracomment>
|
<extracomment>"A free and open source SIP video-phone."</extracomment>
|
||||||
<translation>A free and open source SIP video-phone.</translation>
|
<translation>A free and open source SIP video-phone.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="918"/>
|
<location filename="../../core/App.cpp" line="928"/>
|
||||||
<source>command_line_arg_order</source>
|
<source>command_line_arg_order</source>
|
||||||
<extracomment>"Send an order to the application towards a command line"</extracomment>
|
<extracomment>"Send an order to the application towards a command line"</extracomment>
|
||||||
<translation>Send an order to the application towards a command line</translation>
|
<translation>Send an order to the application towards a command line</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="922"/>
|
<location filename="../../core/App.cpp" line="932"/>
|
||||||
<source>command_line_option_show_help</source>
|
<source>command_line_option_show_help</source>
|
||||||
<translation>Show this help</translation>
|
<translation>Show this help</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="927"/>
|
<location filename="../../core/App.cpp" line="937"/>
|
||||||
<source>command_line_option_show_app_version</source>
|
<source>command_line_option_show_app_version</source>
|
||||||
<translation>Show app version</translation>
|
<translation>Show app version</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="935"/>
|
<location filename="../../core/App.cpp" line="945"/>
|
||||||
<source>command_line_option_config_to_fetch</source>
|
<source>command_line_option_config_to_fetch</source>
|
||||||
<extracomment>"Specify the linphone configuration file to be fetched. It will be merged with the current configuration."</extracomment>
|
<extracomment>"Specify the linphone configuration file to be fetched. It will be merged with the current configuration."</extracomment>
|
||||||
<translation>Specify the linphone configuration file to be fetched. It will be merged with the current configuration.</translation>
|
<translation>Specify the linphone configuration file to be fetched. It will be merged with the current configuration.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>command_line_option_config_to_fetch_arg</source>
|
||||||
<extracomment>"URL, path or file"</extracomment>
|
<extracomment>"URL, path or file"</extracomment>
|
||||||
<translation>URL, path or file</translation>
|
<translation>URL, path or file</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="942"/>
|
<location filename="../../core/App.cpp" line="952"/>
|
||||||
<source>command_line_option_minimized</source>
|
<source>command_line_option_minimized</source>
|
||||||
<translation>Minimize</translation>
|
<translation>Minimize</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="945"/>
|
<location filename="../../core/App.cpp" line="955"/>
|
||||||
<source>command_line_option_log_to_stdout</source>
|
<source>command_line_option_log_to_stdout</source>
|
||||||
<translation>Log to stdout some debug information while running</translation>
|
<translation>Log to stdout some debug information while running</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>command_line_option_print_app_logs_only</source>
|
||||||
<extracomment>"Print only logs from the application"</extracomment>
|
<extracomment>"Print only logs from the application"</extracomment>
|
||||||
<translation>Print only logs from the application</translation>
|
<translation>Print only logs from the application</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="1318"/>
|
<location filename="../../core/App.cpp" line="1329"/>
|
||||||
<source>hide_action</source>
|
<source>hide_action</source>
|
||||||
<extracomment>"Cacher" "Afficher"</extracomment>
|
<extracomment>"Cacher" "Afficher"</extracomment>
|
||||||
<translation>Hide</translation>
|
<translation>Hide</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="1318"/>
|
<location filename="../../core/App.cpp" line="1329"/>
|
||||||
<source>show_action</source>
|
<source>show_action</source>
|
||||||
<translation>Show</translation>
|
<translation>Show</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="1333"/>
|
<location filename="../../core/App.cpp" line="1344"/>
|
||||||
<source>quit_action</source>
|
<source>quit_action</source>
|
||||||
<extracomment>"Quitter"</extracomment>
|
<extracomment>"Quitter"</extracomment>
|
||||||
<translation>Quit</translation>
|
<translation>Quit</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="1337"/>
|
<location filename="../../core/App.cpp" line="1448"/>
|
||||||
<source>mark_all_read_action</source>
|
<source>mark_all_read_action</source>
|
||||||
<extracomment>"Mark all as read"</extracomment>
|
<translation>Marquer tout comme lu</translation>
|
||||||
<translation>Mark all as read</translation>
|
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
|
@ -926,7 +920,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>CallHistoryLayout</name>
|
<name>CallHistoryLayout</name>
|
||||||
<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>
|
<source>meeting_info_join_title</source>
|
||||||
<extracomment>"Rejoindre la réunion"</extracomment>
|
<extracomment>"Rejoindre la réunion"</extracomment>
|
||||||
<translation>Join meeting</translation>
|
<translation>Join meeting</translation>
|
||||||
|
|
@ -1003,52 +997,77 @@
|
||||||
<translation>The meeting link has been copied to the clipboard</translation>
|
<translation>The meeting link has been copied to the clipboard</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</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>
|
<context>
|
||||||
<name>CallListView</name>
|
<name>CallListView</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../view/Control/Display/Call/CallListView.qml" line="55"/>
|
<location filename="../../view/Control/Display/Call/CallListView.qml" line="59"/>
|
||||||
<source>meeting</source>
|
<source>meeting</source>
|
||||||
<extracomment>"Réunion</extracomment>
|
<extracomment>"Réunion</extracomment>
|
||||||
<translation>Meeting</translation>
|
<translation>Meeting</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>call</source>
|
||||||
<extracomment>"Appel"</extracomment>
|
<extracomment>"Appel"</extracomment>
|
||||||
<translation>Call</translation>
|
<translation>Call</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>paused_call_or_meeting</source>
|
||||||
<extracomment>"%1 en pause"</extracomment>
|
<extracomment>"%1 en pause"</extracomment>
|
||||||
<translation>%1 paused</translation>
|
<translation>%1 paused</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>ongoing_call_or_meeting</source>
|
||||||
<extracomment>"%1 en cours"</extracomment>
|
<extracomment>"%1 en cours"</extracomment>
|
||||||
<translation>Ongoing %1</translation>
|
<translation>Ongoing %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>transfer_call_name_accessible_name</source>
|
||||||
<extracomment>Transfer call %1</extracomment>
|
<extracomment>Transfer call %1</extracomment>
|
||||||
<translation>Transfer call %1</translation>
|
<translation>Transfer call %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>resume_call_name_accessible_name</source>
|
||||||
<extracomment>Resume %1 call</extracomment>
|
<extracomment>Resume %1 call</extracomment>
|
||||||
<translation>Resume %1 call</translation>
|
<translation>Resume %1 call</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>pause_call_name_accessible_name</source>
|
||||||
<extracomment>Pause %1 call</extracomment>
|
<extracomment>Pause %1 call</extracomment>
|
||||||
<translation>Pause %1 call</translation>
|
<translation>Pause %1 call</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>end_call_name_accessible_name</source>
|
||||||
<extracomment>End %1 call</extracomment>
|
<extracomment>End %1 call</extracomment>
|
||||||
<translation>End %1 call</translation>
|
<translation>End %1 call</translation>
|
||||||
|
|
@ -1994,13 +2013,13 @@
|
||||||
<context>
|
<context>
|
||||||
<name>ChatDroppableTextArea</name>
|
<name>ChatDroppableTextArea</name>
|
||||||
<message>
|
<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>
|
<source>chat_view_send_area_placeholder_text</source>
|
||||||
<extracomment>Say something… : placeholder text for sending message text area</extracomment>
|
<extracomment>Say something… : placeholder text for sending message text area</extracomment>
|
||||||
<translation>Say something…</translation>
|
<translation>Say something…</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>cannot_record_while_in_call_tooltip</source>
|
||||||
<extracomment>Cannot record a message while a call is ongoing</extracomment>
|
<extracomment>Cannot record a message while a call is ongoing</extracomment>
|
||||||
<translation>Cannot record a message while a call is ongoing</translation>
|
<translation>Cannot record a message while a call is ongoing</translation>
|
||||||
|
|
@ -2223,13 +2242,13 @@ Error</extracomment>
|
||||||
<context>
|
<context>
|
||||||
<name>ChatMessageContentModel</name>
|
<name>ChatMessageContentModel</name>
|
||||||
<message>
|
<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>
|
<source>popup_error_title</source>
|
||||||
<extracomment>Error</extracomment>
|
<extracomment>Error</extracomment>
|
||||||
<translation>Error</translation>
|
<translation>Error</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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>
|
<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>
|
<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>
|
<context>
|
||||||
<name>Notifier</name>
|
<name>Notifier</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="309"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="310"/>
|
||||||
<source>new_call_alert_accessible_name</source>
|
<source>new_call_alert_accessible_name</source>
|
||||||
<extracomment>New call from %1</extracomment>
|
<extracomment>New call from %1</extracomment>
|
||||||
<translation>New call from %1</translation>
|
<translation>New call from %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="361"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="363"/>
|
||||||
<source>new_voice_message</source>
|
<source>new_voice_message</source>
|
||||||
<extracomment>'Voice message received!' : message to warn the user in a notofication for voice messages.</extracomment>
|
<extracomment>'Voice message received!' : message to warn the user in a notofication for voice messages.</extracomment>
|
||||||
<translation>Voice message received!</translation>
|
<translation>Voice message received!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="362"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="364"/>
|
||||||
<source>new_file_message</source>
|
<source>new_file_message</source>
|
||||||
<translation>File received!</translation>
|
<translation>File received!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="365"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="367"/>
|
||||||
<source>new_conference_invitation</source>
|
<source>new_conference_invitation</source>
|
||||||
<extracomment>'Conference invitation received!' : Notification about receiving an invitation to a conference.</extracomment>
|
<extracomment>'Conference invitation received!' : Notification about receiving an invitation to a conference.</extracomment>
|
||||||
<translation>Conference invitation received !</translation>
|
<translation>Conference invitation received !</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="385"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="387"/>
|
||||||
<source>new_chat_room_messages</source>
|
<source>new_chat_room_messages</source>
|
||||||
<extracomment>'New messages received!' Notification that warn the user of new messages.</extracomment>
|
<extracomment>'New messages received!' Notification that warn the user of new messages.</extracomment>
|
||||||
<translation>New messages received !</translation>
|
<translation>New messages received !</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>new_message_alert_accessible_name</source>
|
||||||
<extracomment>New message on chatroom %1</extracomment>
|
<extracomment>New message on chatroom %1</extracomment>
|
||||||
<translation>New message on chatroom %1</translation>
|
<translation>New message on chatroom %1</translation>
|
||||||
|
|
@ -4820,102 +4839,102 @@ Expiration : %1</translation>
|
||||||
<translation>Timeout: Not authenticated</translation>
|
<translation>Timeout: Not authenticated</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/auth/OIDCModel.cpp" line="123"/>
|
<location filename="../../model/auth/OIDCModel.cpp" line="125"/>
|
||||||
<source>oidc_authentication_granted_message</source>
|
<source>oidc_authentication_granted_message</source>
|
||||||
<extracomment>Authentication granted</extracomment>
|
<extracomment>Authentication granted</extracomment>
|
||||||
<translation>Authentication granted</translation>
|
<translation>Authentication granted</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_not_authenticated_message</source>
|
||||||
<extracomment>Not authenticated</extracomment>
|
<extracomment>Not authenticated</extracomment>
|
||||||
<translation>Not authenticated</translation>
|
<translation>Not authenticated</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/auth/OIDCModel.cpp" line="136"/>
|
<location filename="../../model/auth/OIDCModel.cpp" line="138"/>
|
||||||
<source>oidc_authentication_refresh_message</source>
|
<source>oidc_authentication_refresh_message</source>
|
||||||
<extracomment>Refreshing token</extracomment>
|
<extracomment>Refreshing token</extracomment>
|
||||||
<translation>Refreshing token</translation>
|
<translation>Refreshing token</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_temporary_credentials_message</source>
|
||||||
<extracomment>Temporary credentials received</extracomment>
|
<extracomment>Temporary credentials received</extracomment>
|
||||||
<translation>Temporary credentials received</translation>
|
<translation>Temporary credentials received</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/auth/OIDCModel.cpp" line="159"/>
|
<location filename="../../model/auth/OIDCModel.cpp" line="161"/>
|
||||||
<source>oidc_authentication_network_error</source>
|
<source>oidc_authentication_network_error</source>
|
||||||
<extracomment>Network error</extracomment>
|
<extracomment>Network error</extracomment>
|
||||||
<translation>Network error</translation>
|
<translation>Network error</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/auth/OIDCModel.cpp" line="163"/>
|
<location filename="../../model/auth/OIDCModel.cpp" line="165"/>
|
||||||
<source>oidc_authentication_server_error</source>
|
<source>oidc_authentication_server_error</source>
|
||||||
<extracomment>Server error</extracomment>
|
<extracomment>Server error</extracomment>
|
||||||
<translation>Server error</translation>
|
<translation>Server error</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_token_not_found_error</source>
|
||||||
<extracomment>OAuth token not found</extracomment>
|
<extracomment>OAuth token not found</extracomment>
|
||||||
<translation>OAuth token not found</translation>
|
<translation>OAuth token not found</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_token_secret_not_found_error</source>
|
||||||
<extracomment>OAuth token secret not found</extracomment>
|
<extracomment>OAuth token secret not found</extracomment>
|
||||||
<translation>OAuth token secret not found</translation>
|
<translation>OAuth token secret not found</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_callback_not_verified_error</source>
|
||||||
<extracomment>OAuth callback not verified</extracomment>
|
<extracomment>OAuth callback not verified</extracomment>
|
||||||
<translation>OAuth callback not verified</translation>
|
<translation>OAuth callback not verified</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_request_auth_message</source>
|
||||||
<extracomment>Requesting authorization from browser</extracomment>
|
<extracomment>Requesting authorization from browser</extracomment>
|
||||||
<translation>Requesting authorization from browser</translation>
|
<translation>Requesting authorization from browser</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_no_token_found_error</source>
|
||||||
<translation>No token found</translation>
|
<translation>No token found</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_request_token_message</source>
|
||||||
<extracomment>Requesting access token</extracomment>
|
<extracomment>Requesting access token</extracomment>
|
||||||
<translation>Requesting access token</translation>
|
<translation>Requesting access token</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_refresh_token_message</source>
|
||||||
<extracomment>Refreshing access token</extracomment>
|
<extracomment>Refreshing access token</extracomment>
|
||||||
<translation>Refreshing access token</translation>
|
<translation>Refreshing access token</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_request_authorization_message</source>
|
||||||
<extracomment>Requesting authorization</extracomment>
|
<extracomment>Requesting authorization</extracomment>
|
||||||
<translation>Requesting authorization</translation>
|
<translation>Requesting authorization</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_request_temporary_credentials_message</source>
|
||||||
<extracomment>Requesting temporary credentials</extracomment>
|
<extracomment>Requesting temporary credentials</extracomment>
|
||||||
<translation>Requesting temporary credentials</translation>
|
<translation>Requesting temporary credentials</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_no_auth_found_in_config_error</source>
|
||||||
<extracomment>No authorization endpoint found in OpenID configuration</extracomment>
|
<extracomment>No authorization endpoint found in OpenID configuration</extracomment>
|
||||||
<translation>No authorization endpoint found in OpenID configuration</translation>
|
<translation>No authorization endpoint found in OpenID configuration</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_no_token_found_in_config_error</source>
|
||||||
<extracomment>No token endpoint found in OpenID configuration</extracomment>
|
<extracomment>No token endpoint found in OpenID configuration</extracomment>
|
||||||
<translation>No token endpoint found in OpenID configuration</translation>
|
<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>
|
<translation>Start a group call ?</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>unencrypted_conversation_warning</source>
|
||||||
<extracomment>This conversation is not encrypted !</extracomment>
|
<extracomment>This conversation is not encrypted !</extracomment>
|
||||||
<translation>This conversation is not encrypted !</translation>
|
<translation>This conversation is not encrypted !</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>reply_to_label</source>
|
||||||
<extracomment>Reply to %1</extracomment>
|
<extracomment>Reply to %1</extracomment>
|
||||||
<translation>Reply to %1</translation>
|
<translation>Reply to %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>shared_medias_title</source>
|
||||||
<extracomment>Shared medias</extracomment>
|
<extracomment>Shared medias</extracomment>
|
||||||
<translation>Shared medias</translation>
|
<translation>Shared medias</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>shared_documents_title</source>
|
||||||
<extracomment>Shared documents</extracomment>
|
<extracomment>Shared documents</extracomment>
|
||||||
<translation>Shared documents</translation>
|
<translation>Shared documents</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>forward_to_title</source>
|
||||||
<extracomment>Forward to…</extracomment>
|
<extracomment>Forward to…</extracomment>
|
||||||
<translation>Froward to…</translation>
|
<translation>Froward to…</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>conversations_title</source>
|
||||||
<extracomment>Conversations</extracomment>
|
<extracomment>Conversations</extracomment>
|
||||||
<translation>Conversations</translation>
|
<translation>Conversations</translation>
|
||||||
|
|
@ -5658,11 +5677,6 @@ To enable them in a commercial project, please contact us.</translation>
|
||||||
<extracomment>"Réunions"</extracomment>
|
<extracomment>"Réunions"</extracomment>
|
||||||
<translation>Meetings</translation>
|
<translation>Meetings</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>settings_security_title</source>
|
|
||||||
<extracomment>"Affichage" "Security"</extracomment>
|
|
||||||
<translation type="vanished">Security / Encryption</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../view/Page/Form/Settings/SettingsPage.qml" line="29"/>
|
<location filename="../../view/Page/Form/Settings/SettingsPage.qml" line="29"/>
|
||||||
<source>settings_network_title</source>
|
<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't create group call</translation>
|
<translation>No default account found, can't create group call</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>group_call_error_participants_invite</source>
|
||||||
<translation>Couldn't invite participants to group call</translation>
|
<translation>Couldn't invite participants to group call</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="412"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="417"/>
|
||||||
<source>group_call_error_creation</source>
|
<source>group_call_error_creation</source>
|
||||||
<translation>Group call couldn't be created</translation>
|
<translation>Group call couldn't be created</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="512"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="517"/>
|
||||||
<source>voice_recording_duration</source>
|
<source>voice_recording_duration</source>
|
||||||
<extracomment>"Voice recording (%1)" : %1 is the duration formated in mm:ss</extracomment>
|
<extracomment>"Voice recording (%1)" : %1 is the duration formated in mm:ss</extracomment>
|
||||||
<translation>Voice recording (%1)</translation>
|
<translation>Voice recording (%1)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="585"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="591"/>
|
||||||
<source>unknown_audio_device_name</source>
|
<source>unknown_audio_device_name</source>
|
||||||
<translation>Unknown device name</translation>
|
<translation>Unknown device name</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="520"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="525"/>
|
||||||
<source>conference_invitation</source>
|
<source>conference_invitation</source>
|
||||||
<translation>Meeting invitation</translation>
|
<translation>Meeting invitation</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="524"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="529"/>
|
||||||
<source>conference_invitation_cancelled</source>
|
<source>conference_invitation_cancelled</source>
|
||||||
<translation>Meeting cancellation</translation>
|
<translation>Meeting cancellation</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="522"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="527"/>
|
||||||
<source>conference_invitation_updated</source>
|
<source>conference_invitation_updated</source>
|
||||||
<translation>Meeting modification</translation>
|
<translation>Meeting modification</translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
||||||
|
|
@ -39,45 +39,45 @@
|
||||||
<context>
|
<context>
|
||||||
<name>AccountCore</name>
|
<name>AccountCore</name>
|
||||||
<message>
|
<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>
|
<source>drawer_menu_account_connection_status_connected</source>
|
||||||
<extracomment>"Connecté"</extracomment>
|
<extracomment>"Connecté"</extracomment>
|
||||||
<translation>Connecté</translation>
|
<translation>Connecté</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>drawer_menu_account_connection_status_refreshing</source>
|
||||||
<translation>En cours de rafraîchissement…</translation>
|
<translation>En cours de rafraîchissement…</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>drawer_menu_account_connection_status_progress</source>
|
||||||
<translation>Connexion…</translation>
|
<translation>Connexion…</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>drawer_menu_account_connection_status_failed</source>
|
||||||
<translation>Erreur</translation>
|
<translation>Erreur</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>drawer_menu_account_connection_status_cleared</source>
|
||||||
<translation>Désactivé</translation>
|
<translation>Désactivé</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>manage_account_status_connected_summary</source>
|
||||||
<extracomment>"Vous êtes en ligne et joignable."</extracomment>
|
<extracomment>"Vous êtes en ligne et joignable."</extracomment>
|
||||||
<translation>Vous êtes en ligne et joignable.</translation>
|
<translation>Vous êtes en ligne et joignable.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>manage_account_status_failed_summary</source>
|
||||||
<extracomment>"Erreur de connexion, vérifiez vos paramètres."</extracomment>
|
<extracomment>"Erreur de connexion, vérifiez vos paramètres."</extracomment>
|
||||||
<translation>Erreur de connexion, vérifiez vos paramètres.</translation>
|
<translation>Erreur de connexion, vérifiez vos paramètres.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>manage_account_status_cleared_summary</source>
|
||||||
<extracomment>"Compte désactivé, vous ne recevrez ni appel ni message."</extracomment>
|
<extracomment>"Compte désactivé, vous ne recevrez ni appel ni message."</extracomment>
|
||||||
<translation>Compte désactivé, vous ne recevrez ni appel ni message.</translation>
|
<translation>Compte désactivé, vous ne recevrez ni appel ni message.</translation>
|
||||||
|
|
@ -428,11 +428,6 @@
|
||||||
<extracomment>"If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it."</extracomment>
|
<extracomment>"If this field is filled, the outbound proxy will be enabled automatically. Leave it empty to disable it."</extracomment>
|
||||||
<translation>Si ce champ est rempli, l’outbound proxy sera activé automatiquement. Laissez-le vide pour le désactiver.</translation>
|
<translation>Si ce champ est rempli, l’outbound proxy sera activé automatiquement. Laissez-le vide pour le désactiver.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>account_settings_outbound_proxy_title</source>
|
|
||||||
<extracomment>"Outbound proxy enabled"</extracomment>
|
|
||||||
<translation type="vanished">Serveur mandataire sortant</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="157"/>
|
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml" line="157"/>
|
||||||
<source>account_settings_stun_server_url_title</source>
|
<source>account_settings_stun_server_url_title</source>
|
||||||
|
|
@ -634,103 +629,102 @@
|
||||||
<context>
|
<context>
|
||||||
<name>App</name>
|
<name>App</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="357"/>
|
<location filename="../../core/App.cpp" line="356"/>
|
||||||
<source>remote_provisioning_dialog</source>
|
<source>remote_provisioning_dialog</source>
|
||||||
<extracomment>Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</extracomment>
|
<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>
|
<translation>Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="394"/>
|
<location filename="../../core/App.cpp" line="393"/>
|
||||||
<location filename="../../core/App.cpp" line="648"/>
|
<location filename="../../core/App.cpp" line="658"/>
|
||||||
<source>info_popup_error_title</source>
|
<source>info_popup_error_title</source>
|
||||||
<extracomment>Error</extracomment>
|
<extracomment>Error</extracomment>
|
||||||
<translation>Erreur</translation>
|
<translation>Erreur</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="395"/>
|
<location filename="../../core/App.cpp" line="394"/>
|
||||||
<location filename="../../core/App.cpp" line="650"/>
|
<location filename="../../core/App.cpp" line="660"/>
|
||||||
<source>info_popup_configuration_failed_message</source>
|
<source>info_popup_configuration_failed_message</source>
|
||||||
<extracomment>Remote provisioning failed : %1</extracomment>
|
<extracomment>Remote provisioning failed : %1</extracomment>
|
||||||
<translation>La configuration distante a échoué : %1</translation>
|
<translation>La configuration distante a échoué : %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="644"/>
|
<location filename="../../core/App.cpp" line="654"/>
|
||||||
<source>configuration_error_detail</source>
|
<source>configuration_error_detail</source>
|
||||||
<extracomment>not reachable</extracomment>
|
<extracomment>not reachable</extracomment>
|
||||||
<translation>indisponible</translation>
|
<translation>indisponible</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="916"/>
|
<location filename="../../core/App.cpp" line="926"/>
|
||||||
<source>application_description</source>
|
<source>application_description</source>
|
||||||
<extracomment>"A free and open source SIP video-phone."</extracomment>
|
<extracomment>"A free and open source SIP video-phone."</extracomment>
|
||||||
<translation>A free and open source SIP video-phone.</translation>
|
<translation>A free and open source SIP video-phone.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="918"/>
|
<location filename="../../core/App.cpp" line="928"/>
|
||||||
<source>command_line_arg_order</source>
|
<source>command_line_arg_order</source>
|
||||||
<extracomment>"Send an order to the application towards a command line"</extracomment>
|
<extracomment>"Send an order to the application towards a command line"</extracomment>
|
||||||
<translation>Send an order to the application towards a command line</translation>
|
<translation>Send an order to the application towards a command line</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="922"/>
|
<location filename="../../core/App.cpp" line="932"/>
|
||||||
<source>command_line_option_show_help</source>
|
<source>command_line_option_show_help</source>
|
||||||
<translation>Show this help</translation>
|
<translation>Show this help</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="927"/>
|
<location filename="../../core/App.cpp" line="937"/>
|
||||||
<source>command_line_option_show_app_version</source>
|
<source>command_line_option_show_app_version</source>
|
||||||
<translation>Afficher la version de l'application</translation>
|
<translation>Afficher la version de l'application</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="935"/>
|
<location filename="../../core/App.cpp" line="945"/>
|
||||||
<source>command_line_option_config_to_fetch</source>
|
<source>command_line_option_config_to_fetch</source>
|
||||||
<extracomment>"Specify the linphone configuration file to be fetched. It will be merged with the current configuration."</extracomment>
|
<extracomment>"Specify the linphone configuration file to be fetched. It will be merged with the current configuration."</extracomment>
|
||||||
<translation>Specify the linphone configuration file to be fetched. It will be merged with the current configuration.</translation>
|
<translation>Specify the linphone configuration file to be fetched. It will be merged with the current configuration.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>command_line_option_config_to_fetch_arg</source>
|
||||||
<extracomment>"URL, path or file"</extracomment>
|
<extracomment>"URL, path or file"</extracomment>
|
||||||
<translation>URL, path or file</translation>
|
<translation>URL, path or file</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="942"/>
|
<location filename="../../core/App.cpp" line="952"/>
|
||||||
<source>command_line_option_minimized</source>
|
<source>command_line_option_minimized</source>
|
||||||
<translation>Minimiser</translation>
|
<translation>Minimiser</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="945"/>
|
<location filename="../../core/App.cpp" line="955"/>
|
||||||
<source>command_line_option_log_to_stdout</source>
|
<source>command_line_option_log_to_stdout</source>
|
||||||
<translation>Log to stdout some debug information while running</translation>
|
<translation>Log to stdout some debug information while running</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>command_line_option_print_app_logs_only</source>
|
||||||
<extracomment>"Print only logs from the application"</extracomment>
|
<extracomment>"Print only logs from the application"</extracomment>
|
||||||
<translation>Print only logs from the application</translation>
|
<translation>Print only logs from the application</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="1318"/>
|
<location filename="../../core/App.cpp" line="1329"/>
|
||||||
<source>hide_action</source>
|
<source>hide_action</source>
|
||||||
<extracomment>"Cacher" "Afficher"</extracomment>
|
<extracomment>"Cacher" "Afficher"</extracomment>
|
||||||
<translation>Cacher</translation>
|
<translation>Cacher</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="1318"/>
|
<location filename="../../core/App.cpp" line="1329"/>
|
||||||
<source>show_action</source>
|
<source>show_action</source>
|
||||||
<translation>Afficher</translation>
|
<translation>Afficher</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="1333"/>
|
<location filename="../../core/App.cpp" line="1344"/>
|
||||||
<source>quit_action</source>
|
<source>quit_action</source>
|
||||||
<extracomment>"Quitter"</extracomment>
|
<extracomment>"Quitter"</extracomment>
|
||||||
<translation>Quitter</translation>
|
<translation>Quitter</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/App.cpp" line="1337"/>
|
<location filename="../../core/App.cpp" line="1448"/>
|
||||||
<source>mark_all_read_action</source>
|
<source>mark_all_read_action</source>
|
||||||
<extracomment>"Mark all as read"</extracomment>
|
<translation>Mark all as read</translation>
|
||||||
<translation>Marquer tout comme lu</translation>
|
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
|
@ -926,7 +920,7 @@
|
||||||
<context>
|
<context>
|
||||||
<name>CallHistoryLayout</name>
|
<name>CallHistoryLayout</name>
|
||||||
<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>
|
<source>meeting_info_join_title</source>
|
||||||
<extracomment>"Rejoindre la réunion"</extracomment>
|
<extracomment>"Rejoindre la réunion"</extracomment>
|
||||||
<translation>Rejoindre la réunion</translation>
|
<translation>Rejoindre la réunion</translation>
|
||||||
|
|
@ -1003,52 +997,77 @@
|
||||||
<translation>Le lien de la réunion a été copié dans le presse-papier</translation>
|
<translation>Le lien de la réunion a été copié dans le presse-papier</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</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>
|
<context>
|
||||||
<name>CallListView</name>
|
<name>CallListView</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../view/Control/Display/Call/CallListView.qml" line="55"/>
|
<location filename="../../view/Control/Display/Call/CallListView.qml" line="59"/>
|
||||||
<source>meeting</source>
|
<source>meeting</source>
|
||||||
<extracomment>"Réunion</extracomment>
|
<extracomment>"Réunion</extracomment>
|
||||||
<translation>Réunion</translation>
|
<translation>Réunion</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>call</source>
|
||||||
<extracomment>"Appel"</extracomment>
|
<extracomment>"Appel"</extracomment>
|
||||||
<translation>Appel</translation>
|
<translation>Appel</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>paused_call_or_meeting</source>
|
||||||
<extracomment>"%1 en pause"</extracomment>
|
<extracomment>"%1 en pause"</extracomment>
|
||||||
<translation>%1 en pause</translation>
|
<translation>%1 en pause</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>ongoing_call_or_meeting</source>
|
||||||
<extracomment>"%1 en cours"</extracomment>
|
<extracomment>"%1 en cours"</extracomment>
|
||||||
<translation>%1 en cours</translation>
|
<translation>%1 en cours</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>transfer_call_name_accessible_name</source>
|
||||||
<extracomment>Transfer call %1</extracomment>
|
<extracomment>Transfer call %1</extracomment>
|
||||||
<translation>Transférer l'appel %1</translation>
|
<translation>Transférer l'appel %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>resume_call_name_accessible_name</source>
|
||||||
<extracomment>Resume %1 call</extracomment>
|
<extracomment>Resume %1 call</extracomment>
|
||||||
<translation>Reprendre l'appel %1</translation>
|
<translation>Reprendre l'appel %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>pause_call_name_accessible_name</source>
|
||||||
<extracomment>Pause %1 call</extracomment>
|
<extracomment>Pause %1 call</extracomment>
|
||||||
<translation>Mettre l'appel %1 en pause</translation>
|
<translation>Mettre l'appel %1 en pause</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>end_call_name_accessible_name</source>
|
||||||
<extracomment>End %1 call</extracomment>
|
<extracomment>End %1 call</extracomment>
|
||||||
<translation>Terminer l'appel %1</translation>
|
<translation>Terminer l'appel %1</translation>
|
||||||
|
|
@ -1994,13 +2013,13 @@
|
||||||
<context>
|
<context>
|
||||||
<name>ChatDroppableTextArea</name>
|
<name>ChatDroppableTextArea</name>
|
||||||
<message>
|
<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>
|
<source>chat_view_send_area_placeholder_text</source>
|
||||||
<extracomment>Say something… : placeholder text for sending message text area</extracomment>
|
<extracomment>Say something… : placeholder text for sending message text area</extracomment>
|
||||||
<translation>Dites quelque chose…</translation>
|
<translation>Dites quelque chose…</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>cannot_record_while_in_call_tooltip</source>
|
||||||
<extracomment>Cannot record a message while a call is ongoing</extracomment>
|
<extracomment>Cannot record a message while a call is ongoing</extracomment>
|
||||||
<translation>Impossible d'enregistrer un message vocal pendant un appel</translation>
|
<translation>Impossible d'enregistrer un message vocal pendant un appel</translation>
|
||||||
|
|
@ -2223,13 +2242,13 @@ Error</extracomment>
|
||||||
<context>
|
<context>
|
||||||
<name>ChatMessageContentModel</name>
|
<name>ChatMessageContentModel</name>
|
||||||
<message>
|
<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>
|
<source>popup_error_title</source>
|
||||||
<extracomment>Error</extracomment>
|
<extracomment>Error</extracomment>
|
||||||
<translation>Erreur</translation>
|
<translation>Erreur</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<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>
|
<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é téléchargé et n'est plus sur le serveur. Votre correspondant devra vous le renvoyer si vous voulez y avoir accès.</translation>
|
<translation>Ce fichier a déjà été téléchargé et n'est plus sur le serveur. Votre correspondant devra vous le renvoyer si vous voulez y avoir accès.</translation>
|
||||||
|
|
@ -4771,36 +4790,36 @@ Expiration : %1</translation>
|
||||||
<context>
|
<context>
|
||||||
<name>Notifier</name>
|
<name>Notifier</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="309"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="310"/>
|
||||||
<source>new_call_alert_accessible_name</source>
|
<source>new_call_alert_accessible_name</source>
|
||||||
<extracomment>New call from %1</extracomment>
|
<extracomment>New call from %1</extracomment>
|
||||||
<translation>Nouvel appel de %1</translation>
|
<translation>Nouvel appel de %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="361"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="363"/>
|
||||||
<source>new_voice_message</source>
|
<source>new_voice_message</source>
|
||||||
<extracomment>'Voice message received!' : message to warn the user in a notofication for voice messages.</extracomment>
|
<extracomment>'Voice message received!' : message to warn the user in a notofication for voice messages.</extracomment>
|
||||||
<translation>Message vocal reçu !</translation>
|
<translation>Message vocal reçu !</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="362"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="364"/>
|
||||||
<source>new_file_message</source>
|
<source>new_file_message</source>
|
||||||
<translation>Fichier reçu !</translation>
|
<translation>Fichier reçu !</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="365"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="367"/>
|
||||||
<source>new_conference_invitation</source>
|
<source>new_conference_invitation</source>
|
||||||
<extracomment>'Conference invitation received!' : Notification about receiving an invitation to a conference.</extracomment>
|
<extracomment>'Conference invitation received!' : Notification about receiving an invitation to a conference.</extracomment>
|
||||||
<translation>Nouvelle invitation à une conférence !</translation>
|
<translation>Nouvelle invitation à une conférence !</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../core/notifier/Notifier.cpp" line="385"/>
|
<location filename="../../core/notifier/Notifier.cpp" line="387"/>
|
||||||
<source>new_chat_room_messages</source>
|
<source>new_chat_room_messages</source>
|
||||||
<extracomment>'New messages received!' Notification that warn the user of new messages.</extracomment>
|
<extracomment>'New messages received!' Notification that warn the user of new messages.</extracomment>
|
||||||
<translation>Nouveaux messages reçus !</translation>
|
<translation>Nouveaux messages reçus !</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>new_message_alert_accessible_name</source>
|
||||||
<extracomment>New message on chatroom %1</extracomment>
|
<extracomment>New message on chatroom %1</extracomment>
|
||||||
<translation>Nouveau message sur la conversation %1</translation>
|
<translation>Nouveau message sur la conversation %1</translation>
|
||||||
|
|
@ -4820,102 +4839,102 @@ Expiration : %1</translation>
|
||||||
<translation>Timeout : non authentifié</translation>
|
<translation>Timeout : non authentifié</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/auth/OIDCModel.cpp" line="123"/>
|
<location filename="../../model/auth/OIDCModel.cpp" line="125"/>
|
||||||
<source>oidc_authentication_granted_message</source>
|
<source>oidc_authentication_granted_message</source>
|
||||||
<extracomment>Authentication granted</extracomment>
|
<extracomment>Authentication granted</extracomment>
|
||||||
<translation>Authentification accordée</translation>
|
<translation>Authentification accordée</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_not_authenticated_message</source>
|
||||||
<extracomment>Not authenticated</extracomment>
|
<extracomment>Not authenticated</extracomment>
|
||||||
<translation>Non authentifié</translation>
|
<translation>Non authentifié</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/auth/OIDCModel.cpp" line="136"/>
|
<location filename="../../model/auth/OIDCModel.cpp" line="138"/>
|
||||||
<source>oidc_authentication_refresh_message</source>
|
<source>oidc_authentication_refresh_message</source>
|
||||||
<extracomment>Refreshing token</extracomment>
|
<extracomment>Refreshing token</extracomment>
|
||||||
<translation>Token en cours de rafraîchissement</translation>
|
<translation>Token en cours de rafraîchissement</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_temporary_credentials_message</source>
|
||||||
<extracomment>Temporary credentials received</extracomment>
|
<extracomment>Temporary credentials received</extracomment>
|
||||||
<translation>Identifiants temporaires reçus</translation>
|
<translation>Identifiants temporaires reçus</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/auth/OIDCModel.cpp" line="159"/>
|
<location filename="../../model/auth/OIDCModel.cpp" line="161"/>
|
||||||
<source>oidc_authentication_network_error</source>
|
<source>oidc_authentication_network_error</source>
|
||||||
<extracomment>Network error</extracomment>
|
<extracomment>Network error</extracomment>
|
||||||
<translation>Erreur réseau</translation>
|
<translation>Erreur réseau</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/auth/OIDCModel.cpp" line="163"/>
|
<location filename="../../model/auth/OIDCModel.cpp" line="165"/>
|
||||||
<source>oidc_authentication_server_error</source>
|
<source>oidc_authentication_server_error</source>
|
||||||
<extracomment>Server error</extracomment>
|
<extracomment>Server error</extracomment>
|
||||||
<translation>Erreur de serveur</translation>
|
<translation>Erreur de serveur</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_token_not_found_error</source>
|
||||||
<extracomment>OAuth token not found</extracomment>
|
<extracomment>OAuth token not found</extracomment>
|
||||||
<translation>Token OAuth non trouvé</translation>
|
<translation>Token OAuth non trouvé</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_token_secret_not_found_error</source>
|
||||||
<extracomment>OAuth token secret not found</extracomment>
|
<extracomment>OAuth token secret not found</extracomment>
|
||||||
<translation>Token OAuth secret non trouvé</translation>
|
<translation>Token OAuth secret non trouvé</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_callback_not_verified_error</source>
|
||||||
<extracomment>OAuth callback not verified</extracomment>
|
<extracomment>OAuth callback not verified</extracomment>
|
||||||
<translation>Retour OAuth non vérifié</translation>
|
<translation>Retour OAuth non vérifié</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_request_auth_message</source>
|
||||||
<extracomment>Requesting authorization from browser</extracomment>
|
<extracomment>Requesting authorization from browser</extracomment>
|
||||||
<translation>En attente d'autorisation du navigateur</translation>
|
<translation>En attente d'autorisation du navigateur</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_no_token_found_error</source>
|
||||||
<translation>Token non trouvé</translation>
|
<translation>Token non trouvé</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_request_token_message</source>
|
||||||
<extracomment>Requesting access token</extracomment>
|
<extracomment>Requesting access token</extracomment>
|
||||||
<translation>En attente du token d'accès</translation>
|
<translation>En attente du token d'accès</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_refresh_token_message</source>
|
||||||
<extracomment>Refreshing access token</extracomment>
|
<extracomment>Refreshing access token</extracomment>
|
||||||
<translation>Token en cours de rafraîchissement</translation>
|
<translation>Token en cours de rafraîchissement</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_request_authorization_message</source>
|
||||||
<extracomment>Requesting authorization</extracomment>
|
<extracomment>Requesting authorization</extracomment>
|
||||||
<translation>Autorisation en cours</translation>
|
<translation>Autorisation en cours</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_request_temporary_credentials_message</source>
|
||||||
<extracomment>Requesting temporary credentials</extracomment>
|
<extracomment>Requesting temporary credentials</extracomment>
|
||||||
<translation>En attente d'identifiants temporaires</translation>
|
<translation>En attente d'identifiants temporaires</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_no_auth_found_in_config_error</source>
|
||||||
<extracomment>No authorization endpoint found in OpenID configuration</extracomment>
|
<extracomment>No authorization endpoint found in OpenID configuration</extracomment>
|
||||||
<translation>Pas d'autorisation trouvé dans la configuration OpenID</translation>
|
<translation>Pas d'autorisation trouvé dans la configuration OpenID</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>oidc_authentication_no_token_found_in_config_error</source>
|
||||||
<extracomment>No token endpoint found in OpenID configuration</extracomment>
|
<extracomment>No token endpoint found in OpenID configuration</extracomment>
|
||||||
<translation>Pas de token trouvé dans la configuration OpenID</translation>
|
<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>
|
<translation>Démarrer un appel de groupe ?</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>unencrypted_conversation_warning</source>
|
||||||
<extracomment>This conversation is not encrypted !</extracomment>
|
<extracomment>This conversation is not encrypted !</extracomment>
|
||||||
<translation>Cette conversation n'est pas chiffrée !</translation>
|
<translation>Cette conversation n'est pas chiffrée !</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>reply_to_label</source>
|
||||||
<extracomment>Reply to %1</extracomment>
|
<extracomment>Reply to %1</extracomment>
|
||||||
<translation>Réponse à %1</translation>
|
<translation>Réponse à %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>shared_medias_title</source>
|
||||||
<extracomment>Shared medias</extracomment>
|
<extracomment>Shared medias</extracomment>
|
||||||
<translation>Médias partagés</translation>
|
<translation>Médias partagés</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>shared_documents_title</source>
|
||||||
<extracomment>Shared documents</extracomment>
|
<extracomment>Shared documents</extracomment>
|
||||||
<translation>Documents partagés</translation>
|
<translation>Documents partagés</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>forward_to_title</source>
|
||||||
<extracomment>Forward to…</extracomment>
|
<extracomment>Forward to…</extracomment>
|
||||||
<translation>Transférer à…</translation>
|
<translation>Transférer à…</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>conversations_title</source>
|
||||||
<extracomment>Conversations</extracomment>
|
<extracomment>Conversations</extracomment>
|
||||||
<translation>Conversations</translation>
|
<translation>Conversations</translation>
|
||||||
|
|
@ -5658,11 +5677,6 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
|
||||||
<extracomment>"Réunions"</extracomment>
|
<extracomment>"Réunions"</extracomment>
|
||||||
<translation>Réunions</translation>
|
<translation>Réunions</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>settings_security_title</source>
|
|
||||||
<extracomment>"Affichage" "Security"</extracomment>
|
|
||||||
<translation type="vanished">Sécurité / Chiffrement</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../view/Page/Form/Settings/SettingsPage.qml" line="29"/>
|
<location filename="../../view/Page/Form/Settings/SettingsPage.qml" line="29"/>
|
||||||
<source>settings_network_title</source>
|
<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'appel de groupe, le compte par défaut n'est pas défini</translation>
|
<translation>Impossible de créer l'appel de groupe, le compte par défaut n'est pas défini</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<source>group_call_error_participants_invite</source>
|
||||||
<translation>Impossible d'inviter les participants à l'appel de groupe</translation>
|
<translation>Impossible d'inviter les participants à l'appel de groupe</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="412"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="417"/>
|
||||||
<source>group_call_error_creation</source>
|
<source>group_call_error_creation</source>
|
||||||
<translation>L'appel de groupe n'a pas pu être créé</translation>
|
<translation>L'appel de groupe n'a pas pu être créé</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="512"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="517"/>
|
||||||
<source>voice_recording_duration</source>
|
<source>voice_recording_duration</source>
|
||||||
<extracomment>"Voice recording (%1)" : %1 is the duration formated in mm:ss</extracomment>
|
<extracomment>"Voice recording (%1)" : %1 is the duration formated in mm:ss</extracomment>
|
||||||
<translation>Message vocal (%1)</translation>
|
<translation>Message vocal (%1)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="585"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="591"/>
|
||||||
<source>unknown_audio_device_name</source>
|
<source>unknown_audio_device_name</source>
|
||||||
<translation>Appareil inconnu</translation>
|
<translation>Appareil inconnu</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="520"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="525"/>
|
||||||
<source>conference_invitation</source>
|
<source>conference_invitation</source>
|
||||||
<translation>Invitation à une réunion</translation>
|
<translation>Invitation à une réunion</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="524"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="529"/>
|
||||||
<source>conference_invitation_cancelled</source>
|
<source>conference_invitation_cancelled</source>
|
||||||
<translation>Annulation d'une réunion</translation>
|
<translation>Annulation d'une réunion</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../model/tool/ToolModel.cpp" line="522"/>
|
<location filename="../../model/tool/ToolModel.cpp" line="527"/>
|
||||||
<source>conference_invitation_updated</source>
|
<source>conference_invitation_updated</source>
|
||||||
<translation>Modification d'une réunion</translation>
|
<translation>Modification d'une réunion</translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
||||||
|
|
@ -49,19 +49,19 @@ int main(int argc, char *argv[]) {
|
||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
// Useful to share camera on Fullscreen (other context) or multiscreens
|
// Useful to share camera on Fullscreen (other context) or multiscreens
|
||||||
qDebug() << "[Main] Setting ShareOpenGLContexts";
|
lDebug() << "[Main] Setting ShareOpenGLContexts";
|
||||||
QApplication::setAttribute(Qt::AA_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.).
|
// Ignore vertical sync. This way, we avoid blinking on resizes(and other refresh like layouts etc.).
|
||||||
auto ignoreVSync = QSurfaceFormat::defaultFormat();
|
auto ignoreVSync = QSurfaceFormat::defaultFormat();
|
||||||
ignoreVSync.setSwapInterval(0);
|
ignoreVSync.setSwapInterval(0);
|
||||||
QSurfaceFormat::setDefaultFormat(ignoreVSync);
|
QSurfaceFormat::setDefaultFormat(ignoreVSync);
|
||||||
// Disable QML cache. Avoid malformed cache.
|
// Disable QML cache. Avoid malformed cache.
|
||||||
qDebug() << "[Main] Disabling QML disk cache";
|
lDebug() << "[Main] Disabling QML disk cache";
|
||||||
qputenv("QML_DISABLE_DISK_CACHE", "true");
|
qputenv("QML_DISABLE_DISK_CACHE", "true");
|
||||||
qDebug() << "[Main] Setting application to UTF8";
|
lDebug() << "[Main] Setting application to UTF8";
|
||||||
setlocale(LC_CTYPE, ".UTF8");
|
setlocale(LC_CTYPE, ".UTF8");
|
||||||
qDebug() << "[Main] Creating application";
|
lDebug() << "[Main] Creating application";
|
||||||
auto app = QSharedPointer<App>::create(argc, argv);
|
auto app = QSharedPointer<App>::create(argc, argv);
|
||||||
#ifdef ACCESSBILITY_WORKAROUND
|
#ifdef ACCESSBILITY_WORKAROUND
|
||||||
QAccessible::installUpdateHandler(DummyUpdateHandler);
|
QAccessible::installUpdateHandler(DummyUpdateHandler);
|
||||||
|
|
@ -69,29 +69,29 @@ int main(int argc, char *argv[]) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (app->isSecondary()) {
|
if (app->isSecondary()) {
|
||||||
qDebug() << "[Main] Sending command from secondary application";
|
lDebug() << "[Main] Sending command from secondary application";
|
||||||
app->sendCommand();
|
app->sendCommand();
|
||||||
qInfo() << QStringLiteral("[Main] Running secondary app success. Kill it now.");
|
qInfo() << QStringLiteral("[Main] Running secondary app success. Kill it now.");
|
||||||
app->clean();
|
app->clean();
|
||||||
cleanStream();
|
cleanStream();
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "[Main] Initializing core for primary application";
|
lDebug() << "[Main] Initializing core for primary application";
|
||||||
app->initCore();
|
app->initCore();
|
||||||
qDebug() << "[Main] Preparing application's connections";
|
lDebug() << "[Main] Preparing application's connections";
|
||||||
app->setSelf(app);
|
app->setSelf(app);
|
||||||
}
|
}
|
||||||
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
do {
|
do {
|
||||||
qDebug() << "[Main] Sending command from primary application";
|
lDebug() << "[Main] Sending command from primary application";
|
||||||
app->sendCommand();
|
app->sendCommand();
|
||||||
qInfo() << "[Main] Running application";
|
lInfo() << "[Main] Running application";
|
||||||
result = app->exec();
|
result = app->exec();
|
||||||
} while (result == (int)App::StatusCode::gRestartCode);
|
} while (result == (int)App::StatusCode::gRestartCode);
|
||||||
QString message = "[Main] Exiting app with the code : " + QString::number(result);
|
QString message = "[Main] Exiting app with the code : " + QString::number(result);
|
||||||
if (!result) qInfo() << message;
|
if (!result) lInfo() << message;
|
||||||
else qWarning() << message;
|
else lWarning() << message;
|
||||||
app->clean();
|
app->clean();
|
||||||
app = nullptr;
|
app = nullptr;
|
||||||
cleanStream();
|
cleanStream();
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,7 @@ void AccountManager::registerNewAccount(const QString &username,
|
||||||
const std::shared_ptr<const linphone::AccountManagerServicesRequest> &request, const std::string &data) {
|
const std::shared_ptr<const linphone::AccountManagerServicesRequest> &request, const std::string &data) {
|
||||||
if (request->getType() == linphone::AccountManagerServicesRequest::Type::AccountCreationRequestToken) {
|
if (request->getType() == linphone::AccountManagerServicesRequest::Type::AccountCreationRequestToken) {
|
||||||
QString verifyTokenUrl = Utils::coreStringToAppString(data);
|
QString verifyTokenUrl = Utils::coreStringToAppString(data);
|
||||||
qDebug() << "[AccountManager] request token succeed" << verifyTokenUrl;
|
lInfo() << "[AccountManager] request token succeed" << verifyTokenUrl;
|
||||||
|
|
||||||
QDesktopServices::openUrl(verifyTokenUrl);
|
QDesktopServices::openUrl(verifyTokenUrl);
|
||||||
auto creationToken = verifyTokenUrl.mid(verifyTokenUrl.lastIndexOf("/") + 1);
|
auto creationToken = verifyTokenUrl.mid(verifyTokenUrl.lastIndexOf("/") + 1);
|
||||||
|
|
@ -206,7 +206,7 @@ void AccountManager::registerNewAccount(const QString &username,
|
||||||
|
|
||||||
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::
|
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::
|
||||||
AccountCreationTokenFromAccountCreationRequestToken) {
|
AccountCreationTokenFromAccountCreationRequestToken) {
|
||||||
qDebug() << "[AccountManager] request token conversion succeed" << data;
|
lInfo() << "[AccountManager] request token conversion succeed" << data;
|
||||||
emit tokenConversionSucceed(Utils::coreStringToAppString(data));
|
emit tokenConversionSucceed(Utils::coreStringToAppString(data));
|
||||||
timer.stop();
|
timer.stop();
|
||||||
mAccountManagerServicesModel->createAccountUsingToken(Utils::appStringToCoreString(username),
|
mAccountManagerServicesModel->createAccountUsingToken(Utils::appStringToCoreString(username),
|
||||||
|
|
@ -225,24 +225,24 @@ void AccountManager::registerNewAccount(const QString &username,
|
||||||
createdSipIdentityAddress->getDomain() // Domain.
|
createdSipIdentityAddress->getDomain() // Domain.
|
||||||
));
|
));
|
||||||
if (type == RegisterType::Email) {
|
if (type == RegisterType::Email) {
|
||||||
qDebug() << "[AccountManager] creation succeed, email verification" << registerAddress;
|
lInfo() << "[AccountManager] creation succeed, email verification" << registerAddress;
|
||||||
mAccountManagerServicesModel->linkEmailByEmail(
|
mAccountManagerServicesModel->linkEmailByEmail(
|
||||||
ToolModel::interpretUrl(Utils::coreStringToAppString(data)),
|
ToolModel::interpretUrl(Utils::coreStringToAppString(data)),
|
||||||
Utils::appStringToCoreString(registerAddress));
|
Utils::appStringToCoreString(registerAddress));
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "[AccountManager] creation succeed, sms verification" << registerAddress;
|
lInfo() << "[AccountManager] creation succeed, sms verification" << registerAddress;
|
||||||
mAccountManagerServicesModel->linkPhoneNumberBySms(
|
mAccountManagerServicesModel->linkPhoneNumberBySms(
|
||||||
ToolModel::interpretUrl(Utils::coreStringToAppString(data)),
|
ToolModel::interpretUrl(Utils::coreStringToAppString(data)),
|
||||||
Utils::appStringToCoreString(registerAddress));
|
Utils::appStringToCoreString(registerAddress));
|
||||||
}
|
}
|
||||||
} else if (request->getType() ==
|
} else if (request->getType() ==
|
||||||
linphone::AccountManagerServicesRequest::Type::SendEmailLinkingCodeByEmail) {
|
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);
|
emit newAccountCreationSucceed(mCreatedSipAddress, type, registerAddress);
|
||||||
mCreatedSipAddress.clear();
|
mCreatedSipAddress.clear();
|
||||||
} else if (request->getType() ==
|
} else if (request->getType() ==
|
||||||
linphone::AccountManagerServicesRequest::Type::SendPhoneNumberLinkingCodeBySms) {
|
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);
|
emit newAccountCreationSucceed(mCreatedSipAddress, type, registerAddress);
|
||||||
mCreatedSipAddress.clear();
|
mCreatedSipAddress.clear();
|
||||||
}
|
}
|
||||||
|
|
@ -252,11 +252,11 @@ void AccountManager::registerNewAccount(const QString &username,
|
||||||
[this](const std::shared_ptr<const linphone::AccountManagerServicesRequest> &request, int statusCode,
|
[this](const std::shared_ptr<const linphone::AccountManagerServicesRequest> &request, int statusCode,
|
||||||
const std::string &errorMessage, const std::shared_ptr<const linphone::Dictionary> ¶meterErrors) {
|
const std::string &errorMessage, const std::shared_ptr<const linphone::Dictionary> ¶meterErrors) {
|
||||||
if (request->getType() == linphone::AccountManagerServicesRequest::Type::AccountCreationRequestToken) {
|
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));
|
emit registerNewAccountFailed(Utils::coreStringToAppString(errorMessage));
|
||||||
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::
|
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::
|
||||||
AccountCreationTokenFromAccountCreationRequestToken) {
|
AccountCreationTokenFromAccountCreationRequestToken) {
|
||||||
qDebug() << "[AccountManager] error converting token into creation token :" << errorMessage;
|
lInfo() << "[AccountManager] error converting token into creation token :" << errorMessage;
|
||||||
if (parameterErrors) {
|
if (parameterErrors) {
|
||||||
timer.stop();
|
timer.stop();
|
||||||
emit registerNewAccountFailed(Utils::coreStringToAppString(errorMessage));
|
emit registerNewAccountFailed(Utils::coreStringToAppString(errorMessage));
|
||||||
|
|
@ -264,7 +264,7 @@ void AccountManager::registerNewAccount(const QString &username,
|
||||||
timer.start();
|
timer.start();
|
||||||
}
|
}
|
||||||
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::CreateAccountUsingToken) {
|
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::CreateAccountUsingToken) {
|
||||||
qDebug() << "[AccountManager] error creating account :" << errorMessage;
|
lInfo() << "[AccountManager] error creating account :" << errorMessage;
|
||||||
if (parameterErrors) {
|
if (parameterErrors) {
|
||||||
for (const std::string &key : parameterErrors->getKeys()) {
|
for (const std::string &key : parameterErrors->getKeys()) {
|
||||||
emit errorInField(Utils::coreStringToAppString(key),
|
emit errorInField(Utils::coreStringToAppString(key),
|
||||||
|
|
@ -275,7 +275,7 @@ void AccountManager::registerNewAccount(const QString &username,
|
||||||
}
|
}
|
||||||
} else if (request->getType() ==
|
} else if (request->getType() ==
|
||||||
linphone::AccountManagerServicesRequest::Type::SendEmailLinkingCodeByEmail) {
|
linphone::AccountManagerServicesRequest::Type::SendEmailLinkingCodeByEmail) {
|
||||||
qDebug() << "[AccountManager] error sending code to email" << errorMessage;
|
lInfo() << "[AccountManager] error sending code to email" << errorMessage;
|
||||||
if (parameterErrors) {
|
if (parameterErrors) {
|
||||||
for (const std::string &key : parameterErrors->getKeys()) {
|
for (const std::string &key : parameterErrors->getKeys()) {
|
||||||
emit errorInField(Utils::coreStringToAppString(key),
|
emit errorInField(Utils::coreStringToAppString(key),
|
||||||
|
|
@ -286,7 +286,7 @@ void AccountManager::registerNewAccount(const QString &username,
|
||||||
}
|
}
|
||||||
} else if (request->getType() ==
|
} else if (request->getType() ==
|
||||||
linphone::AccountManagerServicesRequest::Type::SendPhoneNumberLinkingCodeBySms) {
|
linphone::AccountManagerServicesRequest::Type::SendPhoneNumberLinkingCodeBySms) {
|
||||||
qDebug() << "[AccountManager] error sending code to phone number" << errorMessage;
|
lInfo() << "[AccountManager] error sending code to phone number" << errorMessage;
|
||||||
if (parameterErrors) {
|
if (parameterErrors) {
|
||||||
for (const std::string &key : parameterErrors->getKeys()) {
|
for (const std::string &key : parameterErrors->getKeys()) {
|
||||||
emit errorInField(Utils::coreStringToAppString(key),
|
emit errorInField(Utils::coreStringToAppString(key),
|
||||||
|
|
@ -320,10 +320,10 @@ void AccountManager::linkNewAccountUsingCode(const QString &code,
|
||||||
mAccountManagerServicesModel.get(), &AccountManagerServicesModel::requestSuccessfull, this,
|
mAccountManagerServicesModel.get(), &AccountManagerServicesModel::requestSuccessfull, this,
|
||||||
[this](const std::shared_ptr<const linphone::AccountManagerServicesRequest> &request, const std::string &data) {
|
[this](const std::shared_ptr<const linphone::AccountManagerServicesRequest> &request, const std::string &data) {
|
||||||
if (request->getType() == linphone::AccountManagerServicesRequest::Type::LinkEmailUsingCode) {
|
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();
|
emit linkingNewAccountWithCodeSucceed();
|
||||||
} else if (request->getType() == linphone::AccountManagerServicesRequest::Type::LinkPhoneNumberUsingCode) {
|
} 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();
|
emit linkingNewAccountWithCodeSucceed();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -332,9 +332,9 @@ void AccountManager::linkNewAccountUsingCode(const QString &code,
|
||||||
[this](const std::shared_ptr<const linphone::AccountManagerServicesRequest> &request, int statusCode,
|
[this](const std::shared_ptr<const linphone::AccountManagerServicesRequest> &request, int statusCode,
|
||||||
const std::string &errorMessage, const std::shared_ptr<const linphone::Dictionary> ¶meterErrors) {
|
const std::string &errorMessage, const std::shared_ptr<const linphone::Dictionary> ¶meterErrors) {
|
||||||
if (request->getType() == linphone::AccountManagerServicesRequest::Type::LinkEmailUsingCode) {
|
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) {
|
} 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));
|
emit linkingNewAccountWithCodeFailed(Utils::coreStringToAppString(errorMessage));
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
|
||||||
qDebug() << "OIDC Redirect URI Port set to [" << port << "]";
|
qDebug() << "OIDC Redirect URI Port set to [" << port << "]";
|
||||||
auto replyHandler = new OAuthHttpServerReplyHandler(port, this);
|
auto replyHandler = new OAuthHttpServerReplyHandler(port, this);
|
||||||
if (!replyHandler->isListening()) {
|
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 requestFailed(tr("OAuthHttpServerReplyHandler is not listening"));
|
||||||
emit finished();
|
emit finished();
|
||||||
return;
|
return;
|
||||||
|
|
@ -99,7 +99,7 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
|
||||||
mTimeout.setInterval(1000 * 60 * 2); // 2minutes
|
mTimeout.setInterval(1000 * 60 * 2); // 2minutes
|
||||||
|
|
||||||
connect(&mTimeout, &QTimer::timeout, [this]() {
|
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();
|
dynamic_cast<OAuthHttpServerReplyHandler *>(mOidc.replyHandler())->close();
|
||||||
CoreModel::getInstance()->getCore()->abortAuthentication(mAuthInfo);
|
CoreModel::getInstance()->getCore()->abortAuthentication(mAuthInfo);
|
||||||
//: Timeout: Not authenticated
|
//: Timeout: Not authenticated
|
||||||
|
|
@ -108,11 +108,13 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
|
||||||
});
|
});
|
||||||
connect(mOidc.networkAccessManager(), &QNetworkAccessManager::authenticationRequired,
|
connect(mOidc.networkAccessManager(), &QNetworkAccessManager::authenticationRequired,
|
||||||
[=](QNetworkReply *reply, QAuthenticator *authenticator) {
|
[=](QNetworkReply *reply, QAuthenticator *authenticator) {
|
||||||
lDebug() << "authenticationRequired url [" << reply->url() << "]";
|
lInfo() << "authenticationRequired url [" << reply->url() << "]";
|
||||||
if (mOidc.clientIdentifierSharedKey().isEmpty() == false) {
|
if (mOidc.clientIdentifierSharedKey().isEmpty() == false) {
|
||||||
authenticator->setUser(mOidc.clientIdentifier());
|
authenticator->setUser(mOidc.clientIdentifier());
|
||||||
authenticator->setPassword(mOidc.clientIdentifierSharedKey());
|
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) {
|
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;
|
const QMetaObject metaObject = QAbstractOAuth::staticMetaObject;
|
||||||
int index = metaObject.indexOfEnumerator("Error");
|
int index = metaObject.indexOfEnumerator("Error");
|
||||||
QMetaEnum metaEnum = metaObject.enumerator(index);
|
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) {
|
switch (error) {
|
||||||
case QAbstractOAuth::Error::NetworkError:
|
case QAbstractOAuth::Error::NetworkError:
|
||||||
//: Network error
|
//: Network error
|
||||||
|
|
@ -213,7 +215,7 @@ OIDCModel::OIDCModel(const std::shared_ptr<linphone::AuthInfo> &authInfo, QObjec
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
mIdToken.clear();
|
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 requestFailed(tr("oidc_authentication_no_token_found_error"));
|
||||||
emit finished();
|
emit finished();
|
||||||
}
|
}
|
||||||
|
|
@ -267,7 +269,7 @@ void OIDCModel::openIdConfigReceived() {
|
||||||
if (rootArray.contains("authorization_endpoint")) {
|
if (rootArray.contains("authorization_endpoint")) {
|
||||||
mOidc.setAuthorizationUrl(QUrl(rootArray["authorization_endpoint"].toString()));
|
mOidc.setAuthorizationUrl(QUrl(rootArray["authorization_endpoint"].toString()));
|
||||||
} else {
|
} 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
|
//: No authorization endpoint found in OpenID configuration
|
||||||
emit requestFailed(tr("oidc_authentication_no_auth_found_in_config_error"));
|
emit requestFailed(tr("oidc_authentication_no_auth_found_in_config_error"));
|
||||||
emit finished();
|
emit finished();
|
||||||
|
|
@ -282,7 +284,7 @@ void OIDCModel::openIdConfigReceived() {
|
||||||
mAuthInfo->setTokenEndpointUri(
|
mAuthInfo->setTokenEndpointUri(
|
||||||
Utils::appStringToCoreString(QUrl(rootArray["token_endpoint"].toString()).toString()));
|
Utils::appStringToCoreString(QUrl(rootArray["token_endpoint"].toString()).toString()));
|
||||||
} else {
|
} 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
|
//: No token endpoint found in OpenID configuration
|
||||||
emit requestFailed(tr("oidc_authentication_no_token_found_in_config_error"));
|
emit requestFailed(tr("oidc_authentication_no_token_found_in_config_error"));
|
||||||
emit finished();
|
emit finished();
|
||||||
|
|
@ -307,7 +309,7 @@ void OIDCModel::setBearers() {
|
||||||
mAuthInfo->setRefreshToken(refreshBearer);
|
mAuthInfo->setRefreshToken(refreshBearer);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "No refresh token found";
|
lWarning() << log().arg("No refresh token found");
|
||||||
}
|
}
|
||||||
CoreModel::getInstance()->getCore()->addAuthInfo(mAuthInfo);
|
CoreModel::getInstance()->getCore()->addAuthInfo(mAuthInfo);
|
||||||
emit CoreModel::getInstance()->bearerAccountAdded();
|
emit CoreModel::getInstance()->bearerAccountAdded();
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ void CallModel::setPaused(bool paused) {
|
||||||
void CallModel::transferTo(const std::shared_ptr<linphone::Address> &address) {
|
void CallModel::transferTo(const std::shared_ptr<linphone::Address> &address) {
|
||||||
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
||||||
if (mMonitor->transferTo(address) == -1)
|
if (mMonitor->transferTo(address) == -1)
|
||||||
qWarning() << log()
|
lWarning() << log()
|
||||||
.arg(QStringLiteral("Unable to transfer: `%1`."))
|
.arg(QStringLiteral("Unable to transfer: `%1`."))
|
||||||
.arg(Utils::coreStringToAppString(address->asStringUriOnly()));
|
.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) {
|
void CallModel::transferToAnother(const std::shared_ptr<linphone::Call> &call) {
|
||||||
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
||||||
if (mMonitor->transferToAnother(call) == -1)
|
if (mMonitor->transferToAnother(call) == -1)
|
||||||
qWarning() << log()
|
lWarning() << log()
|
||||||
.arg(QStringLiteral("Unable to transfer: `%1`."))
|
.arg(QStringLiteral("Unable to transfer: `%1`."))
|
||||||
.arg(Utils::coreStringToAppString(call->getRemoteAddress()->asStringUriOnly()));
|
.arg(Utils::coreStringToAppString(call->getRemoteAddress()->asStringUriOnly()));
|
||||||
}
|
}
|
||||||
|
|
@ -331,14 +331,14 @@ void CallModel::setVideoSourceDescriptorModel(std::shared_ptr<VideoSourceDescrip
|
||||||
|
|
||||||
void CallModel::sendDtmf(const QString &dtmf) {
|
void CallModel::sendDtmf(const QString &dtmf) {
|
||||||
const char key = dtmf.constData()[0].toLatin1();
|
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);
|
if (mMonitor) mMonitor->sendDtmf(key);
|
||||||
CoreModel::getInstance()->getCore()->playDtmf(key, gDtmfSoundDelay);
|
CoreModel::getInstance()->getCore()->playDtmf(key, gDtmfSoundDelay);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CallModel::updateCallErrorFromReason(linphone::Reason reason) {
|
void CallModel::updateCallErrorFromReason(linphone::Reason reason) {
|
||||||
QString error;
|
QString error;
|
||||||
qDebug() << "call Error reason" << (int)reason;
|
lDebug() << log().arg("call Error reason") << (int)reason;
|
||||||
switch (reason) {
|
switch (reason) {
|
||||||
case linphone::Reason::None:
|
case linphone::Reason::None:
|
||||||
error = "";
|
error = "";
|
||||||
|
|
@ -391,7 +391,7 @@ void CallModel::updateCallErrorFromReason(linphone::Reason reason) {
|
||||||
break;
|
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);
|
emit errorMessageChanged(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ void ChatMessageContentModel::downloadFile(const QString &name) {
|
||||||
case linphone::ChatMessage::State::FileTransferInProgress:
|
case linphone::ChatMessage::State::FileTransferInProgress:
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
qWarning() << QStringLiteral("Wrong message state when requesting downloading, state=.")
|
lWarning() << QStringLiteral("Wrong message state when requesting downloading, state=.")
|
||||||
<< LinphoneEnums::fromLinphone(mChatMessageModel->getState());
|
<< LinphoneEnums::fromLinphone(mChatMessageModel->getState());
|
||||||
}
|
}
|
||||||
bool soFarSoGood;
|
bool soFarSoGood;
|
||||||
|
|
@ -93,12 +93,13 @@ void ChatMessageContentModel::downloadFile(const QString &name) {
|
||||||
QStringLiteral("%1%2").arg(App::getInstance()->getSettings()->getDownloadFolder()).arg(name), &soFarSoGood);
|
QStringLiteral("%1%2").arg(App::getInstance()->getSettings()->getDownloadFolder()).arg(name), &soFarSoGood);
|
||||||
|
|
||||||
if (!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;
|
return;
|
||||||
}
|
}
|
||||||
mContent->setFilePath(Utils::appStringToCoreString(safeFilePath));
|
mContent->setFilePath(Utils::appStringToCoreString(safeFilePath));
|
||||||
|
|
||||||
if (!mContent->isFileTransfer()) {
|
if (!mContent->isFileTransfer()) {
|
||||||
|
lWarning() << QStringLiteral("file transfer is not available");
|
||||||
Utils::showInformationPopup(
|
Utils::showInformationPopup(
|
||||||
//: Error
|
//: Error
|
||||||
tr("popup_error_title"),
|
tr("popup_error_title"),
|
||||||
|
|
@ -107,7 +108,7 @@ void ChatMessageContentModel::downloadFile(const QString &name) {
|
||||||
tr("popup_download_error_message"), false);
|
tr("popup_download_error_message"), false);
|
||||||
} else {
|
} else {
|
||||||
if (!mChatMessageModel->getMonitor()->downloadContent(mContent))
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ QString CliModel::parseFunctionName(const QString &command, bool isOptional) {
|
||||||
// mRegExpFunctionName.indexIn(command.toLower());
|
// mRegExpFunctionName.indexIn(command.toLower());
|
||||||
// if (mRegExpFunctionName.pos(1) == -1) {
|
// if (mRegExpFunctionName.pos(1) == -1) {
|
||||||
if (!match.hasMatch()) {
|
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("");
|
return QString("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -102,7 +102,7 @@ QString CliModel::parseFunctionName(const QString &command, bool isOptional) {
|
||||||
|
|
||||||
const QString functionName = texts[1];
|
const QString functionName = texts[1];
|
||||||
if (!mCommands.contains(functionName)) {
|
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("");
|
return QString("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -344,7 +344,7 @@ void CliModel::executeCommand(const QString &command) { //, CommandFormat *forma
|
||||||
const QString &functionName = parseFunctionName(command, false);
|
const QString &functionName = parseFunctionName(command, false);
|
||||||
const QString configURI = QString(EXECUTABLE_NAME).toLower() + "-config";
|
const QString configURI = QString(EXECUTABLE_NAME).toLower() + "-config";
|
||||||
if (!functionName.isEmpty()) { // It is a CLI
|
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> args = parseArgs(command);
|
||||||
QHash<QString, QString> argsToProcess;
|
QHash<QString, QString> argsToProcess;
|
||||||
for (auto it = args.begin(); it != args.end(); ++it) {
|
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(
|
address = linphone::Factory::get()->createAddress(
|
||||||
Utils::appStringToCoreString(transformedCommand)); // Test if command is an address
|
Utils::appStringToCoreString(transformedCommand)); // Test if command is an address
|
||||||
// if (format) *format = UriFormat;
|
// if (format) *format = UriFormat;
|
||||||
qInfo() << QStringLiteral("Detecting URI command: `%1`…").arg(command);
|
lInfo() << log().arg("Detecting URI command: `%1`…").arg(command);
|
||||||
QString functionName;
|
QString functionName;
|
||||||
if (address) {
|
if (address) {
|
||||||
functionName = Utils::coreStringToAppString(address->getHeader("method")).isEmpty()
|
functionName = Utils::coreStringToAppString(address->getHeader("method")).isEmpty()
|
||||||
|
|
@ -429,10 +429,10 @@ void CliModel::executeCommand(const QString &command) { //, CommandFormat *forma
|
||||||
}
|
}
|
||||||
functionName = functionName.toLower();
|
functionName = functionName.toLower();
|
||||||
if (functionName.isEmpty()) {
|
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;
|
return;
|
||||||
} else if (!mCommands.contains(functionName)) {
|
} 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;
|
return;
|
||||||
}
|
}
|
||||||
QHash<QString, QString> headers;
|
QHash<QString, QString> headers;
|
||||||
|
|
|
||||||
|
|
@ -183,20 +183,20 @@ void ConferenceModel::onActiveSpeakerParticipantDevice(
|
||||||
|
|
||||||
void ConferenceModel::onParticipantAdded(const std::shared_ptr<linphone::Conference> &conference,
|
void ConferenceModel::onParticipantAdded(const std::shared_ptr<linphone::Conference> &conference,
|
||||||
const std::shared_ptr<linphone::Participant> &participant) {
|
const std::shared_ptr<linphone::Participant> &participant) {
|
||||||
lDebug() << "onParticipant Added" << participant->getAddress()->asStringUriOnly();
|
lInfo() << "onParticipant Added" << participant->getAddress()->asStringUriOnly();
|
||||||
emit participantAdded(participant);
|
emit participantAdded(participant);
|
||||||
emit participantDeviceCountChanged(conference, getParticipantDeviceCount());
|
emit participantDeviceCountChanged(conference, getParticipantDeviceCount());
|
||||||
}
|
}
|
||||||
void ConferenceModel::onParticipantRemoved(const std::shared_ptr<linphone::Conference> &conference,
|
void ConferenceModel::onParticipantRemoved(const std::shared_ptr<linphone::Conference> &conference,
|
||||||
const std::shared_ptr<const linphone::Participant> &participant) {
|
const std::shared_ptr<const linphone::Participant> &participant) {
|
||||||
lDebug() << "onParticipant Removed" << participant->getAddress()->asStringUriOnly();
|
lInfo() << "onParticipant Removed" << participant->getAddress()->asStringUriOnly();
|
||||||
emit participantRemoved(participant);
|
emit participantRemoved(participant);
|
||||||
emit participantDeviceCountChanged(conference, getParticipantDeviceCount());
|
emit participantDeviceCountChanged(conference, getParticipantDeviceCount());
|
||||||
}
|
}
|
||||||
void ConferenceModel::onParticipantDeviceAdded(const std::shared_ptr<linphone::Conference> &conference,
|
void ConferenceModel::onParticipantDeviceAdded(const std::shared_ptr<linphone::Conference> &conference,
|
||||||
const std::shared_ptr<linphone::ParticipantDevice> &participantDevice) {
|
const std::shared_ptr<linphone::ParticipantDevice> &participantDevice) {
|
||||||
lDebug() << "onParticipantDeviceAdded";
|
lInfo() << "onParticipantDeviceAdded";
|
||||||
lDebug() << "Me devices : " << conference->getMe()->getDevices().size();
|
lInfo() << "Me devices : " << conference->getMe()->getDevices().size();
|
||||||
if (conference->getMe()->getDevices().size() > 1)
|
if (conference->getMe()->getDevices().size() > 1)
|
||||||
for (auto d : conference->getMe()->getDevices())
|
for (auto d : conference->getMe()->getDevices())
|
||||||
lDebug() << "\t--> " << d->getAddress()->asString().c_str();
|
lDebug() << "\t--> " << d->getAddress()->asString().c_str();
|
||||||
|
|
@ -222,13 +222,13 @@ void ConferenceModel::onParticipantDeviceStateChanged(const std::shared_ptr<linp
|
||||||
}
|
}
|
||||||
void ConferenceModel::onParticipantAdminStatusChanged(const std::shared_ptr<linphone::Conference> &conference,
|
void ConferenceModel::onParticipantAdminStatusChanged(const std::shared_ptr<linphone::Conference> &conference,
|
||||||
const std::shared_ptr<const linphone::Participant> &participant) {
|
const std::shared_ptr<const linphone::Participant> &participant) {
|
||||||
lDebug() << "onParticipantAdminStatusChanged";
|
lInfo() << "onParticipantAdminStatusChanged";
|
||||||
emit participantAdminStatusChanged(participant);
|
emit participantAdminStatusChanged(participant);
|
||||||
}
|
}
|
||||||
void ConferenceModel::onParticipantDeviceMediaCapabilityChanged(
|
void ConferenceModel::onParticipantDeviceMediaCapabilityChanged(
|
||||||
const std::shared_ptr<linphone::Conference> &conference,
|
const std::shared_ptr<linphone::Conference> &conference,
|
||||||
const std::shared_ptr<const linphone::ParticipantDevice> &participantDevice) {
|
const std::shared_ptr<const linphone::ParticipantDevice> &participantDevice) {
|
||||||
lDebug() << "onParticipantDeviceMediaCapabilityChanged: "
|
lInfo() << "onParticipantDeviceMediaCapabilityChanged: "
|
||||||
<< (int)participantDevice->getStreamCapability(linphone::StreamType::Video)
|
<< (int)participantDevice->getStreamCapability(linphone::StreamType::Video)
|
||||||
<< ". Device: " << participantDevice->getAddress()->asString().c_str();
|
<< ". Device: " << participantDevice->getAddress()->asString().c_str();
|
||||||
emit participantDeviceMediaCapabilityChanged(participantDevice);
|
emit participantDeviceMediaCapabilityChanged(participantDevice);
|
||||||
|
|
@ -236,7 +236,7 @@ void ConferenceModel::onParticipantDeviceMediaCapabilityChanged(
|
||||||
void ConferenceModel::onParticipantDeviceMediaAvailabilityChanged(
|
void ConferenceModel::onParticipantDeviceMediaAvailabilityChanged(
|
||||||
const std::shared_ptr<linphone::Conference> &conference,
|
const std::shared_ptr<linphone::Conference> &conference,
|
||||||
const std::shared_ptr<const linphone::ParticipantDevice> &participantDevice) {
|
const std::shared_ptr<const linphone::ParticipantDevice> &participantDevice) {
|
||||||
lDebug() << "onParticipantDeviceMediaAvailabilityChanged: "
|
lInfo() << "onParticipantDeviceMediaAvailabilityChanged: "
|
||||||
<< (int)participantDevice->getStreamAvailability(linphone::StreamType::Video)
|
<< (int)participantDevice->getStreamAvailability(linphone::StreamType::Video)
|
||||||
<< ". Device: " << participantDevice->getAddress()->asString().c_str();
|
<< ". Device: " << participantDevice->getAddress()->asString().c_str();
|
||||||
emit participantDeviceMediaAvailabilityChanged(participantDevice);
|
emit participantDeviceMediaAvailabilityChanged(participantDevice);
|
||||||
|
|
@ -254,7 +254,7 @@ void ConferenceModel::onParticipantDeviceScreenSharingChanged(
|
||||||
const std::shared_ptr<linphone::Conference> &conference,
|
const std::shared_ptr<linphone::Conference> &conference,
|
||||||
const std::shared_ptr<const linphone::ParticipantDevice> &device,
|
const std::shared_ptr<const linphone::ParticipantDevice> &device,
|
||||||
bool enabled) {
|
bool enabled) {
|
||||||
qDebug() << "onParticipantDeviceScreenSharingChanged: " << device->getAddress()->asString().c_str()
|
lInfo() << log().arg("onParticipantDeviceScreenSharingChanged: ") << device->getAddress()->asString().c_str()
|
||||||
<< ". Enabled:" << enabled;
|
<< ". Enabled:" << enabled;
|
||||||
emit participantDeviceScreenSharingChanged(device, enabled);
|
emit participantDeviceScreenSharingChanged(device, enabled);
|
||||||
if (ToolModel::isLocal(mMonitor, device)) {
|
if (ToolModel::isLocal(mMonitor, device)) {
|
||||||
|
|
@ -265,7 +265,7 @@ void ConferenceModel::onParticipantDeviceScreenSharingChanged(
|
||||||
|
|
||||||
void ConferenceModel::onStateChanged(const std::shared_ptr<linphone::Conference> &conference,
|
void ConferenceModel::onStateChanged(const std::shared_ptr<linphone::Conference> &conference,
|
||||||
linphone::Conference::State newState) {
|
linphone::Conference::State newState) {
|
||||||
lDebug() << log().arg("onStateChanged:") << (int)newState;
|
lInfo() << log().arg("onStateChanged:") << (int)newState;
|
||||||
if (newState == linphone::Conference::State::Created) {
|
if (newState == linphone::Conference::State::Created) {
|
||||||
emit participantDeviceCountChanged(conference, mMonitor->getParticipantDeviceList().size());
|
emit participantDeviceCountChanged(conference, mMonitor->getParticipantDeviceList().size());
|
||||||
if (mMonitor->getScreenSharingParticipant()) emit isScreenSharingEnabledChanged(true);
|
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,
|
void ConferenceModel::onSubjectChanged(const std::shared_ptr<linphone::Conference> &conference,
|
||||||
const std::string &subject) {
|
const std::string &subject) {
|
||||||
lDebug() << "onSubjectChanged";
|
lInfo() << "onSubjectChanged";
|
||||||
emit subjectChanged(subject);
|
emit subjectChanged(subject);
|
||||||
}
|
}
|
||||||
void ConferenceModel::onAudioDeviceChanged(const std::shared_ptr<linphone::Conference> &conference,
|
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() {
|
void ConferenceModel::onIsScreenSharingEnabledChanged() {
|
||||||
auto call = mMonitor->getCall();
|
auto call = mMonitor->getCall();
|
||||||
std::shared_ptr<linphone::CallParams> params = CoreModel::getInstance()->getCore()->createCallParams(call);
|
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()) {
|
if (params->getConferenceVideoLayout() == linphone::Conference::Layout::Grid && params->videoEnabled()) {
|
||||||
params->setConferenceVideoLayout(linphone::Conference::Layout::ActiveSpeaker);
|
params->setConferenceVideoLayout(linphone::Conference::Layout::ActiveSpeaker);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,11 @@ void MagicSearchModel::search(QString filter,
|
||||||
// sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::ChatRooms;
|
// sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::ChatRooms;
|
||||||
// sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::ConferencesInfo;
|
// 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,
|
mMonitor->getContactsListAsync(filter != "*" ? Utils::appStringToCoreString(filter) : "", "", sourceFlags,
|
||||||
LinphoneEnums::toLinphone(aggregation));
|
LinphoneEnums::toLinphone(aggregation));
|
||||||
}
|
}
|
||||||
|
|
@ -80,7 +84,7 @@ void MagicSearchModel::setMaxResults(int maxResults) {
|
||||||
|
|
||||||
void MagicSearchModel::onSearchResultsReceived(const std::shared_ptr<linphone::MagicSearch> &magicSearch) {
|
void MagicSearchModel::onSearchResultsReceived(const std::shared_ptr<linphone::MagicSearch> &magicSearch) {
|
||||||
auto results = magicSearch->getLastSearch();
|
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 appFriends = ToolModel::getAppFriendList();
|
||||||
auto ldapFriends = ToolModel::getLdapFriendList();
|
auto ldapFriends = ToolModel::getLdapFriendList();
|
||||||
emit searchResultsReceived(results);
|
emit searchResultsReceived(results);
|
||||||
|
|
|
||||||
|
|
@ -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
|
// Media cards must not be used twice (capture card + call) else we will get latencies issues and bad echo
|
||||||
// calibrations in call.
|
// calibrations in call.
|
||||||
if (!getIsInCall() && !mSimpleCaptureGraph) {
|
if (!getIsInCall() && !mSimpleCaptureGraph) {
|
||||||
qDebug() << log().arg("Starting capture graph [%1]").arg(mCaptureGraphListenerCount);
|
lDebug() << log().arg("Starting capture graph [%1]").arg(mCaptureGraphListenerCount);
|
||||||
createCaptureGraph();
|
createCaptureGraph();
|
||||||
} else qDebug() << log().arg("Adding capture graph reference [%1]").arg(mCaptureGraphListenerCount);
|
} else lDebug() << log().arg("Adding capture graph reference [%1]").arg(mCaptureGraphListenerCount);
|
||||||
++mCaptureGraphListenerCount;
|
++mCaptureGraphListenerCount;
|
||||||
}
|
}
|
||||||
void SettingsModel::stopCaptureGraph() {
|
void SettingsModel::stopCaptureGraph() {
|
||||||
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
||||||
if (--mCaptureGraphListenerCount == 0) {
|
if (--mCaptureGraphListenerCount == 0) {
|
||||||
qDebug() << log().arg("Stopping capture graph [%1]").arg(mCaptureGraphListenerCount);
|
lDebug() << log().arg("Stopping capture graph [%1]").arg(mCaptureGraphListenerCount);
|
||||||
deleteCaptureGraph();
|
deleteCaptureGraph();
|
||||||
} else if (mCaptureGraphListenerCount > 0)
|
} 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);
|
else qCritical() << log().arg("Removing too much capture graph reference [%1]").arg(mCaptureGraphListenerCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ bool SoundPlayerModel::play(QString source, bool fromStart) {
|
||||||
if (source == "") return false;
|
if (source == "") return false;
|
||||||
if (fromStart) stop();
|
if (fromStart) stop();
|
||||||
if (!open(source)) {
|
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`
|
//: Unable to open: `%1`
|
||||||
emit errorChanged(QString("sound_player_open_error").arg(source));
|
emit errorChanged(QString("sound_player_open_error").arg(source));
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -102,7 +102,7 @@ bool SoundPlayerModel::play(QString source, bool fromStart) {
|
||||||
|
|
||||||
void SoundPlayerModel::seek(QString source, int offset) {
|
void SoundPlayerModel::seek(QString source, int offset) {
|
||||||
if (!open(source)) {
|
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`
|
//: Unable to open: `%1`
|
||||||
emit errorChanged(QString("sound_player_open_error").arg(source));
|
emit errorChanged(QString("sound_player_open_error").arg(source));
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -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 core = CoreModel::getInstance()->getCore();
|
||||||
auto conferenceParams = core->createConferenceParams(nullptr);
|
auto conferenceParams = core->createConferenceParams(nullptr);
|
||||||
conferenceParams->enableVideo(true);
|
conferenceParams->enableVideo(true);
|
||||||
|
|
@ -381,7 +381,7 @@ bool ToolModel::createGroupCall(QString subject, const std::list<QString> &parti
|
||||||
if (!account) {
|
if (!account) {
|
||||||
qWarning() << "No default account found, can't create group call";
|
qWarning() << "No default account found, can't create group call";
|
||||||
*message = tr("group_call_error_no_account");
|
*message = tr("group_call_error_no_account");
|
||||||
return false;
|
return nullptr;
|
||||||
}
|
}
|
||||||
conferenceParams->setAccount(account);
|
conferenceParams->setAccount(account);
|
||||||
conferenceParams->setSubject(Utils::appStringToCoreString(subject));
|
conferenceParams->setSubject(Utils::appStringToCoreString(subject));
|
||||||
|
|
@ -392,8 +392,13 @@ bool ToolModel::createGroupCall(QString subject, const std::list<QString> &parti
|
||||||
|
|
||||||
conferenceParams->enableChat(true);
|
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) {
|
if (conference) {
|
||||||
|
auto core = CoreModel::getInstance()->getCore();
|
||||||
auto callParams = core->createCallParams(nullptr);
|
auto callParams = core->createCallParams(nullptr);
|
||||||
callParams->enableVideo(true);
|
callParams->enableVideo(true);
|
||||||
callParams->setVideoDirection(linphone::MediaDirection::RecvOnly);
|
callParams->setVideoDirection(linphone::MediaDirection::RecvOnly);
|
||||||
|
|
@ -409,7 +414,7 @@ bool ToolModel::createGroupCall(QString subject, const std::list<QString> &parti
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "Could not create group call";
|
qWarning() << "Could not create group call";
|
||||||
*message = tr("group_call_error_creation");
|
if (message->isEmpty()) *message = tr("group_call_error_creation");
|
||||||
}
|
}
|
||||||
return conference != nullptr;
|
return conference != nullptr;
|
||||||
}
|
}
|
||||||
|
|
@ -534,7 +539,7 @@ QString ToolModel::getMessageFromContent(std::list<std::shared_ptr<linphone::Con
|
||||||
void ToolModel::loadDownloadedCodecs() {
|
void ToolModel::loadDownloadedCodecs() {
|
||||||
mustBeInLinphoneThread(sLog().arg(Q_FUNC_INFO));
|
mustBeInLinphoneThread(sLog().arg(Q_FUNC_INFO));
|
||||||
#if defined(Q_OS_LINUX) || defined(Q_OS_WIN)
|
#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());
|
QDirIterator it(Paths::getCodecsDirPath());
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
QFileInfo info(it.next());
|
QFileInfo info(it.next());
|
||||||
|
|
@ -543,9 +548,10 @@ void ToolModel::loadDownloadedCodecs() {
|
||||||
qInfo() << QStringLiteral("Loading `%1` symbols…").arg(filename);
|
qInfo() << QStringLiteral("Loading `%1` symbols…").arg(filename);
|
||||||
auto library = QLibrary(info.filePath());
|
auto library = QLibrary(info.filePath());
|
||||||
if (!library.load()) // lib.load())
|
if (!library.load()) // lib.load())
|
||||||
qWarning() << QStringLiteral("Failed to load `%1` symbols.").arg(filename) << library.errorString();
|
lWarning() << QStringLiteral("[ToolModel] Failed to load `%1` symbols.").arg(filename)
|
||||||
else qInfo() << QStringLiteral("Loaded `%1` symbols…").arg(filename);
|
<< library.errorString();
|
||||||
} else qWarning() << QStringLiteral("Found codec file `%1` that is not a library").arg(filename);
|
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("");
|
CoreModel::getInstance()->getCore()->reloadMsPlugins("");
|
||||||
qInfo() << QStringLiteral("Finished loading downloaded codecs.");
|
qInfo() << QStringLiteral("Finished loading downloaded codecs.");
|
||||||
|
|
@ -664,11 +670,11 @@ std::shared_ptr<linphone::ChatRoom> ToolModel::lookupCurrentCallChat(std::shared
|
||||||
auto localAddress = call->getCallLog()->getLocalAddress();
|
auto localAddress = call->getCallLog()->getLocalAddress();
|
||||||
std::list<std::shared_ptr<linphone::Address>> participants;
|
std::list<std::shared_ptr<linphone::Address>> participants;
|
||||||
participants.push_back(remoteaddress->clone());
|
participants.push_back(remoteaddress->clone());
|
||||||
qDebug() << "Looking for chat with local address" << localAddress->asStringUriOnly() << "and participant"
|
lInfo() << "[ToolModel] Looking for chat with local address" << localAddress->asStringUriOnly()
|
||||||
<< remoteaddress->asStringUriOnly();
|
<< "and participant" << remoteaddress->asStringUriOnly();
|
||||||
auto existingChat = core->searchChatRoom(params, localAddress, nullptr, participants);
|
auto existingChat = core->searchChatRoom(params, localAddress, nullptr, participants);
|
||||||
if (existingChat) qDebug() << "Found existing chat";
|
if (existingChat) lInfo() << "[ToolModel] Found existing chat";
|
||||||
else qDebug() << "Did not find existing chat";
|
else lInfo() << "[ToolModel] Did not find existing chat";
|
||||||
return existingChat;
|
return existingChat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -708,11 +714,11 @@ std::shared_ptr<linphone::ChatRoom> ToolModel::lookupChatForAddress(std::shared_
|
||||||
remoteAddress->clean();
|
remoteAddress->clean();
|
||||||
participants.push_back(remoteAddress);
|
participants.push_back(remoteAddress);
|
||||||
|
|
||||||
qDebug() << "Looking for chat with local address" << localAddress->asStringUriOnly() << "and participant"
|
lInfo() << "Looking for chat with local address" << localAddress->asStringUriOnly() << "and participant"
|
||||||
<< remoteAddress->asStringUriOnly();
|
<< remoteAddress->asStringUriOnly();
|
||||||
auto existingChat = core->searchChatRoom(params, localAddress, nullptr, participants);
|
auto existingChat = core->searchChatRoom(params, localAddress, nullptr, participants);
|
||||||
if (existingChat) qDebug() << "Found existing chat";
|
if (existingChat) lInfo() << "Found existing chat";
|
||||||
else qDebug() << "Did not find existing chat";
|
else lInfo() << "Did not find existing chat";
|
||||||
return existingChat;
|
return existingChat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,7 @@ public:
|
||||||
linphone::MediaEncryption = linphone::MediaEncryption::None,
|
linphone::MediaEncryption = linphone::MediaEncryption::None,
|
||||||
QString *errorMessage = nullptr);
|
QString *errorMessage = nullptr);
|
||||||
|
|
||||||
|
static std::shared_ptr<linphone::Conference> createConference(QString subject, QString *message = nullptr);
|
||||||
static bool
|
static bool
|
||||||
createGroupCall(QString subject, const std::list<QString> &participantAddresses, QString *message = nullptr);
|
createGroupCall(QString subject, const std::list<QString> &participantAddresses, QString *message = nullptr);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ void Utils::createCall(const QString &sipAddress,
|
||||||
if (mediaEncryption == LinphoneEnums::MediaEncryption::None)
|
if (mediaEncryption == LinphoneEnums::MediaEncryption::None)
|
||||||
mediaEncryption =
|
mediaEncryption =
|
||||||
App::getInstance()->getSettings()->getMediaEncryption()["id"].value<LinphoneEnums::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]() {
|
App::postModelAsync([sipAddress, options, mediaEncryption, prepareTransfertAddress, headers]() {
|
||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
bool success = ToolModel::createCall(sipAddress, options, prepareTransfertAddress, headers,
|
bool success = ToolModel::createCall(sipAddress, options, prepareTransfertAddress, headers,
|
||||||
|
|
@ -1586,15 +1586,15 @@ VariantObject *Utils::getCurrentCallChat(CallGui *call) {
|
||||||
auto chatCore = ChatCore::create(linphoneChatRoom);
|
auto chatCore = ChatCore::create(linphoneChatRoom);
|
||||||
return QVariant::fromValue(new ChatGui(chatCore));
|
return QVariant::fromValue(new ChatGui(chatCore));
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "Did not find existing chat room, create one";
|
lInfo() << "[Utils] Did not find existing chat room, create one";
|
||||||
linphoneChatRoom = ToolModel::createCurrentCallChat(callModel);
|
linphoneChatRoom = ToolModel::createCurrentCallChat(callModel);
|
||||||
if (linphoneChatRoom != nullptr) {
|
if (linphoneChatRoom != nullptr) {
|
||||||
qDebug() << "Chatroom created with" << callModel->getRemoteAddress()->asStringUriOnly();
|
lInfo() << "[Utils] Chatroom created with" << callModel->getRemoteAddress()->asStringUriOnly();
|
||||||
auto id = linphoneChatRoom->getIdentifier();
|
auto id = linphoneChatRoom->getIdentifier();
|
||||||
auto chatCore = ChatCore::create(linphoneChatRoom);
|
auto chatCore = ChatCore::create(linphoneChatRoom);
|
||||||
return QVariant::fromValue(new ChatGui(chatCore));
|
return QVariant::fromValue(new ChatGui(chatCore));
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "Failed to create 1-1 conversation with"
|
lWarning() << "[Utils] Failed to create 1-1 conversation with"
|
||||||
<< callModel->getRemoteAddress()->asStringUriOnly() << "!";
|
<< callModel->getRemoteAddress()->asStringUriOnly() << "!";
|
||||||
data->mConnection->invokeToCore([] {
|
data->mConnection->invokeToCore([] {
|
||||||
//: Error
|
//: Error
|
||||||
|
|
@ -1623,14 +1623,14 @@ VariantObject *Utils::getChatForAddress(QString address) {
|
||||||
auto chatCore = ChatCore::create(linphoneChatRoom);
|
auto chatCore = ChatCore::create(linphoneChatRoom);
|
||||||
return QVariant::fromValue(new ChatGui(chatCore));
|
return QVariant::fromValue(new ChatGui(chatCore));
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "Did not find existing chat room, create one";
|
lInfo() << "[Utils] Did not find existing chat room, create one";
|
||||||
linphoneChatRoom = ToolModel::createChatForAddress(linAddr);
|
linphoneChatRoom = ToolModel::createChatForAddress(linAddr);
|
||||||
if (linphoneChatRoom != nullptr) {
|
if (linphoneChatRoom != nullptr) {
|
||||||
qDebug() << "Chatroom created with" << linAddr->asStringUriOnly();
|
lInfo() << "[Utils] Chatroom created with" << linAddr->asStringUriOnly();
|
||||||
auto chatCore = ChatCore::create(linphoneChatRoom);
|
auto chatCore = ChatCore::create(linphoneChatRoom);
|
||||||
return QVariant::fromValue(new ChatGui(chatCore));
|
return QVariant::fromValue(new ChatGui(chatCore));
|
||||||
} else {
|
} 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 !
|
//: Failed to create 1-1 conversation with %1 !
|
||||||
data->mConnection->invokeToCore([] {
|
data->mConnection->invokeToCore([] {
|
||||||
showInformationPopup(tr("information_popup_error_title"),
|
showInformationPopup(tr("information_popup_error_title"),
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ void KeyboardShortcuts::onAcceptCallShortcut() {
|
||||||
auto callList = App::getInstance()->getCallList();
|
auto callList = App::getInstance()->getCallList();
|
||||||
auto currentPendingCall = callList->getFirstIncommingPendingCall();
|
auto currentPendingCall = callList->getFirstIncommingPendingCall();
|
||||||
if (!currentPendingCall.isNull()) {
|
if (!currentPendingCall.isNull()) {
|
||||||
lDebug() << "Accept call with shortcut :" << currentPendingCall;
|
lInfo() << "Accept call with shortcut :" << currentPendingCall;
|
||||||
auto gui = new CallGui(currentPendingCall);
|
auto gui = new CallGui(currentPendingCall);
|
||||||
Utils::openCallsWindow(gui);
|
Utils::openCallsWindow(gui);
|
||||||
currentPendingCall->lAccept(false);
|
currentPendingCall->lAccept(false);
|
||||||
|
|
@ -82,7 +82,7 @@ void KeyboardShortcuts::onDeclineCallShortcut() {
|
||||||
auto callList = App::getInstance()->getCallList();
|
auto callList = App::getInstance()->getCallList();
|
||||||
auto currentPendingCall = callList->getFirstIncommingPendingCall();
|
auto currentPendingCall = callList->getFirstIncommingPendingCall();
|
||||||
if (!currentPendingCall.isNull()) {
|
if (!currentPendingCall.isNull()) {
|
||||||
lDebug() << "Dcline call with shortcut :" << currentPendingCall;
|
lInfo() << "Decline call with shortcut :" << currentPendingCall;
|
||||||
currentPendingCall->lDecline();
|
currentPendingCall->lDecline();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -26,6 +26,8 @@
|
||||||
|
|
||||||
#include "FileDownloader.hpp"
|
#include "FileDownloader.hpp"
|
||||||
|
|
||||||
|
DEFINE_ABSTRACT_OBJECT(FileDownloader)
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
||||||
static QString getDownloadFilePath(const QString &folder, const QUrl &url, const bool &overwrite) {
|
static QString getDownloadFilePath(const QString &folder, const QUrl &url, const bool &overwrite) {
|
||||||
|
|
@ -63,7 +65,7 @@ static bool isHttpRedirect(QNetworkReply *reply) {
|
||||||
|
|
||||||
void FileDownloader::download() {
|
void FileDownloader::download() {
|
||||||
if (mDownloading) {
|
if (mDownloading) {
|
||||||
qWarning() << "Unable to download file. Already downloading!";
|
lWarning() << log().arg("Unable to download file. Already downloading!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setDownloading(true);
|
setDownloading(true);
|
||||||
|
|
@ -102,7 +104,8 @@ bool FileDownloader::remove() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileDownloader::emitOutputError() {
|
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.fileName())
|
||||||
.arg(mDestinationFile.errorString());
|
.arg(mDestinationFile.errorString());
|
||||||
mNetworkReply->abort();
|
mNetworkReply->abort();
|
||||||
|
|
@ -123,18 +126,18 @@ void FileDownloader::handleDownloadFinished() {
|
||||||
if (mNetworkReply->error() != QNetworkReply::NoError) return;
|
if (mNetworkReply->error() != QNetworkReply::NoError) return;
|
||||||
|
|
||||||
if (isHttpRedirect(mNetworkReply)) {
|
if (isHttpRedirect(mNetworkReply)) {
|
||||||
qWarning() << QStringLiteral("Request was redirected.");
|
lWarning() << log().arg("Request was redirected.");
|
||||||
mDestinationFile.remove();
|
mDestinationFile.remove();
|
||||||
cleanDownloadEnd();
|
cleanDownloadEnd();
|
||||||
emit downloadFailed();
|
emit downloadFailed();
|
||||||
} else {
|
} 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();
|
mDestinationFile.close();
|
||||||
cleanDownloadEnd();
|
cleanDownloadEnd();
|
||||||
QString fileChecksum = Utils::getFileChecksum(mDestinationFile.fileName());
|
QString fileChecksum = Utils::getFileChecksum(mDestinationFile.fileName());
|
||||||
if (mCheckSum.isEmpty() || fileChecksum == mCheckSum) emit downloadFinished(mDestinationFile.fileName());
|
if (mCheckSum.isEmpty() || fileChecksum == mCheckSum) emit downloadFinished(mDestinationFile.fileName());
|
||||||
else {
|
else {
|
||||||
qCritical() << "File cannot be downloaded : Bad checksum " << fileChecksum;
|
lCritical() << log().arg("File cannot be downloaded : Bad checksum ") << fileChecksum;
|
||||||
mDestinationFile.remove();
|
mDestinationFile.remove();
|
||||||
emit downloadFailed();
|
emit downloadFailed();
|
||||||
}
|
}
|
||||||
|
|
@ -143,8 +146,7 @@ void FileDownloader::handleDownloadFinished() {
|
||||||
|
|
||||||
void FileDownloader::handleError(QNetworkReply::NetworkError code) {
|
void FileDownloader::handleError(QNetworkReply::NetworkError code) {
|
||||||
if (code != QNetworkReply::OperationCanceledError)
|
if (code != QNetworkReply::OperationCanceledError)
|
||||||
qWarning()
|
lWarning() << log().arg("Download of %1 failed: %2").arg(mUrl.toString()).arg(mNetworkReply->errorString());
|
||||||
<< QStringLiteral("Download of %1 failed: %2").arg(mUrl.toString()).arg(mNetworkReply->errorString());
|
|
||||||
mDestinationFile.remove();
|
mDestinationFile.remove();
|
||||||
|
|
||||||
cleanDownloadEnd();
|
cleanDownloadEnd();
|
||||||
|
|
@ -155,7 +157,7 @@ void FileDownloader::handleError(QNetworkReply::NetworkError code) {
|
||||||
void FileDownloader::handleSslErrors(const QList<QSslError> &sslErrors) {
|
void FileDownloader::handleSslErrors(const QList<QSslError> &sslErrors) {
|
||||||
#if QT_CONFIG(ssl)
|
#if QT_CONFIG(ssl)
|
||||||
for (const QSslError &error : sslErrors)
|
for (const QSslError &error : sslErrors)
|
||||||
qWarning() << QStringLiteral("SSL error: %1").arg(error.errorString());
|
lWarning() << log().arg("SSL error: %1").arg(error.errorString());
|
||||||
#else
|
#else
|
||||||
Q_UNUSED(sslErrors);
|
Q_UNUSED(sslErrors);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -163,7 +165,7 @@ void FileDownloader::handleSslErrors(const QList<QSslError> &sslErrors) {
|
||||||
|
|
||||||
void FileDownloader::handleTimeout() {
|
void FileDownloader::handleTimeout() {
|
||||||
if (mReadBytes == mTimeoutReadBytes) {
|
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();
|
mNetworkReply->abort();
|
||||||
} else mTimeoutReadBytes = mReadBytes;
|
} else mTimeoutReadBytes = mReadBytes;
|
||||||
}
|
}
|
||||||
|
|
@ -181,15 +183,16 @@ QUrl FileDownloader::getUrl() const {
|
||||||
|
|
||||||
void FileDownloader::setUrl(const QUrl &url) {
|
void FileDownloader::setUrl(const QUrl &url) {
|
||||||
if (mDownloading) {
|
if (mDownloading) {
|
||||||
qWarning() << QStringLiteral("Unable to set url, a file is downloading.");
|
lWarning() << log().arg("Unable to set url, a file is downloading.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mUrl != url) {
|
if (mUrl != url) {
|
||||||
mUrl = url;
|
mUrl = url;
|
||||||
if (!QSslSocket::supportsSsl() && mUrl.scheme() == "https") {
|
if (!QSslSocket::supportsSsl() && mUrl.scheme() == "https") {
|
||||||
qWarning() << "Https has been requested but SSL is not supported. Fallback to http. Install manually "
|
lWarning() << log().arg(
|
||||||
"OpenSSL libraries in your PATH.";
|
"Https has been requested but SSL is not supported. Fallback to http. Install manually "
|
||||||
|
"OpenSSL libraries in your PATH.");
|
||||||
mUrl.setScheme("http");
|
mUrl.setScheme("http");
|
||||||
}
|
}
|
||||||
emit urlChanged(mUrl);
|
emit urlChanged(mUrl);
|
||||||
|
|
@ -202,7 +205,7 @@ QString FileDownloader::getDownloadFolder() const {
|
||||||
|
|
||||||
void FileDownloader::setDownloadFolder(const QString &downloadFolder) {
|
void FileDownloader::setDownloadFolder(const QString &downloadFolder) {
|
||||||
if (mDownloading) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -224,7 +227,7 @@ QString
|
||||||
FileDownloader::synchronousDownload(const QUrl &url, const QString &destinationFolder, const bool &overwriteFile) {
|
FileDownloader::synchronousDownload(const QUrl &url, const QString &destinationFolder, const bool &overwriteFile) {
|
||||||
QString filePath;
|
QString filePath;
|
||||||
FileDownloader downloader;
|
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 {
|
else {
|
||||||
bool isOver = false;
|
bool isOver = false;
|
||||||
bool *pIsOver = &isOver;
|
bool *pIsOver = &isOver;
|
||||||
|
|
@ -238,7 +241,7 @@ FileDownloader::synchronousDownload(const QUrl &url, const QString &destinationF
|
||||||
filePath = downloader.getDestinationFileName();
|
filePath = downloader.getDestinationFileName();
|
||||||
if (!QFile::exists(filePath)) {
|
if (!QFile::exists(filePath)) {
|
||||||
filePath = "";
|
filePath = "";
|
||||||
qWarning() << "FileDownloader: Cannot download the specified file";
|
lWarning() << QStringLiteral("FileDownloader: Cannot download the specified file");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@
|
||||||
#ifndef FILE_DOWNLOADER_H_
|
#ifndef FILE_DOWNLOADER_H_
|
||||||
#define FILE_DOWNLOADER_H_
|
#define FILE_DOWNLOADER_H_
|
||||||
|
|
||||||
|
#include "tool/AbstractObject.hpp"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <QtNetwork>
|
#include <QtNetwork>
|
||||||
|
|
@ -29,7 +31,7 @@
|
||||||
|
|
||||||
class QSslError;
|
class QSslError;
|
||||||
|
|
||||||
class FileDownloader : public QObject {
|
class FileDownloader : public QObject, public AbstractObject {
|
||||||
Q_OBJECT;
|
Q_OBJECT;
|
||||||
|
|
||||||
// TODO: Add an error property to use in UI.
|
// TODO: Add an error property to use in UI.
|
||||||
|
|
@ -121,6 +123,8 @@ private:
|
||||||
QTimer mTimeout;
|
QTimer mTimeout;
|
||||||
|
|
||||||
static constexpr int DefaultTimeout = 5000;
|
static constexpr int DefaultTimeout = 5000;
|
||||||
|
|
||||||
|
DECLARE_ABSTRACT_OBJECT
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FILE_DOWNLOADER_H_
|
#endif // FILE_DOWNLOADER_H_
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,8 @@
|
||||||
#include "tool/Constants.hpp"
|
#include "tool/Constants.hpp"
|
||||||
#include "tool/Utils.hpp"
|
#include "tool/Utils.hpp"
|
||||||
|
|
||||||
|
DEFINE_ABSTRACT_OBJECT(FileExtractor)
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
@ -41,7 +43,7 @@ FileExtractor::~FileExtractor() {
|
||||||
|
|
||||||
void FileExtractor::extract() {
|
void FileExtractor::extract() {
|
||||||
if (mExtracting) {
|
if (mExtracting) {
|
||||||
qWarning() << "Unable to extract file. Already extracting!";
|
lWarning() << log().arg("Unable to extract file. Already extracting!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setExtracting(true);
|
setExtracting(true);
|
||||||
|
|
@ -117,7 +119,7 @@ QString FileExtractor::getFile() const {
|
||||||
|
|
||||||
void FileExtractor::setFile(const QString &file) {
|
void FileExtractor::setFile(const QString &file) {
|
||||||
if (mExtracting) {
|
if (mExtracting) {
|
||||||
qWarning() << QStringLiteral("Unable to set file, a file is extracting.");
|
lWarning() << log().arg("Unable to set file, a file is extracting.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (mFile != file) {
|
if (mFile != file) {
|
||||||
|
|
@ -132,7 +134,7 @@ QString FileExtractor::getExtractFolder() const {
|
||||||
|
|
||||||
void FileExtractor::setExtractFolder(const QString &extractFolder) {
|
void FileExtractor::setExtractFolder(const QString &extractFolder) {
|
||||||
if (mExtracting) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
if (mExtractFolder != extractFolder) {
|
if (mExtractFolder != extractFolder) {
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@
|
||||||
#ifndef FILE_EXTRACTOR_H_
|
#ifndef FILE_EXTRACTOR_H_
|
||||||
#define FILE_EXTRACTOR_H_
|
#define FILE_EXTRACTOR_H_
|
||||||
|
|
||||||
|
#include "tool/AbstractObject.hpp"
|
||||||
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
@ -28,7 +30,7 @@
|
||||||
class QTimer;
|
class QTimer;
|
||||||
|
|
||||||
// Supports only bzip file.
|
// Supports only bzip file.
|
||||||
class FileExtractor : public QObject {
|
class FileExtractor : public QObject, public AbstractObject {
|
||||||
|
|
||||||
Q_OBJECT;
|
Q_OBJECT;
|
||||||
|
|
||||||
|
|
@ -99,6 +101,8 @@ private:
|
||||||
qint64 mTotalBytes = 0;
|
qint64 mTotalBytes = 0;
|
||||||
|
|
||||||
QTimer *mTimer = nullptr;
|
QTimer *mTimer = nullptr;
|
||||||
|
|
||||||
|
DECLARE_ABSTRACT_OBJECT
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FILE_EXTRACTOR_H_
|
#endif // FILE_EXTRACTOR_H_
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ Control.Button {
|
||||||
property var checkedImageColor: style?.image?.checked || Qt.darker(contentImageColor, 1.1)
|
property var checkedImageColor: style?.image?.checked || Qt.darker(contentImageColor, 1.1)
|
||||||
property var pressedImageColor: style?.image?.pressed || Qt.darker(contentImageColor, 1.1)
|
property var pressedImageColor: style?.image?.pressed || Qt.darker(contentImageColor, 1.1)
|
||||||
icon.source: style?.iconSource || ""
|
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
|
// Size properties
|
||||||
spacing: Utils.getSizeWithScreenRatio(5)
|
spacing: Utils.getSizeWithScreenRatio(5)
|
||||||
property real radius: Math.ceil(height / 2)
|
property real radius: Math.ceil(height / 2)
|
||||||
|
|
|
||||||
|
|
@ -104,11 +104,6 @@ ColumnLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RowLayout {
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
spacing: Math.round(72 * DefaultStyle.dp)
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.preferredHeight: childrenRect.height
|
|
||||||
MediumButton {
|
MediumButton {
|
||||||
visible: mainItem.isConference && !SettingsCpp.disableMeetingsFeature
|
visible: mainItem.isConference && !SettingsCpp.disableMeetingsFeature
|
||||||
Layout.alignment: Qt.AlignHCenter
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
|
@ -123,8 +118,13 @@ ColumnLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LabelButton {
|
RowLayout {
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
spacing: Math.round(72 * DefaultStyle.dp)
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.preferredHeight: childrenRect.height
|
||||||
visible: !mainItem.isConference
|
visible: !mainItem.isConference
|
||||||
|
LabelButton {
|
||||||
width: Math.round(56 * DefaultStyle.dp)
|
width: Math.round(56 * DefaultStyle.dp)
|
||||||
height: Math.round(56 * DefaultStyle.dp)
|
height: Math.round(56 * DefaultStyle.dp)
|
||||||
button.icon.width: Math.round(24 * DefaultStyle.dp)
|
button.icon.width: Math.round(24 * DefaultStyle.dp)
|
||||||
|
|
@ -138,7 +138,7 @@ ColumnLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LabelButton {
|
LabelButton {
|
||||||
visible: !mainItem.isConference && !SettingsCpp.disableChatFeature
|
visible: !SettingsCpp.disableChatFeature
|
||||||
width: Math.round(56 * DefaultStyle.dp)
|
width: Math.round(56 * DefaultStyle.dp)
|
||||||
height: Math.round(56 * DefaultStyle.dp)
|
height: Math.round(56 * DefaultStyle.dp)
|
||||||
button.icon.width: Math.round(24 * DefaultStyle.dp)
|
button.icon.width: Math.round(24 * DefaultStyle.dp)
|
||||||
|
|
@ -158,7 +158,7 @@ ColumnLayout {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LabelButton {
|
LabelButton {
|
||||||
visible: !mainItem.isConference && SettingsCpp.videoEnabled
|
visible: SettingsCpp.videoEnabled
|
||||||
width: Math.round(56 * DefaultStyle.dp)
|
width: Math.round(56 * DefaultStyle.dp)
|
||||||
height: Math.round(56 * DefaultStyle.dp)
|
height: Math.round(56 * DefaultStyle.dp)
|
||||||
button.icon.width: Math.round(24 * DefaultStyle.dp)
|
button.icon.width: Math.round(24 * DefaultStyle.dp)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import QtQuick.Effects
|
||||||
|
|
||||||
import Linphone
|
import Linphone
|
||||||
import QtQml
|
import QtQml
|
||||||
|
import SettingsCpp
|
||||||
import UtilsCpp 1.0
|
import UtilsCpp 1.0
|
||||||
import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle
|
import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle
|
||||||
|
|
||||||
|
|
@ -29,7 +30,11 @@ ListView {
|
||||||
width: mainItem.width
|
width: mainItem.width
|
||||||
height: Math.round(45 * DefaultStyle.dp)
|
height: Math.round(45 * DefaultStyle.dp)
|
||||||
property var remoteNameObj: UtilsCpp.getDisplayName(modelData.core.remoteAddress)
|
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 {
|
Avatar {
|
||||||
id: delegateAvatar
|
id: delegateAvatar
|
||||||
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
|
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
|
||||||
|
|
@ -43,7 +48,6 @@ ListView {
|
||||||
spacing: 0
|
spacing: 0
|
||||||
Text {
|
Text {
|
||||||
id: delegateName
|
id: delegateName
|
||||||
property var remoteNameObj: UtilsCpp.getDisplayName(modelData.core.remoteAddress)
|
|
||||||
text: callInformationItem.callName
|
text: callInformationItem.callName
|
||||||
font.pixelSize: Math.round(14 * DefaultStyle.dp)
|
font.pixelSize: Math.round(14 * DefaultStyle.dp)
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|
|
||||||
|
|
@ -27,9 +27,9 @@ Control.Control {
|
||||||
property var msgState: chatMessage ? chatMessage.core.messageState : LinphoneEnums.ChatMessageState.StateIdle
|
property var msgState: chatMessage ? chatMessage.core.messageState : LinphoneEnums.ChatMessageState.StateIdle
|
||||||
hoverEnabled: true
|
hoverEnabled: true
|
||||||
property bool linkHovered: false
|
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 messageDeletionRequested()
|
||||||
signal isFileHoveringChanged(bool isFileHovering)
|
signal isFileHoveringChanged(bool isFileHovering)
|
||||||
|
|
@ -63,11 +63,11 @@ Control.Control {
|
||||||
}
|
}
|
||||||
|
|
||||||
contentItem: ColumnLayout {
|
contentItem: ColumnLayout {
|
||||||
spacing: Math.round(5 * DefaultStyle.dp)
|
spacing: Utils.getSizeWithScreenRatio(5)
|
||||||
Text {
|
Text {
|
||||||
id: fromNameText
|
id: fromNameText
|
||||||
Layout.alignment: Qt.AlignTop
|
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
|
visible: mainItem.isFromChatGroup && mainItem.isRemoteMessage && mainItem.isFirstMessage && !replyLayout.visible
|
||||||
maximumLineCount: 1
|
maximumLineCount: 1
|
||||||
width: implicitWidth
|
width: implicitWidth
|
||||||
|
|
@ -81,15 +81,15 @@ Control.Control {
|
||||||
}
|
}
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: forwardLayout
|
id: forwardLayout
|
||||||
spacing: Math.round(8 * DefaultStyle.dp)
|
spacing: Utils.getSizeWithScreenRatio(8)
|
||||||
visible: mainItem.isForward
|
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
|
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft: Qt.AlignRight
|
||||||
EffectImage {
|
EffectImage {
|
||||||
imageSource: AppIcons.forward
|
imageSource: AppIcons.forward
|
||||||
colorizationColor: DefaultStyle.main2_500_main
|
colorizationColor: DefaultStyle.main2_500_main
|
||||||
Layout.preferredWidth: Math.round(12 * DefaultStyle.dp)
|
Layout.preferredWidth: Utils.getSizeWithScreenRatio(12)
|
||||||
Layout.preferredHeight: Math.round(12 * DefaultStyle.dp)
|
Layout.preferredHeight: Utils.getSizeWithScreenRatio(12)
|
||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
//: Forwarded
|
//: Forwarded
|
||||||
|
|
@ -104,20 +104,20 @@ Control.Control {
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: replyLayout
|
id: replyLayout
|
||||||
visible: mainItem.isReply
|
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
|
layoutDirection: mainItem.isRemoteMessage ? Qt.LeftToRight : Qt.RightToLeft
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
spacing: Math.round(5 * DefaultStyle.dp)
|
spacing: Utils.getSizeWithScreenRatio(5)
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: replyLabel
|
id: replyLabel
|
||||||
spacing: Math.round(8 * DefaultStyle.dp)
|
spacing: Utils.getSizeWithScreenRatio(8)
|
||||||
Layout.fillWidth: false
|
Layout.fillWidth: false
|
||||||
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft : Qt.AlignRight
|
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft : Qt.AlignRight
|
||||||
EffectImage {
|
EffectImage {
|
||||||
imageSource: AppIcons.reply
|
imageSource: AppIcons.reply
|
||||||
colorizationColor: DefaultStyle.main2_500_main
|
colorizationColor: DefaultStyle.main2_500_main
|
||||||
Layout.preferredWidth: Math.round(12 * DefaultStyle.dp)
|
Layout.preferredWidth: Utils.getSizeWithScreenRatio(12)
|
||||||
Layout.preferredHeight: Math.round(12 * DefaultStyle.dp)
|
Layout.preferredHeight: Utils.getSizeWithScreenRatio(12)
|
||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft: Qt.AlignRight
|
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft: Qt.AlignRight
|
||||||
|
|
@ -143,16 +143,16 @@ Control.Control {
|
||||||
id: replyMessage
|
id: replyMessage
|
||||||
visible: mainItem.replyText !== ""
|
visible: mainItem.replyText !== ""
|
||||||
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft : Qt.AlignRight
|
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft : Qt.AlignRight
|
||||||
spacing: Math.round(5 * DefaultStyle.dp)
|
spacing: Utils.getSizeWithScreenRatio(5)
|
||||||
topPadding: Math.round(12 * DefaultStyle.dp)
|
topPadding: Utils.getSizeWithScreenRatio(12)
|
||||||
bottomPadding: Math.round(19 * DefaultStyle.dp)
|
bottomPadding: Utils.getSizeWithScreenRatio(19)
|
||||||
leftPadding: Math.round(18 * DefaultStyle.dp)
|
leftPadding: Utils.getSizeWithScreenRatio(18)
|
||||||
rightPadding: Math.round(18 * DefaultStyle.dp)
|
rightPadding: Utils.getSizeWithScreenRatio(18)
|
||||||
Layout.preferredWidth: Math.min(implicitWidth, mainItem.maxWidth - avatar.implicitWidth)
|
Layout.preferredWidth: Math.min(implicitWidth, mainItem.maxWidth - avatar.implicitWidth)
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
color: DefaultStyle.grey_200
|
color: DefaultStyle.grey_200
|
||||||
radius: Math.round(16 * DefaultStyle.dp)
|
radius: Utils.getSizeWithScreenRatio(16)
|
||||||
}
|
}
|
||||||
contentItem: Text {
|
contentItem: Text {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|
@ -172,30 +172,30 @@ Control.Control {
|
||||||
z: replyLayout.z + 1
|
z: replyLayout.z + 1
|
||||||
spacing: 0
|
spacing: 0
|
||||||
layoutDirection: mainItem.isRemoteMessage ? Qt.LeftToRight : Qt.RightToLeft
|
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 {
|
Avatar {
|
||||||
id: avatar
|
id: avatar
|
||||||
visible: mainItem.isFromChatGroup && mainItem.isRemoteMessage
|
visible: mainItem.isFromChatGroup && mainItem.isRemoteMessage
|
||||||
Layout.preferredWidth: mainItem.isRemoteMessage ? 26 * DefaultStyle.dp : 0
|
Layout.preferredWidth: mainItem.isRemoteMessage ? 26 : 0
|
||||||
Layout.preferredHeight: 26 * DefaultStyle.dp
|
Layout.preferredHeight: 26
|
||||||
Layout.alignment: Qt.AlignTop
|
Layout.alignment: Qt.AlignTop
|
||||||
_address: chatMessage ? chatMessage.core.fromAddress : ""
|
_address: chatMessage ? chatMessage.core.fromAddress : ""
|
||||||
}
|
}
|
||||||
Item {
|
Item {
|
||||||
id: bubbleContainer
|
id: bubbleContainer
|
||||||
// Layout.topMargin: isFirstMessage ? 16 * DefaultStyle.dp : 0
|
// Layout.topMargin: isFirstMessage ? 16 : 0
|
||||||
Layout.leftMargin: mainItem.isFromChatGroup ? Math.round(9 * DefaultStyle.dp) : 0
|
Layout.leftMargin: mainItem.isFromChatGroup ? Utils.getSizeWithScreenRatio(9) : 0
|
||||||
Layout.preferredHeight: childrenRect.height
|
Layout.preferredHeight: childrenRect.height
|
||||||
Layout.preferredWidth: childrenRect.width
|
Layout.preferredWidth: childrenRect.width
|
||||||
|
|
||||||
Control.Control {
|
Control.Control {
|
||||||
id: chatBubble
|
id: chatBubble
|
||||||
spacing: Math.round(2 * DefaultStyle.dp)
|
spacing: Utils.getSizeWithScreenRatio(2)
|
||||||
topPadding: Math.round(12 * DefaultStyle.dp)
|
topPadding: Utils.getSizeWithScreenRatio(12)
|
||||||
bottomPadding: Math.round(6 * DefaultStyle.dp)
|
bottomPadding: Utils.getSizeWithScreenRatio(6)
|
||||||
leftPadding: Math.round(18 * DefaultStyle.dp)
|
leftPadding: Utils.getSizeWithScreenRatio(18)
|
||||||
rightPadding: Math.round(18 * DefaultStyle.dp)
|
rightPadding: Utils.getSizeWithScreenRatio(18)
|
||||||
width: Math.min(implicitWidth, mainItem.maxWidth - avatar.implicitWidth)
|
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.
|
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 {
|
Rectangle {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
color: mainItem.backgroundColor
|
color: mainItem.backgroundColor
|
||||||
radius: Math.round(16 * DefaultStyle.dp)
|
radius: Utils.getSizeWithScreenRatio(16)
|
||||||
}
|
}
|
||||||
Rectangle {
|
Rectangle {
|
||||||
visible: mainItem.isFirstMessage && mainItem.isRemoteMessage
|
visible: mainItem.isFirstMessage && mainItem.isRemoteMessage
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
width: Math.round(parent.width / 4)
|
width: Utils.getSizeWithScreenRatio(parent.width / 4)
|
||||||
height: Math.round(parent.height / 4)
|
height: Utils.getSizeWithScreenRatio(parent.height / 4)
|
||||||
color: mainItem.backgroundColor
|
color: mainItem.backgroundColor
|
||||||
}
|
}
|
||||||
Rectangle {
|
Rectangle {
|
||||||
visible: mainItem.isFirstMessage && !mainItem.isRemoteMessage
|
visible: mainItem.isFirstMessage && !mainItem.isRemoteMessage
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
width: Math.round(parent.width / 4)
|
width: Utils.getSizeWithScreenRatio(parent.width / 4)
|
||||||
height: Math.round(parent.height / 4)
|
height: Utils.getSizeWithScreenRatio(parent.height / 4)
|
||||||
color: mainItem.backgroundColor
|
color: mainItem.backgroundColor
|
||||||
}
|
}
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: highlightRectangle
|
id: highlightRectangle
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
radius: Math.round(16 * DefaultStyle.dp)
|
radius: Utils.getSizeWithScreenRatio(16)
|
||||||
color: Qt.lighter(mainItem.backgroundColor, 2)
|
color: Qt.lighter(mainItem.backgroundColor, 2)
|
||||||
border.color: mainItem.backgroundColor
|
border.color: mainItem.backgroundColor
|
||||||
border.width: Math.round(2 * DefaultStyle.dp)
|
border.width: Utils.getSizeWithScreenRatio(2)
|
||||||
opacity: 0
|
opacity: 0
|
||||||
Behavior on opacity {
|
Behavior on opacity {
|
||||||
NumberAnimation {
|
NumberAnimation {
|
||||||
|
|
@ -246,7 +246,7 @@ Control.Control {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
contentItem: ColumnLayout {
|
contentItem: ColumnLayout {
|
||||||
spacing: Math.round(5 * DefaultStyle.dp)
|
spacing: Utils.getSizeWithScreenRatio(5)
|
||||||
ChatMessageContent {
|
ChatMessageContent {
|
||||||
id: chatBubbleContent
|
id: chatBubbleContent
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|
@ -263,9 +263,9 @@ Control.Control {
|
||||||
Layout.preferredHeight: childrenRect.height
|
Layout.preferredHeight: childrenRect.height
|
||||||
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft : Qt.AlignRight
|
Layout.alignment: mainItem.isRemoteMessage ? Qt.AlignLeft : Qt.AlignRight
|
||||||
layoutDirection: mainItem.isRemoteMessage ? Qt.RightToLeft : Qt.LeftToRight
|
layoutDirection: mainItem.isRemoteMessage ? Qt.RightToLeft : Qt.LeftToRight
|
||||||
spacing: Math.round(7 * DefaultStyle.dp)
|
spacing: Utils.getSizeWithScreenRatio(7)
|
||||||
RowLayout {
|
RowLayout {
|
||||||
spacing: Math.round(3 * DefaultStyle.dp)
|
spacing: Utils.getSizeWithScreenRatio(3)
|
||||||
Layout.preferredHeight: childrenRect.height
|
Layout.preferredHeight: childrenRect.height
|
||||||
Text {
|
Text {
|
||||||
id: ephemeralTime
|
id: ephemeralTime
|
||||||
|
|
@ -281,12 +281,12 @@ Control.Control {
|
||||||
visible: mainItem.chatMessage.core.isEphemeral
|
visible: mainItem.chatMessage.core.isEphemeral
|
||||||
imageSource: AppIcons.clockCountDown
|
imageSource: AppIcons.clockCountDown
|
||||||
colorizationColor: DefaultStyle.main2_500_main
|
colorizationColor: DefaultStyle.main2_500_main
|
||||||
Layout.preferredWidth: visible ? 14 * DefaultStyle.dp : 0
|
Layout.preferredWidth: visible ? 14 : 0
|
||||||
Layout.preferredHeight: visible ? 14 * DefaultStyle.dp : 0
|
Layout.preferredHeight: visible ? 14 : 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RowLayout {
|
RowLayout {
|
||||||
spacing: mainItem.isRemoteMessage ? 0 : Math.round(5 * DefaultStyle.dp)
|
spacing: mainItem.isRemoteMessage ? 0 : Utils.getSizeWithScreenRatio(5)
|
||||||
Layout.alignment: Qt.AlignVCenter
|
Layout.alignment: Qt.AlignVCenter
|
||||||
Layout.preferredHeight: childrenRect.height
|
Layout.preferredHeight: childrenRect.height
|
||||||
Text {
|
Text {
|
||||||
|
|
@ -301,8 +301,8 @@ Control.Control {
|
||||||
EffectImage {
|
EffectImage {
|
||||||
// Imdn status icon
|
// Imdn status icon
|
||||||
visible: !mainItem.isRemoteMessage
|
visible: !mainItem.isRemoteMessage
|
||||||
Layout.preferredWidth: visible ? 14 * DefaultStyle.dp : 0
|
Layout.preferredWidth: visible ? 14 : 0
|
||||||
Layout.preferredHeight: visible ? 14 * DefaultStyle.dp : 0
|
Layout.preferredHeight: visible ? 14 : 0
|
||||||
Layout.alignment: Qt.AlignVCenter
|
Layout.alignment: Qt.AlignVCenter
|
||||||
colorizationColor: DefaultStyle.main1_500_main
|
colorizationColor: DefaultStyle.main1_500_main
|
||||||
imageSource: mainItem.msgState === LinphoneEnums.ChatMessageState.StateDelivered
|
imageSource: mainItem.msgState === LinphoneEnums.ChatMessageState.StateDelivered
|
||||||
|
|
@ -318,8 +318,8 @@ Control.Control {
|
||||||
: ""
|
: ""
|
||||||
BusyIndicator {
|
BusyIndicator {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
Layout.preferredWidth: visible ? 14 * DefaultStyle.dp : 0
|
Layout.preferredWidth: visible ? 14 : 0
|
||||||
Layout.preferredHeight: visible ? 14 * DefaultStyle.dp : 0
|
Layout.preferredHeight: visible ? 14 : 0
|
||||||
visible: mainItem.msgState === LinphoneEnums.ChatMessageState.StateIdle
|
visible: mainItem.msgState === LinphoneEnums.ChatMessageState.StateIdle
|
||||||
|| mainItem.msgState === LinphoneEnums.ChatMessageState.StateInProgress
|
|| mainItem.msgState === LinphoneEnums.ChatMessageState.StateInProgress
|
||||||
|| mainItem.msgState === LinphoneEnums.ChatMessageState.StateFileTransferInProgress
|
|| mainItem.msgState === LinphoneEnums.ChatMessageState.StateFileTransferInProgress
|
||||||
|
|
@ -346,30 +346,30 @@ Control.Control {
|
||||||
value: chatBubble.right
|
value: chatBubble.right
|
||||||
}
|
}
|
||||||
onClicked: mainItem.showReactionsForMessageRequested()
|
onClicked: mainItem.showReactionsForMessageRequested()
|
||||||
anchors.topMargin: Math.round(-6 * DefaultStyle.dp)
|
anchors.topMargin: Utils.getSizeWithScreenRatio(-6)
|
||||||
topPadding: Math.round(8 * DefaultStyle.dp)
|
topPadding: Utils.getSizeWithScreenRatio(8)
|
||||||
bottomPadding: Math.round(8 * DefaultStyle.dp)
|
bottomPadding: Utils.getSizeWithScreenRatio(8)
|
||||||
leftPadding: Math.round(8 * DefaultStyle.dp)
|
leftPadding: Utils.getSizeWithScreenRatio(8)
|
||||||
rightPadding: Math.round(8 * DefaultStyle.dp)
|
rightPadding: Utils.getSizeWithScreenRatio(8)
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
color: DefaultStyle.grey_100
|
color: DefaultStyle.grey_100
|
||||||
border.color: DefaultStyle.grey_0
|
border.color: DefaultStyle.grey_0
|
||||||
border.width: Math.round(2 * DefaultStyle.dp)
|
border.width: Utils.getSizeWithScreenRatio(2)
|
||||||
radius: Math.round(20 * DefaultStyle.dp)
|
radius: Utils.getSizeWithScreenRatio(20)
|
||||||
}
|
}
|
||||||
contentItem: RowLayout {
|
contentItem: RowLayout {
|
||||||
spacing: Math.round(6 * DefaultStyle.dp)
|
spacing: Utils.getSizeWithScreenRatio(6)
|
||||||
Repeater {
|
Repeater {
|
||||||
id: reactionList
|
id: reactionList
|
||||||
model: mainItem.chatMessage ? mainItem.chatMessage.core.reactionsSingleton : []
|
model: mainItem.chatMessage ? mainItem.chatMessage.core.reactionsSingleton : []
|
||||||
delegate: RowLayout {
|
delegate: RowLayout {
|
||||||
spacing: Math.round(3 * DefaultStyle.dp)
|
spacing: Utils.getSizeWithScreenRatio(3)
|
||||||
Text {
|
Text {
|
||||||
text: UtilsCpp.encodeEmojiToQmlRichFormat(modelData.body)
|
text: UtilsCpp.encodeEmojiToQmlRichFormat(modelData.body)
|
||||||
textFormat: Text.RichText
|
textFormat: Text.RichText
|
||||||
font {
|
font {
|
||||||
pixelSize: Math.round(15 * DefaultStyle.dp)
|
pixelSize: Utils.getSizeWithScreenRatio(15)
|
||||||
weight: Math.round(400 * DefaultStyle.dp)
|
weight: Utils.getSizeWithScreenRatio(400)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
|
|
@ -389,11 +389,11 @@ Control.Control {
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: actionsLayout
|
id: actionsLayout
|
||||||
visible: mainItem.hovered || optionsMenu.hovered || optionsMenu.popup.opened || emojiButton.hovered || emojiButton.popup.opened
|
visible: mainItem.hovered || optionsMenu.hovered || optionsMenu.popup.opened || emojiButton.hovered || emojiButton.popup.opened
|
||||||
Layout.leftMargin: Math.round(8 * DefaultStyle.dp)
|
Layout.leftMargin: Utils.getSizeWithScreenRatio(8)
|
||||||
Layout.rightMargin: Math.round(8 * DefaultStyle.dp)
|
Layout.rightMargin: Utils.getSizeWithScreenRatio(8)
|
||||||
Layout.alignment: Qt.AlignVCenter
|
Layout.alignment: Qt.AlignVCenter
|
||||||
// Layout.fillWidth: true
|
// Layout.fillWidth: true
|
||||||
spacing: Math.round(7 * DefaultStyle.dp)
|
spacing: Utils.getSizeWithScreenRatio(7)
|
||||||
layoutDirection: mainItem.isRemoteMessage ? Qt.LeftToRight : Qt.RightToLeft
|
layoutDirection: mainItem.isRemoteMessage ? Qt.LeftToRight : Qt.RightToLeft
|
||||||
PopupButton {
|
PopupButton {
|
||||||
id: optionsMenu
|
id: optionsMenu
|
||||||
|
|
@ -406,7 +406,7 @@ Control.Control {
|
||||||
text: qsTr("chat_message_reception_info")
|
text: qsTr("chat_message_reception_info")
|
||||||
icon.source: AppIcons.chatTeardropText
|
icon.source: AppIcons.chatTeardropText
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
|
Layout.preferredHeight: Utils.getSizeWithScreenRatio(45)
|
||||||
onClicked: {
|
onClicked: {
|
||||||
mainItem.showImdnStatusForMessageRequested()
|
mainItem.showImdnStatusForMessageRequested()
|
||||||
optionsMenu.close()
|
optionsMenu.close()
|
||||||
|
|
@ -418,7 +418,7 @@ Control.Control {
|
||||||
text: qsTr("chat_message_reply")
|
text: qsTr("chat_message_reply")
|
||||||
icon.source: AppIcons.reply
|
icon.source: AppIcons.reply
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
|
Layout.preferredHeight: Utils.getSizeWithScreenRatio(45)
|
||||||
onClicked: {
|
onClicked: {
|
||||||
mainItem.replyToMessageRequested()
|
mainItem.replyToMessageRequested()
|
||||||
optionsMenu.close()
|
optionsMenu.close()
|
||||||
|
|
@ -432,9 +432,9 @@ Control.Control {
|
||||||
//: "Copy"
|
//: "Copy"
|
||||||
: qsTr("chat_message_copy")
|
: qsTr("chat_message_copy")
|
||||||
icon.source: AppIcons.copy
|
icon.source: AppIcons.copy
|
||||||
// spacing: Math.round(10 * DefaultStyle.dp)
|
// spacing: Utils.getSizeWithScreenRatio(10)
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
|
Layout.preferredHeight: Utils.getSizeWithScreenRatio(45)
|
||||||
onClicked: {
|
onClicked: {
|
||||||
var success = UtilsCpp.copyToClipboard(chatBubbleContent.selectedText != "" ? chatBubbleContent.selectedText : mainItem.chatMessage.core.text)
|
var success = UtilsCpp.copyToClipboard(chatBubbleContent.selectedText != "" ? chatBubbleContent.selectedText : mainItem.chatMessage.core.text)
|
||||||
//: Copied
|
//: Copied
|
||||||
|
|
@ -450,7 +450,7 @@ Control.Control {
|
||||||
text: qsTr("chat_message_forward")
|
text: qsTr("chat_message_forward")
|
||||||
icon.source: AppIcons.forward
|
icon.source: AppIcons.forward
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
|
Layout.preferredHeight: Utils.getSizeWithScreenRatio(45)
|
||||||
onClicked: {
|
onClicked: {
|
||||||
mainItem.forwardMessageRequested()
|
mainItem.forwardMessageRequested()
|
||||||
optionsMenu.close()
|
optionsMenu.close()
|
||||||
|
|
@ -458,7 +458,7 @@ Control.Control {
|
||||||
}
|
}
|
||||||
Rectangle {
|
Rectangle {
|
||||||
Layout.fillWidth: true
|
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
|
color: DefaultStyle.main2_400
|
||||||
}
|
}
|
||||||
IconLabelButton {
|
IconLabelButton {
|
||||||
|
|
@ -466,9 +466,9 @@ Control.Control {
|
||||||
//: "Delete"
|
//: "Delete"
|
||||||
text: qsTr("chat_message_delete")
|
text: qsTr("chat_message_delete")
|
||||||
icon.source: AppIcons.trashCan
|
icon.source: AppIcons.trashCan
|
||||||
// spacing: Math.round(10 * DefaultStyle.dp)
|
// spacing: Utils.getSizeWithScreenRatio(10)
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
|
Layout.preferredHeight: Utils.getSizeWithScreenRatio(45)
|
||||||
onClicked: {
|
onClicked: {
|
||||||
mainItem.messageDeletionRequested()
|
mainItem.messageDeletionRequested()
|
||||||
optionsMenu.close()
|
optionsMenu.close()
|
||||||
|
|
@ -504,8 +504,8 @@ Control.Control {
|
||||||
PopupButton {
|
PopupButton {
|
||||||
id: emojiPickerButton
|
id: emojiPickerButton
|
||||||
icon.source: AppIcons.plusCircle
|
icon.source: AppIcons.plusCircle
|
||||||
popup.width: Math.round(393 * DefaultStyle.dp)
|
popup.width: Utils.getSizeWithScreenRatio(393)
|
||||||
popup.height: Math.round(291 * DefaultStyle.dp)
|
popup.height: Utils.getSizeWithScreenRatio(291)
|
||||||
popup.contentItem: EmojiPicker {
|
popup.contentItem: EmojiPicker {
|
||||||
id: emojiPicker
|
id: emojiPicker
|
||||||
onEmojiClicked: (emoji) => {
|
onEmojiClicked: (emoji) => {
|
||||||
|
|
|
||||||
|
|
@ -157,6 +157,7 @@ ColumnLayout {
|
||||||
id: list
|
id: list
|
||||||
width: mainItem.width
|
width: mainItem.width
|
||||||
height: Math.round(250 * DefaultStyle.dp)
|
height: Math.round(250 * DefaultStyle.dp)
|
||||||
|
Layout.fillWidth: true
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
model: mainItem.categories
|
model: mainItem.categories
|
||||||
spacing: Math.round(30 * DefaultStyle.dp)
|
spacing: Math.round(30 * DefaultStyle.dp)
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,6 @@ Control.Control {
|
||||||
property var textArea
|
property var textArea
|
||||||
property int selectedFilesCount: 0
|
property int selectedFilesCount: 0
|
||||||
// property alias cursorPosition: sendingTextArea.cursorPosition
|
// property alias cursorPosition: sendingTextArea.cursorPosition
|
||||||
property Popup emojiPicker
|
|
||||||
|
|
||||||
property bool dropEnabled: true
|
property bool dropEnabled: true
|
||||||
property bool isEphemeral : false
|
property bool isEphemeral : false
|
||||||
|
|
@ -77,14 +76,14 @@ Control.Control {
|
||||||
id: textAreaComp
|
id: textAreaComp
|
||||||
RowLayout {
|
RowLayout {
|
||||||
spacing: Math.round(16 * DefaultStyle.dp)
|
spacing: Math.round(16 * DefaultStyle.dp)
|
||||||
BigButton {
|
PopupButton {
|
||||||
id: emojiPickerButton
|
id: emojiPickerButton
|
||||||
style: ButtonStyle.noBackground
|
style: ButtonStyle.noBackground
|
||||||
checked: mainItem.emojiPicker?.visible || false
|
|
||||||
icon.source: checked ? AppIcons.closeX : AppIcons.smiley
|
icon.source: checked ? AppIcons.closeX : AppIcons.smiley
|
||||||
onPressed: {
|
popup.width: Math.round(393 * DefaultStyle.dp)
|
||||||
if (!checked) mainItem.emojiPicker.open()
|
popup.height: Math.round(291 * DefaultStyle.dp)
|
||||||
else mainItem.emojiPicker.close()
|
popup.contentItem: EmojiPicker {
|
||||||
|
editor: sendingTextArea
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BigButton {
|
BigButton {
|
||||||
|
|
@ -121,7 +120,9 @@ Control.Control {
|
||||||
id: sendingAreaFlickable
|
id: sendingAreaFlickable
|
||||||
Layout.preferredHeight: Math.min(Math.round(100 * DefaultStyle.dp), contentHeight)
|
Layout.preferredHeight: Math.min(Math.round(100 * DefaultStyle.dp), contentHeight)
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
|
width: sendingControl.width - sendingControl.leftPadding - sendingControl.rightPadding
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
Layout.alignment: Qt.AlignCenter
|
||||||
contentHeight: sendingTextArea.contentHeight
|
contentHeight: sendingTextArea.contentHeight
|
||||||
contentWidth: width
|
contentWidth: width
|
||||||
|
|
||||||
|
|
@ -138,8 +139,9 @@ Control.Control {
|
||||||
|
|
||||||
TextArea {
|
TextArea {
|
||||||
id: sendingTextArea
|
id: sendingTextArea
|
||||||
|
// RectangleTest{anchors.fill: parent}
|
||||||
width: sendingAreaFlickable.width
|
width: sendingAreaFlickable.width
|
||||||
height: sendingAreaFlickable.height
|
height: implicitHeight// sendingAreaFlickable.height
|
||||||
textFormat: TextEdit.AutoText
|
textFormat: TextEdit.AutoText
|
||||||
onTextChanged: {
|
onTextChanged: {
|
||||||
mainItem.text = text
|
mainItem.text = text
|
||||||
|
|
@ -180,6 +182,7 @@ Control.Control {
|
||||||
RowLayout {
|
RowLayout {
|
||||||
id: stackButton
|
id: stackButton
|
||||||
spacing: 0
|
spacing: 0
|
||||||
|
Layout.preferredHeight: Math.max(recordButton.height, sendMessageButton.height)
|
||||||
BigButton {
|
BigButton {
|
||||||
id: recordButton
|
id: recordButton
|
||||||
ToolTip.visible: !enabled && hovered
|
ToolTip.visible: !enabled && hovered
|
||||||
|
|
@ -196,6 +199,7 @@ Control.Control {
|
||||||
}
|
}
|
||||||
BigButton {
|
BigButton {
|
||||||
id: sendMessageButton
|
id: sendMessageButton
|
||||||
|
Layout.preferredHeight: height
|
||||||
visible: sendingTextArea.text.length !== 0 || mainItem.selectedFilesCount > 0
|
visible: sendingTextArea.text.length !== 0 || mainItem.selectedFilesCount > 0
|
||||||
style: ButtonStyle.noBackgroundOrange
|
style: ButtonStyle.noBackgroundOrange
|
||||||
icon.source: AppIcons.paperPlaneRight
|
icon.source: AppIcons.paperPlaneRight
|
||||||
|
|
|
||||||
|
|
@ -874,5 +874,7 @@ function getSizeWithScreenRatio(size){
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
return size;
|
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);
|
||||||
}
|
}
|
||||||
|
|
@ -295,40 +295,6 @@ FocusScope {
|
||||||
contentLoader.panelType = SelectedChatView.PanelType.ForwardToList
|
contentLoader.panelType = SelectedChatView.PanelType.ForwardToList
|
||||||
detailsPanel.visible = true
|
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 {
|
ScrollBar {
|
||||||
id: scrollbar
|
id: scrollbar
|
||||||
|
|
@ -512,7 +478,6 @@ FocusScope {
|
||||||
Control.SplitView.minimumHeight: mainItem.chat?.core.isReadOnly ? 0 : Math.round(79 * DefaultStyle.dp)
|
Control.SplitView.minimumHeight: mainItem.chat?.core.isReadOnly ? 0 : Math.round(79 * DefaultStyle.dp)
|
||||||
chat: mainItem.chat
|
chat: mainItem.chat
|
||||||
selectedFilesCount: contents.count
|
selectedFilesCount: contents.count
|
||||||
emojiPicker: emojiPickerPopup
|
|
||||||
callOngoing: mainItem.call != null
|
callOngoing: mainItem.call != null
|
||||||
onChatChanged: {
|
onChatChanged: {
|
||||||
if (chat) messageSender.text = mainItem.chat.core.sendingText
|
if (chat) messageSender.text = mainItem.chat.core.sendingText
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue