Compare commits

..

No commits in common. "master" and "6.2.0-alpha" have entirely different histories.

56 changed files with 190 additions and 995 deletions

View file

@ -30,10 +30,10 @@
rm -f file.key rm -f file.key
.deploy_linux: &deploy_linux | .deploy_linux: &deploy_linux |
rsync -rlv --chmod=Fu=rw,Fg=r,Fo=r --ignore-existing build/OUTPUT/Packages/*.AppImage $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM/$APP_FOLDER rsync -rlv --ignore-existing build/OUTPUT/Packages/*.AppImage $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM/$APP_FOLDER
if [[ $MAKE_RELEASE_FILE_URL != "" ]]; then if [[ $MAKE_RELEASE_FILE_URL != "" ]]; then
rsync -rlv --chmod=Fu=rw,Fg=r,Fo=r build/OUTPUT/Packages/RELEASE $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM rsync -rlv build/OUTPUT/Packages/RELEASE $DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM
rsync -rlv --chmod=Fu=rw,Fg=r,Fo=r build/OUTPUT/Packages/RELEASE $MAIN_DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM rsync -rlv build/OUTPUT/Packages/RELEASE $MAIN_DEPLOY_SERVER:$UPLOAD_ROOT_PATH/$LINUX_PLATFORM
fi fi
.linux-desktop: .linux-desktop:

View file

@ -26,7 +26,7 @@
.macosx-desktop: .macosx-desktop:
stage: build stage: build
tags: [ "macmini-m1-xcode15-flat" ] tags: [ "macmini-m1-xcode15" ]
rules: rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_MACOSX == null - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_MACOSX == null
- if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_MACOSX == null - if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_MACOSX == null
@ -93,7 +93,7 @@ macosx-ninja-novideo:
# WAIT for QT6 for arm64 # WAIT for QT6 for arm64
macosx-ninja-package: macosx-ninja-package:
stage: package stage: package
tags: [ "macmini-m1-xcode15-flat" ] tags: [ "macmini-m1-xcode15" ]
needs: [] needs: []
rules: rules:
- !reference [.rules-merge-request-manual, rules] - !reference [.rules-merge-request-manual, rules]
@ -117,7 +117,7 @@ macosx-ninja-package:
macosx-codesigning: macosx-codesigning:
stage: signing stage: signing
tags: [ "macmini-m1-xcode15-flat" ] tags: [ "macmini-m1-xcode15" ]
needs: needs:
- macosx-ninja-package - macosx-ninja-package
rules: rules:
@ -142,7 +142,7 @@ macosx-codesigning:
macosx-deploy: macosx-deploy:
stage: deploy stage: deploy
tags: [ "macmini-m1-xcode15-flat" ] tags: [ "macmini-m1-xcode15" ]
needs: needs:
- macosx-codesigning - macosx-codesigning
only: only:
@ -160,7 +160,7 @@ macosx-deploy:
macosx-makefile-plugins-deploy: macosx-makefile-plugins-deploy:
stage: deploy stage: deploy
tags: [ "macmini-m1-xcode15-flat" ] tags: [ "macmini-m1-xcode15" ]
needs: needs:
- macosx-makefile - macosx-makefile
only: only:

View file

@ -238,9 +238,9 @@ win64-codesigning:
- if: $DEPLOY_WINDOWS - if: $DEPLOY_WINDOWS
script: script:
- rsync --perms --chmod=Fu=rw,Fg=r,Fo=r build-desktop/OUTPUT/Packages/*.exe ${DEPLOY_SERVER}:${UPLOAD_ROOT_PATH}/${WINDOWS_PLATFORM}/${APP_FOLDER} - scp -pr build-desktop/OUTPUT/Packages/*.exe ${DEPLOY_SERVER}:${UPLOAD_ROOT_PATH}/${WINDOWS_PLATFORM}/${APP_FOLDER}
- if ($MAKE_RELEASE_FILE_URL) { rsync --perms --chmod=Fu=rw,Fg=r,Fo=r build-desktop/OUTPUT/Packages/RELEASE ${DEPLOY_SERVER}:${UPLOAD_ROOT_PATH}/${WINDOWS_PLATFORM}/ } - if ($MAKE_RELEASE_FILE_URL) { scp -pr build-desktop/OUTPUT/Packages/RELEASE ${DEPLOY_SERVER}:${UPLOAD_ROOT_PATH}/${WINDOWS_PLATFORM}/ }
- if ($MAKE_RELEASE_FILE_URL) { rsync --perms --chmod=Fu=rw,Fg=r,Fo=r build-desktop/OUTPUT/Packages/RELEASE ${MAIN_DEPLOY_SERVER}:${UPLOAD_ROOT_PATH}/${WINDOWS_PLATFORM}/ } - if ($MAKE_RELEASE_FILE_URL) { scp -pr build-desktop/OUTPUT/Packages/RELEASE ${MAIN_DEPLOY_SERVER}:${UPLOAD_ROOT_PATH}/${WINDOWS_PLATFORM}/ }
win64-ninja-vs2022-upload: win64-ninja-vs2022-upload:
extends: extends:

View file

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(Linphone VERSION 6.2.0 LANGUAGES CXX) project(Linphone VERSION 6.1.0 LANGUAGES CXX)
################################################################ ################################################################
# PACKAGES # PACKAGES

View file

@ -84,7 +84,6 @@ AccountCore::AccountCore(const std::shared_ptr<linphone::Account> &account) : QO
? Utils::coreStringToAppString(params->getAudioVideoConferenceFactoryAddress()->asString()) ? Utils::coreStringToAppString(params->getAudioVideoConferenceFactoryAddress()->asString())
: ""; : "";
mLimeServerUrl = Utils::coreStringToAppString(params->getLimeServerUrl()); mLimeServerUrl = Utils::coreStringToAppString(params->getLimeServerUrl());
mCcmpServerUrl = Utils::coreStringToAppString(params->getCcmpServerUrl());
// Add listener // Add listener
mAccountModel = Utils::makeQObject_ptr<AccountModel>(account); // OK mAccountModel = Utils::makeQObject_ptr<AccountModel>(account); // OK
@ -149,7 +148,6 @@ AccountCore::AccountCore(const AccountCore &accountCore) {
mConferenceFactoryAddress = accountCore.mConferenceFactoryAddress; mConferenceFactoryAddress = accountCore.mConferenceFactoryAddress;
mAudioVideoConferenceFactoryAddress = accountCore.mAudioVideoConferenceFactoryAddress; mAudioVideoConferenceFactoryAddress = accountCore.mAudioVideoConferenceFactoryAddress;
mLimeServerUrl = accountCore.mLimeServerUrl; mLimeServerUrl = accountCore.mLimeServerUrl;
mCcmpServerUrl = accountCore.mCcmpServerUrl;
} }
void AccountCore::setSelf(QSharedPointer<AccountCore> me) { void AccountCore::setSelf(QSharedPointer<AccountCore> me) {
@ -238,10 +236,6 @@ void AccountCore::setSelf(QSharedPointer<AccountCore> me) {
mAccountModelConnection->makeConnectToModel(&AccountModel::limeServerUrlChanged, [this](QString value) { mAccountModelConnection->makeConnectToModel(&AccountModel::limeServerUrlChanged, [this](QString value) {
mAccountModelConnection->invokeToCore([this, value]() { onLimeServerUrlChanged(value); }); mAccountModelConnection->invokeToCore([this, value]() { onLimeServerUrlChanged(value); });
}); });
mAccountModelConnection->makeConnectToModel(&AccountModel::ccmpServerUrlChanged, [this](QString value) {
mAccountModelConnection->invokeToCore([this, value]() { onCcmpServerUrlChanged(value); });
});
mAccountModelConnection->makeConnectToModel( mAccountModelConnection->makeConnectToModel(
&AccountModel::removed, [this]() { mAccountModelConnection->invokeToCore([this]() { emit removed(); }); }); &AccountModel::removed, [this]() { mAccountModelConnection->invokeToCore([this]() { emit removed(); }); });
@ -333,7 +327,6 @@ void AccountCore::reset(const AccountCore &accountCore) {
setConferenceFactoryAddress(accountCore.mConferenceFactoryAddress); setConferenceFactoryAddress(accountCore.mConferenceFactoryAddress);
setAudioVideoConferenceFactoryAddress(accountCore.mAudioVideoConferenceFactoryAddress); setAudioVideoConferenceFactoryAddress(accountCore.mAudioVideoConferenceFactoryAddress);
setLimeServerUrl(accountCore.mLimeServerUrl); setLimeServerUrl(accountCore.mLimeServerUrl);
setCcmpServerUrl(accountCore.mCcmpServerUrl);
} }
const std::shared_ptr<AccountModel> &AccountCore::getModel() const { const std::shared_ptr<AccountModel> &AccountCore::getModel() const {
@ -581,10 +574,6 @@ QString AccountCore::getLimeServerUrl() {
return mLimeServerUrl; return mLimeServerUrl;
} }
QString AccountCore::getCcmpServerUrl() {
return mCcmpServerUrl;
}
void AccountCore::setMwiServerAddress(QString value) { void AccountCore::setMwiServerAddress(QString value) {
if (mMwiServerAddress != value) { if (mMwiServerAddress != value) {
mMwiServerAddress = value; mMwiServerAddress = value;
@ -689,14 +678,6 @@ void AccountCore::setLimeServerUrl(QString value) {
} }
} }
void AccountCore::setCcmpServerUrl(QString value) {
if (mCcmpServerUrl != value) {
mCcmpServerUrl = value;
emit ccmpServerUrlChanged();
setIsSaved(false);
}
}
bool AccountCore::isSaved() const { bool AccountCore::isSaved() const {
return mIsSaved; return mIsSaved;
} }
@ -809,13 +790,6 @@ void AccountCore::onLimeServerUrlChanged(QString value) {
} }
} }
void AccountCore::onCcmpServerUrlChanged(QString value) {
if (value != mCcmpServerUrl) {
mCcmpServerUrl = value;
emit ccmpServerUrlChanged();
}
}
void AccountCore::writeIntoModel(std::shared_ptr<AccountModel> model) const { void AccountCore::writeIntoModel(std::shared_ptr<AccountModel> model) const {
mustBeInLinphoneThread(getClassName() + Q_FUNC_INFO); mustBeInLinphoneThread(getClassName() + Q_FUNC_INFO);
model->setMwiServerAddress(mMwiServerAddress); model->setMwiServerAddress(mMwiServerAddress);
@ -832,7 +806,6 @@ void AccountCore::writeIntoModel(std::shared_ptr<AccountModel> model) const {
model->setConferenceFactoryAddress(mConferenceFactoryAddress); model->setConferenceFactoryAddress(mConferenceFactoryAddress);
model->setAudioVideoConferenceFactoryAddress(mAudioVideoConferenceFactoryAddress); model->setAudioVideoConferenceFactoryAddress(mAudioVideoConferenceFactoryAddress);
model->setLimeServerUrl(mLimeServerUrl); model->setLimeServerUrl(mLimeServerUrl);
model->setCcmpServerUrl(mCcmpServerUrl);
model->setVoicemailAddress(mVoicemailAddress); model->setVoicemailAddress(mVoicemailAddress);
} }
@ -852,7 +825,6 @@ void AccountCore::writeFromModel(const std::shared_ptr<AccountModel> &model) {
onConferenceFactoryAddressChanged(model->getConferenceFactoryAddress()); onConferenceFactoryAddressChanged(model->getConferenceFactoryAddress());
onAudioVideoConferenceFactoryAddressChanged(model->getAudioVideoConferenceFactoryAddress()); onAudioVideoConferenceFactoryAddressChanged(model->getAudioVideoConferenceFactoryAddress());
onLimeServerUrlChanged(model->getLimeServerUrl()); onLimeServerUrlChanged(model->getLimeServerUrl());
onCcmpServerUrlChanged(model->getCcmpServerUrl());
onVoicemailAddressChanged(model->getVoicemailAddress()); onVoicemailAddressChanged(model->getVoicemailAddress());
} }

View file

@ -84,7 +84,6 @@ public:
Q_PROPERTY(LinphoneEnums::Presence explicitPresence MEMBER mExplicitPresence NOTIFY presenceChanged) Q_PROPERTY(LinphoneEnums::Presence explicitPresence MEMBER mExplicitPresence NOTIFY presenceChanged)
Q_PROPERTY(QString presenceNote READ getPresenceNote WRITE setPresenceNote NOTIFY presenceChanged) Q_PROPERTY(QString presenceNote READ getPresenceNote WRITE setPresenceNote NOTIFY presenceChanged)
Q_PROPERTY(int maxPresenceNoteSize MEMBER mMaxPresenceNoteSize CONSTANT) Q_PROPERTY(int maxPresenceNoteSize MEMBER mMaxPresenceNoteSize CONSTANT)
Q_PROPERTY(QString ccmpServerUrl READ getCcmpServerUrl WRITE setCcmpServerUrl NOTIFY ccmpServerUrlChanged)
DECLARE_CORE_GET(int, voicemailCount, VoicemailCount) DECLARE_CORE_GET(int, voicemailCount, VoicemailCount)
static QSharedPointer<AccountCore> create(const std::shared_ptr<linphone::Account> &account); static QSharedPointer<AccountCore> create(const std::shared_ptr<linphone::Account> &account);
@ -144,7 +143,6 @@ public:
QString getAudioVideoConferenceFactoryAddress(); QString getAudioVideoConferenceFactoryAddress();
QString getLimeServerUrl(); QString getLimeServerUrl();
QString getVoicemailAddress(); QString getVoicemailAddress();
QString getCcmpServerUrl();
void setMwiServerAddress(QString value); void setMwiServerAddress(QString value);
void setTransport(QString value); void setTransport(QString value);
@ -159,7 +157,6 @@ public:
void setAudioVideoConferenceFactoryAddress(QString value); void setAudioVideoConferenceFactoryAddress(QString value);
void setLimeServerUrl(QString value); void setLimeServerUrl(QString value);
void setVoicemailAddress(QString value); void setVoicemailAddress(QString value);
void setCcmpServerUrl(QString value);
bool isSaved() const; bool isSaved() const;
void setIsSaved(bool saved); void setIsSaved(bool saved);
@ -178,7 +175,6 @@ public:
void onConferenceFactoryAddressChanged(QString value); void onConferenceFactoryAddressChanged(QString value);
void onAudioVideoConferenceFactoryAddressChanged(QString value); void onAudioVideoConferenceFactoryAddressChanged(QString value);
void onLimeServerUrlChanged(QString value); void onLimeServerUrlChanged(QString value);
void onCcmpServerUrlChanged(QString value);
DECLARE_CORE_GET(bool, showMwi, ShowMwi) DECLARE_CORE_GET(bool, showMwi, ShowMwi)
@ -224,7 +220,6 @@ signals:
void isSavedChanged(); void isSavedChanged();
void voicemailAddressChanged(); void voicemailAddressChanged();
void presenceChanged(); void presenceChanged();
void ccmpServerUrlChanged();
void setValueFailed(const QString &error); void setValueFailed(const QString &error);
@ -273,7 +268,6 @@ private:
QString mAudioVideoConferenceFactoryAddress; QString mAudioVideoConferenceFactoryAddress;
QString mLimeServerUrl; QString mLimeServerUrl;
QString mVoicemailAddress; QString mVoicemailAddress;
QString mCcmpServerUrl;
LinphoneEnums::Presence mPresence = LinphoneEnums::Presence::Undefined; LinphoneEnums::Presence mPresence = LinphoneEnums::Presence::Undefined;
LinphoneEnums::Presence mExplicitPresence; LinphoneEnums::Presence mExplicitPresence;
QString mPresenceNote; QString mPresenceNote;

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010-2026 Belledonne Communications SARL. * Copyright (c) 2010-2024 Belledonne Communications SARL.
* *
* This file is part of linphone-desktop * This file is part of linphone-desktop
* (see https://www.linphone.org). * (see https://www.linphone.org).
@ -28,8 +28,6 @@
#include "tool/Utils.hpp" #include "tool/Utils.hpp"
#include "tool/thread/SafeConnection.hpp" #include "tool/thread/SafeConnection.hpp"
#include <QQuickWindow>
DEFINE_ABSTRACT_OBJECT(CallCore) DEFINE_ABSTRACT_OBJECT(CallCore)
/***********************************************************************/ /***********************************************************************/
@ -451,44 +449,6 @@ void CallCore::setSelf(QSharedPointer<CallCore> me) {
setVideoStats(videoStats); setVideoStats(videoStats);
} }
}); });
mCallModelConnection->makeConnectToModel(&CallModel::headsetAnswerCallRequested, [this]() {
mCallModelConnection->invokeToCore([this]() {
const auto callList = App::getInstance()->getCallList();
const auto currentPendingCall = callList->getFirstIncommingPendingCall();
if (!currentPendingCall.isNull()) {
const auto gui = new CallGui(currentPendingCall);
Utils::openCallsWindow(gui);
currentPendingCall->lAccept(false);
}
});
});
mCallModelConnection->makeConnectToModel(&CallModel::headsetEndCallRequested, [this]() {
mCallModelConnection->invokeToCore([this]() {
const auto window = Utils::getOrCreateCallsWindow();
window->setProperty("callTerminatedByUser", true);
lTerminate();
});
});
mCallModelConnection->makeConnectToModel(&CallModel::headsetHoldCallRequested, [this]() {
mCallModelConnection->invokeToCore([this]() { lSetPaused(true); });
});
mCallModelConnection->makeConnectToModel(&CallModel::headsetMicrophoneMuteToggled, [this](bool mute) {
mCallModelConnection->invokeToCore([this, mute]() { lSetMicrophoneMuted(mute); });
});
mCallModelConnection->makeConnectToModel(&CallModel::headsetRejectCallRequested, [this]() {
mCallModelConnection->invokeToCore([this]() {
const auto callList = App::getInstance()->getCallList();
const auto currentPendingCall = callList->getFirstIncommingPendingCall();
if (!currentPendingCall.isNull()) {
currentPendingCall->lDecline();
}
});
});
mCallModelConnection->makeConnectToModel(&CallModel::headsetResumeCallRequested, [this]() {
mCallModelConnection->invokeToCore([this]() { lSetPaused(false); });
});
if (mShouldFindRemoteFriend) findRemoteFriend(me); if (mShouldFindRemoteFriend) findRemoteFriend(me);
} }

View file

@ -25,32 +25,20 @@
DEFINE_ABSTRACT_OBJECT(CallProxy) DEFINE_ABSTRACT_OBJECT(CallProxy)
CallProxy::CallProxy() : SortFilterProxy() { CallProxy::CallProxy(QObject *parent) : LimitProxy(parent) {
mShowCurrentCall = true;
} }
CallProxy::~CallProxy() { CallProxy::~CallProxy() {
} }
CallGui *CallProxy::getCurrentCall() { CallGui *CallProxy::getCurrentCall() {
auto model = qobject_cast<CallList *>(sourceModel()); auto model = getListModel<CallList>();
if (!mCurrentCall && model) mCurrentCall = model->getCurrentCall(); if (!mCurrentCall && model) mCurrentCall = model->getCurrentCall();
return mCurrentCall; return mCurrentCall;
} }
void CallProxy::setShowCurrentCall(bool show) {
if (mShowCurrentCall != show) {
mShowCurrentCall = show;
emit showCurrentCallChanged();
}
}
bool CallProxy::showCurrentCall() const {
return mShowCurrentCall;
}
void CallProxy::setCurrentCall(CallGui *call) { void CallProxy::setCurrentCall(CallGui *call) {
qobject_cast<CallList *>(sourceModel())->setCurrentCall(call); getListModel<CallList>()->setCurrentCall(call);
} }
// Reset the default account to let UI build its new object if needed. // Reset the default account to let UI build its new object if needed.
@ -60,12 +48,12 @@ void CallProxy::resetCurrentCall() {
} }
bool CallProxy::getHaveCall() const { bool CallProxy::getHaveCall() const {
auto model = qobject_cast<CallList *>(sourceModel()); auto model = getListModel<CallList>();
return model ? model->getHaveCall() : false; return model ? model->getHaveCall() : false;
} }
void CallProxy::setSourceModel(QAbstractItemModel *model) { void CallProxy::setSourceModel(QAbstractItemModel *model) {
auto oldCallList = qobject_cast<CallList *>(sourceModel()); auto oldCallList = getListModel<CallList>();
if (oldCallList) { if (oldCallList) {
disconnect(oldCallList); disconnect(oldCallList);
} }
@ -75,24 +63,24 @@ void CallProxy::setSourceModel(QAbstractItemModel *model) {
connect(newCallList, &CallList::haveCallChanged, this, &CallProxy::haveCallChanged, Qt::QueuedConnection); connect(newCallList, &CallList::haveCallChanged, this, &CallProxy::haveCallChanged, Qt::QueuedConnection);
connect(this, &CallProxy::lMergeAll, newCallList, &CallList::lMergeAll); connect(this, &CallProxy::lMergeAll, newCallList, &CallList::lMergeAll);
} }
QSortFilterProxyModel::setSourceModel(model); setSourceModels(new SortFilterList(model));
} }
bool CallProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { bool CallProxy::SortFilterList::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const {
bool show = (mFilterText.isEmpty() || mFilterText == "*"); bool show = (mFilterText.isEmpty() || mFilterText == "*");
auto callList = qobject_cast<CallList *>(sourceModel());
auto call = callList->getAt<CallCore>(sourceRow);
if (!mShowCurrentCall && call == callList->getCurrentCallCore()) return false;
if (!show) { if (!show) {
QRegularExpression search(QRegularExpression::escape(mFilterText), QRegularExpression search(QRegularExpression::escape(mFilterText),
QRegularExpression::CaseInsensitiveOption | QRegularExpression::CaseInsensitiveOption |
QRegularExpression::UseUnicodePropertiesOption); QRegularExpression::UseUnicodePropertiesOption);
auto call = qobject_cast<CallList *>(sourceModel())->getAt<CallCore>(sourceRow);
show = call->getRemoteAddress().contains(search); show = call->getRemoteAddress().contains(search);
} }
return show; return show;
} }
bool CallProxy::lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const { bool CallProxy::SortFilterList::lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const {
auto l = getItemAtSource<CallList, CallCore>(sourceLeft.row()); auto l = getItemAtSource<CallList, CallCore>(sourceLeft.row());
auto r = getItemAtSource<CallList, CallCore>(sourceRight.row()); auto r = getItemAtSource<CallList, CallCore>(sourceRight.row());

View file

@ -28,14 +28,15 @@
// ============================================================================= // =============================================================================
class CallProxy : public SortFilterProxy, public AbstractObject { class CallProxy : public LimitProxy, public AbstractObject {
Q_OBJECT Q_OBJECT
Q_PROPERTY(CallGui *currentCall READ getCurrentCall WRITE setCurrentCall NOTIFY currentCallChanged) Q_PROPERTY(CallGui *currentCall READ getCurrentCall WRITE setCurrentCall NOTIFY currentCallChanged)
Q_PROPERTY(bool haveCall READ getHaveCall NOTIFY haveCallChanged) Q_PROPERTY(bool haveCall READ getHaveCall NOTIFY haveCallChanged)
Q_PROPERTY(bool showCurrentCall READ showCurrentCall WRITE setShowCurrentCall NOTIFY showCurrentCallChanged)
public: public:
CallProxy(); DECLARE_SORTFILTER_CLASS()
CallProxy(QObject *parent = Q_NULLPTR);
~CallProxy(); ~CallProxy();
// Get a new object from List or give the stored one. // Get a new object from List or give the stored one.
@ -47,23 +48,15 @@ public:
bool getHaveCall() const; bool getHaveCall() const;
void setShowCurrentCall(bool show);
bool showCurrentCall() const;
void setSourceModel(QAbstractItemModel *sourceModel) override; void setSourceModel(QAbstractItemModel *sourceModel) override;
virtual bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
virtual bool lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const override;
signals: signals:
void lMergeAll(); void lMergeAll();
void currentCallChanged(); void currentCallChanged();
void haveCallChanged(); void haveCallChanged();
void showCurrentCallChanged();
protected: protected:
CallGui *mCurrentCall = nullptr; // When null, a new UI object is build from List CallGui *mCurrentCall = nullptr; // When null, a new UI object is build from List
bool mShowCurrentCall = false;
DECLARE_ABSTRACT_OBJECT DECLARE_ABSTRACT_OBJECT
}; };

View file

@ -394,7 +394,6 @@ void ChatCore::setSelf(QSharedPointer<ChatCore> me) {
[this](std::shared_ptr<linphone::Friend> f) { updateInfo(f); }); [this](std::shared_ptr<linphone::Friend> f) { updateInfo(f); });
mCoreModelConnection->makeConnectToModel(&CoreModel::friendRemoved, mCoreModelConnection->makeConnectToModel(&CoreModel::friendRemoved,
[this](std::shared_ptr<linphone::Friend> f) { updateInfo(f, true); }); [this](std::shared_ptr<linphone::Friend> f) { updateInfo(f, true); });
} }
QDateTime ChatCore::getLastUpdatedTime() const { QDateTime ChatCore::getLastUpdatedTime() const {

View file

@ -115,17 +115,11 @@ ChatMessageCore::ChatMessageCore(const std::shared_ptr<linphone::ChatMessage> &c
if (chatmessage) { if (chatmessage) {
mChatMessageModel = Utils::makeQObject_ptr<ChatMessageModel>(chatmessage); mChatMessageModel = Utils::makeQObject_ptr<ChatMessageModel>(chatmessage);
mChatMessageModel->setSelf(mChatMessageModel); mChatMessageModel->setSelf(mChatMessageModel);
mText = ToolModel::getMessageFromMessage(chatmessage); mText = ToolModel::getMessageFromContent(chatmessage->getContents());
mUtf8Text = mChatMessageModel->getUtf8Text(); mUtf8Text = mChatMessageModel->getUtf8Text();
mHasTextContent = mChatMessageModel->getHasTextContent(); mHasTextContent = mChatMessageModel->getHasTextContent();
mTimestamp = QDateTime::fromSecsSinceEpoch(chatmessage->getTime()); mTimestamp = QDateTime::fromSecsSinceEpoch(chatmessage->getTime());
mIsOutgoing = chatmessage->isOutgoing(); mIsOutgoing = chatmessage->isOutgoing();
mIsRetractable =
chatmessage->isOutgoing() && chatmessage->isRetractable() && !chatmessage->getChatRoom()->isReadOnly();
mIsRetracted = chatmessage->isRetracted();
mIsEditable =
chatmessage->isOutgoing() && chatmessage->isEditable() && !chatmessage->getChatRoom()->isReadOnly();
mIsEdited = chatmessage->isEdited();
mIsRemoteMessage = !chatmessage->isOutgoing(); mIsRemoteMessage = !chatmessage->isOutgoing();
mPeerAddress = Utils::coreStringToAppString(chatmessage->getPeerAddress()->asStringUriOnly()); mPeerAddress = Utils::coreStringToAppString(chatmessage->getPeerAddress()->asStringUriOnly());
mPeerName = ToolModel::getDisplayName(chatmessage->getPeerAddress()); mPeerName = ToolModel::getDisplayName(chatmessage->getPeerAddress());
@ -197,7 +191,7 @@ ChatMessageCore::ChatMessageCore(const std::shared_ptr<linphone::ChatMessage> &c
if (mIsReply) { if (mIsReply) {
auto replymessage = chatmessage->getReplyMessage(); auto replymessage = chatmessage->getReplyMessage();
if (replymessage) { if (replymessage) {
mReplyText = ToolModel::getMessageFromMessage(replymessage); mReplyText = ToolModel::getMessageFromContent(replymessage->getContents());
if (mIsFromChatGroup) mRepliedToName = ToolModel::getDisplayName(replymessage->getFromAddress()); if (mIsFromChatGroup) mRepliedToName = ToolModel::getDisplayName(replymessage->getFromAddress());
} }
} }
@ -213,9 +207,6 @@ void ChatMessageCore::setSelf(QSharedPointer<ChatMessageCore> me) {
mChatMessageModelConnection->makeConnectToCore(&ChatMessageCore::lDelete, [this] { mChatMessageModelConnection->makeConnectToCore(&ChatMessageCore::lDelete, [this] {
mChatMessageModelConnection->invokeToModel([this] { mChatMessageModel->deleteMessageFromChatRoom(true); }); mChatMessageModelConnection->invokeToModel([this] { mChatMessageModel->deleteMessageFromChatRoom(true); });
}); });
mChatMessageModelConnection->makeConnectToCore(&ChatMessageCore::lRetract, [this] {
mChatMessageModelConnection->invokeToModel([this] { mChatMessageModel->retractMessageFromChatRoom(); });
});
mChatMessageModelConnection->makeConnectToModel(&ChatMessageModel::messageDeleted, [this](bool deletedByUser) { mChatMessageModelConnection->makeConnectToModel(&ChatMessageModel::messageDeleted, [this](bool deletedByUser) {
mChatMessageModelConnection->invokeToCore([this, deletedByUser] { mChatMessageModelConnection->invokeToCore([this, deletedByUser] {
//: Deleted //: Deleted
@ -359,22 +350,6 @@ void ChatMessageCore::setSelf(QSharedPointer<ChatMessageCore> me) {
int duration = now.secsTo(QDateTime::fromSecsSinceEpoch(expireTime)); int duration = now.secsTo(QDateTime::fromSecsSinceEpoch(expireTime));
mChatMessageModelConnection->invokeToCore([this, duration] { setEphemeralDuration(duration); }); mChatMessageModelConnection->invokeToCore([this, duration] { setEphemeralDuration(duration); });
}); });
mChatMessageModelConnection->makeConnectToModel(&ChatMessageModel::retracted,
[this](const std::shared_ptr<linphone::ChatMessage> &message) {
QString text = ToolModel::getMessageFromMessage(message);
mChatMessageModelConnection->invokeToCore([this, text] {
setText(text);
setRetracted();
});
});
mChatMessageModelConnection->makeConnectToModel(&ChatMessageModel::contentEdited,
[this](const std::shared_ptr<linphone::ChatMessage> &message) {
mChatMessageModelConnection->invokeToCore([this] {
mIsEdited = true;
emit edited();
});
});
} }
QList<ImdnStatus> ChatMessageCore::computeDeliveryStatus(const std::shared_ptr<linphone::ChatMessage> &message) { QList<ImdnStatus> ChatMessageCore::computeDeliveryStatus(const std::shared_ptr<linphone::ChatMessage> &message) {
@ -497,22 +472,6 @@ void ChatMessageCore::setIsRead(bool read) {
} }
} }
void ChatMessageCore::setRetracted() {
if (!mIsRetracted) {
mIsRetracted = true;
emit isRetractedChanged();
emit messageStateChanged();
}
}
bool ChatMessageCore::isRetracted() const {
return mIsRetracted;
}
bool ChatMessageCore::isEdited() const {
return mIsEdited;
}
QString ChatMessageCore::getOwnReaction() const { QString ChatMessageCore::getOwnReaction() const {
return mOwnReaction; return mOwnReaction;
} }
@ -691,4 +650,4 @@ std::shared_ptr<ChatMessageModel> ChatMessageCore::getModel() const {
ChatMessageContentGui *ChatMessageCore::getVoiceRecordingContent() const { ChatMessageContentGui *ChatMessageCore::getVoiceRecordingContent() const {
return new ChatMessageContentGui(mVoiceRecordingContent); return new ChatMessageContentGui(mVoiceRecordingContent);
} }

View file

@ -111,11 +111,6 @@ class ChatMessageCore : public QObject, public AbstractObject {
Q_PROPERTY(bool hasFileContent MEMBER mHasFileContent CONSTANT) Q_PROPERTY(bool hasFileContent MEMBER mHasFileContent CONSTANT)
Q_PROPERTY(bool isVoiceRecording MEMBER mIsVoiceRecording CONSTANT) Q_PROPERTY(bool isVoiceRecording MEMBER mIsVoiceRecording CONSTANT)
Q_PROPERTY(bool isCalendarInvite MEMBER mIsCalendarInvite CONSTANT) Q_PROPERTY(bool isCalendarInvite MEMBER mIsCalendarInvite CONSTANT)
Q_PROPERTY(bool isOutgoing MEMBER mIsOutgoing CONSTANT)
Q_PROPERTY(bool isRetractable MEMBER mIsRetractable CONSTANT)
Q_PROPERTY(bool isRetracted READ isRetracted NOTIFY isRetractedChanged)
Q_PROPERTY(bool isEditable MEMBER mIsEditable CONSTANT)
Q_PROPERTY(bool isEdited READ isEdited NOTIFY edited)
public: public:
static QSharedPointer<ChatMessageCore> create(const std::shared_ptr<linphone::ChatMessage> &chatmessage); static QSharedPointer<ChatMessageCore> create(const std::shared_ptr<linphone::ChatMessage> &chatmessage);
@ -148,10 +143,6 @@ public:
bool isRead() const; bool isRead() const;
void setIsRead(bool read); void setIsRead(bool read);
bool isRetracted() const;
void setRetracted();
bool isEdited() const;
QString getOwnReaction() const; QString getOwnReaction() const;
void setOwnReaction(const QString &reaction); void setOwnReaction(const QString &reaction);
QString getTotalReactionsLabel() const; QString getTotalReactionsLabel() const;
@ -185,12 +176,9 @@ signals:
void messageReactionChanged(); void messageReactionChanged();
void singletonReactionMapChanged(); void singletonReactionMapChanged();
void ephemeralDurationChanged(int duration); void ephemeralDurationChanged(int duration);
void isRetractedChanged();
void edited();
void lDelete(); void lDelete();
void deleted(); void deleted();
void lRetract();
void lMarkAsRead(); void lMarkAsRead();
void readChanged(); void readChanged();
void lSendReaction(const QString &reaction); void lSendReaction(const QString &reaction);
@ -226,10 +214,6 @@ private:
bool mIsVoiceRecording = false; bool mIsVoiceRecording = false;
bool mIsEphemeral = false; bool mIsEphemeral = false;
int mEphemeralDuration = 0; int mEphemeralDuration = 0;
bool mIsRetractable = false;
bool mIsRetracted = false;
bool mIsEditable = false;
bool mIsEdited = false;
bool mIsOutgoing = false; bool mIsOutgoing = false;
QString mTotalReactionsLabel; QString mTotalReactionsLabel;

View file

@ -64,8 +64,6 @@ void EventLogList::disconnectItem(const QSharedPointer<EventLogCore> &item) {
if (message) { if (message) {
disconnect(message.get(), &ChatMessageCore::isReadChanged, this, nullptr); disconnect(message.get(), &ChatMessageCore::isReadChanged, this, nullptr);
disconnect(message.get(), &ChatMessageCore::deleted, this, nullptr); disconnect(message.get(), &ChatMessageCore::deleted, this, nullptr);
disconnect(message.get(), &ChatMessageCore::edited, this, nullptr);
disconnect(message.get(), &ChatMessageCore::isRetractedChanged, this, nullptr);
} }
} }
@ -79,23 +77,6 @@ void EventLogList::connectItem(const QSharedPointer<EventLogCore> &item) {
if (mChatCore) emit mChatCore->lUpdateLastMessage(); if (mChatCore) emit mChatCore->lUpdateLastMessage();
remove(item); remove(item);
}); });
connect(message.get(), &ChatMessageCore::isRetractedChanged, this, [this, item] {
if (mChatCore) emit mChatCore->lUpdateUnreadCount();
});
connect(message.get(), &ChatMessageCore::edited, this, [this, item] {
auto eventLogModel = item->getModel();
mCoreModelConnection->invokeToModel([this, eventLogModel, item]() {
auto chatRoom = mChatCore->getModel()->getMonitor();
auto newEventLog = EventLogCore::create(eventLogModel->getEventLog(), chatRoom);
bool wasLastMessage =
mChatCore->getModel()->getLastChatMessage() == eventLogModel->getEventLog()->getChatMessage();
mCoreModelConnection->invokeToCore([this, newEventLog, wasLastMessage, item] {
connectItem(newEventLog);
replace(item, newEventLog);
if (wasLastMessage) mChatCore->setLastMessage(newEventLog->getChatMessageCore());
});
});
});
} }
} }

View file

@ -205,4 +205,4 @@ void EventLogProxy::findIndexCorrespondingToFilter(int startIndex, bool forward,
auto listIndex = mapToSource(index(startIndex, 0)).row(); auto listIndex = mapToSource(index(startIndex, 0)).row();
eventLogList->findChatMessageWithFilter(filter, listIndex, forward, isFirstResearch); eventLogList->findChatMessageWithFilter(filter, listIndex, forward, isFirstResearch);
} }
} }

View file

