try to remove ffmpeg dependency #LINQT-2015

Clean friends manager maps when restarting app as the linphone core will be reset (fix #LINQT-1933)

only show error message once when linphone restarts if remote configuration failed #LINQT-2030

auto update contact list on carddav synchronized (fix #LINQT-1983)
This commit is contained in:
Gaelle Braud 2025-10-16 12:50:10 +02:00
parent af373148e3
commit 4e81981c07
19 changed files with 89 additions and 19 deletions

View file

@ -36,7 +36,7 @@ ubuntu2004-ninja-clang:
- !reference [.rules-merge-request-manual, rules] - !reference [.rules-merge-request-manual, rules]
- if: $NIGHTLY_MASTER - if: $NIGHTLY_MASTER
variables: variables:
CMAKE_OPTIONS: -DENABLE_DOC=ON -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON CMAKE_OPTIONS: -DENABLE_DOC=ON -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF
CMAKE_GENERATOR: Ninja CMAKE_GENERATOR: Ninja
CC: clang CC: clang
CXX: clang++ CXX: clang++
@ -59,7 +59,7 @@ ubuntu2004-makefile-gcc:
- if: $NIGHTLY_MASTER - if: $NIGHTLY_MASTER
- if: $DEPLOY_PLUGINS - if: $DEPLOY_PLUGINS
variables: variables:
CMAKE_OPTIONS: -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON CMAKE_OPTIONS: -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF
CMAKE_GENERATOR: Unix Makefiles CMAKE_GENERATOR: Unix Makefiles
CC: gcc CC: gcc
CXX: g++ CXX: g++
@ -105,7 +105,7 @@ ubuntu2004-makefile-gcc-package:
- if: $PACKAGE_LINUX - if: $PACKAGE_LINUX
- if: $DEPLOY_LINUX - if: $DEPLOY_LINUX
variables: variables:
CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$LINUX_PLATFORM/$APP_FOLDER -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$LINUX_PLATFORM/$APP_FOLDER -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF
CMAKE_GENERATOR: Unix Makefiles CMAKE_GENERATOR: Unix Makefiles
CC: gcc CC: gcc
CXX: g++ CXX: g++

View file

@ -36,7 +36,7 @@ ubuntu2204-ninja-clang:
- !reference [.rules-merge-request-manual, rules] - !reference [.rules-merge-request-manual, rules]
- if: $NIGHTLY_MASTER - if: $NIGHTLY_MASTER
variables: variables:
CMAKE_OPTIONS: -DENABLE_DOC=ON -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON CMAKE_OPTIONS: -DENABLE_DOC=ON -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF
CMAKE_GENERATOR: Ninja CMAKE_GENERATOR: Ninja
CC: clang CC: clang
CXX: clang++ CXX: clang++
@ -59,7 +59,7 @@ ubuntu2204-makefile-gcc:
- if: $NIGHTLY_MASTER - if: $NIGHTLY_MASTER
- if: $DEPLOY_PLUGINS - if: $DEPLOY_PLUGINS
variables: variables:
CMAKE_OPTIONS: -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON CMAKE_OPTIONS: -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF
CMAKE_GENERATOR: Unix Makefiles CMAKE_GENERATOR: Unix Makefiles
CC: gcc CC: gcc
CXX: g++ CXX: g++
@ -105,7 +105,7 @@ ubuntu2204-makefile-gcc-package:
- if: $PACKAGE_LINUX - if: $PACKAGE_LINUX
- if: $DEPLOY_LINUX - if: $DEPLOY_LINUX
variables: variables:
CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$LINUX_PLATFORM/$APP_FOLDER -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DLINPHONE_BUILDER_SIGNING_IDENTITY=$GPG_SIGNING_KEYID -DENABLE_G729=ON -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$LINUX_PLATFORM/$APP_FOLDER -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF
CMAKE_GENERATOR: Unix Makefiles CMAKE_GENERATOR: Unix Makefiles
CC: gcc CC: gcc
CXX: g++ CXX: g++

View file

@ -102,7 +102,7 @@ macosx-ninja-package:
- if: $PACKAGE_MACOSX - if: $PACKAGE_MACOSX
- if: $DEPLOY_MACOSX - if: $DEPLOY_MACOSX
variables: variables:
CMAKE_OPTIONS: -DPython3_ROOT_DIR=/opt/bc/pip-packages/ -DENABLE_APP_PACKAGING=ON -DENABLE_GPL_THIRD_PARTIES=ON -DENABLE_G729=ON CMAKE_OPTIONS: -DPython3_ROOT_DIR=/opt/bc/pip-packages/ -DENABLE_APP_PACKAGING=ON -DENABLE_GPL_THIRD_PARTIES=OFF -DENABLE_G729=ON
RELEASE_FILE: -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$MACOSX_PLATFORM/$APP_FOLDER RELEASE_FILE: -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$MACOSX_PLATFORM/$APP_FOLDER
extends: macosx-ninja extends: macosx-ninja
script: script:

View file

@ -9,7 +9,7 @@
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null
- if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null - if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null
variables: variables:
CMAKE_OPTIONS: -DENABLE_UNIT_TESTS=ON -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON CMAKE_OPTIONS: -DENABLE_UNIT_TESTS=ON -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF
LINPHONESDK_PLATFORM: Desktop LINPHONESDK_PLATFORM: Desktop
OUTPUT_ZIP_FOLDER: win64 OUTPUT_ZIP_FOLDER: win64
MINGW_TYPE: mingw64 MINGW_TYPE: mingw64
@ -185,7 +185,7 @@ win64-ninja-vs2022-scheduled-windows:
- if: $PACKAGE_WINDOWS - if: $PACKAGE_WINDOWS
- if: $DEPLOY_WINDOWS - if: $DEPLOY_WINDOWS
variables: variables:
CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=ON CMAKE_OPTIONS: -DENABLE_APP_PACKAGING=YES -DENABLE_G729=ON -DENABLE_PQCRYPTO=ON -DENABLE_GPL_THIRD_PARTIES=OFF
RELEASE_FILE: -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$WINDOWS_PLATFORM/$APP_FOLDER RELEASE_FILE: -DLINPHONE_SDK_MAKE_RELEASE_FILE_URL=$MAKE_RELEASE_FILE_URL/$WINDOWS_PLATFORM/$APP_FOLDER
win64-ninja-vs2022-package-windows: win64-ninja-vs2022-package-windows:

View file

@ -93,6 +93,7 @@
#include "core/translator/DefaultTranslatorCore.hpp" #include "core/translator/DefaultTranslatorCore.hpp"
#include "core/variant/VariantList.hpp" #include "core/variant/VariantList.hpp"
#include "core/videoSource/VideoSourceDescriptorGui.hpp" #include "core/videoSource/VideoSourceDescriptorGui.hpp"
#include "model/friend/FriendsManager.hpp"
#include "model/object/VariantObject.hpp" #include "model/object/VariantObject.hpp"
#include "model/tool/ToolModel.hpp" #include "model/tool/ToolModel.hpp"
#include "tool/Constants.hpp" #include "tool/Constants.hpp"
@ -635,7 +636,8 @@ void App::initCore() {
} else lInfo() << log().arg("Stay minimized"); } else lInfo() << log().arg("Stay minimized");
firstOpen = false; firstOpen = false;
lInfo() << log().arg("Checking remote provisioning"); lInfo() << log().arg("Checking remote provisioning");
if (CoreModel::getInstance()->mConfigStatus == linphone::ConfiguringState::Failed) { if (CoreModel::getInstance()->mConfigStatus == linphone::ConfiguringState::Failed &&
mIsRestarting) {
QMetaObject::invokeMethod(thread(), [this]() { QMetaObject::invokeMethod(thread(), [this]() {
auto message = CoreModel::getInstance()->mConfigMessage; auto message = CoreModel::getInstance()->mConfigMessage;
//: not reachable //: not reachable
@ -648,6 +650,7 @@ void App::initCore() {
tr("info_popup_configuration_failed_message").arg(message), false); tr("info_popup_configuration_failed_message").arg(message), false);
}); });
} }
mIsRestarting = false;
//--------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------
lDebug() << log().arg("Creating KeyboardShortcuts"); lDebug() << log().arg("Creating KeyboardShortcuts");
@ -883,8 +886,10 @@ void App::clean() {
} }
void App::restart() { void App::restart() {
mCoreModelConnection->invokeToModel([this]() { mCoreModelConnection->invokeToModel([this]() {
FriendsManager::getInstance()->clearMaps();
CoreModel::getInstance()->getCore()->stop(); CoreModel::getInstance()->getCore()->stop();
mCoreModelConnection->invokeToCore([this]() { mCoreModelConnection->invokeToCore([this]() {
mIsRestarting = true;
closeCallsWindow(); closeCallsWindow();
setMainWindow(nullptr); setMainWindow(nullptr);
mEngine->clearComponentCache(); mEngine->clearComponentCache();

View file

@ -207,6 +207,7 @@ private:
QSharedPointer<SafeConnection<App, CliModel>> mCliModelConnection; QSharedPointer<SafeConnection<App, CliModel>> mCliModelConnection;
bool mAutoStart = false; bool mAutoStart = false;
bool mCoreStarted = false; bool mCoreStarted = false;
bool mIsRestarting = false;
QLocale mLocale = QLocale::system(); QLocale mLocale = QLocale::system();
DefaultTranslatorCore *mTranslatorCore = nullptr; DefaultTranslatorCore *mTranslatorCore = nullptr;
DefaultTranslatorCore *mDefaultTranslatorCore = nullptr; DefaultTranslatorCore *mDefaultTranslatorCore = nullptr;

View file

@ -74,7 +74,10 @@ void CarddavCore::remove() {
void CarddavCore::setSelf(QSharedPointer<CarddavCore> me) { void CarddavCore::setSelf(QSharedPointer<CarddavCore> me) {
mCarddavModelConnection = SafeConnection<CarddavCore, CarddavModel>::create(me, mCarddavModel); mCarddavModelConnection = SafeConnection<CarddavCore, CarddavModel>::create(me, mCarddavModel);
mCarddavModelConnection->makeConnectToModel(&CarddavModel::saved, [this](bool success) { mCarddavModelConnection->makeConnectToModel(&CarddavModel::saved, [this](bool success) {
mCarddavModelConnection->invokeToCore([this, success]() { emit saved(success); }); mCarddavModelConnection->invokeToCore([this, success]() {
if (success) emit App::getInstance()->getSettings()->cardDAVAddressBookSynchronized();
emit saved(success);
});
}); });
} }

View file

@ -392,6 +392,11 @@ void SettingsCore::setSelf(QSharedPointer<SettingsCore> me) {
mSettingsModelConnection->invokeToCore([this, value]() { setDndEnabled(value); }); mSettingsModelConnection->invokeToCore([this, value]() { setDndEnabled(value); });
}); });
// CardDAV
mSettingsModelConnection->makeConnectToModel(&SettingsModel::cardDAVMinCharResearchChanged, [this](int min) {
mSettingsModelConnection->invokeToCore([this, min]() { setCardDAVMinCharForResearch(min); });
});
auto settingsModel = SettingsModel::getInstance(); auto settingsModel = SettingsModel::getInstance();
DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool,
@ -547,6 +552,7 @@ void SettingsCore::reset(const SettingsCore &settingsCore) {
setAutoStart(settingsCore.mAutoStart); setAutoStart(settingsCore.mAutoStart);
setExitOnClose(settingsCore.mExitOnClose); setExitOnClose(settingsCore.mExitOnClose);
setSyncLdapContacts(settingsCore.mSyncLdapContacts); setSyncLdapContacts(settingsCore.mSyncLdapContacts);
setCardDAVMinCharForResearch(settingsCore.mCardDAVMinCharForResearch);
setIpv6Enabled(settingsCore.mIpv6Enabled); setIpv6Enabled(settingsCore.mIpv6Enabled);
setConfigLocale(settingsCore.mConfigLocale); setConfigLocale(settingsCore.mConfigLocale);
setDownloadFolder(settingsCore.mDownloadFolder); setDownloadFolder(settingsCore.mDownloadFolder);
@ -1004,6 +1010,17 @@ bool SettingsCore::getSyncLdapContacts() const {
return mSyncLdapContacts; return mSyncLdapContacts;
} }
bool SettingsCore::getCardDAVMinCharForResearch() const {
return mCardDAVMinCharForResearch;
}
void SettingsCore::setCardDAVMinCharForResearch(int min) {
if (mCardDAVMinCharForResearch != min) {
mCardDAVMinCharForResearch = min;
emit cardDAVMinCharForResearchChanged(mCardDAVMinCharForResearch);
}
}
QString SettingsCore::getConfigLocale() const { QString SettingsCore::getConfigLocale() const {
return mConfigLocale; return mConfigLocale;
} }
@ -1148,6 +1165,7 @@ void SettingsCore::writeFromModel(const std::shared_ptr<SettingsModel> &model) {
mAutoStart = model->getAutoStart(); mAutoStart = model->getAutoStart();
mExitOnClose = model->getExitOnClose(); mExitOnClose = model->getExitOnClose();
mSyncLdapContacts = model->getSyncLdapContacts(); mSyncLdapContacts = model->getSyncLdapContacts();
mCardDAVMinCharForResearch = model->getCardDAVMinCharResearch();
mIpv6Enabled = model->getIpv6Enabled(); mIpv6Enabled = model->getIpv6Enabled();
mConfigLocale = model->getConfigLocale(); mConfigLocale = model->getConfigLocale();
mDownloadFolder = model->getDownloadFolder(); mDownloadFolder = model->getDownloadFolder();

View file

@ -215,6 +215,9 @@ public:
bool showAccountDevices() const; bool showAccountDevices() const;
void setShowAccountDevices(bool show); void setShowAccountDevices(bool show);
bool getCardDAVMinCharForResearch() const;
void setCardDAVMinCharForResearch(int min);
Q_INVOKABLE void save(); Q_INVOKABLE void save();
Q_INVOKABLE void undo(); Q_INVOKABLE void undo();
@ -282,6 +285,9 @@ signals:
void conferenceLayoutsChanged(const QVariantList &layouts); void conferenceLayoutsChanged(const QVariantList &layouts);
void mediaEncryptionsChanged(const QVariantList &encryptions); void mediaEncryptionsChanged(const QVariantList &encryptions);
void cardDAVMinCharForResearchChanged(int min);
void cardDAVAddressBookSynchronized();
void lSetCaptureDevice(QVariantMap device); void lSetCaptureDevice(QVariantMap device);
void captureDeviceChanged(const QVariantMap &device); void captureDeviceChanged(const QVariantMap &device);
@ -392,6 +398,9 @@ private:
QString mDefaultDomain; QString mDefaultDomain;
bool mShowAccountDevices = false; bool mShowAccountDevices = false;
// CardDAV
int mCardDAVMinCharForResearch = 0;
DECLARE_ABSTRACT_OBJECT DECLARE_ABSTRACT_OBJECT
}; };
#endif #endif

View file

@ -100,7 +100,7 @@ void CarddavModel::onSyncStatusChanged(const std::shared_ptr<linphone::FriendLis
if (status == linphone::FriendList::SyncStatus::Successful) { if (status == linphone::FriendList::SyncStatus::Successful) {
lInfo() << log().arg("Successfully synchronized:") << mCarddavFriendList->getUri(); lInfo() << log().arg("Successfully synchronized:") << mCarddavFriendList->getUri();
setMonitor(nullptr); setMonitor(nullptr);
if (mStoreNewFriendsInIt) SettingsModel::setCardDAVListForNewFriends(friendList->getDisplayName()); SettingsModel::setCardDAVListForNewFriends(mStoreNewFriendsInIt ? friendList->getDisplayName() : "");
emit saved(true); emit saved(true);
} }
if (status == linphone::FriendList::SyncStatus::Failure) { if (status == linphone::FriendList::SyncStatus::Failure) {

View file

@ -74,6 +74,7 @@ FriendsManager::FriendsManager(QObject *parent) : QObject(parent) {
} }
FriendsManager::~FriendsManager() { FriendsManager::~FriendsManager() {
clearMaps();
} }
std::shared_ptr<FriendsManager> FriendsManager::create(QObject *parent) { std::shared_ptr<FriendsManager> FriendsManager::create(QObject *parent) {
@ -98,6 +99,12 @@ QStringList FriendsManager::getOtherAddresses() const {
return mOtherAddresses; return mOtherAddresses;
} }
void FriendsManager::clearMaps() {
mKnownFriends.clear();
mUnknownFriends.clear();
mOtherAddresses.clear();
}
std::shared_ptr<linphone::Friend> FriendsManager::getKnownFriendAtKey(const QString &key) { std::shared_ptr<linphone::Friend> FriendsManager::getKnownFriendAtKey(const QString &key) {
if (isInKnownFriends(key)) { if (isInKnownFriends(key)) {
return mKnownFriends.value(key).value<std::shared_ptr<linphone::Friend>>(); return mKnownFriends.value(key).value<std::shared_ptr<linphone::Friend>>();

View file

@ -41,6 +41,8 @@ public:
QVariantMap getUnknownFriends() const; QVariantMap getUnknownFriends() const;
QStringList getOtherAddresses() const; QStringList getOtherAddresses() const;
void clearMaps();
std::shared_ptr<linphone::Friend> getKnownFriendAtKey(const QString &key); std::shared_ptr<linphone::Friend> getKnownFriendAtKey(const QString &key);
std::shared_ptr<linphone::Friend> getUnknownFriendAtKey(const QString &key); std::shared_ptr<linphone::Friend> getUnknownFriendAtKey(const QString &key);

View file

@ -50,8 +50,10 @@ void MagicSearchModel::search(QString filter,
if (((sourceFlags & (int)LinphoneEnums::MagicSearchSource::LdapServers) > 0) && if (((sourceFlags & (int)LinphoneEnums::MagicSearchSource::LdapServers) > 0) &&
!SettingsModel::getInstance()->getSyncLdapContacts()) !SettingsModel::getInstance()->getSyncLdapContacts())
sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::LdapServers; sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::LdapServers;
if (((sourceFlags & (int)LinphoneEnums::MagicSearchSource::RemoteCardDAV) > 0)) if (((sourceFlags & (int)LinphoneEnums::MagicSearchSource::RemoteCardDAV) > 0) &&
SettingsModel::getInstance()->getCardDAVMinCharResearch() > 0) {
sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::RemoteCardDAV; sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::RemoteCardDAV;
}
// For complete search, we search only on local contacts. // For complete search, we search only on local contacts.
// sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::CallLogs; // sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::CallLogs;
// sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::ChatRooms; // sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::ChatRooms;
@ -104,7 +106,7 @@ void MagicSearchModel::onSearchResultsReceived(const std::shared_ptr<linphone::M
// << (fList ? fList->getDisplayName().c_str() : "NoList") << result->getSourceFlags() << " / // << (fList ? fList->getDisplayName().c_str() : "NoList") << result->getSourceFlags() << " /
//" //"
// << (f ? f.get() : nullptr); // << (f ? f.get() : nullptr);
bool isLdap = (result->getSourceFlags() & (int)linphone::MagicSearch::Source::LdapServers) != 0; bool isLdap = result->hasSourceFlag(linphone::MagicSearch::Source::LdapServers) != 0;
// Do not add it into ldap_friends if it already exists in app_friends. // Do not add it into ldap_friends if it already exists in app_friends.
if (isLdap && (!fList || fList->getDisplayName() != if (isLdap && (!fList || fList->getDisplayName() !=
"app_friends")) { // Double check because of SDK merging that lead to "app_friends")) { // Double check because of SDK merging that lead to

View file

@ -34,6 +34,7 @@ using namespace std;
const std::string SettingsModel::UiSection("ui"); const std::string SettingsModel::UiSection("ui");
const std::string SettingsModel::AppSection("app"); const std::string SettingsModel::AppSection("app");
const std::string SettingsModel::CardDAVSection("carddav_0");
std::shared_ptr<SettingsModel> SettingsModel::gSettingsModel; std::shared_ptr<SettingsModel> SettingsModel::gSettingsModel;
SettingsModel::SettingsModel() { SettingsModel::SettingsModel() {
@ -698,6 +699,19 @@ void SettingsModel::setCardDAVListForNewFriends(std::string name) {
} }
} }
// CardDAV min characters for research
int SettingsModel::getCardDAVMinCharResearch() const {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
return mConfig->getInt(SettingsModel::CardDAVSection, "min_characters", 0);
}
void SettingsModel::setCardDAVMinCharResearch(int min) {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
mConfig->setInt(SettingsModel::CardDAVSection, "min_characters", min);
emit cardDAVMinCharResearchChanged(min);
}
// ============================================================================= // =============================================================================
// Device name. // Device name.
// ============================================================================= // =============================================================================

View file

@ -46,6 +46,7 @@ public:
static const std::string UiSection; static const std::string UiSection;
static const std::string AppSection; static const std::string AppSection;
static const std::string CardDAVSection;
std::shared_ptr<linphone::Config> mConfig; std::shared_ptr<linphone::Config> mConfig;
bool getVfsEnabled() const; bool getVfsEnabled() const;
@ -110,6 +111,9 @@ public:
bool getCreateEndToEndEncryptedMeetingsAndGroupCalls() const; bool getCreateEndToEndEncryptedMeetingsAndGroupCalls() const;
void setCreateEndToEndEncryptedMeetingsAndGroupCalls(bool endtoend); void setCreateEndToEndEncryptedMeetingsAndGroupCalls(bool endtoend);
int getCardDAVMinCharResearch() const;
void setCardDAVMinCharResearch(int min);
QVariantMap getRingerDevice() const; QVariantMap getRingerDevice() const;
void setRingerDevice(QVariantMap device); void setRingerDevice(QVariantMap device);
@ -247,6 +251,8 @@ signals:
void mediaEncryptionMandatoryChanged(); void mediaEncryptionMandatoryChanged();
void createEndToEndEncryptedMeetingsAndGroupCallsChanged(bool endtoend); void createEndToEndEncryptedMeetingsAndGroupCallsChanged(bool endtoend);
void cardDAVMinCharResearchChanged(int min);
void echoCancellationEnabledChanged(bool enabled); void echoCancellationEnabledChanged(bool enabled);
void automaticallyRecordCallsEnabledChanged(bool enabled); void automaticallyRecordCallsEnabledChanged(bool enabled);

View file

@ -118,10 +118,14 @@ ListView {
Connections { Connections {
target: SettingsCpp target: SettingsCpp
onLdapConfigChanged: { function onLdapConfigChanged() {
if (SettingsCpp.syncLdapContacts) if (SettingsCpp.syncLdapContacts)
magicSearchProxy.forceUpdate() magicSearchProxy.forceUpdate()
} }
function onCardDAVAddressBookSynchronized() {
console.log("card dav synchro update")
magicSearchProxy.forceUpdate()
}
} }
// Workaround: itemAtIndex and count are decorellated and are not enough to know when the ListView has load all its children. // Workaround: itemAtIndex and count are decorellated and are not enough to know when the ListView has load all its children.
// So when itemAtIndex is not available, start this timer along count changed signal. // So when itemAtIndex is not available, start this timer along count changed signal.

View file

@ -298,8 +298,7 @@ FriendGui{
| LinphoneEnums.MagicSearchSource.RemoteCardDAV | LinphoneEnums.MagicSearchSource.RemoteCardDAV
onHighlightedContactChanged: mainItem.selectedContact = highlightedContact onHighlightedContactChanged: mainItem.selectedContact = highlightedContact
onContactDeletionRequested: contact => { onContactDeletionRequested: contact => {
mainItem.deleteContact( mainItem.deleteContact(contact)
contact)
} }
onLoadingChanged: { onLoadingChanged: {
if (!loading && initialFriendToDisplay.length !== 0) { if (!loading && initialFriendToDisplay.length !== 0) {

View file

@ -56,7 +56,7 @@ RUN apt-get update && \
# Install linphone & flexisip dependencies development packages # Install linphone & flexisip dependencies development packages
RUN apt-get update && \ RUN apt-get update && \
apt-get install -y libasound2-dev libavcodec-dev libavutil-dev libbsd-dev libegl1-mesa-dev libglew-dev libgsm1-dev libjansson-dev libmariadb-dev-compat libmbedtls-dev libopus-dev libpq-dev libprotobuf-dev libpulse-dev libqt5svg5-dev libsnmp-dev libspeex-dev libspeexdsp-dev libsqlite3-dev libsrtp2-dev libssl-dev libswscale-dev libturbojpeg0-dev libv4l-dev libvpx-dev libxerces-c-dev libxml2-dev libxv-dev libxinerama-dev protobuf-compiler qttools5-dev qttools5-dev-tools xsdcxx cmake nasm && \ apt-get install -y libasound2-dev libbsd-dev libegl1-mesa-dev libglew-dev libgsm1-dev libjansson-dev libmariadb-dev-compat libmbedtls-dev libopus-dev libpq-dev libprotobuf-dev libpulse-dev libqt5svg5-dev libsnmp-dev libspeex-dev libspeexdsp-dev libsqlite3-dev libsrtp2-dev libssl-dev libswscale-dev libturbojpeg0-dev libv4l-dev libvpx-dev libxerces-c-dev libxml2-dev libxv-dev libxinerama-dev protobuf-compiler qttools5-dev qttools5-dev-tools xsdcxx cmake nasm && \
apt-get clean apt-get clean
# Install signing tools # Install signing tools

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB