diff --git a/.gitlab-ci-files/linux-desktop-ubuntu-2004.yml b/.gitlab-ci-files/linux-desktop-ubuntu-2004.yml index a360bd9ad..8a6abf609 100644 --- a/.gitlab-ci-files/linux-desktop-ubuntu-2004.yml +++ b/.gitlab-ci-files/linux-desktop-ubuntu-2004.yml @@ -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++ diff --git a/.gitlab-ci-files/linux-desktop-ubuntu-2204.yml b/.gitlab-ci-files/linux-desktop-ubuntu-2204.yml index 51c955ebf..da1c71c1a 100644 --- a/.gitlab-ci-files/linux-desktop-ubuntu-2204.yml +++ b/.gitlab-ci-files/linux-desktop-ubuntu-2204.yml @@ -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++ diff --git a/.gitlab-ci-files/macosx-desktop.yml b/.gitlab-ci-files/macosx-desktop.yml index 206faf15d..2d09098fd 100644 --- a/.gitlab-ci-files/macosx-desktop.yml +++ b/.gitlab-ci-files/macosx-desktop.yml @@ -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: diff --git a/.gitlab-ci-files/windows-desktop.yml b/.gitlab-ci-files/windows-desktop.yml index d36886453..5c8044ce9 100644 --- a/.gitlab-ci-files/windows-desktop.yml +++ b/.gitlab-ci-files/windows-desktop.yml @@ -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: diff --git a/Linphone/core/App.cpp b/Linphone/core/App.cpp index 95a1afb61..54db27708 100644 --- a/Linphone/core/App.cpp +++ b/Linphone/core/App.cpp @@ -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(); diff --git a/Linphone/core/App.hpp b/Linphone/core/App.hpp index a9033b3a6..615d80b17 100644 --- a/Linphone/core/App.hpp +++ b/Linphone/core/App.hpp @@ -207,6 +207,7 @@ private: QSharedPointer> mCliModelConnection; bool mAutoStart = false; bool mCoreStarted = false; + bool mIsRestarting = false; QLocale mLocale = QLocale::system(); DefaultTranslatorCore *mTranslatorCore = nullptr; DefaultTranslatorCore *mDefaultTranslatorCore = nullptr; diff --git a/Linphone/core/address-books/carddav/CarddavCore.cpp b/Linphone/core/address-books/carddav/CarddavCore.cpp index 7c2adef71..32b06ece9 100644 --- a/Linphone/core/address-books/carddav/CarddavCore.cpp +++ b/Linphone/core/address-books/carddav/CarddavCore.cpp @@ -74,7 +74,10 @@ void CarddavCore::remove() { void CarddavCore::setSelf(QSharedPointer me) { mCarddavModelConnection = SafeConnection::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); + }); }); } diff --git a/Linphone/core/setting/SettingsCore.cpp b/Linphone/core/setting/SettingsCore.cpp index 17fb467d9..16080a359 100644 --- a/Linphone/core/setting/SettingsCore.cpp +++ b/Linphone/core/setting/SettingsCore.cpp @@ -392,6 +392,11 @@ void SettingsCore::setSelf(QSharedPointer 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 &model) { mAutoStart = model->getAutoStart(); mExitOnClose = model->getExitOnClose(); mSyncLdapContacts = model->getSyncLdapContacts(); + mCardDAVMinCharForResearch = model->getCardDAVMinCharResearch(); mIpv6Enabled = model->getIpv6Enabled(); mConfigLocale = model->getConfigLocale(); mDownloadFolder = model->getDownloadFolder(); diff --git a/Linphone/core/setting/SettingsCore.hpp b/Linphone/core/setting/SettingsCore.hpp index 66290a104..649d678e3 100644 --- a/Linphone/core/setting/SettingsCore.hpp +++ b/Linphone/core/setting/SettingsCore.hpp @@ -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 diff --git a/Linphone/model/address-books/carddav/CarddavModel.cpp b/Linphone/model/address-books/carddav/CarddavModel.cpp index 0ba091b95..8786268e8 100644 --- a/Linphone/model/address-books/carddav/CarddavModel.cpp +++ b/Linphone/model/address-books/carddav/CarddavModel.cpp @@ -100,7 +100,7 @@ void CarddavModel::onSyncStatusChanged(const std::shared_ptrgetUri(); setMonitor(nullptr); - if (mStoreNewFriendsInIt) SettingsModel::setCardDAVListForNewFriends(friendList->getDisplayName()); + SettingsModel::setCardDAVListForNewFriends(mStoreNewFriendsInIt ? friendList->getDisplayName() : ""); emit saved(true); } if (status == linphone::FriendList::SyncStatus::Failure) { diff --git a/Linphone/model/friend/FriendsManager.cpp b/Linphone/model/friend/FriendsManager.cpp index 04577b629..c867a67e7 100644 --- a/Linphone/model/friend/FriendsManager.cpp +++ b/Linphone/model/friend/FriendsManager.cpp @@ -74,6 +74,7 @@ FriendsManager::FriendsManager(QObject *parent) : QObject(parent) { } FriendsManager::~FriendsManager() { + clearMaps(); } std::shared_ptr 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 FriendsManager::getKnownFriendAtKey(const QString &key) { if (isInKnownFriends(key)) { return mKnownFriends.value(key).value>(); diff --git a/Linphone/model/friend/FriendsManager.hpp b/Linphone/model/friend/FriendsManager.hpp index 99188abe1..5fac04ae0 100644 --- a/Linphone/model/friend/FriendsManager.hpp +++ b/Linphone/model/friend/FriendsManager.hpp @@ -41,6 +41,8 @@ public: QVariantMap getUnknownFriends() const; QStringList getOtherAddresses() const; + void clearMaps(); + std::shared_ptr getKnownFriendAtKey(const QString &key); std::shared_ptr getUnknownFriendAtKey(const QString &key); diff --git a/Linphone/model/search/MagicSearchModel.cpp b/Linphone/model/search/MagicSearchModel.cpp index 366d7d2db..b3687dae5 100644 --- a/Linphone/model/search/MagicSearchModel.cpp +++ b/Linphone/model/search/MagicSearchModel.cpp @@ -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_ptrgetDisplayName().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 diff --git a/Linphone/model/setting/SettingsModel.cpp b/Linphone/model/setting/SettingsModel.cpp index 640f6b01a..aef127cfd 100644 --- a/Linphone/model/setting/SettingsModel.cpp +++ b/Linphone/model/setting/SettingsModel.cpp @@ -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::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. // ============================================================================= diff --git a/Linphone/model/setting/SettingsModel.hpp b/Linphone/model/setting/SettingsModel.hpp index 862661d41..2673dd7e7 100644 --- a/Linphone/model/setting/SettingsModel.hpp +++ b/Linphone/model/setting/SettingsModel.hpp @@ -46,6 +46,7 @@ public: static const std::string UiSection; static const std::string AppSection; + static const std::string CardDAVSection; std::shared_ptr 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); diff --git a/Linphone/view/Control/Display/Contact/ContactListView.qml b/Linphone/view/Control/Display/Contact/ContactListView.qml index 3b9c213f8..92489be1a 100644 --- a/Linphone/view/Control/Display/Contact/ContactListView.qml +++ b/Linphone/view/Control/Display/Contact/ContactListView.qml @@ -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. diff --git a/Linphone/view/Page/Main/Contact/ContactPage.qml b/Linphone/view/Page/Main/Contact/ContactPage.qml index c1ad55664..e72c386ea 100644 --- a/Linphone/view/Page/Main/Contact/ContactPage.qml +++ b/Linphone/view/Page/Main/Contact/ContactPage.qml @@ -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 () { diff --git a/docker-files/bc-dev-ubuntu-22-04-lts b/docker-files/bc-dev-ubuntu-22-04-lts index 6619c5449..257ca7eee 100644 --- a/docker-files/bc-dev-ubuntu-22-04-lts +++ b/docker-files/bc-dev-ubuntu-22-04-lts @@ -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 diff --git a/readme_screen.png b/readme_screen.png deleted file mode 100644 index fe7c81859..000000000 Binary files a/readme_screen.png and /dev/null differ