@ -21,15 +21,12 @@
#include "ConferenceInfoCore.hpp" #include "ConferenceInfoCore.hpp"
#include "core/App.hpp" #include "core/App.hpp"
#include "core/path/Paths.hpp"
#include "core/proxy/ListProxy.hpp" #include "core/proxy/ListProxy.hpp"
#include "model/object/VariantObject.hpp" #include "model/object/VariantObject.hpp"
#include "model/tool/ToolModel.hpp" #include "model/tool/ToolModel.hpp"
#include "tool/Utils.hpp" #include "tool/Utils.hpp"
#include "tool/thread/SafeConnection.hpp" #include "tool/thread/SafeConnection.hpp"
#include <QDesktopServices>
DEFINE_ABSTRACT_OBJECT(ConferenceInfoCore) DEFINE_ABSTRACT_OBJECT(ConferenceInfoCore)
QSharedPointer<ConferenceInfoCore> QSharedPointer<ConferenceInfoCore>
@ -72,7 +69,6 @@ ConferenceInfoCore::ConferenceInfoCore(std::shared_ptr<linphone::ConferenceInfo>
mUri = address && address->isValid() && !address->getDomain().empty() mUri = address && address->isValid() && !address->getDomain().empty()
? Utils::coreStringToAppString(address->asStringUriOnly()) ? Utils::coreStringToAppString(address->asStringUriOnly())
: ""; : "";
mIcalendarString = Utils::coreStringToAppString(conferenceInfo->getIcalendarString());
mDateTime = QDateTime::fromMSecsSinceEpoch(conferenceInfo->getDateTime() * 1000); mDateTime = QDateTime::fromMSecsSinceEpoch(conferenceInfo->getDateTime() * 1000);
mDuration = conferenceInfo->getDuration(); mDuration = conferenceInfo->getDuration();
mEndDateTime = mDateTime.addSecs(mDuration * 60); mEndDateTime = mDateTime.addSecs(mDuration * 60);
@ -127,7 +123,6 @@ ConferenceInfoCore::ConferenceInfoCore(const ConferenceInfoCore &conferenceInfoC
mIsEnded = conferenceInfoCore.mIsEnded; mIsEnded = conferenceInfoCore.mIsEnded;
mInviteEnabled = conferenceInfoCore.mInviteEnabled; mInviteEnabled = conferenceInfoCore.mInviteEnabled;
mConferenceInfoState = conferenceInfoCore.mConferenceInfoState; mConferenceInfoState = conferenceInfoCore.mConferenceInfoState;
mIcalendarString = conferenceInfoCore.mIcalendarString;
} }
ConferenceInfoCore::~ConferenceInfoCore() { ConferenceInfoCore::~ConferenceInfoCore() {
@ -606,9 +601,6 @@ void ConferenceInfoCore::save() {
} else lCritical() << "No default account"; } else lCritical() << "No default account";
// Add text capability for chat in conf // Add text capability for chat in conf
linphoneConf->setCapability(linphone::StreamType::Text, true); linphoneConf->setCapability(linphone::StreamType::Text, true);
if (SettingsModel::getInstance()->getCreateEndToEndEncryptedMeetingsAndGroupCalls())
linphoneConf->setSecurityLevel(linphone::Conference::SecurityLevel::EndToEnd);
else linphoneConf->setSecurityLevel(linphone::Conference::SecurityLevel::PointToPoint);
auto confInfoModel = Utils::makeQObject_ptr<ConferenceInfoModel>(linphoneConf); auto confInfoModel = Utils::makeQObject_ptr<ConferenceInfoModel>(linphoneConf);
auto confSchedulerModel = confInfoModel->getConferenceScheduler(); auto confSchedulerModel = confInfoModel->getConferenceScheduler();
if (!confSchedulerModel) { if (!confSchedulerModel) {
@ -658,14 +650,3 @@ bool ConferenceInfoCore::isAllDayConf() const {
return mDateTime.time().hour() == 0 && mDateTime.time().minute() == 0 && mEndDateTime.time().hour() == 23 && return mDateTime.time().hour() == 0 && mDateTime.time().minute() == 0 && mEndDateTime.time().hour() == 23 &&
mEndDateTime.time().minute() == 59; mEndDateTime.time().minute() == 59;
} }
void ConferenceInfoCore::exportConferenceToICS() const {
QString filePath(Paths::getAppLocalDirPath() + "conference.ics");
QFile file(filePath);
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream out(&file);
out << mIcalendarString;
file.close();
}
QDesktopServices::openUrl(QUrl::fromLocalFile(filePath));
}

View file

@ -1,4 +1,4 @@
/* /*
* Copyright (c) 2022 Belledonne Communications SARL. * Copyright (c) 2022 Belledonne Communications SARL.
* *
* This file is part of linphone-desktop * This file is part of linphone-desktop
@ -135,8 +135,6 @@ public:
Q_INVOKABLE bool isAllDayConf() const; Q_INVOKABLE bool isAllDayConf() const;
Q_INVOKABLE void exportConferenceToICS() const;
signals: signals:
void dateTimeChanged(); void dateTimeChanged();
void endDateTimeChanged(); void endDateTimeChanged();
@ -179,7 +177,6 @@ private:
QString mSubject; QString mSubject;
QString mDescription; QString mDescription;
QString mUri; QString mUri;
QString mIcalendarString;
QVariantList mParticipants; QVariantList mParticipants;
QSharedPointer<TimeZoneModel> mTimeZoneModel; QSharedPointer<TimeZoneModel> mTimeZoneModel;
LinphoneEnums::ConferenceSchedulerState mConferenceSchedulerState; LinphoneEnums::ConferenceSchedulerState mConferenceSchedulerState;

View file

@ -51,25 +51,8 @@ PayloadTypeCore::~PayloadTypeCore() {
void PayloadTypeCore::setSelf(QSharedPointer<PayloadTypeCore> me) { void PayloadTypeCore::setSelf(QSharedPointer<PayloadTypeCore> me) {
mPayloadTypeModelConnection = SafeConnection<PayloadTypeCore, PayloadTypeModel>::create(me, mPayloadTypeModel); mPayloadTypeModelConnection = SafeConnection<PayloadTypeCore, PayloadTypeModel>::create(me, mPayloadTypeModel);
mPayloadTypeModelConnection->makeConnectToCore(&PayloadTypeCore::setEnabled, [this](bool enabled) { DEFINE_CORE_GETSET_CONNECT(mPayloadTypeModelConnection, PayloadTypeCore, PayloadTypeModel, mPayloadTypeModel, bool,
if (enabled != mEnabled) { enabled, Enabled)
mChanged = true;
emit changed();
}
mEnabled = enabled;
});
mPayloadTypeModelConnection->makeConnectToModel(&PayloadTypeModel::enabledChanged, [this](bool enabled) {
mPayloadTypeModelConnection->invokeToCore([this, enabled]() {
if (mEnabled != enabled) {
mEnabled = enabled;
emit enabledChanged();
}
});
});
}
void PayloadTypeCore::save() {
if (mChanged) mPayloadTypeModelConnection->invokeToModel([this]() { mPayloadTypeModel->setEnabled(mEnabled); });
} }
PayloadTypeCore::Family PayloadTypeCore::getFamily() { PayloadTypeCore::Family PayloadTypeCore::getFamily() {

View file

@ -43,7 +43,7 @@ public:
const std::shared_ptr<linphone::PayloadType> &payloadType); const std::shared_ptr<linphone::PayloadType> &payloadType);
PayloadTypeCore(Family family, const std::shared_ptr<linphone::PayloadType> &payloadType); PayloadTypeCore(Family family, const std::shared_ptr<linphone::PayloadType> &payloadType);
PayloadTypeCore() {}; PayloadTypeCore(){};
~PayloadTypeCore(); ~PayloadTypeCore();
void setSelf(QSharedPointer<PayloadTypeCore> me); void setSelf(QSharedPointer<PayloadTypeCore> me);
@ -51,15 +51,9 @@ public:
bool isDownloadable(); bool isDownloadable();
QString getMimeType(); QString getMimeType();
Q_INVOKABLE void save();
signals:
void changed();
protected: protected:
Family mFamily; Family mFamily;
bool mDownloadable = false; bool mDownloadable = false;
bool mChanged = false;
DECLARE_CORE_GETSET_MEMBER(bool, enabled, Enabled) DECLARE_CORE_GETSET_MEMBER(bool, enabled, Enabled)
DECLARE_CORE_MEMBER(QString, mimeType, MimeType) DECLARE_CORE_MEMBER(QString, mimeType, MimeType)
DECLARE_CORE_MEMBER(QString, encoderDescription, EncoderDescription) DECLARE_CORE_MEMBER(QString, encoderDescription, EncoderDescription)

View file

@ -61,13 +61,6 @@ SettingsCore::SettingsCore(QObject *parent) : QObject(parent) {
mRingtoneFolder = mRingtonePath.left(mRingtonePath.lastIndexOf(QDir::separator())); mRingtoneFolder = mRingtonePath.left(mRingtonePath.lastIndexOf(QDir::separator()));
} }
// Network
mIpv6Enabled = settingsModel->getIpv6Enabled();
// Advanced
mAutoStart = settingsModel->getAutoStart();
mHideFps = settingsModel->getHideFps();
// Audio // Audio
mCaptureDevices = settingsModel->getCaptureDevices(); mCaptureDevices = settingsModel->getCaptureDevices();
mPlaybackDevices = settingsModel->getPlaybackDevices(); mPlaybackDevices = settingsModel->getPlaybackDevices();
@ -123,6 +116,7 @@ SettingsCore::SettingsCore(QObject *parent) : QObject(parent) {
INIT_CORE_MEMBER(DisableBroadcastFeature, settingsModel) INIT_CORE_MEMBER(DisableBroadcastFeature, settingsModel)
INIT_CORE_MEMBER(HideSettings, settingsModel) INIT_CORE_MEMBER(HideSettings, settingsModel)
INIT_CORE_MEMBER(HideAccountSettings, settingsModel) INIT_CORE_MEMBER(HideAccountSettings, settingsModel)
INIT_CORE_MEMBER(HideFps, settingsModel)
INIT_CORE_MEMBER(DisableCallRecordings, settingsModel) INIT_CORE_MEMBER(DisableCallRecordings, settingsModel)
INIT_CORE_MEMBER(AssistantHideCreateAccount, settingsModel) INIT_CORE_MEMBER(AssistantHideCreateAccount, settingsModel)
INIT_CORE_MEMBER(AssistantHideCreateAccount, settingsModel) INIT_CORE_MEMBER(AssistantHideCreateAccount, settingsModel)
@ -138,6 +132,7 @@ SettingsCore::SettingsCore(QObject *parent) : QObject(parent) {
INIT_CORE_MEMBER(AutoStart, settingsModel) INIT_CORE_MEMBER(AutoStart, settingsModel)
INIT_CORE_MEMBER(ExitOnClose, settingsModel) INIT_CORE_MEMBER(ExitOnClose, settingsModel)
INIT_CORE_MEMBER(SyncLdapContacts, settingsModel) INIT_CORE_MEMBER(SyncLdapContacts, settingsModel)
INIT_CORE_MEMBER(Ipv6Enabled, settingsModel)
INIT_CORE_MEMBER(ConfigLocale, settingsModel) INIT_CORE_MEMBER(ConfigLocale, settingsModel)
INIT_CORE_MEMBER(DownloadFolder, settingsModel) INIT_CORE_MEMBER(DownloadFolder, settingsModel)
@ -146,6 +141,7 @@ SettingsCore::SettingsCore(QObject *parent) : QObject(parent) {
INIT_CORE_MEMBER(CallToneIndicationsEnabled, settingsModel) INIT_CORE_MEMBER(CallToneIndicationsEnabled, settingsModel)
INIT_CORE_MEMBER(CommandLine, settingsModel) INIT_CORE_MEMBER(CommandLine, settingsModel)
INIT_CORE_MEMBER(DisableCommandLine, settingsModel) INIT_CORE_MEMBER(DisableCommandLine, settingsModel)
INIT_CORE_MEMBER(DisableCallForward, settingsModel)
INIT_CORE_MEMBER(CallForwardToAddress, settingsModel) INIT_CORE_MEMBER(CallForwardToAddress, settingsModel)
INIT_CORE_MEMBER(ThemeMainColor, settingsModel) INIT_CORE_MEMBER(ThemeMainColor, settingsModel)
@ -214,10 +210,10 @@ SettingsCore::SettingsCore(const SettingsCore &settingsCore) {
mAssistantGoDirectlyToThirdPartySipAccountLogin = settingsCore.mAssistantGoDirectlyToThirdPartySipAccountLogin; mAssistantGoDirectlyToThirdPartySipAccountLogin = settingsCore.mAssistantGoDirectlyToThirdPartySipAccountLogin;
mAssistantThirdPartySipAccountDomain = settingsCore.mAssistantThirdPartySipAccountDomain; mAssistantThirdPartySipAccountDomain = settingsCore.mAssistantThirdPartySipAccountDomain;
mAssistantThirdPartySipAccountTransport = settingsCore.mAssistantThirdPartySipAccountTransport; mAssistantThirdPartySipAccountTransport = settingsCore.mAssistantThirdPartySipAccountTransport;
mAutoStart = settingsCore.mAutoStart;
mExitOnClose = settingsCore.mExitOnClose; mExitOnClose = settingsCore.mExitOnClose;
mSyncLdapContacts = settingsCore.mSyncLdapContacts; mSyncLdapContacts = settingsCore.mSyncLdapContacts;
mIpv6Enabled = settingsCore.mIpv6Enabled; mIpv6Enabled = settingsCore.mIpv6Enabled;
mAutoStart = settingsCore.mAutoStart;
mConfigLocale = settingsCore.mConfigLocale; mConfigLocale = settingsCore.mConfigLocale;
mDownloadFolder = settingsCore.mDownloadFolder; mDownloadFolder = settingsCore.mDownloadFolder;
mShortcutCount = settingsCore.mShortcutCount; mShortcutCount = settingsCore.mShortcutCount;
@ -225,7 +221,7 @@ SettingsCore::SettingsCore(const SettingsCore &settingsCore) {
mCallToneIndicationsEnabled = settingsCore.mCallToneIndicationsEnabled; mCallToneIndicationsEnabled = settingsCore.mCallToneIndicationsEnabled;
mCommandLine = settingsCore.mCommandLine; mCommandLine = settingsCore.mCommandLine;
mDisableCommandLine = settingsCore.mDisableCommandLine; mDisableCommandLine = settingsCore.mDisableCommandLine;
mCallForwardToAddress = settingsCore.mCallForwardToAddress; mDisableCallForward = settingsCore.mDisableCallForward;
mDefaultDomain = settingsCore.mDefaultDomain; mDefaultDomain = settingsCore.mDefaultDomain;
mShowAccountDevices = settingsCore.mShowAccountDevices; mShowAccountDevices = settingsCore.mShowAccountDevices;
@ -264,31 +260,6 @@ void SettingsCore::setSelf(QSharedPointer<SettingsCore> me) {
mSettingsModelConnection->invokeToCore([this, enabled]() { setEchoCancellationEnabled(enabled); }); mSettingsModelConnection->invokeToCore([this, enabled]() { setEchoCancellationEnabled(enabled); });
}); });
// IPV6
mSettingsModelConnection->makeConnectToModel(&SettingsModel::ipv6EnabledChanged, [this](const bool enabled) {
mSettingsModelConnection->invokeToCore([this, enabled]() { setIpv6Enabled(enabled); });
});
// Call Forward
mSettingsModelConnection->makeConnectToModel(
&SettingsModel::callForwardToAddressChanged, [this](const QString address) {
mSettingsModelConnection->invokeToCore([this, address]() { setCallForwardToAddress(address); });
});
// Hide FPS
mSettingsModelConnection->makeConnectToModel(&SettingsModel::hideFpsChanged, [this](const bool hide) {
mSettingsModelConnection->invokeToCore([this, hide]() { setHideFps(hide); });
});
// AutoStart
mSettingsModelConnection->makeConnectToModel(&SettingsModel::autoStartChanged, [this](const bool enabled) {
mSettingsModelConnection->invokeToCore([this, enabled]() {
bool emitSignal = mAutoStart != enabled;
setAutoStart(enabled);
if (emitSignal) emit autoStartChanged();
});
});
// Auto download incoming files // Auto download incoming files
mSettingsModelConnection->makeConnectToModel( mSettingsModelConnection->makeConnectToModel(
&SettingsModel::autoDownloadReceivedFilesChanged, [this](const bool enabled) { &SettingsModel::autoDownloadReceivedFilesChanged, [this](const bool enabled) {
@ -333,7 +304,7 @@ void SettingsCore::setSelf(QSharedPointer<SettingsCore> me) {
}); });
}); });
mSettingsModelConnection->makeConnectToModel(&SettingsModel::playbackGainChanged, [this](const float value) { mSettingsModelConnection->makeConnectToModel(&SettingsModel::playbackGainChanged, [this](const float value) {
mSettingsModelConnection->invokeToCore([this, value]() { setPlaybackGainFromModel(value); }); mSettingsModelConnection->invokeToCore([this, value]() { setPlaybackGain(value); });
}); });
mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetCaptureGain, [this](const float value) { mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetCaptureGain, [this](const float value) {
@ -343,7 +314,7 @@ void SettingsCore::setSelf(QSharedPointer<SettingsCore> me) {
}); });
}); });
mSettingsModelConnection->makeConnectToModel(&SettingsModel::captureGainChanged, [this](const float value) { mSettingsModelConnection->makeConnectToModel(&SettingsModel::captureGainChanged, [this](const float value) {
mSettingsModelConnection->invokeToCore([this, value]() { setCaptureGainFromModel(value); }); mSettingsModelConnection->invokeToCore([this, value]() { setCaptureGain(value); });
}); });
mSettingsModelConnection->makeConnectToModel(&SettingsModel::micVolumeChanged, [this](const float value) { mSettingsModelConnection->makeConnectToModel(&SettingsModel::micVolumeChanged, [this](const float value) {
@ -479,6 +450,8 @@ void SettingsCore::setSelf(QSharedPointer<SettingsCore> me) {
ExitOnClose) ExitOnClose)
DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool,
syncLdapContacts, SyncLdapContacts) syncLdapContacts, SyncLdapContacts)
DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, ipv6Enabled,
Ipv6Enabled)
DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString, DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString,
configLocale, ConfigLocale) configLocale, ConfigLocale)
DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString, DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString,
@ -493,6 +466,10 @@ void SettingsCore::setSelf(QSharedPointer<SettingsCore> me) {
commandLine, CommandLine) commandLine, CommandLine)
DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool,
disableCommandLine, DisableCommandLine) disableCommandLine, DisableCommandLine)
DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool,
disableCallForward, DisableCallForward)
DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString,
callForwardToAddress, CallForwardToAddress)
DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString, DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString,
themeAboutPictureUrl, ThemeAboutPictureUrl) themeAboutPictureUrl, ThemeAboutPictureUrl)
DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString, DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString,
@ -582,14 +559,13 @@ void SettingsCore::reset(const SettingsCore &settingsCore) {
setAssistantGoDirectlyToThirdPartySipAccountLogin(settingsCore.mAssistantGoDirectlyToThirdPartySipAccountLogin); setAssistantGoDirectlyToThirdPartySipAccountLogin(settingsCore.mAssistantGoDirectlyToThirdPartySipAccountLogin);
setAssistantThirdPartySipAccountDomain(settingsCore.mAssistantThirdPartySipAccountDomain); setAssistantThirdPartySipAccountDomain(settingsCore.mAssistantThirdPartySipAccountDomain);
setAssistantThirdPartySipAccountTransport(settingsCore.mAssistantThirdPartySipAccountTransport); setAssistantThirdPartySipAccountTransport(settingsCore.mAssistantThirdPartySipAccountTransport);
setAutoStart(settingsCore.mAutoStart);
setExitOnClose(settingsCore.mExitOnClose); setExitOnClose(settingsCore.mExitOnClose);
setSyncLdapContacts(settingsCore.mSyncLdapContacts); setSyncLdapContacts(settingsCore.mSyncLdapContacts);
setCardDAVMinCharForResearch(settingsCore.mCardDAVMinCharForResearch); setCardDAVMinCharForResearch(settingsCore.mCardDAVMinCharForResearch);
setIpv6Enabled(settingsCore.mIpv6Enabled); setIpv6Enabled(settingsCore.mIpv6Enabled);
setAutoStart(settingsCore.mAutoStart);
setConfigLocale(settingsCore.mConfigLocale); setConfigLocale(settingsCore.mConfigLocale);
setDownloadFolder(settingsCore.mDownloadFolder); setDownloadFolder(settingsCore.mDownloadFolder);
setCallForwardToAddress(settingsCore.mCallForwardToAddress);
} }
QString SettingsCore::getConfigPath(const QCommandLineParser &parser) { QString SettingsCore::getConfigPath(const QCommandLineParser &parser) {
@ -648,36 +624,6 @@ void SettingsCore::setEchoCancellationEnabled(bool enabled) {
} }
} }
void SettingsCore::setIpv6Enabled(bool enabled) {
if (mIpv6Enabled != enabled) {
mIpv6Enabled = enabled;
emit ipv6EnabledChanged();
setIsSaved(false);
}
}
void SettingsCore::setAutoStart(bool enabled) {
if (mAutoStart != enabled) {
mAutoStart = enabled;
setIsSaved(false);
}
}
void SettingsCore::setCallForwardToAddress(QString address) {
if (mCallForwardToAddress != address) {
mCallForwardToAddress = address;
setIsSaved(false);
}
}
void SettingsCore::setHideFps(bool hide) {
if (mHideFps != hide) {
mHideFps = hide;
emit hideFpsChanged();
setIsSaved(false);
}
}
void SettingsCore::setAutoDownloadReceivedFiles(bool enabled) { void SettingsCore::setAutoDownloadReceivedFiles(bool enabled) {
if (mAutoDownloadReceivedFiles != enabled) { if (mAutoDownloadReceivedFiles != enabled) {
mAutoDownloadReceivedFiles = enabled; mAutoDownloadReceivedFiles = enabled;
@ -770,7 +716,7 @@ bool SettingsCore::isSaved() const {
void SettingsCore::setIsSaved(bool saved) { void SettingsCore::setIsSaved(bool saved) {
if (mIsSaved != saved) { if (mIsSaved != saved) {
mIsSaved = saved; mIsSaved = saved;
emit isSavedChanged(saved); emit isSavedChanged();
} }
} }
@ -821,13 +767,6 @@ void SettingsCore::setCaptureGain(float gain) {
} }
} }
void SettingsCore::setCaptureGainFromModel(float gain) {
if (mCaptureGain != gain) {
mCaptureGain = gain;
emit captureGainChanged(gain);
}
}
QVariantMap SettingsCore::getConferenceLayout() const { QVariantMap SettingsCore::getConferenceLayout() const {
return mConferenceLayout; return mConferenceLayout;
} }
@ -872,13 +811,6 @@ void SettingsCore::setPlaybackGain(float gain) {
} }
} }
void SettingsCore::setPlaybackGainFromModel(float gain) {
if (mPlaybackGain != gain) {
mPlaybackGain = gain;
emit playbackGainChanged(gain);
}
}
QVariantMap SettingsCore::getCaptureDevice() const { QVariantMap SettingsCore::getCaptureDevice() const {
return mCaptureDevice; return mCaptureDevice;
} }
@ -1076,6 +1008,10 @@ void SettingsCore::setShowAccountDevices(bool show) {
} }
} }
bool SettingsCore::getAutoStart() const {
return mAutoStart;
}
bool SettingsCore::getExitOnClose() const { bool SettingsCore::getExitOnClose() const {
return mExitOnClose; return mExitOnClose;
} }
@ -1163,13 +1099,12 @@ void SettingsCore::writeIntoModel(std::shared_ptr<SettingsModel> model) const {
model->setAssistantGoDirectlyToThirdPartySipAccountLogin(mAssistantGoDirectlyToThirdPartySipAccountLogin); model->setAssistantGoDirectlyToThirdPartySipAccountLogin(mAssistantGoDirectlyToThirdPartySipAccountLogin);
model->setAssistantThirdPartySipAccountDomain(mAssistantThirdPartySipAccountDomain); model->setAssistantThirdPartySipAccountDomain(mAssistantThirdPartySipAccountDomain);
model->setAssistantThirdPartySipAccountTransport(mAssistantThirdPartySipAccountTransport); model->setAssistantThirdPartySipAccountTransport(mAssistantThirdPartySipAccountTransport);
model->setAutoStart(mAutoStart);
model->setExitOnClose(mExitOnClose); model->setExitOnClose(mExitOnClose);
model->setSyncLdapContacts(mSyncLdapContacts); model->setSyncLdapContacts(mSyncLdapContacts);
model->setIpv6Enabled(mIpv6Enabled); model->setIpv6Enabled(mIpv6Enabled);
model->setAutoStart(mAutoStart);
model->setConfigLocale(mConfigLocale); model->setConfigLocale(mConfigLocale);
model->setDownloadFolder(mDownloadFolder); model->setDownloadFolder(mDownloadFolder);
model->setCallForwardToAddress(mCallForwardToAddress);
} }
void SettingsCore::writeFromModel(const std::shared_ptr<SettingsModel> &model) { void SettingsCore::writeFromModel(const std::shared_ptr<SettingsModel> &model) {
@ -1188,9 +1123,6 @@ void SettingsCore::writeFromModel(const std::shared_ptr<SettingsModel> &model) {
mRingtoneFileName = mRingtoneFileName =
ringtone.exists() ? ringtone.fileName() : mRingtonePath.right(mRingtonePath.lastIndexOf(QDir::separator())); ringtone.exists() ? ringtone.fileName() : mRingtonePath.right(mRingtonePath.lastIndexOf(QDir::separator()));
// Advanced
mAutoStart = model->getAutoStart();
// Chat // Chat
mAutoDownloadReceivedFiles = model->getAutoDownloadReceivedFiles(); mAutoDownloadReceivedFiles = model->getAutoDownloadReceivedFiles();
@ -1249,10 +1181,8 @@ void SettingsCore::writeFromModel(const std::shared_ptr<SettingsModel> &model) {
mSyncLdapContacts = model->getSyncLdapContacts(); mSyncLdapContacts = model->getSyncLdapContacts();
mCardDAVMinCharForResearch = model->getCardDAVMinCharResearch(); mCardDAVMinCharForResearch = model->getCardDAVMinCharResearch();
mIpv6Enabled = model->getIpv6Enabled(); mIpv6Enabled = model->getIpv6Enabled();
mAutoStart = model->getAutoStart();
mConfigLocale = model->getConfigLocale(); mConfigLocale = model->getConfigLocale();
mDownloadFolder = model->getDownloadFolder(); mDownloadFolder = model->getDownloadFolder();
mCallForwardToAddress = model->getCallForwardToAddress();
} }
bool SettingsCore::isCheckForUpdateAvailable() const { bool SettingsCore::isCheckForUpdateAvailable() const {
@ -1262,7 +1192,6 @@ bool SettingsCore::isCheckForUpdateAvailable() const {
void SettingsCore::save() { void SettingsCore::save() {
mustBeInMainThread(getClassName() + Q_FUNC_INFO); mustBeInMainThread(getClassName() + Q_FUNC_INFO);
SettingsCore *thisCopy = new SettingsCore(*this); SettingsCore *thisCopy = new SettingsCore(*this);
emit autoStartChanged();
if (SettingsModel::getInstance()) { if (SettingsModel::getInstance()) {
mSettingsModelConnection->invokeToModel([this, thisCopy] { mSettingsModelConnection->invokeToModel([this, thisCopy] {
mustBeInLinphoneThread(getClassName() + Q_FUNC_INFO); mustBeInLinphoneThread(getClassName() + Q_FUNC_INFO);

View file

@ -62,17 +62,6 @@ public:
Q_PROPERTY(QVariantMap playbackDevice READ getPlaybackDevice WRITE setPlaybackDevice NOTIFY playbackDeviceChanged) Q_PROPERTY(QVariantMap playbackDevice READ getPlaybackDevice WRITE setPlaybackDevice NOTIFY playbackDeviceChanged)
Q_PROPERTY(QVariantMap ringerDevice READ getRingerDevice WRITE setRingerDevice NOTIFY ringerDeviceChanged) Q_PROPERTY(QVariantMap ringerDevice READ getRingerDevice WRITE setRingerDevice NOTIFY ringerDeviceChanged)
// Call Forward
Q_PROPERTY(QString callForwardToAddress READ getCallForwardToAddress WRITE setCallForwardToAddress NOTIFY
callForwardToAddressChanged)
// Network
Q_PROPERTY(bool ipv6Enabled READ getIpv6Enabled WRITE setIpv6Enabled NOTIFY ipv6EnabledChanged)
Q_PROPERTY(bool hideFps READ getHideFps WRITE setHideFps NOTIFY hideFpsChanged)
// Advanced
Q_PROPERTY(bool autoStart READ getAutoStart WRITE setAutoStart NOTIFY autoStartChanged)
Q_PROPERTY( Q_PROPERTY(
QVariantMap conferenceLayout READ getConferenceLayout WRITE setConferenceLayout NOTIFY conferenceLayoutChanged) QVariantMap conferenceLayout READ getConferenceLayout WRITE setConferenceLayout NOTIFY conferenceLayoutChanged)
Q_PROPERTY( Q_PROPERTY(
@ -155,11 +144,9 @@ public:
float getPlaybackGain() const; float getPlaybackGain() const;
void setPlaybackGain(float gain); void setPlaybackGain(float gain);
void setPlaybackGainFromModel(float gain);
float getCaptureGain() const; float getCaptureGain() const;
void setCaptureGain(float gain); void setCaptureGain(float gain);
void setCaptureGainFromModel(float gain);
QVariantList getCaptureDevices() const; QVariantList getCaptureDevices() const;
void setCaptureDevices(QVariantList devices); void setCaptureDevices(QVariantList devices);
@ -206,32 +193,6 @@ public:
Q_INVOKABLE void closeCallSettings(); Q_INVOKABLE void closeCallSettings();
Q_INVOKABLE void updateMicVolume() const; Q_INVOKABLE void updateMicVolume() const;
// Call Forward. --------------------------------------------------------------------
QString getCallForwardToAddress() {
return mCallForwardToAddress;
}
void setCallForwardToAddress(QString address);
// Network. --------------------------------------------------------------------
bool getIpv6Enabled() {
return mIpv6Enabled;
}
void setIpv6Enabled(bool enabled);
// Advanced. --------------------------------------------------------------------
bool getAutoStart() {
return mAutoStart;
}
void setAutoStart(bool enabled);
bool getHideFps() {
return mHideFps;
}
void setHideFps(bool hide);
bool getLogsEnabled() const; bool getLogsEnabled() const;
void setLogsEnabled(bool enabled); void setLogsEnabled(bool enabled);
@ -266,6 +227,7 @@ public:
DECLARE_CORE_GETSET_MEMBER(bool, disableBroadcastFeature, DisableBroadcastFeature) DECLARE_CORE_GETSET_MEMBER(bool, disableBroadcastFeature, DisableBroadcastFeature)
DECLARE_CORE_GETSET_MEMBER(bool, hideSettings, HideSettings) DECLARE_CORE_GETSET_MEMBER(bool, hideSettings, HideSettings)
DECLARE_CORE_GETSET_MEMBER(bool, hideAccountSettings, HideAccountSettings) DECLARE_CORE_GETSET_MEMBER(bool, hideAccountSettings, HideAccountSettings)
DECLARE_CORE_GETSET_MEMBER(bool, hideFps, HideFps)
DECLARE_CORE_GETSET_MEMBER(bool, disableCallRecordings, DisableCallRecordings) DECLARE_CORE_GETSET_MEMBER(bool, disableCallRecordings, DisableCallRecordings)
DECLARE_CORE_GETSET_MEMBER(bool, assistantHideCreateAccount, AssistantHideCreateAccount) DECLARE_CORE_GETSET_MEMBER(bool, assistantHideCreateAccount, AssistantHideCreateAccount)
DECLARE_CORE_GETSET_MEMBER(bool, assistantDisableQrCode, AssistantDisableQrCode) DECLARE_CORE_GETSET_MEMBER(bool, assistantDisableQrCode, AssistantDisableQrCode)
@ -278,8 +240,10 @@ public:
AssistantGoDirectlyToThirdPartySipAccountLogin) AssistantGoDirectlyToThirdPartySipAccountLogin)
DECLARE_CORE_GETSET_MEMBER(QString, assistantThirdPartySipAccountDomain, AssistantThirdPartySipAccountDomain) DECLARE_CORE_GETSET_MEMBER(QString, assistantThirdPartySipAccountDomain, AssistantThirdPartySipAccountDomain)
DECLARE_CORE_GETSET_MEMBER(QString, assistantThirdPartySipAccountTransport, AssistantThirdPartySipAccountTransport) DECLARE_CORE_GETSET_MEMBER(QString, assistantThirdPartySipAccountTransport, AssistantThirdPartySipAccountTransport)
DECLARE_CORE_GETSET(bool, autoStart, AutoStart)
DECLARE_CORE_GETSET(bool, exitOnClose, ExitOnClose) DECLARE_CORE_GETSET(bool, exitOnClose, ExitOnClose)
DECLARE_CORE_GETSET(bool, syncLdapContacts, SyncLdapContacts) DECLARE_CORE_GETSET(bool, syncLdapContacts, SyncLdapContacts)
DECLARE_CORE_GETSET_MEMBER(bool, ipv6Enabled, Ipv6Enabled)
DECLARE_CORE_GETSET(QString, configLocale, ConfigLocale) DECLARE_CORE_GETSET(QString, configLocale, ConfigLocale)
DECLARE_CORE_GETSET(QString, downloadFolder, DownloadFolder) DECLARE_CORE_GETSET(QString, downloadFolder, DownloadFolder)
// Read-only // Read-only
@ -288,6 +252,8 @@ public:
DECLARE_CORE_GETSET_MEMBER(bool, callToneIndicationsEnabled, CallToneIndicationsEnabled) DECLARE_CORE_GETSET_MEMBER(bool, callToneIndicationsEnabled, CallToneIndicationsEnabled)
DECLARE_CORE_GETSET_MEMBER(bool, disableCommandLine, DisableCommandLine) DECLARE_CORE_GETSET_MEMBER(bool, disableCommandLine, DisableCommandLine)
DECLARE_CORE_GETSET_MEMBER(QString, commandLine, CommandLine) DECLARE_CORE_GETSET_MEMBER(QString, commandLine, CommandLine)
DECLARE_CORE_GETSET_MEMBER(bool, disableCallForward, DisableCallForward)
DECLARE_CORE_GETSET_MEMBER(QString, callForwardToAddress, CallForwardToAddress)
DECLARE_CORE_GET_CONSTANT(QFont, emojiFont, EmojiFont) DECLARE_CORE_GET_CONSTANT(QFont, emojiFont, EmojiFont)
DECLARE_CORE_GET_CONSTANT(QFont, textMessageFont, TextMessageFont) DECLARE_CORE_GET_CONSTANT(QFont, textMessageFont, TextMessageFont)
// Theme // Theme
@ -317,17 +283,6 @@ signals:
void captureDevicesChanged(const QVariantList &devices); void captureDevicesChanged(const QVariantList &devices);
void playbackDevicesChanged(const QVariantList &devices); void playbackDevicesChanged(const QVariantList &devices);
void ringerDevicesChanged(const QVariantList &devices); void ringerDevicesChanged(const QVariantList &devices);
// Network
void ipv6EnabledChanged();
// Call Forward
void callForwardToAddressChanged();
// Advanced
void autoStartChanged();
void hideFpsChanged();
void conferenceLayoutsChanged(const QVariantList &layouts); void conferenceLayoutsChanged(const QVariantList &layouts);
void mediaEncryptionsChanged(const QVariantList &encryptions); void mediaEncryptionsChanged(const QVariantList &encryptions);
@ -348,7 +303,7 @@ signals:
void createEndToEndEncryptedMeetingsAndGroupCallsChanged(bool endtoend); void createEndToEndEncryptedMeetingsAndGroupCallsChanged(bool endtoend);
void isSavedChanged(bool saved); void isSavedChanged();
void lSetPlaybackDevice(QVariantMap device); void lSetPlaybackDevice(QVariantMap device);
void playbackDeviceChanged(const QVariantMap &device); void playbackDeviceChanged(const QVariantMap &device);
@ -426,16 +381,6 @@ private:
float mPlaybackGain; float mPlaybackGain;
int mEchoCancellationCalibration; int mEchoCancellationCalibration;
// Network
bool mIpv6Enabled;
// Call Forward
QString mCallForwardToAddress;
// Advanced
bool mAutoStart;
bool mHideFps;
// Debug logs // Debug logs
bool mLogsEnabled; bool mLogsEnabled;
bool mFullLogsEnabled; bool mFullLogsEnabled;

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M208,32H184V24a8,8,0,0,0-16,0v8H88V24a8,8,0,0,0-16,0v8H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM72,48v8a8,8,0,0,0,16,0V48h80v8a8,8,0,0,0,16,0V48h24V80H48V48ZM208,208H48V96H208V208Zm-48-56a8,8,0,0,1-8,8H136v16a8,8,0,0,1-16,0V160H104a8,8,0,0,1,0-16h16V128a8,8,0,0,1,16,0v16h16A8,8,0,0,1,160,152Z"></path></svg>

Before

Width:  |  Height:  |  Size: 464 B

View file

@ -1078,49 +1078,49 @@
<context> <context>
<name>CallListView</name> <name>CallListView</name>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="60"/>
<source>meeting</source> <source>meeting</source>
<extracomment>&quot;Réunion</extracomment> <extracomment>&quot;Réunion</extracomment>
<translation>Besprechung</translation> <translation>Besprechung</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="64"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/>
<source>call</source> <source>call</source>
<extracomment>&quot;Appel&quot;</extracomment> <extracomment>&quot;Appel&quot;</extracomment>
<translation>Anruf</translation> <translation>Anruf</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="69"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="67"/>
<source>paused_call_or_meeting</source> <source>paused_call_or_meeting</source>
<extracomment>&quot;%1 en pause&quot;</extracomment> <extracomment>&quot;%1 en pause&quot;</extracomment>
<translation>%1 pausiert</translation> <translation>%1 pausiert</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="71"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="69"/>
<source>ongoing_call_or_meeting</source> <source>ongoing_call_or_meeting</source>
<extracomment>&quot;%1 en cours&quot;</extracomment> <extracomment>&quot;%1 en cours&quot;</extracomment>
<translation>%1 laufend</translation> <translation>%1 laufend</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="91"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="89"/>
<source>transfer_call_name_accessible_name</source> <source>transfer_call_name_accessible_name</source>
<extracomment>Transfer call %1</extracomment> <extracomment>Transfer call %1</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="119"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="117"/>
<source>resume_call_name_accessible_name</source> <source>resume_call_name_accessible_name</source>
<extracomment>Resume %1 call</extracomment> <extracomment>Resume %1 call</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="121"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="119"/>
<source>pause_call_name_accessible_name</source> <source>pause_call_name_accessible_name</source>
<extracomment>Pause %1 call</extracomment> <extracomment>Pause %1 call</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="144"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="142"/>
<source>end_call_name_accessible_name</source> <source>end_call_name_accessible_name</source>
<extracomment>End %1 call</extracomment> <extracomment>End %1 call</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -2225,12 +2225,6 @@
<extracomment>&quot;Reception info&quot;</extracomment> <extracomment>&quot;Reception info&quot;</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="407"/>
<source>menu_edit_chat_message</source>
<extracomment>&quot;Edit&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="419"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="419"/>
<source>chat_message_reply</source> <source>chat_message_reply</source>
@ -4971,7 +4965,7 @@ Error</extracomment>
<context> <context>
<name>NewCallForm</name> <name>NewCallForm</name>
<message> <message>
<location filename="../../view/Page/Form/Call/NewCallForm.qml" line="25"/> <location filename="../../view/Page/Form/Call/NewCallForm.qml" line="24"/>
<source>call_transfer_active_calls_label</source> <source>call_transfer_active_calls_label</source>
<extracomment>&quot;Appels en cours&quot;</extracomment> <extracomment>&quot;Appels en cours&quot;</extracomment>
<translation>Laufender Anruf</translation> <translation>Laufender Anruf</translation>

View file

@ -493,12 +493,6 @@
<extracomment>&quot;URL du serveur déchange de clés de chiffrement&quot;</extracomment> <extracomment>&quot;URL du serveur déchange de clés de chiffrement&quot;</extracomment>
<translation>Lime server URL</translation> <translation>Lime server URL</translation>
</message> </message>
<message>
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml"/>
<source>account_settings_ccmp_server_url_title</source>
<extracomment>&quot;URL du serveur CCMP&quot;</extracomment>
<translation>CCMP server URL</translation>
</message>
</context> </context>
<context> <context>
<name>AddParticipantsForm</name> <name>AddParticipantsForm</name>
@ -1089,49 +1083,49 @@
<context> <context>
<name>CallListView</name> <name>CallListView</name>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="60"/>
<source>meeting</source> <source>meeting</source>
<extracomment>&quot;Réunion</extracomment> <extracomment>&quot;Réunion</extracomment>
<translation>Meeting</translation> <translation>Meeting</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="64"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/>
<source>call</source> <source>call</source>
<extracomment>&quot;Appel&quot;</extracomment> <extracomment>&quot;Appel&quot;</extracomment>
<translation>Call</translation> <translation>Call</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="69"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="67"/>
<source>paused_call_or_meeting</source> <source>paused_call_or_meeting</source>
<extracomment>&quot;%1 en pause&quot;</extracomment> <extracomment>&quot;%1 en pause&quot;</extracomment>
<translation>%1 paused</translation> <translation>%1 paused</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="71"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="69"/>
<source>ongoing_call_or_meeting</source> <source>ongoing_call_or_meeting</source>
<extracomment>&quot;%1 en cours&quot;</extracomment> <extracomment>&quot;%1 en cours&quot;</extracomment>
<translation>Ongoing %1</translation> <translation>Ongoing %1</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="91"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="89"/>
<source>transfer_call_name_accessible_name</source> <source>transfer_call_name_accessible_name</source>
<extracomment>Transfer call %1</extracomment> <extracomment>Transfer call %1</extracomment>
<translation>Transfer call %1</translation> <translation>Transfer call %1</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="119"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="117"/>
<source>resume_call_name_accessible_name</source> <source>resume_call_name_accessible_name</source>
<extracomment>Resume %1 call</extracomment> <extracomment>Resume %1 call</extracomment>
<translation>Resume %1 call</translation> <translation>Resume %1 call</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="121"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="119"/>
<source>pause_call_name_accessible_name</source> <source>pause_call_name_accessible_name</source>
<extracomment>Pause %1 call</extracomment> <extracomment>Pause %1 call</extracomment>
<translation>Pause %1 call</translation> <translation>Pause %1 call</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="144"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="142"/>
<source>end_call_name_accessible_name</source> <source>end_call_name_accessible_name</source>
<extracomment>End %1 call</extracomment> <extracomment>End %1 call</extracomment>
<translation>End %1 call</translation> <translation>End %1 call</translation>
@ -2218,12 +2212,6 @@
<extracomment>&quot;Reception info&quot;</extracomment> <extracomment>&quot;Reception info&quot;</extracomment>
<translation>Reception info</translation> <translation>Reception info</translation>
</message> </message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="407"/>
<source>menu_edit_chat_message</source>
<extracomment>&quot;Edit&quot;</extracomment>
<translation>Edit</translation>
</message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="419"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="419"/>
<source>chat_message_reply</source> <source>chat_message_reply</source>
@ -2242,12 +2230,6 @@
<extracomment>&quot;Delete&quot;</extracomment> <extracomment>&quot;Delete&quot;</extracomment>
<translation>Delete</translation> <translation>Delete</translation>
</message> </message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="469"/>
<source>conversation_message_edited_label</source>
<extracomment>&quot;Edited&quot;</extracomment>
<translation>Edited</translation>
</message>
</context> </context>
<context> <context>
<name>ChatMessageContentCore</name> <name>ChatMessageContentCore</name>
@ -2498,42 +2480,6 @@ Only your correspondent can decrypt them.</translation>
<extracomment>%1 is writing</extracomment> <extracomment>%1 is writing</extracomment>
<translation>%1 is writing</translation> <translation>%1 is writing</translation>
</message> </message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="470"/>
<source>conversation_dialog_delete_chat_message_title</source>
<extracomment>&quot;Delete this message?&quot;</extracomment>
<translation>Delete this message?</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="471"/>
<source>conversation_dialog_delete_locally_label</source>
<extracomment>&quot;For me&quot;</extracomment>
<translation>For me</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
<source>conversation_dialog_delete_for_everyone_label</source>
<extracomment>&quot;For everyone&quot;</extracomment>
<translation>For everyone</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
<source>dialog_cancel</source>
<extracomment>&quot;Cancel&quot;</extracomment>
<translation>Cancel</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
<source>info_toast_deleted_title</source>
<extracomment>Deleted</extracomment>
<translation>Deleted</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
<source>info_toast_deleted_message</source>
<extracomment>The message has been deleted</extracomment>
<translation>The message has been deleted</translation>
</message>
</context> </context>
<context> <context>
<name>ChatPage</name> <name>ChatPage</name>
@ -4941,7 +4887,7 @@ Expiration : %1</translation>
<context> <context>
<name>NewCallForm</name> <name>NewCallForm</name>
<message> <message>
<location filename="../../view/Page/Form/Call/NewCallForm.qml" line="25"/> <location filename="../../view/Page/Form/Call/NewCallForm.qml" line="24"/>
<source>call_transfer_active_calls_label</source> <source>call_transfer_active_calls_label</source>
<extracomment>&quot;Appels en cours&quot;</extracomment> <extracomment>&quot;Appels en cours&quot;</extracomment>
<translation>Ongoing call</translation> <translation>Ongoing call</translation>
@ -5807,12 +5753,6 @@ To enable them in a commercial project, please contact us.</translation>
<extracomment>Reply to %1</extracomment> <extracomment>Reply to %1</extracomment>
<translation>Reply to %1</translation> <translation>Reply to %1</translation>
</message> </message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="417"/>
<source>conversation_editing_message_title</source>
<extracomment>Message beeing edited</extracomment>
<translation>Message beeing edited</translation>
</message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="617"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="617"/>
<source>shared_medias_title</source> <source>shared_medias_title</source>
@ -6001,18 +5941,6 @@ To enable them in a commercial project, please contact us.</translation>
<source>conference_invitation_updated</source> <source>conference_invitation_updated</source>
<translation>Meeting modification</translation> <translation>Meeting modification</translation>
</message> </message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="530"/>
<source>conversation_message_content_deleted_label</source>
<extracomment>&quot;&lt;i&gt;This message has been deleted&lt;/i&gt;&quot;</extracomment>
<translation>&lt;i&gt;This message has been deleted&lt;/i&gt;</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="530"/>
<source>conversation_message_content_deleted_by_us_label</source>
<extracomment>&quot;&lt;i&gt;You have deleted this message&lt;/i&gt;&quot;</extracomment>
<translation>&lt;i&gt;You have deleted this message&lt;/i&gt;</translation>
</message>
</context> </context>
<context> <context>
<name>Utils</name> <name>Utils</name>
@ -6056,36 +5984,18 @@ To enable them in a commercial project, please contact us.</translation>
<extracomment>Cannot reply to invalid message</extracomment> <extracomment>Cannot reply to invalid message</extracomment>
<translation>Cannot reply to invalid message</translation> <translation>Cannot reply to invalid message</translation>
</message> </message>
<message>
<location filename="../../tool/Utils.cpp" line="2123"/>
<source>chat_message_edit_error</source>
<extracomment>Cannot modify invalid message</extracomment>
<translation>Cannot modify invalid message</translation>
</message>
<message> <message>
<location filename="../../tool/Utils.cpp" line="2129"/> <location filename="../../tool/Utils.cpp" line="2129"/>
<source>info_popup_reply_message_error</source> <source>info_popup_reply_message_error</source>
<extracomment>Could not send reply message : %1</extracomment> <extracomment>Could not send reply message : %1</extracomment>
<translation>Could not send reply message : %1</translation> <translation>Could not send reply message : %1</translation>
</message> </message>
<message>
<location filename="../../tool/Utils.cpp" line="2129"/>
<source>info_popup_edited_message_error</source>
<extracomment>Could not send edited message : %1</extracomment>
<translation>Could not send edited message : %1</translation>
</message>
<message> <message>
<location filename="../../tool/Utils.cpp" line="2156"/> <location filename="../../tool/Utils.cpp" line="2156"/>
<source>info_popup_send_reply_message_error_message</source> <source>info_popup_send_reply_message_error_message</source>
<extracomment>Failed to create reply message</extracomment> <extracomment>Failed to create reply message</extracomment>
<translation>Failed to create reply message</translation> <translation>Failed to create reply message</translation>
</message> </message>
<message>
<location filename="../../tool/Utils.cpp" line="2156"/>
<source>info_popup_send_edited_message_error_message</source>
<extracomment>Failed to create edited message</extracomment>
<translation>Failed to create edited message</translation>
</message>
<message numerus="yes"> <message numerus="yes">
<location filename="../../tool/Utils.cpp" line="2278"/> <location filename="../../tool/Utils.cpp" line="2278"/>
<source>nHour</source> <source>nHour</source>

View file

@ -493,12 +493,6 @@
<extracomment>&quot;URL du serveur déchange de clés de chiffrement&quot;</extracomment> <extracomment>&quot;URL du serveur déchange de clés de chiffrement&quot;</extracomment>
<translation>URL du serveur déchange de clés de chiffrement</translation> <translation>URL du serveur déchange de clés de chiffrement</translation>
</message> </message>
<message>
<location filename="../../view/Page/Layout/Settings/AccountSettingsParametersLayout.qml"/>
<source>account_settings_ccmp_server_url_title</source>
<extracomment>&quot;URL du serveur CCMP&quot;</extracomment>
<translation>URL du serveur CCMP</translation>
</message>
</context> </context>
<context> <context>
<name>AddParticipantsForm</name> <name>AddParticipantsForm</name>
@ -1089,49 +1083,49 @@
<context> <context>
<name>CallListView</name> <name>CallListView</name>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="60"/>
<source>meeting</source> <source>meeting</source>
<extracomment>&quot;Réunion</extracomment> <extracomment>&quot;Réunion</extracomment>
<translation>Réunion</translation> <translation>Réunion</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="64"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/>
<source>call</source> <source>call</source>
<extracomment>&quot;Appel&quot;</extracomment> <extracomment>&quot;Appel&quot;</extracomment>
<translation>Appel</translation> <translation>Appel</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="69"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="67"/>
<source>paused_call_or_meeting</source> <source>paused_call_or_meeting</source>
<extracomment>&quot;%1 en pause&quot;</extracomment> <extracomment>&quot;%1 en pause&quot;</extracomment>
<translation>%1 en pause</translation> <translation>%1 en pause</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="71"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="69"/>
<source>ongoing_call_or_meeting</source> <source>ongoing_call_or_meeting</source>
<extracomment>&quot;%1 en cours&quot;</extracomment> <extracomment>&quot;%1 en cours&quot;</extracomment>
<translation>%1 en cours</translation> <translation>%1 en cours</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="91"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="89"/>
<source>transfer_call_name_accessible_name</source> <source>transfer_call_name_accessible_name</source>
<extracomment>Transfer call %1</extracomment> <extracomment>Transfer call %1</extracomment>
<translation>Transférer l&apos;appel %1</translation> <translation>Transférer l&apos;appel %1</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="119"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="117"/>
<source>resume_call_name_accessible_name</source> <source>resume_call_name_accessible_name</source>
<extracomment>Resume %1 call</extracomment> <extracomment>Resume %1 call</extracomment>
<translation>Reprendre l&apos;appel %1</translation> <translation>Reprendre l&apos;appel %1</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="121"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="119"/>
<source>pause_call_name_accessible_name</source> <source>pause_call_name_accessible_name</source>
<extracomment>Pause %1 call</extracomment> <extracomment>Pause %1 call</extracomment>
<translation>Mettre l&apos;appel %1 en pause</translation> <translation>Mettre l&apos;appel %1 en pause</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="144"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="142"/>
<source>end_call_name_accessible_name</source> <source>end_call_name_accessible_name</source>
<extracomment>End %1 call</extracomment> <extracomment>End %1 call</extracomment>
<translation>Terminer l&apos;appel %1</translation> <translation>Terminer l&apos;appel %1</translation>
@ -2218,12 +2212,6 @@
<extracomment>&quot;Reception info&quot;</extracomment> <extracomment>&quot;Reception info&quot;</extracomment>
<translation>Info de réception</translation> <translation>Info de réception</translation>
</message> </message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="407"/>
<source>menu_edit_chat_message</source>
<extracomment>&quot;Edit&quot;</extracomment>
<translation>Modifier</translation>
</message>
<message> <message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="419"/> <location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="419"/>
<source>chat_message_reply</source> <source>chat_message_reply</source>
@ -2242,12 +2230,6 @@
<extracomment>&quot;Delete&quot;</extracomment> <extracomment>&quot;Delete&quot;</extracomment>
<translation>Supprimer</translation> <translation>Supprimer</translation>
</message> </message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessage.qml" line="469"/>
<source>conversation_message_edited_label</source>
<extracomment>&quot;Edited&quot;</extracomment>
<translation>Modifié</translation>
</message>
</context> </context>
<context> <context>
<name>ChatMessageContentCore</name> <name>ChatMessageContentCore</name>
@ -2498,42 +2480,6 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
<extracomment>%1 is writing</extracomment> <extracomment>%1 is writing</extracomment>
<translation>%1 est en train d&apos;écrire</translation> <translation>%1 est en train d&apos;écrire</translation>
</message> </message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="470"/>
<source>conversation_dialog_delete_chat_message_title</source>
<extracomment>&quot;Delete this message?&quot;</extracomment>
<translation>Supprimer le message ?</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="471"/>
<source>conversation_dialog_delete_locally_label</source>
<extracomment>&quot;For me&quot;</extracomment>
<translation>Pour moi</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
<source>conversation_dialog_delete_for_everyone_label</source>
<extracomment>&quot;For everyone&quot;</extracomment>
<translation>Pour tout le monde</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
<source>dialog_cancel</source>
<extracomment>&quot;Cancel&quot;</extracomment>
<translation>Annuler</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
<source>info_toast_deleted_title</source>
<extracomment>Deleted</extracomment>
<translation>Supprimé</translation>
</message>
<message>
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
<source>info_toast_deleted_message</source>
<extracomment>The message has been deleted</extracomment>
<translation>Le message a é supprimé</translation>
</message>
</context> </context>
<context> <context>
<name>ChatPage</name> <name>ChatPage</name>
@ -4941,7 +4887,7 @@ Expiration : %1</translation>
<context> <context>
<name>NewCallForm</name> <name>NewCallForm</name>
<message> <message>
<location filename="../../view/Page/Form/Call/NewCallForm.qml" line="25"/> <location filename="../../view/Page/Form/Call/NewCallForm.qml" line="24"/>
<source>call_transfer_active_calls_label</source> <source>call_transfer_active_calls_label</source>
<extracomment>&quot;Appels en cours&quot;</extracomment> <extracomment>&quot;Appels en cours&quot;</extracomment>
<translation>Appels en cours</translation> <translation>Appels en cours</translation>
@ -5807,12 +5753,6 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
<extracomment>Reply to %1</extracomment> <extracomment>Reply to %1</extracomment>
<translation>Réponse à %1</translation> <translation>Réponse à %1</translation>
</message> </message>
<message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="417"/>
<source>conversation_editing_message_title</source>
<extracomment>Message beeing edited</extracomment>
<translation>Modification du message</translation>
</message>
<message> <message>
<location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="617"/> <location filename="../../view/Page/Form/Chat/SelectedChatView.qml" line="617"/>
<source>shared_medias_title</source> <source>shared_medias_title</source>
@ -6001,18 +5941,6 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
<source>conference_invitation_updated</source> <source>conference_invitation_updated</source>
<translation>Modification d&apos;une réunion</translation> <translation>Modification d&apos;une réunion</translation>
</message> </message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="530"/>
<source>conversation_message_content_deleted_label</source>
<extracomment>&quot;&lt;i&gt;This message has been deleted&lt;/i&gt;&quot;</extracomment>
<translation>&lt;i&gt;Le message a é supprimé&lt;/i&gt;</translation>
</message>
<message>
<location filename="../../model/tool/ToolModel.cpp" line="530"/>
<source>conversation_message_content_deleted_by_us_label</source>
<extracomment>&quot;&lt;i&gt;You have deleted this message&lt;/i&gt;&quot;</extracomment>
<translation>&lt;i&gt;Vous avez supprimé le message&lt;/i&gt;</translation>
</message>
</context> </context>
<context> <context>
<name>Utils</name> <name>Utils</name>
@ -6228,36 +6156,18 @@ Failed to create 1-1 conversation with %1 !</extracomment>
<extracomment>Cannot reply to invalid message</extracomment> <extracomment>Cannot reply to invalid message</extracomment>
<translation>Impossible de répondre : message invalide</translation> <translation>Impossible de répondre : message invalide</translation>
</message> </message>
<message>
<location filename="../../tool/Utils.cpp" line="2123"/>
<source>chat_message_edit_error</source>
<extracomment>Cannot modify invalid message</extracomment>
<translation>Impossible de modifier le message : message invalide</translation>
</message>
<message> <message>
<location filename="../../tool/Utils.cpp" line="2129"/> <location filename="../../tool/Utils.cpp" line="2129"/>
<source>info_popup_reply_message_error</source> <source>info_popup_reply_message_error</source>
<extracomment>Could not send reply message : %1</extracomment> <extracomment>Could not send reply message : %1</extracomment>
<translation>Impossible d&apos;envoyer la réponse : %1</translation> <translation>Impossible d&apos;envoyer la réponse : %1</translation>
</message> </message>
<message>
<location filename="../../tool/Utils.cpp" line="2129"/>
<source>info_popup_edited_message_error</source>
<extracomment>Could not send edited message : %1</extracomment>
<translation>Impossible d&apos;envoyer le message modifié : %1</translation>
</message>
<message> <message>
<location filename="../../tool/Utils.cpp" line="2156"/> <location filename="../../tool/Utils.cpp" line="2156"/>
<source>info_popup_send_reply_message_error_message</source> <source>info_popup_send_reply_message_error_message</source>
<extracomment>Failed to create reply message</extracomment> <extracomment>Failed to create reply message</extracomment>
<translation>Impossible de créer le message</translation> <translation>Impossible de créer le message</translation>
</message> </message>
<message>
<location filename="../../tool/Utils.cpp" line="2156"/>
<source>info_popup_send_edited_message_error_message</source>
<extracomment>Failed to create edited message</extracomment>
<translation>Impossible de créer le message modifié</translation>
</message>
<message> <message>
<location filename="../../tool/Utils.cpp" line="2194"/> <location filename="../../tool/Utils.cpp" line="2194"/>
<source>info_popup_send_voice_message_error_message</source> <source>info_popup_send_voice_message_error_message</source>

View file

@ -148,7 +148,7 @@ void AccountModel::removeAccount() {
? Utils::coreStringToAppString(params->getIdentityAddress()->asString()) ? Utils::coreStringToAppString(params->getIdentityAddress()->asString())
: "Null"); : "Null");
mToRemove = true; mToRemove = true;
if (mMonitor) core->removeAccountWithData(mMonitor); if (mMonitor) core->removeAccount(mMonitor);
} }
std::shared_ptr<linphone::Account> AccountModel::getAccount() const { std::shared_ptr<linphone::Account> AccountModel::getAccount() const {
@ -605,16 +605,4 @@ bool AccountModel::forwardToVoiceMailInDndPresence() {
std::list<std::shared_ptr<linphone::ChatRoom>> AccountModel::getChatRooms() { std::list<std::shared_ptr<linphone::ChatRoom>> AccountModel::getChatRooms() {
return mMonitor->getChatRooms(); return mMonitor->getChatRooms();
} }
QString AccountModel::getCcmpServerUrl() const {
return Utils::coreStringToAppString(mMonitor->getParams()->getCcmpServerUrl());
}
void AccountModel::setCcmpServerUrl(QString value) {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
auto params = mMonitor->getParams()->clone();
params->setCcmpServerUrl(Utils::appStringToCoreString(value));
mMonitor->setParams(params);
emit ccmpServerUrlChanged(value);
}

View file

@ -91,8 +91,6 @@ public:
std::string configAccountSection(); std::string configAccountSection();
bool forwardToVoiceMailInDndPresence(); bool forwardToVoiceMailInDndPresence();
std::list<std::shared_ptr<linphone::ChatRoom>> getChatRooms(); std::list<std::shared_ptr<linphone::ChatRoom>> getChatRooms();
QString getCcmpServerUrl() const;
void setCcmpServerUrl(QString value);
signals: signals:
void registrationStateChanged(const std::shared_ptr<linphone::Account> &account, void registrationStateChanged(const std::shared_ptr<linphone::Account> &account,
@ -128,7 +126,6 @@ signals:
void showMwiChanged(bool show); void showMwiChanged(bool show);
void voicemailAddressChanged(QString value); void voicemailAddressChanged(QString value);
void presenceChanged(LinphoneEnums::Presence presence, bool userInitiated); void presenceChanged(LinphoneEnums::Presence presence, bool userInitiated);
void ccmpServerUrlChanged(QString value);
void setValueFailed(const QString &errorMessage); void setValueFailed(const QString &errorMessage);

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010-2026 Belledonne Communications SARL. * Copyright (c) 2010-2024 Belledonne Communications SARL.
* *
* This file is part of linphone-desktop * This file is part of linphone-desktop
* (see https://www.linphone.org). * (see https://www.linphone.org).
@ -529,27 +529,3 @@ void CallModel::onRemoteRecording(const std::shared_ptr<linphone::Call> &call, b
void CallModel::onAuthenticationTokenVerified(const std::shared_ptr<linphone::Call> &call, bool verified) { void CallModel::onAuthenticationTokenVerified(const std::shared_ptr<linphone::Call> &call, bool verified) {
emit authenticationTokenVerified(call, verified); emit authenticationTokenVerified(call, verified);
} }
void CallModel::onHeadsetAnswerCallRequested(const std::shared_ptr<linphone::Call> &call) {
emit headsetAnswerCallRequested();
}
void CallModel::onHeadsetEndCallRequested(const std::shared_ptr<linphone::Call> &call) {
emit headsetEndCallRequested();
}
void CallModel::onHeadsetHoldCallRequested(const std::shared_ptr<linphone::Call> &call) {
emit headsetHoldCallRequested();
}
void CallModel::onHeadsetMicrophoneMuteToggled(const std::shared_ptr<linphone::Call> &call, bool mute) {
emit headsetMicrophoneMuteToggled(mute);
}
void CallModel::onHeadsetRejectCallRequested(const std::shared_ptr<linphone::Call> &call) {
emit headsetRejectCallRequested();
}
void CallModel::onHeadsetResumeCallRequested(const std::shared_ptr<linphone::Call> &call) {
emit headsetResumeCallRequested();
}

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010-2026 Belledonne Communications SARL. * Copyright (c) 2010-2024 Belledonne Communications SARL.
* *
* This file is part of linphone-desktop * This file is part of linphone-desktop
* (see https://www.linphone.org). * (see https://www.linphone.org).
@ -156,12 +156,6 @@ private:
const std::shared_ptr<linphone::AudioDevice> &audioDevice) override; const std::shared_ptr<linphone::AudioDevice> &audioDevice) override;
virtual void onRemoteRecording(const std::shared_ptr<linphone::Call> &call, bool recording) override; virtual void onRemoteRecording(const std::shared_ptr<linphone::Call> &call, bool recording) override;
virtual void onAuthenticationTokenVerified(const std::shared_ptr<linphone::Call> &call, bool verified) override; virtual void onAuthenticationTokenVerified(const std::shared_ptr<linphone::Call> &call, bool verified) override;
virtual void onHeadsetAnswerCallRequested(const std::shared_ptr<linphone::Call> &call) override;
virtual void onHeadsetEndCallRequested(const std::shared_ptr<linphone::Call> &call) override;
virtual void onHeadsetHoldCallRequested(const std::shared_ptr<linphone::Call> &call) override;
virtual void onHeadsetMicrophoneMuteToggled(const std::shared_ptr<linphone::Call> &call, bool mute) override;
virtual void onHeadsetRejectCallRequested(const std::shared_ptr<linphone::Call> &call) override;
virtual void onHeadsetResumeCallRequested(const std::shared_ptr<linphone::Call> &call) override;
signals: signals:
void dtmfReceived(const std::shared_ptr<linphone::Call> &call, int dtmf); void dtmfReceived(const std::shared_ptr<linphone::Call> &call, int dtmf);
@ -191,12 +185,6 @@ signals:
const std::shared_ptr<linphone::AudioDevice> &audioDevice); const std::shared_ptr<linphone::AudioDevice> &audioDevice);
void remoteRecording(const std::shared_ptr<linphone::Call> &call, bool recording); void remoteRecording(const std::shared_ptr<linphone::Call> &call, bool recording);
void authenticationTokenVerified(const std::shared_ptr<linphone::Call> &call, bool verified); void authenticationTokenVerified(const std::shared_ptr<linphone::Call> &call, bool verified);
void headsetAnswerCallRequested();
void headsetEndCallRequested();
void headsetHoldCallRequested();
void headsetMicrophoneMuteToggled(bool mute);
void headsetRejectCallRequested();
void headsetResumeCallRequested();
}; };
#endif #endif

View file

@ -185,11 +185,6 @@ ChatModel::createReplyMessage(const std::shared_ptr<linphone::ChatMessage> &mess
return mMonitor->createReplyMessage(message); return mMonitor->createReplyMessage(message);
} }
std::shared_ptr<linphone::ChatMessage>
ChatModel::createReplacesMessage(const std::shared_ptr<linphone::ChatMessage> &message) {
return mMonitor->createReplacesMessage(message);
}
std::shared_ptr<linphone::ChatMessage> std::shared_ptr<linphone::ChatMessage>
ChatModel::createForwardMessage(const std::shared_ptr<linphone::ChatMessage> &message) { ChatModel::createForwardMessage(const std::shared_ptr<linphone::ChatMessage> &message) {
return mMonitor->createForwardMessage(message); return mMonitor->createForwardMessage(message);

View file

@ -68,7 +68,6 @@ public:
std::shared_ptr<linphone::ChatMessage> createReplyMessage(const std::shared_ptr<linphone::ChatMessage> &message); std::shared_ptr<linphone::ChatMessage> createReplyMessage(const std::shared_ptr<linphone::ChatMessage> &message);
std::shared_ptr<linphone::ChatMessage> createForwardMessage(const std::shared_ptr<linphone::ChatMessage> &message); std::shared_ptr<linphone::ChatMessage> createForwardMessage(const std::shared_ptr<linphone::ChatMessage> &message);
std::shared_ptr<linphone::ChatMessage> createReplacesMessage(const std::shared_ptr<linphone::ChatMessage> &message);
std::shared_ptr<linphone::ChatMessage> createTextMessageFromText(QString text); std::shared_ptr<linphone::ChatMessage> createTextMessageFromText(QString text);
std::shared_ptr<linphone::ChatMessage> createMessage(QString text, std::shared_ptr<linphone::ChatMessage> createMessage(QString text,

View file

@ -51,7 +51,7 @@ ChatMessageModel::~ChatMessageModel() {
} }
QString ChatMessageModel::getText() const { QString ChatMessageModel::getText() const {
return ToolModel::getMessageFromMessage(mMonitor); return ToolModel::getMessageFromContent(mMonitor->getContents());
} }
QString ChatMessageModel::getUtf8Text() const { QString ChatMessageModel::getUtf8Text() const {
@ -103,13 +103,6 @@ void ChatMessageModel::deleteMessageFromChatRoom(bool deletedByUser) {
} }
} }
void ChatMessageModel::retractMessageFromChatRoom() {
auto chatRoom = mMonitor->getChatRoom();
if (chatRoom) {
chatRoom->retractMessage(mMonitor);
}
}
void ChatMessageModel::sendReaction(const QString &reaction) { void ChatMessageModel::sendReaction(const QString &reaction) {
auto linReaction = mMonitor->createReaction(Utils::appStringToCoreString(reaction)); auto linReaction = mMonitor->createReaction(Utils::appStringToCoreString(reaction));
linReaction->send(); linReaction->send();
@ -195,11 +188,3 @@ void ChatMessageModel::onEphemeralMessageTimerStarted(const std::shared_ptr<linp
void ChatMessageModel::onEphemeralMessageDeleted(const std::shared_ptr<linphone::ChatMessage> &message) { void ChatMessageModel::onEphemeralMessageDeleted(const std::shared_ptr<linphone::ChatMessage> &message) {
emit ephemeralMessageDeleted(message); emit ephemeralMessageDeleted(message);
} }
void ChatMessageModel::onRetracted(const std::shared_ptr<linphone::ChatMessage> &message) {
emit retracted(message);
}
void ChatMessageModel::onContentEdited(const std::shared_ptr<linphone::ChatMessage> &message) {
emit contentEdited(message);
}

View file

@ -52,7 +52,6 @@ public:
void markAsRead(); void markAsRead();
void deleteMessageFromChatRoom(bool deletedByUser); void deleteMessageFromChatRoom(bool deletedByUser);
void retractMessageFromChatRoom();
void sendReaction(const QString &reaction); void sendReaction(const QString &reaction);
@ -96,8 +95,6 @@ signals:
void ephemeralMessageTimerStarted(const std::shared_ptr<linphone::ChatMessage> &message); void ephemeralMessageTimerStarted(const std::shared_ptr<linphone::ChatMessage> &message);
void ephemeralMessageDeleted(const std::shared_ptr<linphone::ChatMessage> &message); void ephemeralMessageDeleted(const std::shared_ptr<linphone::ChatMessage> &message);
void ephemeralMessageTimeUpdated(const std::shared_ptr<linphone::ChatMessage> &message, int expireTime); void ephemeralMessageTimeUpdated(const std::shared_ptr<linphone::ChatMessage> &message, int expireTime);
void retracted(const std::shared_ptr<linphone::ChatMessage> &message);
void contentEdited(const std::shared_ptr<linphone::ChatMessage> &message);
private: private:
linphone::ChatMessage::State mMessageState; linphone::ChatMessage::State mMessageState;
@ -133,8 +130,6 @@ private:
const std::shared_ptr<const linphone::ParticipantImdnState> &state) override; const std::shared_ptr<const linphone::ParticipantImdnState> &state) override;
void onEphemeralMessageTimerStarted(const std::shared_ptr<linphone::ChatMessage> &message) override; void onEphemeralMessageTimerStarted(const std::shared_ptr<linphone::ChatMessage> &message) override;
void onEphemeralMessageDeleted(const std::shared_ptr<linphone::ChatMessage> &message) override; void onEphemeralMessageDeleted(const std::shared_ptr<linphone::ChatMessage> &message) override;
void onRetracted(const std::shared_ptr<linphone::ChatMessage> &message) override;
void onContentEdited(const std::shared_ptr<linphone::ChatMessage> &message) override;
}; };
#endif #endif

View file

@ -837,13 +837,26 @@ QString SettingsModel::getDefaultDomain() const {
mConfig->getString(SettingsModel::AppSection, "default_domain", "sip.linphone.org")); mConfig->getString(SettingsModel::AppSection, "default_domain", "sip.linphone.org"));
} }
void SettingsModel::enableCallForward(QString destination) {
// TODO implement business logic to activate call forward to destination on PBX via external API (contains voicemail
// or a destination).
mConfig->setString(UiSection, "call_forward_to_address", Utils::appStringToCoreString(destination));
emit callForwardToAddressChanged(getCallForwardToAddress());
}
void SettingsModel::disableCallForward() {
// TODO implement business logic to de-activate call forward on PBX via external API
mConfig->setString(UiSection, "call_forward_to_address", "");
}
QString SettingsModel::getCallForwardToAddress() const { QString SettingsModel::getCallForwardToAddress() const {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
return Utils::coreStringToAppString(mConfig->getString(UiSection, "call_forward_to_address", "")); return Utils::coreStringToAppString(mConfig->getString(UiSection, "call_forward_to_address", ""));
} }
void SettingsModel::setCallForwardToAddress(const QString &data) { void SettingsModel::setCallForwardToAddress(const QString &data) {
mConfig->setString(UiSection, "call_forward_to_address", Utils::appStringToCoreString(data)); // TODO implement BL if (data == "") disableCallForward();
else enableCallForward(data);
emit(callForwardToAddressChanged(data)); emit(callForwardToAddressChanged(data));
} }
@ -1126,6 +1139,13 @@ DEFINE_GETSET_CONFIG(SettingsModel,
DisableCommandLine, DisableCommandLine,
"disable_command_line", "disable_command_line",
false) false)
DEFINE_GETSET_CONFIG(SettingsModel,
bool,
Bool,
disableCallForward,
DisableCallForward,
"disable_call_forward",
true)
DEFINE_GETSET_CONFIG_STRING(SettingsModel, DEFINE_GETSET_CONFIG_STRING(SettingsModel,
themeMainColor, themeMainColor,
ThemeMainColor, ThemeMainColor,

View file

@ -223,6 +223,7 @@ public:
DECLARE_GETSET(bool, usernameOnlyForCardDAVLookupsInCalls, UsernameOnlyForCardDAVLookupsInCalls) DECLARE_GETSET(bool, usernameOnlyForCardDAVLookupsInCalls, UsernameOnlyForCardDAVLookupsInCalls)
DECLARE_GETSET(QString, commandLine, CommandLine) DECLARE_GETSET(QString, commandLine, CommandLine)
DECLARE_GETSET(bool, disableCommandLine, DisableCommandLine) DECLARE_GETSET(bool, disableCommandLine, DisableCommandLine)
DECLARE_GETSET(bool, disableCallForward, DisableCallForward)
DECLARE_GETSET(QString, callForwardToAddress, CallForwardToAddress) DECLARE_GETSET(QString, callForwardToAddress, CallForwardToAddress)
DECLARE_GETSET(QString, chatNotificationSoundPath, ChatNotificationSoundPath) DECLARE_GETSET(QString, chatNotificationSoundPath, ChatNotificationSoundPath)
DECLARE_GETSET(QString, themeMainColor, ThemeMainColor) DECLARE_GETSET(QString, themeMainColor, ThemeMainColor)
@ -292,6 +293,7 @@ private:
VfsUtils mVfsUtils; VfsUtils mVfsUtils;
#endif #endif
void enableCallForward(QString destination);
void disableCallForward(); void disableCallForward();
static std::shared_ptr<SettingsModel> gSettingsModel; static std::shared_ptr<SettingsModel> gSettingsModel;

View file

@ -537,15 +537,6 @@ QString ToolModel::getMessageFromContent(std::list<std::shared_ptr<linphone::Con
return res; return res;
} }
QString ToolModel::getMessageFromMessage(std::shared_ptr<linphone::ChatMessage> message) {
if (message->isRetracted()) {
return message->isOutgoing() ? tr("conversation_message_content_deleted_by_us_label")
: tr("conversation_message_content_deleted_label");
} else {
return getMessageFromContent(message->getContents());
}
}
// Load downloaded codecs like OpenH264 (needs to be after core is created and has loaded its plugins, as // Load downloaded codecs like OpenH264 (needs to be after core is created and has loaded its plugins, as
// reloadMsPlugins modifies plugin path for the factory) // reloadMsPlugins modifies plugin path for the factory)
void ToolModel::loadDownloadedCodecs() { void ToolModel::loadDownloadedCodecs() {

View file

@ -77,7 +77,6 @@ public:
const std::shared_ptr<linphone::Friend> &f); const std::shared_ptr<linphone::Friend> &f);
static QString getMessageFromContent(std::list<std::shared_ptr<linphone::Content>> contents); static QString getMessageFromContent(std::list<std::shared_ptr<linphone::Content>> contents);
static QString getMessageFromMessage(std::shared_ptr<linphone::ChatMessage> message);
static void loadDownloadedCodecs(); static void loadDownloadedCodecs();
static void updateCodecs(); static void updateCodecs();

View file

@ -2159,50 +2159,6 @@ void Utils::sendReplyMessage(ChatMessageGui *message, ChatGui *chatGui, QString
}); });
} }
void Utils::sendReplaceMessage(ChatMessageGui *message, ChatGui *chatGui, QString text, QVariantList files) {
auto chatModel = chatGui && chatGui->mCore ? chatGui->mCore->getModel() : nullptr;
auto chatMessageModel = message && message->mCore ? message->mCore->getModel() : nullptr;
if (!chatModel || !chatMessageModel) {
//: Cannot edit to invalid message
QString error = !chatMessageModel ? tr("chat_message_edit_error")
//: Error in the chat
: tr("chat_error");
//: Error
showInformationPopup(tr("info_popup_error_title"),
//: Could not send edited message : %1
tr("info_popup_edited_message_error").arg(error));
return;
}
QList<std::shared_ptr<ChatMessageContentModel>> filesContent;
for (auto &file : files) {
auto contentGui = qvariant_cast<ChatMessageContentGui *>(file);
if (contentGui) {
auto contentCore = contentGui->mCore;
filesContent.append(contentCore->getContentModel());
}
}
App::postModelAsync([chatModel, chatMessageModel, text, filesContent] {
mustBeInLinphoneThread(sLog().arg(Q_FUNC_INFO));
auto chat = chatModel->getMonitor();
auto messageToEdit = chatMessageModel->getMonitor();
auto linMessage = chatModel->createReplacesMessage(messageToEdit);
if (linMessage) {
linMessage->addUtf8TextContent(Utils::appStringToCoreString(text));
for (auto &content : filesContent) {
linMessage->addFileContent(content->getContent());
}
linMessage->send();
} else {
App::postCoreAsync([] {
//: Error
showInformationPopup(tr("info_popup_error_title"),
//: Failed to create edited message
tr("info_popup_send_edited_message_error_message"));
});
}
});
}
VariantObject *Utils::createVoiceRecordingMessage(RecorderGui *recorderGui, ChatGui *chatGui) { VariantObject *Utils::createVoiceRecordingMessage(RecorderGui *recorderGui, ChatGui *chatGui) {
VariantObject *data = new VariantObject("createVoiceRecordingMessage"); VariantObject *data = new VariantObject("createVoiceRecordingMessage");
if (!data) return nullptr; if (!data) return nullptr;

View file

@ -183,8 +183,6 @@ public:
Q_INVOKABLE static void Q_INVOKABLE static void
sendReplyMessage(ChatMessageGui *message, ChatGui *chatGui, QString text, QVariantList files); sendReplyMessage(ChatMessageGui *message, ChatGui *chatGui, QString text, QVariantList files);
Q_INVOKABLE static void forwardMessageTo(ChatMessageGui *message, ChatGui *chatGui); Q_INVOKABLE static void forwardMessageTo(ChatMessageGui *message, ChatGui *chatGui);
Q_INVOKABLE static void
sendReplaceMessage(ChatMessageGui *message, ChatGui *chatGui, QString text, QVariantList files);
Q_INVOKABLE static void sendVoiceRecordingMessage(RecorderGui *recorderGui, ChatGui *chatGui); Q_INVOKABLE static void sendVoiceRecordingMessage(RecorderGui *recorderGui, ChatGui *chatGui);
Q_INVOKABLE static QString getEphemeralFormatedTime(int selectedTime); Q_INVOKABLE static QString getEphemeralFormatedTime(int selectedTime);

View file

@ -11,21 +11,19 @@ import "qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js" as Utils
ListView { ListView {
id: mainItem id: mainItem
implicitHeight: contentHeight
spacing: Utils.getSizeWithScreenRatio(15)
clip: true
property bool isTransferList: false
property string currentRemoteAddress: AppCpp.calls.currentCall ? AppCpp.calls.currentCall.core.remoteAddress : ""
signal transferCallToAnotherRequested(CallGui dest)
onCountChanged: forceLayout()
model: CallProxy { model: CallProxy {
id: callProxy id: callProxy
sourceModel: AppCpp.calls sourceModel: AppCpp.calls
showCurrentCall: !mainItem.isTransferList
} }
implicitHeight: contentHeight
spacing: Utils.getSizeWithScreenRatio(15)
clip: true
onCountChanged: forceLayout()
signal transferCallToAnotherRequested(CallGui dest)
property bool isTransferList: false
property string currentRemoteAddress: AppCpp.calls.currentCall ? AppCpp.calls.currentCall.core.remoteAddress : ""
delegate: RowLayout { delegate: RowLayout {
id: callInformationItem id: callInformationItem

View file

@ -32,7 +32,6 @@ Control.Control {
leftPadding: isRemoteMessage ? Utils.getSizeWithScreenRatio(5) : 0 leftPadding: isRemoteMessage ? Utils.getSizeWithScreenRatio(5) : 0
signal messageDeletionRequested() signal messageDeletionRequested()
signal messageEditionRequested()
signal isFileHoveringChanged(bool isFileHovering) signal isFileHoveringChanged(bool isFileHovering)
signal showReactionsForMessageRequested() signal showReactionsForMessageRequested()
signal showImdnStatusForMessageRequested() signal showImdnStatusForMessageRequested()
@ -248,21 +247,11 @@ Control.Control {
} }
contentItem: ColumnLayout { contentItem: ColumnLayout {
spacing: Utils.getSizeWithScreenRatio(5) spacing: Utils.getSizeWithScreenRatio(5)
Text {
id: retractedId
visible: mainItem.chatMessage.core.isRetracted
font: Typography.p1i
color: DefaultStyle.info_800_main
Layout.fillWidth: true
Layout.fillHeight: true
text: mainItem.chatMessage.core.text
}
ChatMessageContent { ChatMessageContent {
id: chatBubbleContent id: chatBubbleContent
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
chatGui: mainItem.chat chatGui: mainItem.chat
visible: !mainItem.chatMessage.core.isRetracted
searchedTextPart: mainItem.searchedTextPart searchedTextPart: mainItem.searchedTextPart
chatMessageGui: mainItem.chatMessage chatMessageGui: mainItem.chatMessage
maxWidth: mainItem.maxWidth maxWidth: mainItem.maxWidth
@ -298,26 +287,16 @@ Control.Control {
} }
} }
RowLayout { RowLayout {
spacing: mainItem.isRemoteMessage && !mainItem.chatMessage.core.isEdited ? 0 : Utils.getSizeWithScreenRatio(5) spacing: mainItem.isRemoteMessage ? 0 : Utils.getSizeWithScreenRatio(5)
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
Layout.preferredHeight: childrenRect.height Layout.preferredHeight: childrenRect.height
Text {
Layout.alignment: Qt.AlignVCenter
text: qsTr("conversation_message_edited_label")
visible: mainItem.chatMessage.core.isEdited
color: DefaultStyle.main2_500_main
font {
pixelSize: Typography.p3.pixelSize
weight: Typography.p3.weight
}
}
Text { Text {
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
text: UtilsCpp.formatDate(mainItem.chatMessage.core.timestamp, true, false, "dd/MM") text: UtilsCpp.formatDate(mainItem.chatMessage.core.timestamp, true, false, "dd/MM")
color: DefaultStyle.main2_500_main color: DefaultStyle.main2_500_main
font { font {
pixelSize: Typography.p3.pixelSize pixelSize: Typography.p3.pixelSize
weight: Typography.p3.weight weight: Typography.p3.weight
} }
} }
EffectImage { EffectImage {
@ -434,22 +413,8 @@ Control.Control {
optionsMenu.close() optionsMenu.close()
} }
} }
IconLabelButton {
inverseLayout: true
//: "Edit"
text: qsTr("menu_edit_chat_message")
visible: mainItem.chatMessage.core.isEditable
icon.source: AppIcons.pencil
Layout.fillWidth: true
Layout.preferredHeight: Utils.getSizeWithScreenRatio(45)
onClicked: {
mainItem.messageEditionRequested()
optionsMenu.close()
}
}
IconLabelButton { IconLabelButton {
inverseLayout: true inverseLayout: true
visible: !mainItem.chatMessage.core.isRetracted
//: Reply //: Reply
text: qsTr("chat_message_reply") text: qsTr("chat_message_reply")
icon.source: AppIcons.reply icon.source: AppIcons.reply
@ -462,7 +427,6 @@ Control.Control {
} }
IconLabelButton { IconLabelButton {
inverseLayout: true inverseLayout: true
visible: !mainItem.chatMessage.core.isRetracted
text: chatBubbleContent.selectedText != "" text: chatBubbleContent.selectedText != ""
//: "Copy selection" //: "Copy selection"
? qsTr("chat_message_copy_selection") ? qsTr("chat_message_copy_selection")
@ -483,7 +447,6 @@ Control.Control {
} }
IconLabelButton { IconLabelButton {
inverseLayout: true inverseLayout: true
visible: !mainItem.chatMessage.core.isRetracted
//: Forward //: Forward
text: qsTr("chat_message_forward") text: qsTr("chat_message_forward")
icon.source: AppIcons.forward icon.source: AppIcons.forward

View file

@ -158,21 +158,10 @@ ColumnLayout {
} }
} }
RowLayout { Text {
spacing: Utils.getSizeWithScreenRatio(8) text: conferenceInfo.dateTime.toLocaleString(Qt.locale(), "dddd d MMMM yyyy")
Text { font: Typography.p4
text: conferenceInfo.dateTime.toLocaleString(Qt.locale(), "dddd d MMMM yyyy") color: DefaultStyle.main2_500_main
font: Typography.p4
color: DefaultStyle.main2_500_main
}
RoundButton {
id: calendarPlusButton
style: ButtonStyle.noBackground
icon.source: AppIcons.calendarPlus
onClicked: {
conferenceInfo.exportConferenceToICS()
}
}
} }
Text { Text {
//: from %1 to %2 (UTC%3) //: from %1 to %2 (UTC%3)

View file

@ -25,7 +25,6 @@ ListView {
signal showImdnStatusForMessageRequested(ChatMessageGui chatMessage) signal showImdnStatusForMessageRequested(ChatMessageGui chatMessage)
signal replyToMessageRequested(ChatMessageGui chatMessage) signal replyToMessageRequested(ChatMessageGui chatMessage)
signal forwardMessageRequested(ChatMessageGui chatMessage) signal forwardMessageRequested(ChatMessageGui chatMessage)
signal editMessageRequested(ChatMessageGui chatMessage)
signal requestHighlight(int indexToHighlight) signal requestHighlight(int indexToHighlight)
signal requestAutoPlayVoiceRecording(int indexToPlay) signal requestAutoPlayVoiceRecording(int indexToPlay)
currentIndex: -1 currentIndex: -1
@ -226,51 +225,6 @@ ListView {
indicatorColor: DefaultStyle.main1_500_main indicatorColor: DefaultStyle.main1_500_main
} }
Dialog {
id: messageDeletionDialog
width: Utils.getSizeWithScreenRatio(637)
//: "Supprimer le message ?"
title: qsTr("conversation_dialog_delete_chat_message_title")
property var chatMessage
buttons: RowLayout {
id: buttonsLayout
Layout.alignment: Qt.AlignBottom | Qt.AlignRight
spacing: Utils.getSizeWithScreenRatio(20)
MediumButton {
id: firstButtonId
text: qsTr("conversation_dialog_delete_locally_label")
style: ButtonStyle.main
onClicked: {
messageDeletionDialog.chatMessage.core.lDelete()
messageDeletionDialog.close()
}
KeyNavigation.left: thirdButtonId
KeyNavigation.right: secondButtonId
}
MediumButton {
id: secondButtonId
text: qsTr("conversation_dialog_delete_for_everyone_label")
style: ButtonStyle.main
onClicked: {
messageDeletionDialog.chatMessage.core.lRetract()
messageDeletionDialog.close()
}
KeyNavigation.left: firstButtonId
KeyNavigation.right: thirdButtonId
}
MediumButton {
id: thirdButtonId
text: qsTr("dialog_cancel")
style: ButtonStyle.secondary
onClicked: {
messageDeletionDialog.close()
}
KeyNavigation.left: secondButtonId
KeyNavigation.right: firstButtonId
}
}
}
delegate: DelegateChooser { delegate: DelegateChooser {
role: "eventType" role: "eventType"
DelegateChoice { DelegateChoice {
@ -308,15 +262,7 @@ ListView {
? parent.right ? parent.right
: undefined : undefined
onMessageDeletionRequested: { onMessageDeletionRequested: chatMessage.core.lDelete()
if (chatMessage.core.isOutgoing && chatMessage.core.isRetractable && !chatMessage.core.isRetracted) {
messageDeletionDialog.chatMessage = chatMessage
messageDeletionDialog.open()
} else {
chatMessage.core.lDelete()
}
}
onMessageEditionRequested: mainItem.editMessageRequested(chatMessage)
onShowReactionsForMessageRequested: mainItem.showReactionsForMessageRequested(chatMessage) onShowReactionsForMessageRequested: mainItem.showReactionsForMessageRequested(chatMessage)
onShowImdnStatusForMessageRequested: mainItem.showImdnStatusForMessageRequested(chatMessage) onShowImdnStatusForMessageRequested: mainItem.showImdnStatusForMessageRequested(chatMessage)
onReplyToMessageRequested: mainItem.replyToMessageRequested(chatMessage) onReplyToMessageRequested: mainItem.replyToMessageRequested(chatMessage)
@ -337,16 +283,6 @@ ListView {
} }
} }
} }
Connections {
target: chatMessage.core
onIsRetractedChanged: {
if (chatMessage.core.isRetracted && chatMessage.core.isOutgoing) {
UtilsCpp.showInformationPopup(qsTr("info_toast_deleted_title"),
//: The message has been deleted
qsTr("info_toast_deleted_message"), true)
}
}
}
} }
} }

View file

@ -23,7 +23,6 @@ Control.Control {
// disable record button if call ongoing // disable record button if call ongoing
property bool callOngoing: false property bool callOngoing: false
property bool isEditing: false
property ChatGui chat property ChatGui chat
@ -79,7 +78,6 @@ Control.Control {
spacing: Utils.getSizeWithScreenRatio(16) spacing: Utils.getSizeWithScreenRatio(16)
PopupButton { PopupButton {
id: emojiPickerButton id: emojiPickerButton
visible: !mainItem.isEditing
style: ButtonStyle.noBackground style: ButtonStyle.noBackground
icon.source: checked ? AppIcons.closeX : AppIcons.smiley icon.source: checked ? AppIcons.closeX : AppIcons.smiley
popup.width: Utils.getSizeWithScreenRatio(393) popup.width: Utils.getSizeWithScreenRatio(393)
@ -191,7 +189,7 @@ Control.Control {
//: Cannot record a message while a call is ongoing //: Cannot record a message while a call is ongoing
ToolTip.text: qsTr("cannot_record_while_in_call_tooltip") ToolTip.text: qsTr("cannot_record_while_in_call_tooltip")
enabled: !mainItem.callOngoing enabled: !mainItem.callOngoing
visible: !mainItem.callOngoing && sendingTextArea.text.length === 0 && mainItem.selectedFilesCount === 0 && !mainItem.isEditing visible: !mainItem.callOngoing && sendingTextArea.text.length === 0 && mainItem.selectedFilesCount === 0
style: ButtonStyle.noBackground style: ButtonStyle.noBackground
hoverEnabled: true hoverEnabled: true
icon.source: AppIcons.microphone icon.source: AppIcons.microphone
@ -204,7 +202,7 @@ Control.Control {
Layout.preferredHeight: height Layout.preferredHeight: height
visible: sendingTextArea.text.length !== 0 || mainItem.selectedFilesCount > 0 visible: sendingTextArea.text.length !== 0 || mainItem.selectedFilesCount > 0
style: ButtonStyle.noBackgroundOrange style: ButtonStyle.noBackgroundOrange
icon.source: mainItem.isEditing ? AppIcons.pencil : AppIcons.paperPlaneRight icon.source: AppIcons.paperPlaneRight
onClicked: { onClicked: {
mainItem.sendMessage() mainItem.sendMessage()
} }

View file

@ -20,7 +20,6 @@ CreationFormLayout {
topLayoutVisible: mainItem.displayCurrentCalls && callList.count > 0 topLayoutVisible: mainItem.displayCurrentCalls && callList.count > 0
topContent: [ topContent: [
Text { Text {
visible: callList.count > 0
//: "Appels en cours" //: "Appels en cours"
text: qsTr("call_transfer_active_calls_label") text: qsTr("call_transfer_active_calls_label")
font { font {

View file

@ -21,7 +21,6 @@ FocusScope {
property CallGui call property CallGui call
property alias callHeaderContent: splitPanel.header.contentItem property alias callHeaderContent: splitPanel.header.contentItem
property bool replyingToMessage: false property bool replyingToMessage: false
property bool editingMessage: false
enum PanelType { MessageReactions, SharedFiles, Medias, ImdnStatus, ForwardToList, ManageParticipants, EphemeralSettings, None} enum PanelType { MessageReactions, SharedFiles, Medias, ImdnStatus, ForwardToList, ManageParticipants, EphemeralSettings, None}
signal oneOneCall(bool video) signal oneOneCall(bool video)
@ -300,19 +299,11 @@ FocusScope {
onReplyToMessageRequested: (chatMessage) => { onReplyToMessageRequested: (chatMessage) => {
mainItem.chatMessage = chatMessage mainItem.chatMessage = chatMessage
mainItem.replyingToMessage = true mainItem.replyingToMessage = true
if (mainItem.editingMessage) mainItem.editingMessage = false
} }
onForwardMessageRequested: (chatMessage) => { onForwardMessageRequested: (chatMessage) => {
mainItem.chatMessage = chatMessage mainItem.chatMessage = chatMessage
contentLoader.panelType = SelectedChatView.PanelType.ForwardToList contentLoader.panelType = SelectedChatView.PanelType.ForwardToList
detailsPanel.visible = true detailsPanel.visible = true
if (mainItem.editingMessage) mainItem.editingMessage = false
}
onEditMessageRequested: (chatMessage) => {
mainItem.chatMessage = chatMessage
mainItem.editingMessage = true
if (mainItem.replyingToMessage) mainItem.replyingToMessage = false
messageSender.text = chatMessage.core.text
} }
} }
ScrollBar { ScrollBar {
@ -376,7 +367,7 @@ FocusScope {
} }
Control.Control { Control.Control {
id: selectedFilesArea id: selectedFilesArea
visible: selectedFiles.count > 0 || mainItem.replyingToMessage || mainItem.editingMessage visible: selectedFiles.count > 0 || mainItem.replyingToMessage
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: implicitHeight Layout.preferredHeight: implicitHeight
topPadding: Utils.getSizeWithScreenRatio(12) topPadding: Utils.getSizeWithScreenRatio(12)
@ -393,12 +384,7 @@ FocusScope {
style: ButtonStyle.noBackground style: ButtonStyle.noBackground
onClicked: { onClicked: {
contents.clear() contents.clear()
if (mainItem.replyingToMessage) mainItem.replyingToMessage = false
mainItem.replyingToMessage = false
else if (mainItem.editingMessage) {
mainItem.editingMessage = false
messageSender.text = ""
}
} }
} }
background: Item{ background: Item{
@ -424,13 +410,11 @@ FocusScope {
ColumnLayout { ColumnLayout {
id: replyLayout id: replyLayout
spacing: 0 spacing: 0
visible: mainItem.chatMessage && (mainItem.replyingToMessage || mainItem.editingMessage) visible: mainItem.chatMessage && mainItem.replyingToMessage
Text { Text {
Layout.fillWidth: true Layout.fillWidth: true
//: Reply to %1 //: Reply to %1
text: mainItem.replyingToMessage ? text: mainItem.chatMessage ? qsTr("reply_to_label").arg(UtilsCpp.boldTextPart(mainItem.chatMessage.core.fromName, mainItem.chatMessage.core.fromName)) : ""
(mainItem.chatMessage ? qsTr("reply_to_label").arg(UtilsCpp.boldTextPart(mainItem.chatMessage.core.fromName, mainItem.chatMessage.core.fromName)) : "")
: qsTr("conversation_editing_message_title")
color: DefaultStyle.main2_500_main color: DefaultStyle.main2_500_main
font { font {
pixelSize: Typography.p3.pixelSize pixelSize: Typography.p3.pixelSize
@ -505,7 +489,6 @@ FocusScope {
chat: mainItem.chat chat: mainItem.chat
selectedFilesCount: contents.count selectedFilesCount: contents.count
callOngoing: mainItem.call != null callOngoing: mainItem.call != null
isEditing: mainItem.editingMessage
onChatChanged: { onChatChanged: {
if (chat) messageSender.text = mainItem.chat.core.sendingText if (chat) messageSender.text = mainItem.chat.core.sendingText
} }
@ -524,10 +507,6 @@ FocusScope {
mainItem.replyingToMessage = false mainItem.replyingToMessage = false
UtilsCpp.sendReplyMessage(mainItem.chatMessage, mainItem.chat, text, filesContents) UtilsCpp.sendReplyMessage(mainItem.chatMessage, mainItem.chat, text, filesContents)
} }
else if (mainItem.editingMessage) {
UtilsCpp.sendReplaceMessage(mainItem.chatMessage, mainItem.chat, text, filesContents)
mainItem.editingMessage = false
}
else if (filesContents.length === 0) else if (filesContents.length === 0)
mainItem.chat.core.lSendTextMessage(text) mainItem.chat.core.lSendTextMessage(text)
else mainItem.chat.core.lSendMessage(text, filesContents) else mainItem.chat.core.lSendMessage(text, filesContents)

View file

@ -50,8 +50,4 @@ AbstractSettingsMenu {
qsTr("contact_editor_dialog_abort_confirmation_save") qsTr("contact_editor_dialog_abort_confirmation_save")
) )
} else {mainItem.goBack()} } else {mainItem.goBack()}
Component.onCompleted: {
SettingsCpp.isSaved = true
}
} }

View file

@ -207,14 +207,6 @@ AbstractSettingsLayout {
propertyOwnerGui: account propertyOwnerGui: account
toValidate: true toValidate: true
} }
DecoratedTextField {
Layout.fillWidth: true
//: "URL du serveur CCMP"
title: qsTr("account_settings_ccmp_server_url_title")
propertyName: "ccmpServerUrl"
propertyOwnerGui: account
toValidate: true
}
} }
} }
} }

View file

@ -167,17 +167,6 @@ AbstractSettingsLayout {
subTitleText: modelData.core.clockRate + " Hz" subTitleText: modelData.core.clockRate + " Hz"
propertyName: "enabled" propertyName: "enabled"
propertyOwnerGui: modelData propertyOwnerGui: modelData
Connections {
target: modelData.core
function onChanged() { SettingsCpp.isSaved = false }
}
Connections {
target: SettingsCpp
function onIsSavedChanged(saved) {
if (saved)
modelData.core.save()
}
}
} }
} }
} }
@ -205,17 +194,6 @@ AbstractSettingsLayout {
subTitleText: modelData.core.encoderDescription subTitleText: modelData.core.encoderDescription
propertyName: "enabled" propertyName: "enabled"
propertyOwnerGui: modelData propertyOwnerGui: modelData
Connections {
target: modelData.core
function onChanged() { SettingsCpp.isSaved = false }
}
Connections {
target: SettingsCpp
function onIsSavedChanged(saved) {
if (saved)
modelData.core.save()
}
}
} }
} }
ListView { ListView {

View file

@ -9,9 +9,11 @@ import "qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js" as Utils
AbstractSettingsLayout { AbstractSettingsLayout {
id: mainItem id: mainItem
width: parent?.width
property bool enableCallForward: SettingsCpp.callForwardToAddress.length > 0 property bool enableCallForward: SettingsCpp.callForwardToAddress.length > 0
property string localCallForwardToAddress: SettingsCpp.callForwardToAddress
width: parent?.width
contentModel: [ contentModel: [
{ {
@ -21,14 +23,44 @@ AbstractSettingsLayout {
} }
] ]
Connections {
target: SettingsCpp
function onCallForwardToAddressChanged() {
requestTimeOut.stop()
UtilsCpp.getMainWindow().closeLoadingPopup()
UtilsCpp.showInformationPopup("",
SettingsCpp.callForwardToAddress
? qsTr("settings_call_forward_activation_success") + (SettingsCpp.callForwardToAddress == "voicemail" ? qsTr("settings_call_forward_to_voicemail") : SettingsCpp.callForwardToAddress)
: qsTr("settings_call_forward_deactivation_success")
, true)
}
}
Timer {
id: requestTimeOut
interval: 10000
running: false
repeat: false
onTriggered: {
UtilsCpp.getMainWindow().closeLoadingPopup()
UtilsCpp.showInformationPopup("", qsTr("settings_call_forward_address_timeout"), false)
}
}
onSave: { onSave: {
if (mainItem.enableCallForward && SettingsCpp.callForwardToAddress.length == 0) { if (mainItem.enableCallForward && mainItem.localCallForwardToAddress.length == 0) {
UtilsCpp.getMainWindow().showInformationPopup("", qsTr("settings_call_forward_address_cannot_be_empty"), false) UtilsCpp.getMainWindow().showInformationPopup("", qsTr("settings_call_forward_address_cannot_be_empty"), false)
return return
} }
SettingsCpp.save() requestTimeOut.start()
if (!mainItem.enableCallForward && SettingsCpp.callForwardToAddress.length > 0) {
UtilsCpp.getMainWindow().showLoadingPopup(qsTr("settings_call_forward_address_progress_disabling") + " ...")
SettingsCpp.callForwardToAddress = ""
} else if (SettingsCpp.callForwardToAddress != mainItem.localCallForwardToAddress) {
UtilsCpp.getMainWindow().showLoadingPopup(qsTr("settings_call_forward_address_progress_enabling")+(mainItem.localCallForwardToAddress === 'voicemail' ? qsTr("settings_call_forward_to_voicemail") : mainItem.localCallForwardToAddress) + " ...")
SettingsCpp.callForwardToAddress = mainItem.localCallForwardToAddress
}
} }
onUndo: SettingsCpp.undo()
// Generic forward parameters // Generic forward parameters
///////////////////////////// /////////////////////////////
@ -44,11 +76,6 @@ AbstractSettingsLayout {
subTitleText: qsTr("settings_call_forward_activate_subtitle") subTitleText: qsTr("settings_call_forward_activate_subtitle")
propertyName: "enableCallForward" propertyName: "enableCallForward"
propertyOwner: mainItem propertyOwner: mainItem
onToggled: function () {
SettingsCpp.isSaved = false
if (!mainItem.enableCallForward)
SettingsCpp.callForwardToAddress = ""
}
} }
Text { Text {
visible: mainItem.enableCallForward visible: mainItem.enableCallForward
@ -72,7 +99,7 @@ AbstractSettingsLayout {
Component.onCompleted: { Component.onCompleted: {
if (mainItem.enableCallForward) { if (mainItem.enableCallForward) {
forwardDestination.currentIndex = forwardDestination.currentIndex =
(SettingsCpp.callForwardToAddress === "voicemail" || SettingsCpp.callForwardToAddress.length === 0) ? 0 : 1; (mainItem.localCallForwardToAddress === "voicemail" || mainItem.localCallForwardToAddress.length === 0) ? 0 : 1;
} else { } else {
forwardDestination.currentIndex = 0; forwardDestination.currentIndex = 0;
} }
@ -82,16 +109,16 @@ AbstractSettingsLayout {
if (!forwardDestination.isInitialized) if (!forwardDestination.isInitialized)
return; return;
if (currentIndex == 0) if (currentIndex == 0)
SettingsCpp.callForwardToAddress = "voicemail"; mainItem.localCallForwardToAddress = "voicemail";
else { else {
SettingsCpp.callForwardToAddress = ""; mainItem.localCallForwardToAddress = "";
sipInputField.empty(); sipInputField.empty();
} }
} }
onVisibleChanged: { onVisibleChanged: {
if (visible) { if (visible) {
currentIndex = 0 currentIndex = 0
SettingsCpp.callForwardToAddress = "voicemail"; mainItem.localCallForwardToAddress = "voicemail";
} }
} }
@ -100,8 +127,8 @@ AbstractSettingsLayout {
id: sipInputField id: sipInputField
visible: mainItem.enableCallForward && forwardDestination.currentIndex == 1 visible: mainItem.enableCallForward && forwardDestination.currentIndex == 1
Layout.fillWidth: true Layout.fillWidth: true
propertyName: "callForwardToAddress" propertyName: "localCallForwardToAddress"
propertyOwner: SettingsCpp propertyOwner: mainItem
//: SIP Address //: SIP Address
title: qsTr("settings_call_forward_sipaddress_title") title: qsTr("settings_call_forward_sipaddress_title")
placeHolder: qsTr("settings_call_forward_sipaddress_placeholder") placeHolder: qsTr("settings_call_forward_sipaddress_placeholder")

View file

@ -738,7 +738,7 @@ AbstractMainPage {
KeyNavigation.left: linkButton KeyNavigation.left: linkButton
KeyNavigation.right: linkButton KeyNavigation.right: linkButton
KeyNavigation.up: deletePopup KeyNavigation.up: deletePopup
KeyNavigation.down: calendarPlusButton KeyNavigation.down: joinButton
onClicked: { onClicked: {
var success = UtilsCpp.copyToClipboard(mainItem.selectedConference.core.uri) var success = UtilsCpp.copyToClipboard(mainItem.selectedConference.core.uri)
if (success) UtilsCpp.showInformationPopup(qsTr("saved"), if (success) UtilsCpp.showInformationPopup(qsTr("saved"),
@ -767,18 +767,6 @@ AbstractMainPage {
capitalization: Font.Capitalize capitalization: Font.Capitalize
} }
} }
RoundButton {
id: calendarPlusButton
style: ButtonStyle.noBackground
icon.source: AppIcons.calendarPlus
KeyNavigation.left: calendarPlusButton
KeyNavigation.right: calendarPlusButton
KeyNavigation.up: shareNetworkButton
KeyNavigation.down: joinButton
onClicked: {
mainItem.selectedConference.core.exportConferenceToICS()
}
}
} }
RowLayout { RowLayout {
spacing: Utils.getSizeWithScreenRatio(8) spacing: Utils.getSizeWithScreenRatio(8)

View file

@ -124,8 +124,8 @@ AbstractWindow {
function onAssistantGoDirectlyToThirdPartySipAccountLoginChanged() { function onAssistantGoDirectlyToThirdPartySipAccountLoginChanged() {
initStackViewItem() initStackViewItem()
} }
function onIsSavedChanged(saved) { function onIsSavedChanged() {
if (saved) UtilsCpp.showInformationPopup(qsTr("information_popup_success_title"), if (SettingsCpp.isSaved) UtilsCpp.showInformationPopup(qsTr("information_popup_success_title"),
//: "Les changements ont été sauvegardés" //: "Les changements ont été sauvegardés"
qsTr("information_popup_changes_saved"), true, mainWindow) qsTr("information_popup_changes_saved"), true, mainWindow)
} }

View file

@ -160,5 +160,4 @@ QtObject {
property string ephemeralSettings: "image://internal/ephemeral-settings.svg" property string ephemeralSettings: "image://internal/ephemeral-settings.svg"
property string hourglass: "image://internal/hourglass-simple.svg" property string hourglass: "image://internal/hourglass-simple.svg"
property string qtLogo: "image://internal/qt-logo.png" property string qtLogo: "image://internal/qt-logo.png"
property string calendarPlus: "image://internal/calendar-plus.svg"
} }

View file

@ -47,7 +47,6 @@ QtObject {
property var success_700: "#377d71" property var success_700: "#377d71"
property var success_900: "#1E4C53" property var success_900: "#1E4C53"
property var info_500_main: "#4AA8FF" property var info_500_main: "#4AA8FF"
property var info_800_main: "#02528D"
property var vue_meter_light_green: "#6FF88D" property var vue_meter_light_green: "#6FF88D"
property var vue_meter_dark_green: "#00D916" property var vue_meter_dark_green: "#00D916"

View file

@ -81,14 +81,6 @@ QtObject {
weight: Font.Normal weight: Font.Normal
}) })
// Text/P1i - Paragraph text Italic
property font p1i: Qt.font( {
family: DefaultStyle.defaultFont,
pixelSize: Utils.getSizeWithScreenRatio(14),
weight: Font.Normal,
italic: true
})
// Text/P1s - Paragraph text // Text/P1s - Paragraph text
property font p1s: Qt.font( { property font p1s: Qt.font( {
family: DefaultStyle.defaultFont, family: DefaultStyle.defaultFont,

View file

@ -117,11 +117,12 @@ elseif(WIN32)
NAMES msys2_shell.cmd NAMES msys2_shell.cmd
HINTS "C:/msys64/" HINTS "C:/msys64/"
) )
set(MSVC_VERSION ${MSVC_TOOLSET_VERSION})
set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE) set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
if (CMAKE_BUILD_TYPE STREQUAL "Debug") if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE) set(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE)
endif() endif()
include(InstallRequiredSystemLibraries) include(InstallRequiredSystemLibraries)
find_file(UCRTBASE_LIB "ucrtbase.dll" PATHS "C:/Windows/System32") find_file(UCRTBASE_LIB "ucrtbase.dll" PATHS "C:/Windows/System32")
install(FILES ${UCRTBASE_LIB} DESTINATION "${CMAKE_INSTALL_BINDIR}") install(FILES ${UCRTBASE_LIB} DESTINATION "${CMAKE_INSTALL_BINDIR}")

@ -1 +1 @@
Subproject commit dc5d0d260cc5db90dc4d7dcb49780a12aaada33b Subproject commit 3ac59232c3f6c0553226708ef7ce81f716fbb10e