mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-17 11:28:07 +00:00
Fixes:
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:
parent
af373148e3
commit
4e81981c07
19 changed files with 89 additions and 19 deletions
|
|
@ -36,7 +36,7 @@ ubuntu2004-ninja-clang:
|
|||
- !reference [.rules-merge-request-manual, rules]
|
||||
- if: $NIGHTLY_MASTER
|
||||
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
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
|
|
@ -59,7 +59,7 @@ ubuntu2004-makefile-gcc:
|
|||
- if: $NIGHTLY_MASTER
|
||||
- if: $DEPLOY_PLUGINS
|
||||
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
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
|
|
@ -105,7 +105,7 @@ ubuntu2004-makefile-gcc-package:
|
|||
- if: $PACKAGE_LINUX
|
||||
- if: $DEPLOY_LINUX
|
||||
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
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ ubuntu2204-ninja-clang:
|
|||
- !reference [.rules-merge-request-manual, rules]
|
||||
- if: $NIGHTLY_MASTER
|
||||
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
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
|
|
@ -59,7 +59,7 @@ ubuntu2204-makefile-gcc:
|
|||
- if: $NIGHTLY_MASTER
|
||||
- if: $DEPLOY_PLUGINS
|
||||
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
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
|
|
@ -105,7 +105,7 @@ ubuntu2204-makefile-gcc-package:
|
|||
- if: $PACKAGE_LINUX
|
||||
- if: $DEPLOY_LINUX
|
||||
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
|
||||
CC: gcc
|
||||
CXX: g++
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ macosx-ninja-package:
|
|||
- if: $PACKAGE_MACOSX
|
||||
- if: $DEPLOY_MACOSX
|
||||
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
|
||||
extends: macosx-ninja
|
||||
script:
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null
|
||||
- if: $CI_PIPELINE_SOURCE == "schedule" && $DOCKER_UPDATE == null && $SKIP_WINDOWS == null
|
||||
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
|
||||
OUTPUT_ZIP_FOLDER: win64
|
||||
MINGW_TYPE: mingw64
|
||||
|
|
@ -185,7 +185,7 @@ win64-ninja-vs2022-scheduled-windows:
|
|||
- if: $PACKAGE_WINDOWS
|
||||
- if: $DEPLOY_WINDOWS
|
||||
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
|
||||
|
||||
win64-ninja-vs2022-package-windows:
|
||||
|
|
|
|||
|
|
@ -93,6 +93,7 @@
|
|||
#include "core/translator/DefaultTranslatorCore.hpp"
|
||||
#include "core/variant/VariantList.hpp"
|
||||
#include "core/videoSource/VideoSourceDescriptorGui.hpp"
|
||||
#include "model/friend/FriendsManager.hpp"
|
||||
#include "model/object/VariantObject.hpp"
|
||||
#include "model/tool/ToolModel.hpp"
|
||||
#include "tool/Constants.hpp"
|
||||
|
|
@ -635,7 +636,8 @@ void App::initCore() {
|
|||
} else lInfo() << log().arg("Stay minimized");
|
||||
firstOpen = false;
|
||||
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]() {
|
||||
auto message = CoreModel::getInstance()->mConfigMessage;
|
||||
//: not reachable
|
||||
|
|
@ -648,6 +650,7 @@ void App::initCore() {
|
|||
tr("info_popup_configuration_failed_message").arg(message), false);
|
||||
});
|
||||
}
|
||||
mIsRestarting = false;
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
lDebug() << log().arg("Creating KeyboardShortcuts");
|
||||
|
|
@ -883,8 +886,10 @@ void App::clean() {
|
|||
}
|
||||
void App::restart() {
|
||||
mCoreModelConnection->invokeToModel([this]() {
|
||||
FriendsManager::getInstance()->clearMaps();
|
||||
CoreModel::getInstance()->getCore()->stop();
|
||||
mCoreModelConnection->invokeToCore([this]() {
|
||||
mIsRestarting = true;
|
||||
closeCallsWindow();
|
||||
setMainWindow(nullptr);
|
||||
mEngine->clearComponentCache();
|
||||
|
|
|
|||
|
|
@ -207,6 +207,7 @@ private:
|
|||
QSharedPointer<SafeConnection<App, CliModel>> mCliModelConnection;
|
||||
bool mAutoStart = false;
|
||||
bool mCoreStarted = false;
|
||||
bool mIsRestarting = false;
|
||||
QLocale mLocale = QLocale::system();
|
||||
DefaultTranslatorCore *mTranslatorCore = nullptr;
|
||||
DefaultTranslatorCore *mDefaultTranslatorCore = nullptr;
|
||||
|
|
|
|||
|
|
@ -74,7 +74,10 @@ void CarddavCore::remove() {
|
|||
void CarddavCore::setSelf(QSharedPointer<CarddavCore> me) {
|
||||
mCarddavModelConnection = SafeConnection<CarddavCore, CarddavModel>::create(me, mCarddavModel);
|
||||
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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -392,6 +392,11 @@ void SettingsCore::setSelf(QSharedPointer<SettingsCore> me) {
|
|||
mSettingsModelConnection->invokeToCore([this, value]() { setDndEnabled(value); });
|
||||
});
|
||||
|
||||
// CardDAV
|
||||
mSettingsModelConnection->makeConnectToModel(&SettingsModel::cardDAVMinCharResearchChanged, [this](int min) {
|
||||
mSettingsModelConnection->invokeToCore([this, min]() { setCardDAVMinCharForResearch(min); });
|
||||
});
|
||||
|
||||
auto settingsModel = SettingsModel::getInstance();
|
||||
|
||||
DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool,
|
||||
|
|
@ -547,6 +552,7 @@ void SettingsCore::reset(const SettingsCore &settingsCore) {
|
|||
setAutoStart(settingsCore.mAutoStart);
|
||||
setExitOnClose(settingsCore.mExitOnClose);
|
||||
setSyncLdapContacts(settingsCore.mSyncLdapContacts);
|
||||
setCardDAVMinCharForResearch(settingsCore.mCardDAVMinCharForResearch);
|
||||
setIpv6Enabled(settingsCore.mIpv6Enabled);
|
||||
setConfigLocale(settingsCore.mConfigLocale);
|
||||
setDownloadFolder(settingsCore.mDownloadFolder);
|
||||
|
|
@ -1004,6 +1010,17 @@ bool SettingsCore::getSyncLdapContacts() const {
|
|||
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 {
|
||||
return mConfigLocale;
|
||||
}
|
||||
|
|
@ -1148,6 +1165,7 @@ void SettingsCore::writeFromModel(const std::shared_ptr<SettingsModel> &model) {
|
|||
mAutoStart = model->getAutoStart();
|
||||
mExitOnClose = model->getExitOnClose();
|
||||
mSyncLdapContacts = model->getSyncLdapContacts();
|
||||
mCardDAVMinCharForResearch = model->getCardDAVMinCharResearch();
|
||||
mIpv6Enabled = model->getIpv6Enabled();
|
||||
mConfigLocale = model->getConfigLocale();
|
||||
mDownloadFolder = model->getDownloadFolder();
|
||||
|
|
|
|||
|
|
@ -215,6 +215,9 @@ public:
|
|||
bool showAccountDevices() const;
|
||||
void setShowAccountDevices(bool show);
|
||||
|
||||
bool getCardDAVMinCharForResearch() const;
|
||||
void setCardDAVMinCharForResearch(int min);
|
||||
|
||||
Q_INVOKABLE void save();
|
||||
Q_INVOKABLE void undo();
|
||||
|
||||
|
|
@ -282,6 +285,9 @@ signals:
|
|||
void conferenceLayoutsChanged(const QVariantList &layouts);
|
||||
void mediaEncryptionsChanged(const QVariantList &encryptions);
|
||||
|
||||
void cardDAVMinCharForResearchChanged(int min);
|
||||
void cardDAVAddressBookSynchronized();
|
||||
|
||||
void lSetCaptureDevice(QVariantMap device);
|
||||
void captureDeviceChanged(const QVariantMap &device);
|
||||
|
||||
|
|
@ -392,6 +398,9 @@ private:
|
|||
QString mDefaultDomain;
|
||||
bool mShowAccountDevices = false;
|
||||
|
||||
// CardDAV
|
||||
int mCardDAVMinCharForResearch = 0;
|
||||
|
||||
DECLARE_ABSTRACT_OBJECT
|
||||
};
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ void CarddavModel::onSyncStatusChanged(const std::shared_ptr<linphone::FriendLis
|
|||
if (status == linphone::FriendList::SyncStatus::Successful) {
|
||||
lInfo() << log().arg("Successfully synchronized:") << mCarddavFriendList->getUri();
|
||||
setMonitor(nullptr);
|
||||
if (mStoreNewFriendsInIt) SettingsModel::setCardDAVListForNewFriends(friendList->getDisplayName());
|
||||
SettingsModel::setCardDAVListForNewFriends(mStoreNewFriendsInIt ? friendList->getDisplayName() : "");
|
||||
emit saved(true);
|
||||
}
|
||||
if (status == linphone::FriendList::SyncStatus::Failure) {
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ FriendsManager::FriendsManager(QObject *parent) : QObject(parent) {
|
|||
}
|
||||
|
||||
FriendsManager::~FriendsManager() {
|
||||
clearMaps();
|
||||
}
|
||||
|
||||
std::shared_ptr<FriendsManager> FriendsManager::create(QObject *parent) {
|
||||
|
|
@ -98,6 +99,12 @@ QStringList FriendsManager::getOtherAddresses() const {
|
|||
return mOtherAddresses;
|
||||
}
|
||||
|
||||
void FriendsManager::clearMaps() {
|
||||
mKnownFriends.clear();
|
||||
mUnknownFriends.clear();
|
||||
mOtherAddresses.clear();
|
||||
}
|
||||
|
||||
std::shared_ptr<linphone::Friend> FriendsManager::getKnownFriendAtKey(const QString &key) {
|
||||
if (isInKnownFriends(key)) {
|
||||
return mKnownFriends.value(key).value<std::shared_ptr<linphone::Friend>>();
|
||||
|
|
|
|||
|
|
@ -41,6 +41,8 @@ public:
|
|||
QVariantMap getUnknownFriends() const;
|
||||
QStringList getOtherAddresses() const;
|
||||
|
||||
void clearMaps();
|
||||
|
||||
std::shared_ptr<linphone::Friend> getKnownFriendAtKey(const QString &key);
|
||||
std::shared_ptr<linphone::Friend> getUnknownFriendAtKey(const QString &key);
|
||||
|
||||
|
|
|
|||
|
|
@ -50,8 +50,10 @@ void MagicSearchModel::search(QString filter,
|
|||
if (((sourceFlags & (int)LinphoneEnums::MagicSearchSource::LdapServers) > 0) &&
|
||||
!SettingsModel::getInstance()->getSyncLdapContacts())
|
||||
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;
|
||||
}
|
||||
// For complete search, we search only on local contacts.
|
||||
// sourceFlags &= ~(int)LinphoneEnums::MagicSearchSource::CallLogs;
|
||||
// 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() << " /
|
||||
//"
|
||||
// << (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.
|
||||
if (isLdap && (!fList || fList->getDisplayName() !=
|
||||
"app_friends")) { // Double check because of SDK merging that lead to
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ using namespace std;
|
|||
|
||||
const std::string SettingsModel::UiSection("ui");
|
||||
const std::string SettingsModel::AppSection("app");
|
||||
const std::string SettingsModel::CardDAVSection("carddav_0");
|
||||
std::shared_ptr<SettingsModel> SettingsModel::gSettingsModel;
|
||||
|
||||
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.
|
||||
// =============================================================================
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ public:
|
|||
|
||||
static const std::string UiSection;
|
||||
static const std::string AppSection;
|
||||
static const std::string CardDAVSection;
|
||||
std::shared_ptr<linphone::Config> mConfig;
|
||||
|
||||
bool getVfsEnabled() const;
|
||||
|
|
@ -110,6 +111,9 @@ public:
|
|||
bool getCreateEndToEndEncryptedMeetingsAndGroupCalls() const;
|
||||
void setCreateEndToEndEncryptedMeetingsAndGroupCalls(bool endtoend);
|
||||
|
||||
int getCardDAVMinCharResearch() const;
|
||||
void setCardDAVMinCharResearch(int min);
|
||||
|
||||
QVariantMap getRingerDevice() const;
|
||||
void setRingerDevice(QVariantMap device);
|
||||
|
||||
|
|
@ -247,6 +251,8 @@ signals:
|
|||
void mediaEncryptionMandatoryChanged();
|
||||
void createEndToEndEncryptedMeetingsAndGroupCallsChanged(bool endtoend);
|
||||
|
||||
void cardDAVMinCharResearchChanged(int min);
|
||||
|
||||
void echoCancellationEnabledChanged(bool enabled);
|
||||
void automaticallyRecordCallsEnabledChanged(bool enabled);
|
||||
|
||||
|
|
|
|||
|
|
@ -118,10 +118,14 @@ ListView {
|
|||
|
||||
Connections {
|
||||
target: SettingsCpp
|
||||
onLdapConfigChanged: {
|
||||
function onLdapConfigChanged() {
|
||||
if (SettingsCpp.syncLdapContacts)
|
||||
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.
|
||||
// So when itemAtIndex is not available, start this timer along count changed signal.
|
||||
|
|
|
|||
|
|
@ -298,9 +298,8 @@ FriendGui{
|
|||
| LinphoneEnums.MagicSearchSource.RemoteCardDAV
|
||||
onHighlightedContactChanged: mainItem.selectedContact = highlightedContact
|
||||
onContactDeletionRequested: contact => {
|
||||
mainItem.deleteContact(
|
||||
contact)
|
||||
}
|
||||
mainItem.deleteContact(contact)
|
||||
}
|
||||
onLoadingChanged: {
|
||||
if (!loading && initialFriendToDisplay.length !== 0) {
|
||||
Qt.callLater(function () {
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ RUN apt-get update && \
|
|||
|
||||
# Install linphone & flexisip dependencies development packages
|
||||
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
|
||||
|
||||
# Install signing tools
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 105 KiB |
Loading…
Add table
Reference in a new issue