imdn details

This commit is contained in:
Gaelle Braud 2025-06-20 15:20:13 +02:00
parent 1d7010c381
commit a02a58ecc9
26 changed files with 1284 additions and 482 deletions

View file

@ -60,6 +60,7 @@
#include "core/chat/message/EventLogProxy.hpp"
#include "core/chat/message/content/ChatMessageContentGui.hpp"
#include "core/chat/message/content/ChatMessageContentProxy.hpp"
#include "core/chat/message/imdn/ImdnStatusProxy.hpp"
#include "core/conference/ConferenceGui.hpp"
#include "core/conference/ConferenceInfoGui.hpp"
#include "core/conference/ConferenceInfoProxy.hpp"
@ -687,6 +688,7 @@ void App::initCppInterfaces() {
qmlRegisterType<FPSCounter>(Constants::MainQmlUri, 1, 0, "FPSCounter");
qmlRegisterType<EmojiModel>(Constants::MainQmlUri, 1, 0, "EmojiModel");
qmlRegisterType<EmojiProxy>(Constants::MainQmlUri, 1, 0, "EmojiProxy");
qmlRegisterType<ImdnStatusProxy>(Constants::MainQmlUri, 1, 0, "ImdnStatusProxy");
qmlRegisterType<SoundPlayerGui>(Constants::MainQmlUri, 1, 0, "SoundPlayerGui");
qmlRegisterType<RecorderGui>(Constants::MainQmlUri, 1, 0, "RecorderGui");

View file

@ -33,6 +33,8 @@ list(APPEND _LINPHONEAPP_SOURCES
core/chat/message/content/ChatMessageContentGui.cpp
core/chat/message/content/ChatMessageContentList.cpp
core/chat/message/content/ChatMessageContentProxy.cpp
core/chat/message/imdn/ImdnStatusList.cpp
core/chat/message/imdn/ImdnStatusProxy.cpp
core/emoji/EmojiList.cpp
core/emoji/EmojiModel.cpp
core/emoji/EmojiProxy.cpp

View file

@ -27,6 +27,40 @@ DEFINE_ABSTRACT_OBJECT(ChatMessageCore)
/***********************************************************************/
ImdnStatus ImdnStatus::operator=(ImdnStatus r) {
mAddress = r.mAddress;
mState = r.mState;
mLastUpdatedTime = r.mLastUpdatedTime;
return *this;
}
bool ImdnStatus::operator==(const ImdnStatus &r) const {
return r.mState == mState && r.mAddress == mAddress && r.mLastUpdatedTime == mLastUpdatedTime;
}
bool ImdnStatus::operator!=(ImdnStatus r) {
return r.mState != mState || r.mAddress != mAddress || r.mLastUpdatedTime != mLastUpdatedTime;
}
ImdnStatus ImdnStatus::createMessageImdnStatusVariant(const QString &address,
const LinphoneEnums::ChatMessageState &state,
QDateTime lastUpdatedTime) {
ImdnStatus s;
s.mState = state;
s.mAddress = address;
s.mLastUpdatedTime = lastUpdatedTime;
return s;
}
QVariant createImdnStatusSingletonVariant(const LinphoneEnums::ChatMessageState &state, int count = 1) {
QVariantMap map;
map.insert("state", QVariant::fromValue(state));
map.insert("count", count);
return map;
}
/***********************************************************************/
Reaction Reaction::operator=(Reaction r) {
mAddress = r.mAddress;
mBody = r.mBody;
@ -132,6 +166,7 @@ ChatMessageCore::ChatMessageCore(const std::shared_ptr<linphone::ChatMessage> &c
mIsForward = chatmessage->isForward();
mIsReply = chatmessage->isReply();
mImdnStatusList = computeDeliveryStatus(chatmessage);
}
ChatMessageCore::~ChatMessageCore() {
@ -205,8 +240,12 @@ void ChatMessageCore::setSelf(QSharedPointer<ChatMessageCore> me) {
&ChatMessageModel::msgStateChanged,
[this](const std::shared_ptr<linphone::ChatMessage> &message, linphone::ChatMessage::State state) {
if (mChatMessageModel->getMonitor() != message) return;
auto imdnStatusList = computeDeliveryStatus(message);
auto msgState = LinphoneEnums::fromLinphone(state);
mChatMessageModelConnection->invokeToCore([this, msgState] { setMessageState(msgState); });
mChatMessageModelConnection->invokeToCore([this, msgState, imdnStatusList] {
setImdnStatusList(imdnStatusList);
setMessageState(msgState);
});
});
mChatMessageModelConnection->makeConnectToModel(
&ChatMessageModel::fileTransferProgressIndication,
@ -265,6 +304,40 @@ void ChatMessageCore::setSelf(QSharedPointer<ChatMessageCore> me) {
[this](const std::shared_ptr<linphone::ChatMessage> &message) {});
}
QList<ImdnStatus> ChatMessageCore::computeDeliveryStatus(const std::shared_ptr<linphone::ChatMessage> &message) {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
QList<ImdnStatus> imdnStatusList;
auto createImdnStatus = [this, &imdnStatusList](std::shared_ptr<linphone::ParticipantImdnState> participant,
linphone::ChatMessage::State state) {
auto address = participant->getParticipant() ? participant->getParticipant()->getAddress()->clone() : nullptr;
auto lastUpdated = QDateTime::fromSecsSinceEpoch(participant->getStateChangeTime());
if (address) {
address->clean();
auto addrString = Utils::coreStringToAppString(address->asStringUriOnly());
auto imdn =
ImdnStatus::createMessageImdnStatusVariant(addrString, LinphoneEnums::fromLinphone(state), lastUpdated);
imdnStatusList.append(imdn);
}
};
// Read
for (auto &participant : message->getParticipantsByImdnState(linphone::ChatMessage::State::Displayed)) {
createImdnStatus(participant, linphone::ChatMessage::State::Displayed);
}
// Received
for (auto &participant : message->getParticipantsByImdnState(linphone::ChatMessage::State::DeliveredToUser)) {
createImdnStatus(participant, linphone::ChatMessage::State::DeliveredToUser);
}
// Sent
for (auto &participant : message->getParticipantsByImdnState(linphone::ChatMessage::State::Delivered)) {
createImdnStatus(participant, linphone::ChatMessage::State::Delivered);
}
// Error
for (auto &participant : message->getParticipantsByImdnState(linphone::ChatMessage::State::NotDelivered)) {
createImdnStatus(participant, linphone::ChatMessage::State::NotDelivered);
}
return imdnStatusList;
}
QDateTime ChatMessageCore::getTimestamp() const {
return mTimestamp;
}
@ -449,6 +522,49 @@ void ChatMessageCore::setMessageState(LinphoneEnums::ChatMessageState state) {
}
}
QList<ImdnStatus> ChatMessageCore::getImdnStatusList() const {
return mImdnStatusList;
}
void ChatMessageCore::setImdnStatusList(QList<ImdnStatus> status) {
mImdnStatusList = status;
emit imdnStatusListChanged();
}
QStringList ChatMessageCore::getImdnStatusListLabels() const {
QStringList statusList;
int count = 0;
auto imdnSingletons = getImdnStatusAsSingletons();
for (auto &status : imdnSingletons) {
auto map = status.toMap();
auto val = map["state"].value<LinphoneEnums::ChatMessageState>();
auto count = map["count"].toInt();
statusList.append(QString("%1 %2").arg(LinphoneEnums::toString(val)).arg(count));
}
return statusList;
}
QList<QVariant> ChatMessageCore::getImdnStatusAsSingletons() const {
QList<QVariant> statusSingletons;
for (auto &stat : mImdnStatusList) {
auto it = std::find_if(statusSingletons.begin(), statusSingletons.end(), [state = stat.mState](QVariant data) {
auto dataState = data.toMap()["state"].value<LinphoneEnums::ChatMessageState>();
return state == dataState;
});
if (it == statusSingletons.end()) statusSingletons.push_back(createImdnStatusSingletonVariant(stat.mState, 1));
else {
auto map = it->toMap();
auto count = map["count"].toInt();
++count;
map.remove("count");
map.insert("count", count);
statusSingletons.erase(it);
statusSingletons.push_back(map);
}
}
return statusSingletons;
}
std::shared_ptr<ChatMessageModel> ChatMessageCore::getModel() const {
return mChatMessageModel;
}

View file

@ -34,6 +34,26 @@
#include <linphone++/linphone.hh>
struct ImdnStatus {
Q_GADGET
Q_PROPERTY(QString address MEMBER mAddress)
Q_PROPERTY(LinphoneEnums::ChatMessageState state MEMBER mState)
Q_PROPERTY(QDateTime lastUpdatedTime MEMBER mLastUpdatedTime)
public:
QString mAddress;
LinphoneEnums::ChatMessageState mState;
QDateTime mLastUpdatedTime;
ImdnStatus operator=(ImdnStatus r);
bool operator==(const ImdnStatus &r) const;
bool operator!=(ImdnStatus r);
static ImdnStatus createMessageImdnStatusVariant(const QString &address,
const LinphoneEnums::ChatMessageState &state,
QDateTime mLastUpdatedTime);
};
struct Reaction {
Q_GADGET
@ -71,6 +91,9 @@ class ChatMessageCore : public QObject, public AbstractObject {
Q_PROPERTY(bool isFromChatGroup READ isFromChatGroup CONSTANT)
Q_PROPERTY(bool isRead READ isRead WRITE setIsRead NOTIFY isReadChanged)
Q_PROPERTY(QString ownReaction READ getOwnReaction WRITE setOwnReaction NOTIFY messageReactionChanged)
Q_PROPERTY(QStringList imdnStatusListAsString READ getImdnStatusListLabels NOTIFY imdnStatusListChanged)
Q_PROPERTY(QList<ImdnStatus> imdnStatusList READ getImdnStatusList NOTIFY imdnStatusListChanged)
Q_PROPERTY(QList<QVariant> imdnStatusAsSingletons READ getImdnStatusAsSingletons NOTIFY imdnStatusListChanged)
Q_PROPERTY(QList<Reaction> reactions READ getReactions WRITE setReactions NOTIFY messageReactionChanged)
Q_PROPERTY(QList<QVariant> reactionsSingleton READ getReactionsSingleton NOTIFY singletonReactionMapChanged)
Q_PROPERTY(
@ -87,6 +110,8 @@ public:
~ChatMessageCore();
void setSelf(QSharedPointer<ChatMessageCore> me);
QList<ImdnStatus> computeDeliveryStatus(const std::shared_ptr<linphone::ChatMessage> &message);
QDateTime getTimestamp() const;
void setTimestamp(QDateTime timestamp);
@ -121,6 +146,10 @@ public:
LinphoneEnums::ChatMessageState getMessageState() const;
void setMessageState(LinphoneEnums::ChatMessageState state);
QList<ImdnStatus> getImdnStatusList() const;
void setImdnStatusList(QList<ImdnStatus> status);
QList<QVariant> getImdnStatusAsSingletons() const;
QStringList getImdnStatusListLabels() const;
std::shared_ptr<ChatMessageModel> getModel() const;
Q_INVOKABLE ChatMessageContentGui *getVoiceRecordingContent() const;
@ -132,6 +161,7 @@ signals:
void isReadChanged(bool read);
void isRemoteMessageChanged(bool isRemote);
void messageStateChanged();
void imdnStatusListChanged();
void messageReactionChanged();
void singletonReactionMapChanged();
@ -156,6 +186,7 @@ private:
QString mMessageId;
QString mOwnReaction;
QList<Reaction> mReactions;
QList<ImdnStatus> mImdnStatusList;
QList<QVariant> mReactionsSingletonMap;
QDateTime mTimestamp;
bool mIsRemoteMessage = false;

View file

@ -0,0 +1,60 @@
/*
* Copyright (c) 2010-2024 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ImdnStatusList.hpp"
#include "core/App.hpp"
#include <QSharedPointer>
#include <linphone++/linphone.hh>
// =============================================================================
DEFINE_ABSTRACT_OBJECT(ImdnStatusList)
QSharedPointer<ImdnStatusList> ImdnStatusList::create() {
auto model = QSharedPointer<ImdnStatusList>(new ImdnStatusList(), &QObject::deleteLater);
model->moveToThread(App::getInstance()->thread());
return model;
}
ImdnStatusList::ImdnStatusList(QObject *parent) : AbstractListProxy<ImdnStatus>(parent) {
mustBeInMainThread(getClassName());
App::getInstance()->mEngine->setObjectOwnership(this, QQmlEngine::CppOwnership);
}
ImdnStatusList::~ImdnStatusList() {
mustBeInMainThread("~" + getClassName());
}
QList<ImdnStatus> ImdnStatusList::getImdnStatusList() {
return mList;
}
void ImdnStatusList::setImdnStatusList(QList<ImdnStatus> imdnStatusList) {
resetData(imdnStatusList);
}
QVariant ImdnStatusList::data(const QModelIndex &index, int role) const {
int row = index.row();
if (!index.isValid() || row < 0 || row >= mList.count()) return QVariant();
if (role == Qt::DisplayRole) return QVariant::fromValue(mList.at(row));
return QVariant();
}

View file

@ -0,0 +1,52 @@
/*
* Copyright (c) 2010-2024 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef IMDN_STATUS_LIST_H_
#define IMDN_STATUS_LIST_H_
#include "core/chat/message/ChatMessageCore.hpp"
#include "core/proxy/AbstractListProxy.hpp"
#include "tool/AbstractObject.hpp"
#include "tool/thread/SafeConnection.hpp"
#include <QLocale>
// =============================================================================
class ImdnStatusList : public AbstractListProxy<ImdnStatus>, public AbstractObject {
Q_OBJECT
public:
static QSharedPointer<ImdnStatusList> create();
ImdnStatusList(QObject *parent = Q_NULLPTR);
~ImdnStatusList();
QList<ImdnStatus> getImdnStatusList();
void setImdnStatusList(QList<ImdnStatus> imdnStatusList);
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
signals:
void imdnStatusListChanged();
private:
QList<ImdnStatus> mImdnStatuss;
DECLARE_ABSTRACT_OBJECT
};
#endif

View file

@ -0,0 +1,65 @@
/*
* Copyright (c) 2010-2024 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ImdnStatusProxy.hpp"
#include "ImdnStatusList.hpp"
#include "core/App.hpp"
// #include "core/chat/message/ChatMessageGui.hpp"
DEFINE_ABSTRACT_OBJECT(ImdnStatusProxy)
ImdnStatusProxy::ImdnStatusProxy(QObject *parent) : LimitProxy(parent) {
mList = ImdnStatusList::create();
setSourceModel(mList.get());
connect(mList.get(), &ImdnStatusList::modelReset, this, &ImdnStatusProxy::imdnStatusListChanged);
connect(this, &ImdnStatusProxy::filterChanged, this, [this] { invalidate(); });
}
ImdnStatusProxy::~ImdnStatusProxy() {
}
QList<ImdnStatus> ImdnStatusProxy::getImdnStatusList() {
return mList->getImdnStatusList();
}
void ImdnStatusProxy::setImdnStatusList(QList<ImdnStatus> statusList) {
mList->setImdnStatusList(statusList);
}
LinphoneEnums::ChatMessageState ImdnStatusProxy::getFilter() const {
return mFilter;
}
void ImdnStatusProxy::setFilter(LinphoneEnums::ChatMessageState filter) {
if (mFilter != filter) {
mFilter = filter;
emit filterChanged();
}
}
bool ImdnStatusProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const {
auto imdn = mList->getAt(sourceRow);
return imdn.mState == mFilter;
}
bool ImdnStatusProxy::lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const {
return true;
}

View file

@ -0,0 +1,62 @@
/*
* Copyright (c) 2010-2024 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef IMDN_STATUS_PROXY_H_
#define IMDN_STATUS_PROXY_H_
#include "core/chat/message/ChatMessageCore.hpp"
#include "core/proxy/LimitProxy.hpp"
#include "tool/AbstractObject.hpp"
// =============================================================================
class ImdnStatusList;
class ImdnStatusProxy : public LimitProxy, public AbstractObject {
Q_OBJECT
Q_PROPERTY(
QList<ImdnStatus> imdnStatusList READ getImdnStatusList WRITE setImdnStatusList NOTIFY imdnStatusListChanged)
Q_PROPERTY(LinphoneEnums::ChatMessageState filter READ getFilter WRITE setFilter NOTIFY filterChanged)
public:
ImdnStatusProxy(QObject *parent = Q_NULLPTR);
~ImdnStatusProxy();
QList<ImdnStatus> getImdnStatusList();
void setImdnStatusList(QList<ImdnStatus> imdnStatusList);
LinphoneEnums::ChatMessageState getFilter() const;
void setFilter(LinphoneEnums::ChatMessageState filter);
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
bool lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const override;
signals:
void imdnStatusListChanged();
void filterChanged();
protected:
LinphoneEnums::ChatMessageState mFilter;
QSharedPointer<ImdnStatusList> mList;
DECLARE_ABSTRACT_OBJECT
};
#endif

View file

@ -41,9 +41,6 @@ public:
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
signals:
void reactionsChanged();
private:
QList<Reaction> mReactions;
DECLARE_ABSTRACT_OBJECT

View file

@ -29,7 +29,7 @@ DEFINE_ABSTRACT_OBJECT(EmojiProxy)
EmojiProxy::EmojiProxy(QObject *parent) : LimitProxy(parent) {
mList = EmojiList::create();
setSourceModel(mList.get());
connect(mList.get(), &EmojiList::reactionsChanged, this, &EmojiProxy::reactionsChanged);
connect(mList.get(), &EmojiList::modelReset, this, &EmojiProxy::reactionsChanged);
connect(this, &EmojiProxy::filterChanged, this, [this] { invalidate(); });
}

View file

@ -13,13 +13,13 @@
<context>
<name>AbstractWindow</name>
<message>
<location filename="../../view/Page/Window/AbstractWindow.qml" line="78"/>
<location filename="../../view/Page/Window/AbstractWindow.qml" line="80"/>
<source>contact_dialog_pick_phone_number_or_sip_address_title</source>
<extracomment>&quot;Choisissez un numéro ou adresse SIP&quot;</extracomment>
<translation>Telefonnummer oder SIP-Adresse wählen</translation>
</message>
<message>
<location filename="../../view/Page/Window/AbstractWindow.qml" line="277"/>
<location filename="../../view/Page/Window/AbstractWindow.qml" line="279"/>
<source>fps_counter</source>
<translation>%1 FPS</translation>
</message>
@ -523,7 +523,7 @@
<context>
<name>App</name>
<message>
<location filename="../../core/App.cpp" line="338"/>
<location filename="../../core/App.cpp" line="337"/>
<source>remote_provisioning_dialog</source>
<extracomment>Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</extracomment>
<translation>Möchten Sie die Remote-Konfiguration von dieser Adresse herunterladen und anwenden?</translation>
@ -1758,18 +1758,18 @@
<context>
<name>ChatListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="269"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="270"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="271"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="272"/>
<source>chat_message_draft_sending_text</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="340"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="341"/>
<source>chat_room_delete</source>
<extracomment>&quot;Supprimer&quot;</extracomment>
<translation type="unfinished"></translation>
@ -1787,13 +1787,13 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="346"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="347"/>
<source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the conversation ?</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="348"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="349"/>
<source>chat_list_delete_chat_popup_message</source>
<extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment>
<translation type="unfinished"></translation>
@ -1802,31 +1802,37 @@
<context>
<name>ChatMessage</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="238"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="239"/>
<source>chat_message_copy_selection</source>
<extracomment>&quot;Copy selection&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="240"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="241"/>
<source>chat_message_copy</source>
<extracomment>&quot;Copy&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="248"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="249"/>
<source>chat_message_copied_to_clipboard_title</source>
<extracomment>Copied</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="250"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="251"/>
<source>chat_message_copied_to_clipboard_toast</source>
<extracomment>&quot;to clipboard&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="256"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="257"/>
<source>chat_message_see_status</source>
<extracomment>&quot;See message status&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="273"/>
<source>chat_message_delete</source>
<extracomment>&quot;Delete&quot;</extracomment>
<translation type="unfinished"></translation>
@ -1916,19 +1922,19 @@ Error</extracomment>
<context>
<name>ChatMessageCore</name>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="101"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="127"/>
<source>all_reactions_label</source>
<extracomment>&quot;Reactions&quot;: all reactions for one message label</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="145"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="173"/>
<source>info_toast_deleted_title</source>
<extracomment>Deleted</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="147"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="175"/>
<source>info_toast_deleted_message</source>
<extracomment>The message has been deleted</extracomment>
<translation type="unfinished"></translation>
@ -1981,20 +1987,20 @@ Error</extracomment>
<context>
<name>ChatMessagesListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="90"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="91"/>
<source>chat_message_list_encrypted_header_title</source>
<extracomment>End to end encrypted chat</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="100"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="101"/>
<source>chat_message_list_encrypted_header_message</source>
<extracomment>Les messages de cette conversation sont chiffrés de bout
en bout. Seul votre correspondant peut les déchiffrer.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="184"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="186"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation type="unfinished"></translation>
@ -3089,7 +3095,7 @@ Error</extracomment>
<translation>Apply</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="129"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="130"/>
<source>group_infos_call</source>
<extracomment>&quot;Appel&quot;</extracomment>
<translation>Anrufen</translation>
@ -3107,19 +3113,19 @@ Error</extracomment>
<translation>Unmute</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="139"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="141"/>
<source>group_infos_meeting</source>
<extracomment>&quot;Réunion&quot;</extracomment>
<translation>Meeting</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="162"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="164"/>
<source>group_infos_participants</source>
<translation>Participants (%1)</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="169"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="174"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="171"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="176"/>
<source>group_infos_media_docs</source>
<translation>Medien &amp; Dokumente</translation>
</message>
@ -3129,55 +3135,55 @@ Error</extracomment>
<translation type="vanished">Geteilte Medien</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="184"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="186"/>
<source>group_infos_shared_docs</source>
<translation>Geteilte Dokumente</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="196"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="198"/>
<source>group_infos_other_actions</source>
<translation>Weitere Aktionen</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="201"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="203"/>
<source>group_infos_enable_ephemerals</source>
<translation>Flüchtige Nachrichten aktivieren</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="201"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="203"/>
<source>group_infos_disable_ephemerals</source>
<translation>Flüchtige Nachrichten deaktivieren</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="211"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="213"/>
<source>group_infos_leave_room</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="230"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="232"/>
<source>group_infos_delete_history</source>
<translation>Verlauf löschen</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="235"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="237"/>
<source>group_infos_delete_history_toast_title</source>
<extracomment>Delete history ?</extracomment>
<translation>Verlauf löschen?</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="237"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="239"/>
<source>group_infos_delete_history_toast_message</source>
<extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment>
<translation>Alle Nachrichten werden aus dem Chat entfernt. Möchten Sie fortfahren?</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="216"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="218"/>
<source>group_infos_leave_room_toast_title</source>
<extracomment>Leave Chat Room ?</extracomment>
<translation>Chatraum verlassen?</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="218"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="220"/>
<source>group_infos_leave_room_toast_message</source>
<extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment>
<translation>Alle Nachrichten werden aus dem Chat entfernt. Möchten Sie fortfahren?</translation>
@ -3551,102 +3557,102 @@ Error</extracomment>
<context>
<name>MainLayout</name>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="143"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="147"/>
<source>bottom_navigation_calls_label</source>
<extracomment>&quot;Appels&quot;</extracomment>
<translation>Anrufe</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="148"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="152"/>
<source>bottom_navigation_contacts_label</source>
<extracomment>&quot;Contacts&quot;</extracomment>
<translation>Kontakte</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="153"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="157"/>
<source>bottom_navigation_conversations_label</source>
<extracomment>&quot;Conversations&quot;</extracomment>
<translation>Konversationen</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="159"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="163"/>
<source>bottom_navigation_meetings_label</source>
<extracomment>&quot;Réunions&quot;</extracomment>
<translation>Besprechungen</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="206"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="210"/>
<source>searchbar_placeholder_text</source>
<extracomment>&quot;Rechercher un contact, appeler %1&quot;</extracomment>
<translation>Kontakt suchen, %1 anrufen</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="209"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="213"/>
<source>searchbar_placeholder_text_chat_feature_enabled</source>
<extracomment>&quot;ou envoyer un message &quot;</extracomment>
<translation>oder eine Nachricht senden </translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="315"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="449"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="319"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="453"/>
<source>contact_presence_status_disable_do_not_disturb</source>
<extracomment>&quot;Désactiver ne pas déranger&quot;</extracomment>
<translation>Nicht stören deaktivieren</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="371"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="375"/>
<source>information_popup_error_title</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="373"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="377"/>
<source>no_voicemail_uri_error_message</source>
<extracomment>&quot;L&apos;URI de messagerie vocale n&apos;est pas définie.&quot;</extracomment>
<translation>Die Voicemail-URI ist nicht definiert.</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="433"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="437"/>
<source>drawer_menu_manage_account</source>
<extracomment>Mon compte</extracomment>
<translation>Mein Konto</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="451"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="455"/>
<source>contact_presence_status_enable_do_not_disturb</source>
<extracomment>&quot;Activer ne pas déranger&quot;</extracomment>
<translation>Nicht stören aktivieren</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="470"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="474"/>
<source>settings_title</source>
<translation>Einstellungen</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="488"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="492"/>
<source>recordings_title</source>
<extracomment>&quot;Enregistrements&quot;</extracomment>
<translation>Aufnahmen</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="503"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="507"/>
<source>help_title</source>
<extracomment>&quot;Aide&quot;</extracomment>
<translation>Hilfe</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="520"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="524"/>
<source>help_quit_title</source>
<extracomment>&quot;Quitter l&apos;application&quot;</extracomment>
<translation>App beenden</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="525"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="529"/>
<source>quit_app_question</source>
<extracomment>&quot;Quitter %1 ?&quot;</extracomment>
<translation>%1 beenden?</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="554"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="558"/>
<source>drawer_menu_add_account</source>
<extracomment>&quot;Ajouter un compte&quot;</extracomment>
<translation>Konto hinzufügen</translation>
@ -3655,78 +3661,78 @@ Error</extracomment>
<context>
<name>MainWindow</name>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="41"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="42"/>
<source>information_popup_connexion_succeed_title</source>
<extracomment>&quot;Connexion réussie&quot;</extracomment>
<translation>Verbindung erfolgreich</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="43"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="44"/>
<source>information_popup_connexion_succeed_message</source>
<extracomment>&quot;Vous êtes connecté en mode %1&quot;</extracomment>
<translation>Sie sind im %1-Modus verbunden</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="45"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="46"/>
<source>interoperable</source>
<extracomment>interopérable</extracomment>
<translation>interoperabel</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="74"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="75"/>
<source>call_transfer_successful_toast_title</source>
<extracomment>&quot;Appel transféré&quot;</extracomment>
<translation>Anruf weitergeleitet</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="76"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="77"/>
<source>call_transfer_successful_toast_message</source>
<extracomment>&quot;Votre correspondant a é transféré au contact sélectionné&quot;</extracomment>
<translation>Ihr Gesprächspartner wurde an den ausgewählten Kontakt weitergeleitet</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="122"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="128"/>
<source>information_popup_success_title</source>
<translation>Gespeichert</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="124"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="130"/>
<source>information_popup_changes_saved</source>
<extracomment>&quot;Les changements ont é sauvegardés&quot;</extracomment>
<translation>Änderungen wurden gespeichert</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="209"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="215"/>
<source>captcha_validation_loading_message</source>
<extracomment>&quot;Veuillez valider le captcha sur la page web&quot;</extracomment>
<translation>Bitte das Captcha auf der Webseite bestätigen</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="217"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="223"/>
<source>assistant_register_error_title</source>
<extracomment>&quot;Erreur lors de la création&quot;</extracomment>
<translation>Fehler bei der Erstellung</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="236"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="242"/>
<source>assistant_register_success_title</source>
<extracomment>&quot;Compte créé&quot;</extracomment>
<translation>Konto erstellt</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="238"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="244"/>
<source>assistant_register_success_message</source>
<extracomment>&quot;Le compte a é créé. Vous pouvez maintenant vous connecter&quot;</extracomment>
<translation>Das Konto wurde erstellt. Sie können sich jetzt anmelden.</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="242"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="248"/>
<source>assistant_register_error_code</source>
<extracomment>&quot;Erreur dans le code de validation&quot;</extracomment>
<translation>Fehler im Bestätigungscode</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="243"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
<source>information_popup_error_title</source>
<translation>Fehler</translation>
</message>
@ -3800,152 +3806,152 @@ Error</extracomment>
<translation>Keine Besprechungen</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="78"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="89"/>
<source>meeting_schedule_cancel_dialog_message</source>
<extracomment>&quot;Souhaitez-vous annuler et supprimer cette réunion ?&quot;</extracomment>
<translation>Möchten Sie diese Besprechung absagen und löschen?</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="80"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="91"/>
<source>meeting_schedule_delete_dialog_message</source>
<extracomment>Souhaitez-vous supprimer cette réunion ?</extracomment>
<translation>Möchten Sie diese Besprechung löschen?</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="86"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="97"/>
<source>meeting_schedule_cancel_and_delete_action</source>
<extracomment>&quot;Annuler et supprimer&quot;</extracomment>
<translation>Absagen und löschen</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="95"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="106"/>
<source>meeting_schedule_delete_only_action</source>
<extracomment>&quot;Supprimer seulement&quot;</extracomment>
<translation>Nur löschen</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="97"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="108"/>
<source>meeting_schedule_delete_action</source>
<extracomment>&quot;Supprimer&quot;</extracomment>
<translation type="unfinished">Löschen</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="106"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="117"/>
<source>back_action</source>
<extracomment>Retour</extracomment>
<translation>Zurück</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="149"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="160"/>
<source>meetings_list_title</source>
<extracomment>Réunions</extracomment>
<translation>Besprechungen</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="173"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="184"/>
<source>meetings_search_hint</source>
<extracomment>&quot;Rechercher une réunion&quot;</extracomment>
<translation>Besprechung suchen</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="190"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="201"/>
<source>list_filter_no_result_found</source>
<extracomment>&quot;Aucun résultat&quot;</extracomment>
<translation>Kein Ergebnis</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="192"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="203"/>
<source>meetings_empty_list</source>
<extracomment>&quot;Aucune réunion&quot;</extracomment>
<translation>Keine Besprechungen</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="255"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="304"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="266"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="315"/>
<source>meeting_schedule_title</source>
<extracomment>&quot;Nouvelle réunion&quot;</extracomment>
<translation>Neue Besprechung</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="266"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="277"/>
<source>create</source>
<translation>Erstellen</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="273"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="277"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="316"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="418"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="421"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="470"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="284"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="288"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="327"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="429"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="432"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="481"/>
<source>information_popup_error_title</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="275"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="419"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="286"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="430"/>
<source>meeting_schedule_mandatory_field_not_filled_toast</source>
<extracomment>Veuillez saisir un titre et sélectionner au moins un participant</extracomment>
<translation>Bitte Titel bestimmen und mindestens einen Teilnehmer auswählen</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="279"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="422"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="290"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="433"/>
<source>meeting_schedule_duration_error_toast</source>
<extracomment>&quot;La fin de la conférence doit être plus récente que son début&quot;</extracomment>
<translation>Das Ende der Besprechung muss nach dem Beginn liegen</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="283"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="311"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="294"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="322"/>
<source>meeting_schedule_creation_in_progress</source>
<extracomment>&quot;Création de la réunion en cours &quot;</extracomment>
<translation>Besprechung wird erstellt</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="306"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="317"/>
<source>meeting_info_created_toast</source>
<extracomment>&quot;Réunion planifiée avec succès&quot;</extracomment>
<translation>Besprechung erfolgreich erstellt</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="318"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="329"/>
<source>meeting_failed_to_schedule_toast</source>
<extracomment>&quot;Échec de création de la réunion !&quot;</extracomment>
<translation>Besprechung konnte nicht erstellt werden!</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="411"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="422"/>
<source>save</source>
<translation>Speichern</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="461"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="688"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="472"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="699"/>
<source>saved</source>
<extracomment>&quot;Enregistré&quot;</extracomment>
<translation>Gespeichert</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="463"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="474"/>
<source>meeting_info_updated_toast</source>
<extracomment>&quot;Réunion mise à jour&quot;</extracomment>
<translation>Besprechung geändert</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="468"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="479"/>
<source>meeting_schedule_edit_in_progress</source>
<extracomment>&quot;Modification de la réunion en cours&quot;</extracomment>
<translation>Bersprechung wird geändert</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="472"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="483"/>
<source>meeting_failed_to_edit_toast</source>
<extracomment>&quot;Échec de la modification de la réunion !&quot;</extracomment>
<translation>Besprechung konnte nicht geändert werden!</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="509"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="520"/>
<source>meeting_schedule_add_participants_title</source>
<extracomment>&quot;Ajouter des participants&quot;</extracomment>
<translation>Teilnehmer hinzufügen</translation>
@ -3957,12 +3963,12 @@ Error</extracomment>
<translation>Apply</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="524"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="535"/>
<source>add</source>
<translation>Hinzufügen</translation>
</message>
<message numerus="yes">
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="534"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="545"/>
<source>group_call_participant_selected</source>
<extracomment>&quot;%n participant(s) sélectionné(s)&quot;</extracomment>
<translation type="unfinished">
@ -3971,31 +3977,31 @@ Error</extracomment>
</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="619"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="630"/>
<source>meeting_info_delete</source>
<extracomment>&quot;Supprimer la réunion&quot;</extracomment>
<translation>Besprechung löschen</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="690"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="701"/>
<source>meeting_address_copied_to_clipboard_toast</source>
<extracomment>&quot;Adresse de la réunion copiée&quot;</extracomment>
<translation>Besprechungs-URI kopiert</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="725"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="736"/>
<source>meeting_schedule_timezone_title</source>
<extracomment>&quot;Fuseau horaire&quot;</extracomment>
<translation>Zeitzone</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="818"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="829"/>
<source>meeting_info_organizer_label</source>
<extracomment>&quot;Organisateur&quot;</extracomment>
<translation>Organisator</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="835"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="846"/>
<source>meeting_info_join_title</source>
<extracomment>&quot;Rejoindre la réunion&quot;</extracomment>
<translation>Besprechung beitreten</translation>
@ -4023,15 +4029,30 @@ Error</extracomment>
</message>
</context>
<context>
<name>MessageReactionsInfos</name>
<name>MessageImdnStatusInfos</name>
<message>
<location filename="../../view/Page/Layout/Chat/MessageReactionsInfos.qml" line="28"/>
<source>message_details_status title</source>
<location filename="../../view/Page/Layout/Chat/MessageImdnStatusInfos.qml" line="11"/>
<source>message_details_status_title</source>
<extracomment>Message status</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/MessageReactionsInfos.qml" line="91"/>
<location filename="../../view/Page/Layout/Chat/MessageImdnStatusInfos.qml" line="47"/>
<source>click_to_delete_reaction_info</source>
<extracomment>Click to delete</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MessageReactionsInfos</name>
<message>
<location filename="../../view/Page/Layout/Chat/MessageReactionsInfos.qml" line="12"/>
<source>message_details_reactions_title</source>
<extracomment>Reactions</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/MessageReactionsInfos.qml" line="59"/>
<source>click_to_delete_reaction_info</source>
<extracomment>Click to delete</extracomment>
<translation type="unfinished"></translation>
@ -4454,31 +4475,91 @@ Error</extracomment>
<translation>Post-quantum ZRTP</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="184"/>
<location filename="../../tool/LinphoneEnums.cpp" line="125"/>
<source>message_state_in_progress</source>
<extracomment>&quot;delivery in progress&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="128"/>
<source>message_state_delivered</source>
<extracomment>sent</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="131"/>
<source>message_state_not_delivered</source>
<extracomment>error</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="134"/>
<source>message_state_file_transfer_error</source>
<extracomment>cannot get file from server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="137"/>
<source>message_state_file_transfer_done</source>
<extracomment>file transfer has been completed successfully</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="140"/>
<source>message_state_delivered_to_user</source>
<extracomment>received</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="143"/>
<source>message_state_displayed</source>
<extracomment>read</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="146"/>
<source>message_state_file_transfer__in_progress</source>
<extracomment>file transfer in progress</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="149"/>
<source>message_state_pending_delivery</source>
<extracomment>pending delivery</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="152"/>
<source>message_state_file_transfer_cancelling</source>
<extracomment>file transfer canceled</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="219"/>
<source>incoming</source>
<extracomment>&quot;Entrant&quot;</extracomment>
<translation>Eingehend</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="187"/>
<location filename="../../tool/LinphoneEnums.cpp" line="222"/>
<source>outgoing</source>
<extracomment>&quot;Sortant&quot;</extracomment>
<translation>Ausgehend</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="213"/>
<location filename="../../tool/LinphoneEnums.cpp" line="248"/>
<source>conference_layout_active_speaker</source>
<extracomment>&quot;Participant actif&quot;</extracomment>
<translation>Aktiver Sprecher</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="215"/>
<location filename="../../tool/LinphoneEnums.cpp" line="250"/>
<source>conference_layout_grid</source>
<extracomment>&quot;Mosaïque&quot;</extracomment>
<translation>Raster</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="217"/>
<location filename="../../tool/LinphoneEnums.cpp" line="252"/>
<source>conference_layout_audio_only</source>
<extracomment>&quot;Audio uniquement&quot;</extracomment>
<translation>Nur Audio</translation>

View file

@ -13,13 +13,13 @@
<context>
<name>AbstractWindow</name>
<message>
<location filename="../../view/Page/Window/AbstractWindow.qml" line="78"/>
<location filename="../../view/Page/Window/AbstractWindow.qml" line="80"/>
<source>contact_dialog_pick_phone_number_or_sip_address_title</source>
<extracomment>&quot;Choisissez un numéro ou adresse SIP&quot;</extracomment>
<translation>Choose a SIP number or address</translation>
</message>
<message>
<location filename="../../view/Page/Window/AbstractWindow.qml" line="277"/>
<location filename="../../view/Page/Window/AbstractWindow.qml" line="279"/>
<source>fps_counter</source>
<translation>%1 FPS</translation>
</message>
@ -523,7 +523,7 @@
<context>
<name>App</name>
<message>
<location filename="../../core/App.cpp" line="338"/>
<location filename="../../core/App.cpp" line="337"/>
<source>remote_provisioning_dialog</source>
<extracomment>Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</extracomment>
<translation>Do you want to download and apply remote provisioning from this address ?</translation>
@ -1720,18 +1720,18 @@
<context>
<name>ChatListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="269"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="270"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 is writing</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="271"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="272"/>
<source>chat_message_draft_sending_text</source>
<translation>Draft : %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="340"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="341"/>
<source>chat_room_delete</source>
<extracomment>&quot;Supprimer&quot;</extracomment>
<translation>Delete</translation>
@ -1749,13 +1749,13 @@
<translation>Unmute</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="346"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="347"/>
<source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the conversation ?</extracomment>
<translation>Delete the conversation ?</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="348"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="349"/>
<source>chat_list_delete_chat_popup_message</source>
<extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment>
<translation>This conversation and all its messages will be deleted. Do You want to continue ?</translation>
@ -1764,31 +1764,37 @@
<context>
<name>ChatMessage</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="238"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="239"/>
<source>chat_message_copy_selection</source>
<extracomment>&quot;Copy selection&quot;</extracomment>
<translation>Copy selection</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="240"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="241"/>
<source>chat_message_copy</source>
<extracomment>&quot;Copy&quot;</extracomment>
<translation>Copy</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="248"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="249"/>
<source>chat_message_copied_to_clipboard_title</source>
<extracomment>Copied</extracomment>
<translation>Copied</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="250"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="251"/>
<source>chat_message_copied_to_clipboard_toast</source>
<extracomment>&quot;to clipboard&quot;</extracomment>
<translation>in clipboard</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="256"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="257"/>
<source>chat_message_see_status</source>
<extracomment>&quot;See message status&quot;</extracomment>
<translation>See message status</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="273"/>
<source>chat_message_delete</source>
<extracomment>&quot;Delete&quot;</extracomment>
<translation>Delete</translation>
@ -1878,19 +1884,19 @@ Error</extracomment>
<context>
<name>ChatMessageCore</name>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="101"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="127"/>
<source>all_reactions_label</source>
<extracomment>&quot;Reactions&quot;: all reactions for one message label</extracomment>
<translation>Reactions</translation>
</message>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="145"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="173"/>
<source>info_toast_deleted_title</source>
<extracomment>Deleted</extracomment>
<translation>Deleted</translation>
</message>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="147"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="175"/>
<source>info_toast_deleted_message</source>
<extracomment>The message has been deleted</extracomment>
<translation>The message has been deleted</translation>
@ -1943,13 +1949,13 @@ Error</extracomment>
<context>
<name>ChatMessagesListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="90"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="91"/>
<source>chat_message_list_encrypted_header_title</source>
<extracomment>End to end encrypted chat</extracomment>
<translation>End to end encrypted chat</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="100"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="101"/>
<source>chat_message_list_encrypted_header_message</source>
<extracomment>Les messages de cette conversation sont chiffrés de bout
en bout. Seul votre correspondant peut les déchiffrer.</extracomment>
@ -1957,7 +1963,7 @@ Error</extracomment>
Only your correspondent can decrypt them.</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="184"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="186"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 is writing</translation>
@ -3012,7 +3018,7 @@ Only your correspondent can decrypt them.</translation>
<translation>Apply</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="129"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="130"/>
<source>group_infos_call</source>
<extracomment>&quot;Appel&quot;</extracomment>
<translation>Call</translation>
@ -3030,77 +3036,72 @@ Only your correspondent can decrypt them.</translation>
<translation>Unmute</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="139"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="141"/>
<source>group_infos_meeting</source>
<extracomment>&quot;Réunion&quot;</extracomment>
<translation>Meeting</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="162"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="164"/>
<source>group_infos_participants</source>
<translation>Participants (%1)</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="169"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="174"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="171"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="176"/>
<source>group_infos_media_docs</source>
<translation>Medias &amp; documents</translation>
</message>
<message>
<source>group_infos_shared_media</source>
<extracomment>Shared medias</extracomment>
<translation type="vanished">Shared medias</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="184"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="186"/>
<source>group_infos_shared_docs</source>
<translation>Shared documents</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="196"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="198"/>
<source>group_infos_other_actions</source>
<translation>Other actions</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="201"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="203"/>
<source>group_infos_enable_ephemerals</source>
<translation>Enable ephemeral messages</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="201"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="203"/>
<source>group_infos_disable_ephemerals</source>
<translation>Disable ephemeral messages</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="230"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="232"/>
<source>group_infos_delete_history</source>
<translation>Delete history</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="235"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="237"/>
<source>group_infos_delete_history_toast_title</source>
<extracomment>Delete history ?</extracomment>
<translation>Delete history ?</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="237"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="239"/>
<source>group_infos_delete_history_toast_message</source>
<extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment>
<translation>All the messages will be removed from the chat room. Do you want to continue ?</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="211"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="213"/>
<source>group_infos_leave_room</source>
<translation>Leave Chat Room</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="216"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="218"/>
<source>group_infos_leave_room_toast_title</source>
<extracomment>Leave Chat Room ?</extracomment>
<translation>Leave Chat Room ?</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="218"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="220"/>
<source>group_infos_leave_room_toast_message</source>
<extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment>
<translation>All the messages will be removed from the chat room. Do you want to continue ?</translation>
@ -3469,102 +3470,102 @@ Only your correspondent can decrypt them.</translation>
<context>
<name>MainLayout</name>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="143"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="147"/>
<source>bottom_navigation_calls_label</source>
<extracomment>&quot;Appels&quot;</extracomment>
<translation>Calls</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="148"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="152"/>
<source>bottom_navigation_contacts_label</source>
<extracomment>&quot;Contacts&quot;</extracomment>
<translation>Contacts</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="153"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="157"/>
<source>bottom_navigation_conversations_label</source>
<extracomment>&quot;Conversations&quot;</extracomment>
<translation>Conversations</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="159"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="163"/>
<source>bottom_navigation_meetings_label</source>
<extracomment>&quot;Réunions&quot;</extracomment>
<translation>Meetings</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="206"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="210"/>
<source>searchbar_placeholder_text</source>
<extracomment>&quot;Rechercher un contact, appeler %1&quot;</extracomment>
<translation>Find contact, call %1</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="209"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="213"/>
<source>searchbar_placeholder_text_chat_feature_enabled</source>
<extracomment>&quot;ou envoyer un message &quot;</extracomment>
<translation>or send message </translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="315"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="449"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="319"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="453"/>
<source>contact_presence_status_disable_do_not_disturb</source>
<extracomment>&quot;Désactiver ne pas déranger&quot;</extracomment>
<translation>Disable do not disturb</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="371"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="375"/>
<source>information_popup_error_title</source>
<translation>Error</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="373"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="377"/>
<source>no_voicemail_uri_error_message</source>
<extracomment>&quot;L&apos;URI de messagerie vocale n&apos;est pas définie.&quot;</extracomment>
<translation>The voicemail URI is not defined.</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="433"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="437"/>
<source>drawer_menu_manage_account</source>
<extracomment>Mon compte</extracomment>
<translation>My account</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="451"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="455"/>
<source>contact_presence_status_enable_do_not_disturb</source>
<extracomment>&quot;Activer ne pas déranger&quot;</extracomment>
<translation>Enable do not disturb</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="470"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="474"/>
<source>settings_title</source>
<translation>Settings</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="488"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="492"/>
<source>recordings_title</source>
<extracomment>&quot;Enregistrements&quot;</extracomment>
<translation>Records</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="503"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="507"/>
<source>help_title</source>
<extracomment>&quot;Aide&quot;</extracomment>
<translation>Help</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="520"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="524"/>
<source>help_quit_title</source>
<extracomment>&quot;Quitter l&apos;application&quot;</extracomment>
<translation>Quit the app</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="525"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="529"/>
<source>quit_app_question</source>
<extracomment>&quot;Quitter %1 ?&quot;</extracomment>
<translation>Quit %1 ?</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="554"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="558"/>
<source>drawer_menu_add_account</source>
<extracomment>&quot;Ajouter un compte&quot;</extracomment>
<translation>Add an account</translation>
@ -3573,78 +3574,78 @@ Only your correspondent can decrypt them.</translation>
<context>
<name>MainWindow</name>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="41"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="42"/>
<source>information_popup_connexion_succeed_title</source>
<extracomment>&quot;Connexion réussie&quot;</extracomment>
<translation>Connection succeed</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="43"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="44"/>
<source>information_popup_connexion_succeed_message</source>
<extracomment>&quot;Vous êtes connecté en mode %1&quot;</extracomment>
<translation>You are logged in %1 mode</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="45"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="46"/>
<source>interoperable</source>
<extracomment>interopérable</extracomment>
<translation>interoperable</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="74"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="75"/>
<source>call_transfer_successful_toast_title</source>
<extracomment>&quot;Appel transféré&quot;</extracomment>
<translation>Call forwarded</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="76"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="77"/>
<source>call_transfer_successful_toast_message</source>
<extracomment>&quot;Votre correspondant a é transféré au contact sélectionné&quot;</extracomment>
<translation>Your correspondent has been transferred to the selected contact</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="122"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="128"/>
<source>information_popup_success_title</source>
<translation>Saved</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="124"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="130"/>
<source>information_popup_changes_saved</source>
<extracomment>&quot;Les changements ont é sauvegardés&quot;</extracomment>
<translation>Changes have been saved</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="209"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="215"/>
<source>captcha_validation_loading_message</source>
<extracomment>&quot;Veuillez valider le captcha sur la page web&quot;</extracomment>
<translation>Please validate the captcha on the web page</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="217"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="223"/>
<source>assistant_register_error_title</source>
<extracomment>&quot;Erreur lors de la création&quot;</extracomment>
<translation>Error while creating</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="236"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="242"/>
<source>assistant_register_success_title</source>
<extracomment>&quot;Compte créé&quot;</extracomment>
<translation>Account created</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="238"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="244"/>
<source>assistant_register_success_message</source>
<extracomment>&quot;Le compte a é créé. Vous pouvez maintenant vous connecter&quot;</extracomment>
<translation>The account has been created. You can now log in.</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="242"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="248"/>
<source>assistant_register_error_code</source>
<extracomment>&quot;Erreur dans le code de validation&quot;</extracomment>
<translation>Error in validation code</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="243"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
<source>information_popup_error_title</source>
<translation>Error</translation>
</message>
@ -3718,152 +3719,152 @@ Only your correspondent can decrypt them.</translation>
<translation>No meeting</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="78"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="89"/>
<source>meeting_schedule_cancel_dialog_message</source>
<extracomment>&quot;Souhaitez-vous annuler et supprimer cette réunion ?&quot;</extracomment>
<translation>Would you like to cancel and delete this meeting?</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="80"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="91"/>
<source>meeting_schedule_delete_dialog_message</source>
<extracomment>Souhaitez-vous supprimer cette réunion ?</extracomment>
<translation>Would you like to delete this meeting?</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="86"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="97"/>
<source>meeting_schedule_cancel_and_delete_action</source>
<extracomment>&quot;Annuler et supprimer&quot;</extracomment>
<translation>Cancel and delete</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="95"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="106"/>
<source>meeting_schedule_delete_only_action</source>
<extracomment>&quot;Supprimer seulement&quot;</extracomment>
<translation>Delete only</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="97"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="108"/>
<source>meeting_schedule_delete_action</source>
<extracomment>&quot;Supprimer&quot;</extracomment>
<translation>Delete</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="106"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="117"/>
<source>back_action</source>
<extracomment>Retour</extracomment>
<translation>Back</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="149"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="160"/>
<source>meetings_list_title</source>
<extracomment>Réunions</extracomment>
<translation>Meetings</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="173"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="184"/>
<source>meetings_search_hint</source>
<extracomment>&quot;Rechercher une réunion&quot;</extracomment>
<translation>Find meeting</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="190"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="201"/>
<source>list_filter_no_result_found</source>
<extracomment>&quot;Aucun résultat&quot;</extracomment>
<translation>No result</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="192"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="203"/>
<source>meetings_empty_list</source>
<extracomment>&quot;Aucune réunion&quot;</extracomment>
<translation>No meeting</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="255"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="304"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="266"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="315"/>
<source>meeting_schedule_title</source>
<extracomment>&quot;Nouvelle réunion&quot;</extracomment>
<translation>New meeting</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="266"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="277"/>
<source>create</source>
<translation>Create</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="273"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="277"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="316"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="418"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="421"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="470"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="284"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="288"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="327"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="429"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="432"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="481"/>
<source>information_popup_error_title</source>
<translation>Error</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="275"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="419"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="286"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="430"/>
<source>meeting_schedule_mandatory_field_not_filled_toast</source>
<extracomment>Veuillez saisir un titre et sélectionner au moins un participant</extracomment>
<translation>Please fill the title and select at least one participant</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="279"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="422"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="290"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="433"/>
<source>meeting_schedule_duration_error_toast</source>
<extracomment>&quot;La fin de la conférence doit être plus récente que son début&quot;</extracomment>
<translation>The end of the conference must be more recent than its beginning</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="283"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="311"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="294"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="322"/>
<source>meeting_schedule_creation_in_progress</source>
<extracomment>&quot;Création de la réunion en cours &quot;</extracomment>
<translation>Creation in progress</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="306"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="317"/>
<source>meeting_info_created_toast</source>
<extracomment>&quot;Réunion planifiée avec succès&quot;</extracomment>
<translation>Meeting successfully created</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="318"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="329"/>
<source>meeting_failed_to_schedule_toast</source>
<extracomment>&quot;Échec de création de la réunion !&quot;</extracomment>
<translation>Failed to create meeting!</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="411"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="422"/>
<source>save</source>
<translation>Save</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="461"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="688"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="472"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="699"/>
<source>saved</source>
<extracomment>&quot;Enregistré&quot;</extracomment>
<translation>Saved</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="463"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="474"/>
<source>meeting_info_updated_toast</source>
<extracomment>&quot;Réunion mise à jour&quot;</extracomment>
<translation>Meeting updated</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="468"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="479"/>
<source>meeting_schedule_edit_in_progress</source>
<extracomment>&quot;Modification de la réunion en cours&quot;</extracomment>
<translation>Meeting update in progress</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="472"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="483"/>
<source>meeting_failed_to_edit_toast</source>
<extracomment>&quot;Échec de la modification de la réunion !&quot;</extracomment>
<translation>Failed to update meeting !</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="509"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="520"/>
<source>meeting_schedule_add_participants_title</source>
<extracomment>&quot;Ajouter des participants&quot;</extracomment>
<translation>Add participants</translation>
@ -3875,12 +3876,12 @@ Only your correspondent can decrypt them.</translation>
<translation>Apply</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="524"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="535"/>
<source>add</source>
<translation>Add</translation>
</message>
<message numerus="yes">
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="534"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="545"/>
<source>group_call_participant_selected</source>
<extracomment>&quot;%n participant(s) sélectionné(s)&quot;</extracomment>
<translation>
@ -3889,31 +3890,31 @@ Only your correspondent can decrypt them.</translation>
</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="619"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="630"/>
<source>meeting_info_delete</source>
<extracomment>&quot;Supprimer la réunion&quot;</extracomment>
<translation>Delete meeting</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="690"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="701"/>
<source>meeting_address_copied_to_clipboard_toast</source>
<extracomment>&quot;Adresse de la réunion copiée&quot;</extracomment>
<translation>Meeting URI copied</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="725"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="736"/>
<source>meeting_schedule_timezone_title</source>
<extracomment>&quot;Fuseau horaire&quot;</extracomment>
<translation>Timezone</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="818"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="829"/>
<source>meeting_info_organizer_label</source>
<extracomment>&quot;Organisateur&quot;</extracomment>
<translation>Organizer</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="835"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="846"/>
<source>meeting_info_join_title</source>
<extracomment>&quot;Rejoindre la réunion&quot;</extracomment>
<translation>Join meeting</translation>
@ -3941,15 +3942,30 @@ Only your correspondent can decrypt them.</translation>
</message>
</context>
<context>
<name>MessageReactionsInfos</name>
<name>MessageImdnStatusInfos</name>
<message>
<location filename="../../view/Page/Layout/Chat/MessageReactionsInfos.qml" line="28"/>
<source>message_details_status title</source>
<location filename="../../view/Page/Layout/Chat/MessageImdnStatusInfos.qml" line="11"/>
<source>message_details_status_title</source>
<extracomment>Message status</extracomment>
<translation>Message status</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/MessageReactionsInfos.qml" line="91"/>
<location filename="../../view/Page/Layout/Chat/MessageImdnStatusInfos.qml" line="47"/>
<source>click_to_delete_reaction_info</source>
<extracomment>Click to delete</extracomment>
<translation>Click to delete</translation>
</message>
</context>
<context>
<name>MessageReactionsInfos</name>
<message>
<location filename="../../view/Page/Layout/Chat/MessageReactionsInfos.qml" line="12"/>
<source>message_details_reactions_title</source>
<extracomment>Reactions</extracomment>
<translation>Reactions</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/MessageReactionsInfos.qml" line="59"/>
<source>click_to_delete_reaction_info</source>
<extracomment>Click to delete</extracomment>
<translation>Click to delete</translation>
@ -4355,31 +4371,91 @@ Only your correspondent can decrypt them.</translation>
<translation>Post quantum ZRTP</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="184"/>
<location filename="../../tool/LinphoneEnums.cpp" line="125"/>
<source>message_state_in_progress</source>
<extracomment>&quot;delivery in progress&quot;</extracomment>
<translation>delivery in progress</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="128"/>
<source>message_state_delivered</source>
<extracomment>sent</extracomment>
<translation>sent</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="131"/>
<source>message_state_not_delivered</source>
<extracomment>error</extracomment>
<translation>error</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="134"/>
<source>message_state_file_transfer_error</source>
<extracomment>cannot get file from server</extracomment>
<translation>cannot get file from server</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="137"/>
<source>message_state_file_transfer_done</source>
<extracomment>file transfer has been completed successfully</extracomment>
<translation>file transfer has been completed successfully</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="140"/>
<source>message_state_delivered_to_user</source>
<extracomment>received</extracomment>
<translation>received</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="143"/>
<source>message_state_displayed</source>
<extracomment>read</extracomment>
<translation>read</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="146"/>
<source>message_state_file_transfer__in_progress</source>
<extracomment>file transfer in progress</extracomment>
<translation>file transfer in progress</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="149"/>
<source>message_state_pending_delivery</source>
<extracomment>pending delivery</extracomment>
<translation>pending delivery</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="152"/>
<source>message_state_file_transfer_cancelling</source>
<extracomment>file transfer canceled</extracomment>
<translation>file transfer canceled</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="219"/>
<source>incoming</source>
<extracomment>&quot;Entrant&quot;</extracomment>
<translation>Incoming</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="187"/>
<location filename="../../tool/LinphoneEnums.cpp" line="222"/>
<source>outgoing</source>
<extracomment>&quot;Sortant&quot;</extracomment>
<translation>Outgoing</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="213"/>
<location filename="../../tool/LinphoneEnums.cpp" line="248"/>
<source>conference_layout_active_speaker</source>
<extracomment>&quot;Participant actif&quot;</extracomment>
<translation>Active speaker</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="215"/>
<location filename="../../tool/LinphoneEnums.cpp" line="250"/>
<source>conference_layout_grid</source>
<extracomment>&quot;Mosaïque&quot;</extracomment>
<translation>Grid</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="217"/>
<location filename="../../tool/LinphoneEnums.cpp" line="252"/>
<source>conference_layout_audio_only</source>
<extracomment>&quot;Audio uniquement&quot;</extracomment>
<translation>Audio only</translation>

View file

@ -13,13 +13,13 @@
<context>
<name>AbstractWindow</name>
<message>
<location filename="../../view/Page/Window/AbstractWindow.qml" line="78"/>
<location filename="../../view/Page/Window/AbstractWindow.qml" line="80"/>
<source>contact_dialog_pick_phone_number_or_sip_address_title</source>
<extracomment>&quot;Choisissez un numéro ou adresse SIP&quot;</extracomment>
<translation>Choisissez un numéro ou adresse SIP</translation>
</message>
<message>
<location filename="../../view/Page/Window/AbstractWindow.qml" line="277"/>
<location filename="../../view/Page/Window/AbstractWindow.qml" line="279"/>
<source>fps_counter</source>
<translation>%1 FPS</translation>
</message>
@ -523,7 +523,7 @@
<context>
<name>App</name>
<message>
<location filename="../../core/App.cpp" line="338"/>
<location filename="../../core/App.cpp" line="337"/>
<source>remote_provisioning_dialog</source>
<extracomment>Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</extracomment>
<translation>Voulez-vous télécharger et appliquer la configuration depuis cette adresse ?</translation>
@ -1720,18 +1720,18 @@
<context>
<name>ChatListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="269"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="270"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 est en train d&apos;écrire</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="271"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="272"/>
<source>chat_message_draft_sending_text</source>
<translation>Brouillon : %1</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="340"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="341"/>
<source>chat_room_delete</source>
<extracomment>&quot;Supprimer&quot;</extracomment>
<translation>Supprimer</translation>
@ -1749,13 +1749,13 @@
<translation>Enlever la sourdine </translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="346"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="347"/>
<source>chat_list_delete_chat_popup_title</source>
<extracomment>Delete the conversation ?</extracomment>
<translation>Supprimer la conversation ?</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="348"/>
<location filename="../../view/Control/Display/Chat/ChatListView.qml" line="349"/>
<source>chat_list_delete_chat_popup_message</source>
<extracomment>This conversation and all its messages will be deleted. Do You want to continue ?</extracomment>
<translation>La conversation et tous ses messages seront supprimés. Souhaitez-vous continuer ?</translation>
@ -1764,31 +1764,37 @@
<context>
<name>ChatMessage</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="238"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="239"/>
<source>chat_message_copy_selection</source>
<extracomment>&quot;Copy selection&quot;</extracomment>
<translation>Copier la sélection</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="240"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="241"/>
<source>chat_message_copy</source>
<extracomment>&quot;Copy&quot;</extracomment>
<translation>Copier</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="248"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="249"/>
<source>chat_message_copied_to_clipboard_title</source>
<extracomment>Copied</extracomment>
<translation>Copié</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="250"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="251"/>
<source>chat_message_copied_to_clipboard_toast</source>
<extracomment>&quot;to clipboard&quot;</extracomment>
<translation>dans le presse-papiers</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="256"/>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="257"/>
<source>chat_message_see_status</source>
<extracomment>&quot;See message status&quot;</extracomment>
<translation>Voir les statuts du message</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="273"/>
<source>chat_message_delete</source>
<extracomment>&quot;Delete&quot;</extracomment>
<translation>Supprimer</translation>
@ -1878,19 +1884,19 @@ Error</extracomment>
<context>
<name>ChatMessageCore</name>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="101"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="127"/>
<source>all_reactions_label</source>
<extracomment>&quot;Reactions&quot;: all reactions for one message label</extracomment>
<translation>Réactions</translation>
</message>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="145"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="173"/>
<source>info_toast_deleted_title</source>
<extracomment>Deleted</extracomment>
<translation>Supprimé</translation>
</message>
<message>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="147"/>
<location filename="../../core/chat/message/ChatMessageCore.cpp" line="175"/>
<source>info_toast_deleted_message</source>
<extracomment>The message has been deleted</extracomment>
<translation>Le message a é supprimé</translation>
@ -1943,13 +1949,13 @@ Error</extracomment>
<context>
<name>ChatMessagesListView</name>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="90"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="91"/>
<source>chat_message_list_encrypted_header_title</source>
<extracomment>End to end encrypted chat</extracomment>
<translation>Conversation chiffrée de bout en bout</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="100"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="101"/>
<source>chat_message_list_encrypted_header_message</source>
<extracomment>Les messages de cette conversation sont chiffrés de bout
en bout. Seul votre correspondant peut les déchiffrer.</extracomment>
@ -1957,7 +1963,7 @@ Error</extracomment>
en bout. Seul votre correspondant peut les déchiffrer.</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="184"/>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="186"/>
<source>chat_message_is_writing_info</source>
<extracomment>%1 is writing</extracomment>
<translation>%1 est en train d&apos;écrire</translation>
@ -3012,7 +3018,7 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<translation>Appliquer</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="129"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="130"/>
<source>group_infos_call</source>
<extracomment>&quot;Appel&quot;</extracomment>
<translation>Appel</translation>
@ -3030,77 +3036,72 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<translation>Réactiver les notifications</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="139"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="141"/>
<source>group_infos_meeting</source>
<extracomment>&quot;Réunion&quot;</extracomment>
<translation>Réunion</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="162"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="164"/>
<source>group_infos_participants</source>
<translation>Participants (%1)</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="169"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="174"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="171"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="176"/>
<source>group_infos_media_docs</source>
<translation>Medias &amp; documents</translation>
</message>
<message>
<source>group_infos_shared_media</source>
<extracomment>Shared medias</extracomment>
<translation type="vanished">Médias partagés</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="184"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="186"/>
<source>group_infos_shared_docs</source>
<translation>Documents partagés</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="196"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="198"/>
<source>group_infos_other_actions</source>
<translation>Autres actions</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="201"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="203"/>
<source>group_infos_enable_ephemerals</source>
<translation>Activer les messages éphémères</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="201"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="203"/>
<source>group_infos_disable_ephemerals</source>
<translation>Désactiver les messages éphémères</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="230"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="232"/>
<source>group_infos_delete_history</source>
<translation>Supprimer l&apos;historique</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="235"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="237"/>
<source>group_infos_delete_history_toast_title</source>
<extracomment>Delete history ?</extracomment>
<translation>Supprimer l&apos;historique ?</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="237"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="239"/>
<source>group_infos_delete_history_toast_message</source>
<extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment>
<translation>Tous les messages seront supprimés. Souhaitez-vous continuer ?</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="211"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="213"/>
<source>group_infos_leave_room</source>
<translation>Quitter la conversation</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="216"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="218"/>
<source>group_infos_leave_room_toast_title</source>
<extracomment>Leave Chat Room ?</extracomment>
<translation>Quitter la conversation ?</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="218"/>
<location filename="../../view/Page/Layout/Chat/GroupConversationInfos.qml" line="220"/>
<source>group_infos_leave_room_toast_message</source>
<extracomment>All the messages will be removed from the chat room. Do you want to continue ?</extracomment>
<translation>Vous ne recevrez ni pourrez envoyer des messages dans cette conversation, quitter ?</translation>
@ -3469,102 +3470,102 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<context>
<name>MainLayout</name>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="143"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="147"/>
<source>bottom_navigation_calls_label</source>
<extracomment>&quot;Appels&quot;</extracomment>
<translation>Appels</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="148"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="152"/>
<source>bottom_navigation_contacts_label</source>
<extracomment>&quot;Contacts&quot;</extracomment>
<translation>Contacts</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="153"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="157"/>
<source>bottom_navigation_conversations_label</source>
<extracomment>&quot;Conversations&quot;</extracomment>
<translation>Conversations</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="159"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="163"/>
<source>bottom_navigation_meetings_label</source>
<extracomment>&quot;Réunions&quot;</extracomment>
<translation>Réunions</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="206"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="210"/>
<source>searchbar_placeholder_text</source>
<extracomment>&quot;Rechercher un contact, appeler %1&quot;</extracomment>
<translation>Rechercher un contact, appeler %1</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="209"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="213"/>
<source>searchbar_placeholder_text_chat_feature_enabled</source>
<extracomment>&quot;ou envoyer un message &quot;</extracomment>
<translation>ou envoyer un message </translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="315"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="449"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="319"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="453"/>
<source>contact_presence_status_disable_do_not_disturb</source>
<extracomment>&quot;Désactiver ne pas déranger&quot;</extracomment>
<translation>Désactiver ne pas déranger</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="371"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="375"/>
<source>information_popup_error_title</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="373"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="377"/>
<source>no_voicemail_uri_error_message</source>
<extracomment>&quot;L&apos;URI de messagerie vocale n&apos;est pas définie.&quot;</extracomment>
<translation>L&apos;URI de messagerie vocale n&apos;est pas définie.</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="433"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="437"/>
<source>drawer_menu_manage_account</source>
<extracomment>Mon compte</extracomment>
<translation>Mon compte</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="451"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="455"/>
<source>contact_presence_status_enable_do_not_disturb</source>
<extracomment>&quot;Activer ne pas déranger&quot;</extracomment>
<translation>Activer ne pas déranger</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="470"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="474"/>
<source>settings_title</source>
<translation>Paramètres</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="488"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="492"/>
<source>recordings_title</source>
<extracomment>&quot;Enregistrements&quot;</extracomment>
<translation>Enregistrements</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="503"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="507"/>
<source>help_title</source>
<extracomment>&quot;Aide&quot;</extracomment>
<translation>Aide</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="520"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="524"/>
<source>help_quit_title</source>
<extracomment>&quot;Quitter l&apos;application&quot;</extracomment>
<translation>Quitter l&apos;application</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="525"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="529"/>
<source>quit_app_question</source>
<extracomment>&quot;Quitter %1 ?&quot;</extracomment>
<translation>Quitter %1 ?</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="554"/>
<location filename="../../view/Page/Layout/Main/MainLayout.qml" line="558"/>
<source>drawer_menu_add_account</source>
<extracomment>&quot;Ajouter un compte&quot;</extracomment>
<translation>Ajouter un compte</translation>
@ -3573,78 +3574,78 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<context>
<name>MainWindow</name>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="41"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="42"/>
<source>information_popup_connexion_succeed_title</source>
<extracomment>&quot;Connexion réussie&quot;</extracomment>
<translation>Connexion réussie</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="43"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="44"/>
<source>information_popup_connexion_succeed_message</source>
<extracomment>&quot;Vous êtes connecté en mode %1&quot;</extracomment>
<translation>Vous êtes connecté en mode %1</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="45"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="46"/>
<source>interoperable</source>
<extracomment>interopérable</extracomment>
<translation>interopérable</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="74"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="75"/>
<source>call_transfer_successful_toast_title</source>
<extracomment>&quot;Appel transféré&quot;</extracomment>
<translation>Appel transféré</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="76"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="77"/>
<source>call_transfer_successful_toast_message</source>
<extracomment>&quot;Votre correspondant a é transféré au contact sélectionné&quot;</extracomment>
<translation>Votre correspondant a é transféré au contact sélectionné</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="122"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="128"/>
<source>information_popup_success_title</source>
<translation>Enregistré</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="124"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="130"/>
<source>information_popup_changes_saved</source>
<extracomment>&quot;Les changements ont é sauvegardés&quot;</extracomment>
<translation>Les changements ont é sauvegardés</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="209"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="215"/>
<source>captcha_validation_loading_message</source>
<extracomment>&quot;Veuillez valider le captcha sur la page web&quot;</extracomment>
<translation>Veuillez valider le captcha sur la page web</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="217"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="223"/>
<source>assistant_register_error_title</source>
<extracomment>&quot;Erreur lors de la création&quot;</extracomment>
<translation>Erreur lors de la création</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="236"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="242"/>
<source>assistant_register_success_title</source>
<extracomment>&quot;Compte créé&quot;</extracomment>
<translation>Compte créé</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="238"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="244"/>
<source>assistant_register_success_message</source>
<extracomment>&quot;Le compte a é créé. Vous pouvez maintenant vous connecter&quot;</extracomment>
<translation>Le compte a é créé. Vous pouvez maintenant vous connecter</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="242"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="248"/>
<source>assistant_register_error_code</source>
<extracomment>&quot;Erreur dans le code de validation&quot;</extracomment>
<translation>Erreur dans le code de validation</translation>
</message>
<message>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="243"/>
<location filename="../../view/Page/Window/Main/MainWindow.qml" line="249"/>
<source>information_popup_error_title</source>
<translation>Erreur</translation>
</message>
@ -3718,152 +3719,152 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<translation>Aucune réunion</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="78"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="89"/>
<source>meeting_schedule_cancel_dialog_message</source>
<extracomment>&quot;Souhaitez-vous annuler et supprimer cette réunion ?&quot;</extracomment>
<translation>Souhaitez-vous annuler et supprimer cette réunion ?</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="80"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="91"/>
<source>meeting_schedule_delete_dialog_message</source>
<extracomment>Souhaitez-vous supprimer cette réunion ?</extracomment>
<translation>Souhaitez-vous supprimer cette réunion ?</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="86"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="97"/>
<source>meeting_schedule_cancel_and_delete_action</source>
<extracomment>&quot;Annuler et supprimer&quot;</extracomment>
<translation>Annuler et supprimer</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="95"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="106"/>
<source>meeting_schedule_delete_only_action</source>
<extracomment>&quot;Supprimer seulement&quot;</extracomment>
<translation>Supprimer seulement</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="97"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="108"/>
<source>meeting_schedule_delete_action</source>
<extracomment>&quot;Supprimer&quot;</extracomment>
<translation>Supprimer</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="106"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="117"/>
<source>back_action</source>
<extracomment>Retour</extracomment>
<translation>Retour</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="149"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="160"/>
<source>meetings_list_title</source>
<extracomment>Réunions</extracomment>
<translation>Réunions</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="173"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="184"/>
<source>meetings_search_hint</source>
<extracomment>&quot;Rechercher une réunion&quot;</extracomment>
<translation>Rechercher une réunion</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="190"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="201"/>
<source>list_filter_no_result_found</source>
<extracomment>&quot;Aucun résultat&quot;</extracomment>
<translation>Aucun résultat</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="192"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="203"/>
<source>meetings_empty_list</source>
<extracomment>&quot;Aucune réunion&quot;</extracomment>
<translation>Aucune réunion</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="255"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="304"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="266"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="315"/>
<source>meeting_schedule_title</source>
<extracomment>&quot;Nouvelle réunion&quot;</extracomment>
<translation>Nouvelle réunion</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="266"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="277"/>
<source>create</source>
<translation>Créer</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="273"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="277"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="316"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="418"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="421"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="470"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="284"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="288"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="327"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="429"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="432"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="481"/>
<source>information_popup_error_title</source>
<translation>Erreur</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="275"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="419"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="286"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="430"/>
<source>meeting_schedule_mandatory_field_not_filled_toast</source>
<extracomment>Veuillez saisir un titre et sélectionner au moins un participant</extracomment>
<translation>Veuillez saisir un titre et sélectionner au moins un participant</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="279"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="422"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="290"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="433"/>
<source>meeting_schedule_duration_error_toast</source>
<extracomment>&quot;La fin de la conférence doit être plus récente que son début&quot;</extracomment>
<translation>La fin de la conférence doit être plus récente que son début</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="283"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="311"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="294"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="322"/>
<source>meeting_schedule_creation_in_progress</source>
<extracomment>&quot;Création de la réunion en cours &quot;</extracomment>
<translation>Création de la réunion en cours</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="306"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="317"/>
<source>meeting_info_created_toast</source>
<extracomment>&quot;Réunion planifiée avec succès&quot;</extracomment>
<translation>Réunion planifiée avec succès</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="318"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="329"/>
<source>meeting_failed_to_schedule_toast</source>
<extracomment>&quot;Échec de création de la réunion !&quot;</extracomment>
<translation>Échec de création de la réunion !</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="411"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="422"/>
<source>save</source>
<translation>Enregistrer</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="461"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="688"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="472"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="699"/>
<source>saved</source>
<extracomment>&quot;Enregistré&quot;</extracomment>
<translation>Enregistré</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="463"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="474"/>
<source>meeting_info_updated_toast</source>
<extracomment>&quot;Réunion mise à jour&quot;</extracomment>
<translation>Réunion mise à jour</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="468"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="479"/>
<source>meeting_schedule_edit_in_progress</source>
<extracomment>&quot;Modification de la réunion en cours&quot;</extracomment>
<translation>Modification de la réunion en cours</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="472"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="483"/>
<source>meeting_failed_to_edit_toast</source>
<extracomment>&quot;Échec de la modification de la réunion !&quot;</extracomment>
<translation>Échec de la modification de la réunion !</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="509"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="520"/>
<source>meeting_schedule_add_participants_title</source>
<extracomment>&quot;Ajouter des participants&quot;</extracomment>
<translation>Ajouter des participants</translation>
@ -3875,12 +3876,12 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<translation>Appliquer</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="524"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="535"/>
<source>add</source>
<translation>Ajouter</translation>
</message>
<message numerus="yes">
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="534"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="545"/>
<source>group_call_participant_selected</source>
<extracomment>&quot;%n participant(s) sélectionné(s)&quot;</extracomment>
<translation>
@ -3889,31 +3890,31 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="619"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="630"/>
<source>meeting_info_delete</source>
<extracomment>&quot;Supprimer la réunion&quot;</extracomment>
<translation>Supprimer la réunion</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="690"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="701"/>
<source>meeting_address_copied_to_clipboard_toast</source>
<extracomment>&quot;Adresse de la réunion copiée&quot;</extracomment>
<translation>Adresse de la réunion copiée</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="725"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="736"/>
<source>meeting_schedule_timezone_title</source>
<extracomment>&quot;Fuseau horaire&quot;</extracomment>
<translation>Fuseau horaire</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="818"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="829"/>
<source>meeting_info_organizer_label</source>
<extracomment>&quot;Organisateur&quot;</extracomment>
<translation>Organisateur</translation>
</message>
<message>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="835"/>
<location filename="../../view/Page/Main/Meeting/MeetingPage.qml" line="846"/>
<source>meeting_info_join_title</source>
<extracomment>&quot;Rejoindre la réunion&quot;</extracomment>
<translation>Rejoindre la réunion</translation>
@ -3941,15 +3942,30 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
</message>
</context>
<context>
<name>MessageReactionsInfos</name>
<name>MessageImdnStatusInfos</name>
<message>
<location filename="../../view/Page/Layout/Chat/MessageReactionsInfos.qml" line="28"/>
<source>message_details_status title</source>
<location filename="../../view/Page/Layout/Chat/MessageImdnStatusInfos.qml" line="11"/>
<source>message_details_status_title</source>
<extracomment>Message status</extracomment>
<translation>Statut du message</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/MessageReactionsInfos.qml" line="91"/>
<location filename="../../view/Page/Layout/Chat/MessageImdnStatusInfos.qml" line="47"/>
<source>click_to_delete_reaction_info</source>
<extracomment>Click to delete</extracomment>
<translation>Appuyez pour supprimer</translation>
</message>
</context>
<context>
<name>MessageReactionsInfos</name>
<message>
<location filename="../../view/Page/Layout/Chat/MessageReactionsInfos.qml" line="12"/>
<source>message_details_reactions_title</source>
<extracomment>Reactions</extracomment>
<translation>Réactions</translation>
</message>
<message>
<location filename="../../view/Page/Layout/Chat/MessageReactionsInfos.qml" line="59"/>
<source>click_to_delete_reaction_info</source>
<extracomment>Click to delete</extracomment>
<translation>Appuyez pour supprimer</translation>
@ -4355,31 +4371,91 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<translation>ZRTP - Post quantique</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="184"/>
<location filename="../../tool/LinphoneEnums.cpp" line="125"/>
<source>message_state_in_progress</source>
<extracomment>&quot;delivery in progress&quot;</extracomment>
<translation>envoi en cours</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="128"/>
<source>message_state_delivered</source>
<extracomment>sent</extracomment>
<translation>envoyé</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="131"/>
<source>message_state_not_delivered</source>
<extracomment>error</extracomment>
<translation>en erreur</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="134"/>
<source>message_state_file_transfer_error</source>
<extracomment>cannot get file from server</extracomment>
<translation>impossible de récupérer le fichier depuis le serveur</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="137"/>
<source>message_state_file_transfer_done</source>
<extracomment>file transfer has been completed successfully</extracomment>
<translation>fichier transféré avec succès</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="140"/>
<source>message_state_delivered_to_user</source>
<extracomment>received</extracomment>
<translation>reçu</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="143"/>
<source>message_state_displayed</source>
<extracomment>read</extracomment>
<translation>lu</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="146"/>
<source>message_state_file_transfer__in_progress</source>
<extracomment>file transfer in progress</extracomment>
<translation>transfert du fichier en cours</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="149"/>
<source>message_state_pending_delivery</source>
<extracomment>pending delivery</extracomment>
<translation>envoi en attente</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="152"/>
<source>message_state_file_transfer_cancelling</source>
<extracomment>file transfer canceled</extracomment>
<translation>transfert du fichier annulé</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="219"/>
<source>incoming</source>
<extracomment>&quot;Entrant&quot;</extracomment>
<translation>Entrant</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="187"/>
<location filename="../../tool/LinphoneEnums.cpp" line="222"/>
<source>outgoing</source>
<extracomment>&quot;Sortant&quot;</extracomment>
<translation>Sortant</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="213"/>
<location filename="../../tool/LinphoneEnums.cpp" line="248"/>
<source>conference_layout_active_speaker</source>
<extracomment>&quot;Participant actif&quot;</extracomment>
<translation>Intervenant actif</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="215"/>
<location filename="../../tool/LinphoneEnums.cpp" line="250"/>
<source>conference_layout_grid</source>
<extracomment>&quot;Mosaïque&quot;</extracomment>
<translation>Mosaïque</translation>
</message>
<message>
<location filename="../../tool/LinphoneEnums.cpp" line="217"/>
<location filename="../../tool/LinphoneEnums.cpp" line="252"/>
<source>conference_layout_audio_only</source>
<extracomment>&quot;Audio uniquement&quot;</extracomment>
<translation>Audio uniquement</translation>

View file

@ -118,6 +118,41 @@ LinphoneEnums::ChatMessageState LinphoneEnums::fromLinphone(const linphone::Chat
return static_cast<LinphoneEnums::ChatMessageState>(data);
}
QString LinphoneEnums::toString(const LinphoneEnums::ChatMessageState &data) {
switch (data) {
case LinphoneEnums::ChatMessageState::StateInProgress:
//: "delivery in progress"
return QObject::tr("message_state_in_progress");
case LinphoneEnums::ChatMessageState::StateDelivered:
//: sent
return QObject::tr("message_state_delivered");
case LinphoneEnums::ChatMessageState::StateNotDelivered:
//: error
return QObject::tr("message_state_not_delivered");
case LinphoneEnums::ChatMessageState::StateFileTransferError:
//: cannot get file from server
return QObject::tr("message_state_file_transfer_error");
case LinphoneEnums::ChatMessageState::StateFileTransferDone:
//: file transfer has been completed successfully
return QObject::tr("message_state_file_transfer_done");
case LinphoneEnums::ChatMessageState::StateDeliveredToUser:
//: received
return QObject::tr("message_state_delivered_to_user");
case LinphoneEnums::ChatMessageState::StateDisplayed:
//: read
return QObject::tr("message_state_displayed");
case LinphoneEnums::ChatMessageState::StateFileTransferInProgress:
//: file transfer in progress
return QObject::tr("message_state_file_transfer__in_progress");
case LinphoneEnums::ChatMessageState::StatePendingDelivery:
//: pending delivery
return QObject::tr("message_state_pending_delivery");
case LinphoneEnums::ChatMessageState::StateFileTransferCancelling:
//: file transfer canceled
return QObject::tr("message_state_file_transfer_cancelling");
}
}
linphone::ChatRoom::State LinphoneEnums::toLinphone(const LinphoneEnums::ChatRoomState &data) {
return static_cast<linphone::ChatRoom::State>(data);
}

View file

@ -97,12 +97,15 @@ enum class ChatMessageState {
StateFileTransferDone = int(linphone::ChatMessage::State::FileTransferDone),
StateDeliveredToUser = int(linphone::ChatMessage::State::DeliveredToUser),
StateDisplayed = int(linphone::ChatMessage::State::Displayed),
StateFileTransferInProgress = int(linphone::ChatMessage::State::FileTransferInProgress)
StateFileTransferInProgress = int(linphone::ChatMessage::State::FileTransferInProgress),
StatePendingDelivery = int(linphone::ChatMessage::State::PendingDelivery),
StateFileTransferCancelling = int(linphone::ChatMessage::State::FileTransferCancelling)
};
Q_ENUM_NS(ChatMessageState)
linphone::ChatMessage::State toLinphone(const LinphoneEnums::ChatMessageState &data);
LinphoneEnums::ChatMessageState fromLinphone(const linphone::ChatMessage::State &data);
QString toString(const LinphoneEnums::ChatMessageState &data);
enum class ChatRoomState {
None = int(linphone::ChatRoom::State::None),

View file

@ -329,7 +329,8 @@ QString Utils::formatElapsedTime(int seconds, bool dotsSeparator) {
else return (h == 0 ? "" : hours + "h ") + (m == 0 ? "" : min + "min ") + sec + "s";
}
QString Utils::formatDate(const QDateTime &date, bool includeTime, bool includeDateIfToday, QString format) {
QString Utils::formatDate(QDateTime date, bool includeTime, bool includeDateIfToday, QString format) {
date = getOffsettedUTC(date);
QString dateDay;
//: "Aujourd'hui"
if (date.date() == QDate::currentDate()) dateDay = tr("today");

View file

@ -90,7 +90,7 @@ public:
Q_INVOKABLE static QString createAvatar(const QUrl &fileUrl); // Return the avatar path
Q_INVOKABLE static QString formatElapsedTime(int seconds,
bool dotsSeparator = true); // Return the elapsed time formated
Q_INVOKABLE static QString formatDate(const QDateTime &date,
Q_INVOKABLE static QString formatDate(QDateTime date,
bool includeTime = true,
bool includeDateIfToday = true,
QString format = ""); // Return the date formated

View file

@ -154,6 +154,8 @@ list(APPEND _LINPHONEAPP_QML_FILES
view/Page/Layout/Settings/NetworkSettingsLayout.qml
view/Page/Layout/Settings/AdvancedSettingsLayout.qml
view/Page/Layout/Chat/GroupConversationInfos.qml
view/Page/Layout/Chat/MessageImdnStatusInfos.qml
view/Page/Layout/Chat/MessageInfosLayout.qml
view/Page/Layout/Chat/MessageReactionsInfos.qml
view/Page/Layout/Chat/OneOneConversationInfos.qml
view/Page/Layout/Chat/ChatInfoActionsGroup.qml

View file

@ -69,8 +69,8 @@ ColumnLayout {
}
}
PresenceNoteLayout {
visible: contact.core.presenceNote.length > 0 && mainItem.useVerticalLayout
friendCore: contact.core
visible: contact?.core.presenceNote.length > 0 && mainItem.useVerticalLayout
friendCore: contact?.core || null
Layout.preferredWidth: 412 * DefaultStyle.dp
Layout.preferredHeight: 85 * DefaultStyle.dp
}
@ -92,10 +92,10 @@ ColumnLayout {
Layout.fillWidth:true
Layout.preferredHeight: 79 * DefaultStyle.dp
color: 'transparent'
visible: contact.core.presenceNote.length > 0 && !mainItem.useVerticalLayout
visible: contact && contact.core.presenceNote.length > 0 && !mainItem.useVerticalLayout
PresenceNoteLayout {
anchors.centerIn: parent
friendCore: contact.core
friendCore: contact?.core || null
width: 412 * DefaultStyle.dp
height: 85 * DefaultStyle.dp
}

View file

@ -57,15 +57,20 @@ Control.TabBar {
delay: 1000
text: modelData
}
MouseArea{
anchors.fill: parent
cursorShape: tabButton.hovered ? Qt.PointingHandCursor: Qt.ArrowCursor
acceptedButtons: Qt.NoButton
}
background: Item {
anchors.fill: parent
visible: mainItem.currentIndex === index || tabButton.hovered
Rectangle {
id: tabBackground
visible: mainItem.currentIndex === index
height: Math.round(5 * DefaultStyle.dp)
color: DefaultStyle.main1_500_main
color: mainItem.currentIndex === index ? DefaultStyle.main1_500_main : DefaultStyle.main2_400
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
@ -86,9 +91,12 @@ Control.TabBar {
contentItem: Text {
id: tabText
width: Math.min(implicitWidth, mainItem.width / mainItem.model.length)
font.weight: mainItem.textWeight
font {
pixelSize: mainItem.pixelSize
weight: mainItem.textWeight
capitalization: Font.Capitalize
}
color: mainItem.currentIndex === index ? DefaultStyle.main2_600 : DefaultStyle.main2_400
font.pixelSize: mainItem.pixelSize
elide: Text.ElideRight
maximumLineCount: 1
text: modelData

View file

@ -29,6 +29,7 @@ Control.Control {
signal messageDeletionRequested()
signal isFileHoveringChanged(bool isFileHovering)
signal showReactionsForMessageRequested()
signal showImdnStatusForMessageRequested()
background: Item {
anchors.fill: parent
@ -241,14 +242,32 @@ Control.Control {
icon.source: AppIcons.copy
// spacing: Math.round(10 * DefaultStyle.dp)
Layout.fillWidth: true
Layout.preferredHeight: 45 * DefaultStyle.dp
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
onClicked: {
var success = UtilsCpp.copyToClipboard(chatBubbleContent.selectedText != "" ? chatBubbleContent.selectedText : mainItem.chatMessage.core.text)
//: Copied
if (success) UtilsCpp.showInformationPopup(qsTr("chat_message_copied_to_clipboard_title"),
//: "to clipboard"
qsTr("chat_message_copied_to_clipboard_toast"))
}
optionsMenu.close()
}
}
IconLabelButton {
inverseLayout: true
//: "See message status"
text: qsTr("chat_message_see_status")
icon.source: AppIcons.chatTeardropText
Layout.fillWidth: true
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
onClicked: {
mainItem.showImdnStatusForMessageRequested()
optionsMenu.close()
}
}
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: Math.min(1, Math.round(1 * DefaultStyle.dp))
color: DefaultStyle.main2_400
}
IconLabelButton {
inverseLayout: true
@ -257,18 +276,13 @@ Control.Control {
icon.source: AppIcons.trashCan
// spacing: Math.round(10 * DefaultStyle.dp)
Layout.fillWidth: true
Layout.preferredHeight: 45 * DefaultStyle.dp
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
onClicked: {
mainItem.messageDeletionRequested()
optionsMenu.close()
}
style: ButtonStyle.hoveredBackgroundRed
}
// Rectangle {
// Layout.fillWidth: true
// Layout.preferredHeight: Math.round(1 * DefaultStyle.dp)
// color: DefaultStyle.main2_200
// }
}
}
PopupButton {

View file

@ -15,6 +15,7 @@ ListView {
property ChatGui chat
property color backgroundColor
signal showReactionsForMessageRequested(ChatMessageGui chatMessage)
signal showImdnStatusForMessageRequested(ChatMessageGui chatMessage)
Component.onCompleted: {
var index = eventLogProxy.findFirstUnreadIndex()
@ -135,6 +136,7 @@ ListView {
onMessageDeletionRequested: modelData.core.lDelete()
onShowReactionsForMessageRequested: mainItem.showReactionsForMessageRequested(modelData)
onShowImdnStatusForMessageRequested: mainItem.showImdnStatusForMessageRequested(modelData)
}
}

View file

@ -156,6 +156,11 @@ RowLayout {
contentLoader.showingMessageReactions = true
detailsPanel.visible = true
}
onShowImdnStatusForMessageRequested: (chatMessage) => {
mainItem.chatMessage = chatMessage
contentLoader.showingImdnStatus = true
detailsPanel.visible = true
}
Popup {
id: emojiPickerPopup
@ -322,7 +327,10 @@ RowLayout {
visible: false
Layout.fillHeight: true
Layout.preferredWidth: Math.round(387 * DefaultStyle.dp)
onVisibleChanged: if(!visible) contentLoader.showingMessageReactions = false
onVisibleChanged: if(!visible) {
contentLoader.showingMessageReactions = false
contentLoader.showingImdnStatus = false
}
background: Rectangle {
color: DefaultStyle.grey_0
@ -332,13 +340,16 @@ RowLayout {
contentItem: Loader {
id: contentLoader
property bool showingMessageReactions: false
property bool showingImdnStatus: false
anchors.top: parent.top
anchors.topMargin: Math.round(39 * DefaultStyle.dp)
sourceComponent: showingMessageReactions
? messageReactionsComponent
: mainItem.chat.core.isGroupChat
? groupInfoComponent
: oneToOneInfoComponent
: showingImdnStatus
? messageImdnStatusComponent
: mainItem.chat.core.isGroupChat
? groupInfoComponent
: oneToOneInfoComponent
active: detailsPanel.visible
onLoaded: {
if (contentLoader.item) {
@ -371,5 +382,15 @@ RowLayout {
}
}
}
Component {
id: messageImdnStatusComponent
MessageImdnStatusInfos {
chatMessageGui: mainItem.chatMessage
onGoBackRequested: {
detailsPanel.visible = false
mainItem.chatMessage = null
}
}
}
}
}

View file

@ -0,0 +1,74 @@
import QtCore
import QtQuick
import QtQuick.Layouts
import Linphone
import UtilsCpp
MessageInfosLayout {
id: mainItem
spacing: Math.round(25 * DefaultStyle.dp)
//: Message status
title: qsTr("message_details_status_title")
tabbarModel: chatMessageGui ? chatMessageGui.core.imdnStatusListAsString : []
listModel: ImdnStatusProxy {
imdnStatusList: chatMessageGui ? chatMessageGui.core.imdnStatusList : []
filter: chatMessageGui ? chatMessageGui.core.imdnStatusAsSingletons[mainItem.tabbar.currentIndex].state : ""
}
listView.delegate: Item {
id: listDelegate
width: listView.width
height: delegateIn.implicitHeight
property var contactObj: modelData ? UtilsCpp.findFriendByAddress(modelData.address) : null
property FriendGui contact: contactObj && contactObj.value || null
property var nameObj: modelData ? UtilsCpp.getDisplayName(modelData.address) : null
property string updateTime: UtilsCpp.isCurrentDay(modelData.lastUpdatedTime)
? UtilsCpp.toTimeString(modelData.lastUpdatedTime, "hh:mm")
: UtilsCpp.formatDate(modelData.lastUpdatedTime, true)
RowLayout {
id: delegateIn
anchors.fill: parent
spacing: Math.round(16 * DefaultStyle.dp)
Avatar {
Layout.alignment: Qt.AlignHCenter
contact: listDelegate.contact
displayNameVal: contact
? ""
: nameObj
? nameObj.value
: ""
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
}
ColumnLayout {
spacing: 0
Text {
text: nameObj?.value || ""
font {
pixelSize: Typography.p1.pixelSize
weight: Typography.p1.weight
}
}
Text {
visible: listDelegate.contact
horizontalAlignment: Text.AlignLeft
Layout.fillWidth: true
text: listDelegate.contact ? listDelegate.contact.core.presenceStatus : ""
color: listDelegate.contact ? listDelegate.contact.core.presenceColor : 'transparent'
font {
pixelSize: Typography.p3.pixelSize
weight: Typography.p3.weight
}
}
}
Item{Layout.fillWidth: true}
Text {
text: listDelegate.updateTime
font {
pixelSize: Typography.p3.pixelSize
weight: Typography.p3.weight
}
}
}
}
}

View file

@ -0,0 +1,63 @@
import QtCore
import QtQuick
import QtQuick.Controls.Basic as Control
import QtQuick.Dialogs
import QtQuick.Effects
import QtQuick.Layouts
import Linphone
import UtilsCpp
import SettingsCpp
import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle
ColumnLayout {
id: mainItem
property string title
property ChatMessageGui chatMessageGui
property var tabbarModel
property var listModel
property var listDelegate
property alias tabbar: tabbar
property alias listView: listView
property var parentView
spacing: Math.round(25 * DefaultStyle.dp)
signal goBackRequested()
RowLayout {
BigButton {
icon.source: AppIcons.leftArrow
style: ButtonStyle.noBackground
onClicked: mainItem.goBackRequested()
}
Text {
text: mainItem.title
font {
pixelSize: Typography.h4.pixelSize
weight: Typography.h4.weight
}
}
}
ColumnLayout {
spacing: Math.round(21 * DefaultStyle.dp)
Layout.leftMargin: Math.round(16 * DefaultStyle.dp)
Layout.rightMargin: Math.round(16 * DefaultStyle.dp)
TabBar {
id: tabbar
Layout.fillWidth: true
model: mainItem.tabbarModel
pixelSize: Typography.h3m.pixelSize
textWeight: Typography.h3m.weight
}
ListView {
id: listView
Layout.fillWidth: true
Layout.fillHeight: true
spacing: Math.round(11 * DefaultStyle.dp)
model: mainItem.listModel
}
}
}

View file

@ -1,118 +1,77 @@
import QtCore
import QtQuick
import QtQuick.Controls.Basic as Control
import QtQuick.Dialogs
import QtQuick.Effects
import QtQuick.Layouts
import Linphone
import UtilsCpp
import SettingsCpp
import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle
ColumnLayout {
MessageInfosLayout {
id: mainItem
property ChatMessageGui chatMessageGui
property var parentView
spacing: Math.round(25 * DefaultStyle.dp)
signal goBackRequested()
RowLayout {
BigButton {
icon.source: AppIcons.leftArrow
style: ButtonStyle.noBackground
onClicked: mainItem.goBackRequested()
}
Text {
//: Message status
text: qsTr("message_details_status title")
font {
pixelSize: Typography.h4.pixelSize
weight: Typography.h4.weight
}
}
//: Reactions
title: qsTr("message_details_reactions_title")
tabbarModel: chatMessageGui ? chatMessageGui.core.reactionsSingletonAsStrings : []
listModel: EmojiProxy {
reactions: chatMessageGui ? chatMessageGui.core.reactions : []
// First index of reactionsSingletonAsStrings list is all reactions combined which does not appear
// in reactionsSingleton list
filter: tabbar.currentIndex >=1 && chatMessageGui && chatMessageGui.core.reactionsSingleton[tabbar.currentIndex-1].body || ""
}
ColumnLayout {
spacing: Math.round(11 * DefaultStyle.dp)
Layout.leftMargin: Math.round(16 * DefaultStyle.dp)
Layout.rightMargin: Math.round(16 * DefaultStyle.dp)
TabBar {
id: tabbar
Layout.fillWidth: true
model: mainItem.chatMessageGui ? mainItem.chatMessageGui.core.reactionsSingletonAsStrings : []
pixelSize: Typography.h3m.pixelSize
textWeight: Typography.h3m.weight
listView.delegate: Item {
width: listView.width
height: delegateIn.implicitHeight
property var contactObj: modelData ? UtilsCpp.findFriendByAddress(modelData.address) : null
property var nameObj: modelData ? UtilsCpp.getDisplayName(modelData.address) : null
property var isMeObj: modelData ? UtilsCpp.isMe(modelData.address) : null
MouseArea {
anchors.fill: parent
enabled: isMeObj && isMeObj.value
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
hoverEnabled: true
onClicked: mainItem.chatMessageGui.core.lRemoveReaction()
}
ListView {
id: reactionsList
Layout.fillWidth: true
Layout.fillHeight: true
spacing: Math.round(11 * DefaultStyle.dp)
model: EmojiProxy {
reactions: mainItem.chatMessageGui ? mainItem.chatMessageGui.core.reactions : []
// First index of reactionsSingletonAsStrings list is all reactions combined which does not appear
// in reactionsSingleton list
filter: tabbar.currentIndex >=1 && mainItem.chatMessageGui && mainItem.chatMessageGui.core.reactionsSingleton[tabbar.currentIndex-1].body || ""
RowLayout {
id: delegateIn
anchors.fill: parent
spacing: Math.round(16 * DefaultStyle.dp)
Avatar {
Layout.alignment: Qt.AlignHCenter
contact: contactObj?.value || null
displayNameVal: contact
? ""
: nameObj
? nameObj.value
: ""
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
}
delegate: Item {
width: reactionsList.width
height: delegateIn.implicitHeight
property var contactObj: modelData ? UtilsCpp.findFriendByAddress(modelData.address) : null
property var nameObj: modelData ? UtilsCpp.getDisplayName(modelData.address) : null
property var isMeObj: modelData ? UtilsCpp.isMe(modelData.address) : null
MouseArea {
anchors.fill: parent
enabled: isMeObj && isMeObj.value
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
hoverEnabled: true
onClicked: mainItem.chatMessageGui.core.lRemoveReaction()
ColumnLayout {
Text {
text: nameObj?.value || ""
font {
pixelSize: Typography.p1.pixelSize
weight: Typography.p1.weight
}
}
RowLayout {
id: delegateIn
anchors.fill: parent
spacing: Math.round(16 * DefaultStyle.dp)
Avatar {
Layout.alignment: Qt.AlignHCenter
contact: contactObj?.value || null
displayNameVal: contact
? ""
: nameObj
? nameObj.value
: ""
Layout.preferredWidth: Math.round(45 * DefaultStyle.dp)
Layout.preferredHeight: Math.round(45 * DefaultStyle.dp)
}
ColumnLayout {
Text {
text: nameObj?.value || ""
font {
pixelSize: Typography.p1.pixelSize
weight: Typography.p1.weight
}
}
Text {
visible: isMeObj && isMeObj.value
//: Click to delete
text: qsTr("click_to_delete_reaction_info")
color: DefaultStyle.main2_400
font {
pixelSize: Typography.p3.pixelSize
weight: Typography.p3.weight
}
}
}
Item{Layout.fillWidth: true}
Text {
text: UtilsCpp.encodeEmojiToQmlRichFormat(modelData.body)
font {
pixelSize: Typography.h3.pixelSize
weight: Typography.p3.weight
}
Text {
visible: isMeObj && isMeObj.value
//: Click to delete
text: qsTr("click_to_delete_reaction_info")
color: DefaultStyle.main2_400
font {
pixelSize: Typography.p3.pixelSize
weight: Typography.p3.weight
}
}
}
Item{Layout.fillWidth: true}
Text {
text: UtilsCpp.encodeEmojiToQmlRichFormat(modelData.body)
font {
pixelSize: Typography.h3.pixelSize
weight: Typography.p3.weight
}
}
}
}
}