- Fix friends list subscription
- Search : Allow to change source and aggregation mode from Ui
This commit is contained in:
parent
bf99675d08
commit
41ee79c070
11 changed files with 125 additions and 7 deletions
|
|
@ -191,6 +191,7 @@ void FriendCore::save() { // Save Value
|
||||||
if (created) {
|
if (created) {
|
||||||
mFriendModel = Utils::makeQObject_ptr<FriendModel>(contact);
|
mFriendModel = Utils::makeQObject_ptr<FriendModel>(contact);
|
||||||
mFriendModel->setSelf(mFriendModel);
|
mFriendModel->setSelf(mFriendModel);
|
||||||
|
core->getDefaultFriendList()->updateSubscriptions();
|
||||||
}
|
}
|
||||||
emit CoreModel::getInstance()->friendAdded();
|
emit CoreModel::getInstance()->friendAdded();
|
||||||
mFriendModelConnection->invokeToCore([this, created]() {
|
mFriendModelConnection->invokeToCore([this, created]() {
|
||||||
|
|
|
||||||
|
|
@ -39,14 +39,15 @@ QSharedPointer<MagicSearchList> MagicSearchList::create() {
|
||||||
|
|
||||||
MagicSearchList::MagicSearchList(QObject *parent) : ListProxy(parent) {
|
MagicSearchList::MagicSearchList(QObject *parent) : ListProxy(parent) {
|
||||||
mustBeInMainThread(getClassName());
|
mustBeInMainThread(getClassName());
|
||||||
|
mSourceFlags = (int)linphone::MagicSearch::Source::Friends | (int)linphone::MagicSearch::Source::LdapServers;
|
||||||
|
mAggregationFlag = LinphoneEnums::MagicSearchAggregation::Friend;
|
||||||
App::postModelSync([this]() {
|
App::postModelSync([this]() {
|
||||||
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
||||||
auto linphoneSearch = CoreModel::getInstance()->getCore()->createMagicSearch();
|
auto linphoneSearch = CoreModel::getInstance()->getCore()->createMagicSearch();
|
||||||
linphoneSearch->setLimitedSearch(false);
|
linphoneSearch->setLimitedSearch(false);
|
||||||
mMagicSearch = Utils::makeQObject_ptr<MagicSearchModel>(linphoneSearch);
|
mMagicSearch = Utils::makeQObject_ptr<MagicSearchModel>(linphoneSearch);
|
||||||
mMagicSearch->mSourceFlags =
|
mMagicSearch->mSourceFlags = mSourceFlags;
|
||||||
(int)linphone::MagicSearch::Source::Friends | (int)linphone::MagicSearch::Source::LdapServers;
|
mMagicSearch->mAggregationFlag = mAggregationFlag;
|
||||||
mMagicSearch->mAggregationFlag = linphone::MagicSearch::Aggregation::Friend;
|
|
||||||
mMagicSearch->setSelf(mMagicSearch);
|
mMagicSearch->setSelf(mMagicSearch);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -62,6 +63,17 @@ void MagicSearchList::setSelf(QSharedPointer<MagicSearchList> me) {
|
||||||
mModelConnection->makeConnect(this, &MagicSearchList::lSearch, [this](QString filter) {
|
mModelConnection->makeConnect(this, &MagicSearchList::lSearch, [this](QString filter) {
|
||||||
mModelConnection->invokeToModel([this, filter]() { mMagicSearch->search(filter); });
|
mModelConnection->invokeToModel([this, filter]() { mMagicSearch->search(filter); });
|
||||||
});
|
});
|
||||||
|
mModelConnection->makeConnect(this, &MagicSearchList::lSetSourceFlags, [this](int flags) {
|
||||||
|
mModelConnection->invokeToModel([this, flags]() { mMagicSearch->setSourceFlags(flags); });
|
||||||
|
});
|
||||||
|
mModelConnection->makeConnect(mMagicSearch.get(), &MagicSearchModel::sourceFlagsChanged, [this](int flags) {
|
||||||
|
mModelConnection->invokeToCore([this, flags]() { setSourceFlags(flags); });
|
||||||
|
});
|
||||||
|
mModelConnection->makeConnect(mMagicSearch.get(), &MagicSearchModel::aggregationFlagChanged,
|
||||||
|
[this](LinphoneEnums::MagicSearchAggregation flag) {
|
||||||
|
mModelConnection->invokeToCore([this, flag]() { setAggregationFlag(flag); });
|
||||||
|
});
|
||||||
|
|
||||||
mModelConnection->makeConnect(mMagicSearch.get(), &MagicSearchModel::searchResultsReceived,
|
mModelConnection->makeConnect(mMagicSearch.get(), &MagicSearchModel::searchResultsReceived,
|
||||||
[this](const std::list<std::shared_ptr<linphone::SearchResult>> &results) {
|
[this](const std::list<std::shared_ptr<linphone::SearchResult>> &results) {
|
||||||
auto *contacts = new QList<QSharedPointer<FriendCore>>();
|
auto *contacts = new QList<QSharedPointer<FriendCore>>();
|
||||||
|
|
@ -97,6 +109,28 @@ void MagicSearchList::setSearch(const QString &search) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int MagicSearchList::getSourceFlags() const {
|
||||||
|
return mSourceFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MagicSearchList::setSourceFlags(int flags) {
|
||||||
|
if (mSourceFlags != flags) {
|
||||||
|
mSourceFlags = flags;
|
||||||
|
emit sourceFlagsChanged(mSourceFlags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LinphoneEnums::MagicSearchAggregation MagicSearchList::getAggregationFlag() const {
|
||||||
|
return mAggregationFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MagicSearchList::setAggregationFlag(LinphoneEnums::MagicSearchAggregation flags) {
|
||||||
|
if (mAggregationFlag != flags) {
|
||||||
|
mAggregationFlag = flags;
|
||||||
|
emit aggregationFlagChanged(mAggregationFlag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QVariant MagicSearchList::data(const QModelIndex &index, int role) const {
|
QVariant MagicSearchList::data(const QModelIndex &index, int role) const {
|
||||||
int row = index.row();
|
int row = index.row();
|
||||||
if (!index.isValid() || row < 0 || row >= mList.count()) return QVariant();
|
if (!index.isValid() || row < 0 || row >= mList.count()) return QVariant();
|
||||||
|
|
|
||||||
|
|
@ -42,12 +42,26 @@ public:
|
||||||
void setSearch(const QString &search);
|
void setSearch(const QString &search);
|
||||||
void setResults(const QList<QSharedPointer<FriendCore>> &contacts);
|
void setResults(const QList<QSharedPointer<FriendCore>> &contacts);
|
||||||
|
|
||||||
|
int getSourceFlags() const;
|
||||||
|
void setSourceFlags(int flags);
|
||||||
|
|
||||||
|
LinphoneEnums::MagicSearchAggregation getAggregationFlag() const;
|
||||||
|
void setAggregationFlag(LinphoneEnums::MagicSearchAggregation flag);
|
||||||
|
|
||||||
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void lSearch(QString filter);
|
void lSearch(QString filter);
|
||||||
|
void lSetSourceFlags(int sourceFlags);
|
||||||
|
void lSetAggregationFlag(LinphoneEnums::MagicSearchAggregation aggregationFlag);
|
||||||
|
|
||||||
|
void sourceFlagsChanged(int sourceFlags);
|
||||||
|
void aggregationFlagChanged(LinphoneEnums::MagicSearchAggregation flag);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
int mSourceFlags;
|
||||||
|
LinphoneEnums::MagicSearchAggregation mAggregationFlag;
|
||||||
|
|
||||||
std::shared_ptr<MagicSearchModel> mMagicSearch;
|
std::shared_ptr<MagicSearchModel> mMagicSearch;
|
||||||
QSharedPointer<SafeConnection> mModelConnection;
|
QSharedPointer<SafeConnection> mModelConnection;
|
||||||
QSharedPointer<SafeConnection> mCoreModelConnection;
|
QSharedPointer<SafeConnection> mCoreModelConnection;
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,8 @@
|
||||||
|
|
||||||
MagicSearchProxy::MagicSearchProxy(QObject *parent) : SortFilterProxy(parent) {
|
MagicSearchProxy::MagicSearchProxy(QObject *parent) : SortFilterProxy(parent) {
|
||||||
mList = MagicSearchList::create();
|
mList = MagicSearchList::create();
|
||||||
|
connect(mList.get(), &MagicSearchList::sourceFlagsChanged, this, &MagicSearchProxy::sourceFlagsChanged);
|
||||||
|
connect(mList.get(), &MagicSearchList::aggregationFlagChanged, this, &MagicSearchProxy::aggregationFlagChanged);
|
||||||
setSourceModel(mList.get());
|
setSourceModel(mList.get());
|
||||||
sort(0);
|
sort(0);
|
||||||
}
|
}
|
||||||
|
|
@ -38,3 +40,19 @@ void MagicSearchProxy::setSearchText(const QString &search) {
|
||||||
mSearchText = search;
|
mSearchText = search;
|
||||||
qobject_cast<MagicSearchList *>(sourceModel())->setSearch(mSearchText);
|
qobject_cast<MagicSearchList *>(sourceModel())->setSearch(mSearchText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int MagicSearchProxy::getSourceFlags() const {
|
||||||
|
return qobject_cast<MagicSearchList *>(sourceModel())->getSourceFlags();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MagicSearchProxy::setSourceFlags(int flags) {
|
||||||
|
qobject_cast<MagicSearchList *>(sourceModel())->lSetSourceFlags(flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
LinphoneEnums::MagicSearchAggregation MagicSearchProxy::getAggregationFlag() const {
|
||||||
|
return qobject_cast<MagicSearchList *>(sourceModel())->getAggregationFlag();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MagicSearchProxy::setAggregationFlag(LinphoneEnums::MagicSearchAggregation flag) {
|
||||||
|
qobject_cast<MagicSearchList *>(sourceModel())->lSetAggregationFlag(flag);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include "../proxy/SortFilterProxy.hpp"
|
#include "../proxy/SortFilterProxy.hpp"
|
||||||
#include "core/search/MagicSearchList.hpp"
|
#include "core/search/MagicSearchList.hpp"
|
||||||
|
#include "tool/LinphoneEnums.hpp"
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
||||||
|
|
@ -30,6 +31,9 @@ class MagicSearchProxy : public SortFilterProxy {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
Q_PROPERTY(QString searchText READ getSearchText WRITE setSearchText NOTIFY searchTextChanged)
|
Q_PROPERTY(QString searchText READ getSearchText WRITE setSearchText NOTIFY searchTextChanged)
|
||||||
|
Q_PROPERTY(int sourceFlags READ getSourceFlags WRITE setSourceFlags NOTIFY sourceFlagsChanged)
|
||||||
|
Q_PROPERTY(LinphoneEnums::MagicSearchAggregation aggregationFlag READ getAggregationFlag WRITE setAggregationFlag
|
||||||
|
NOTIFY aggregationFlagChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MagicSearchProxy(QObject *parent = Q_NULLPTR);
|
MagicSearchProxy(QObject *parent = Q_NULLPTR);
|
||||||
|
|
@ -38,8 +42,16 @@ public:
|
||||||
QString getSearchText() const;
|
QString getSearchText() const;
|
||||||
void setSearchText(const QString &search);
|
void setSearchText(const QString &search);
|
||||||
|
|
||||||
|
int getSourceFlags() const;
|
||||||
|
void setSourceFlags(int flags);
|
||||||
|
|
||||||
|
LinphoneEnums::MagicSearchAggregation getAggregationFlag() const;
|
||||||
|
void setAggregationFlag(LinphoneEnums::MagicSearchAggregation flag);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void searchTextChanged();
|
void searchTextChanged();
|
||||||
|
void sourceFlagsChanged(int sourceFlags);
|
||||||
|
void aggregationFlagChanged(LinphoneEnums::MagicSearchAggregation aggregationFlag);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QString mSearchText;
|
QString mSearchText;
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,8 @@ void CoreModel::start() {
|
||||||
setPathsAfterCreation();
|
setPathsAfterCreation();
|
||||||
mCore->start();
|
mCore->start();
|
||||||
setPathAfterStart();
|
setPathAfterStart();
|
||||||
|
mCore->enableFriendListSubscription(true);
|
||||||
|
mCore->enableRecordAware(true);
|
||||||
mIterateTimer->start();
|
mIterateTimer->start();
|
||||||
}
|
}
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,6 @@
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#include "model/core/CoreModel.hpp"
|
|
||||||
|
|
||||||
DEFINE_ABSTRACT_OBJECT(FriendModel)
|
DEFINE_ABSTRACT_OBJECT(FriendModel)
|
||||||
|
|
||||||
FriendModel::FriendModel(const std::shared_ptr<linphone::Friend> &contact, QObject *parent)
|
FriendModel::FriendModel(const std::shared_ptr<linphone::Friend> &contact, QObject *parent)
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,23 @@ void MagicSearchModel::search(QString filter) {
|
||||||
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
||||||
mLastSearch = filter;
|
mLastSearch = filter;
|
||||||
mMonitor->getContactsListAsync(filter != "*" ? Utils::appStringToCoreString(filter) : "", "", mSourceFlags,
|
mMonitor->getContactsListAsync(filter != "*" ? Utils::appStringToCoreString(filter) : "", "", mSourceFlags,
|
||||||
mAggregationFlag);
|
LinphoneEnums::toLinphone(mAggregationFlag));
|
||||||
|
}
|
||||||
|
|
||||||
|
void MagicSearchModel::setSourceFlags(int flags) {
|
||||||
|
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
||||||
|
if (mSourceFlags != flags) {
|
||||||
|
mSourceFlags = flags;
|
||||||
|
emit sourceFlagsChanged(mSourceFlags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MagicSearchModel::setAggregationFlag(LinphoneEnums::MagicSearchAggregation flag) {
|
||||||
|
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
|
||||||
|
if (mAggregationFlag != flag) {
|
||||||
|
mAggregationFlag = flag;
|
||||||
|
emit aggregationFlagChanged(mAggregationFlag);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MagicSearchModel::onSearchResultsReceived(const std::shared_ptr<linphone::MagicSearch> &magicSearch) {
|
void MagicSearchModel::onSearchResultsReceived(const std::shared_ptr<linphone::MagicSearch> &magicSearch) {
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include "model/listener/Listener.hpp"
|
#include "model/listener/Listener.hpp"
|
||||||
#include "tool/AbstractObject.hpp"
|
#include "tool/AbstractObject.hpp"
|
||||||
|
#include "tool/LinphoneEnums.hpp"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
@ -37,11 +38,17 @@ public:
|
||||||
~MagicSearchModel();
|
~MagicSearchModel();
|
||||||
|
|
||||||
void search(QString filter);
|
void search(QString filter);
|
||||||
|
void setSourceFlags(int flags);
|
||||||
|
void setAggregationFlag(LinphoneEnums::MagicSearchAggregation flag);
|
||||||
|
|
||||||
int mSourceFlags = (int)linphone::MagicSearch::Source::All;
|
int mSourceFlags = (int)linphone::MagicSearch::Source::All;
|
||||||
linphone::MagicSearch::Aggregation mAggregationFlag = linphone::MagicSearch::Aggregation::None;
|
LinphoneEnums::MagicSearchAggregation mAggregationFlag = LinphoneEnums::MagicSearchAggregation::None;
|
||||||
QString mLastSearch;
|
QString mLastSearch;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void sourceFlagsChanged(int sourceFlags);
|
||||||
|
void aggregationFlagChanged(LinphoneEnums::MagicSearchAggregation aggregationFlag);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DECLARE_ABSTRACT_OBJECT
|
DECLARE_ABSTRACT_OBJECT
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -147,6 +147,13 @@ LinphoneEnums::ConsolidatedPresence LinphoneEnums::fromLinphone(const linphone::
|
||||||
return static_cast<LinphoneEnums::ConsolidatedPresence>(data);
|
return static_cast<LinphoneEnums::ConsolidatedPresence>(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
linphone::MagicSearch::Aggregation LinphoneEnums::toLinphone(const LinphoneEnums::MagicSearchAggregation &data) {
|
||||||
|
return static_cast<linphone::MagicSearch::Aggregation>(data);
|
||||||
|
}
|
||||||
|
LinphoneEnums::MagicSearchAggregation LinphoneEnums::fromLinphone(const linphone::MagicSearch::Aggregation &data) {
|
||||||
|
return static_cast<LinphoneEnums::MagicSearchAggregation>(data);
|
||||||
|
}
|
||||||
|
|
||||||
linphone::LogLevel LinphoneEnums::toLinphone(const QtMsgType &data) {
|
linphone::LogLevel LinphoneEnums::toLinphone(const QtMsgType &data) {
|
||||||
switch (data) {
|
switch (data) {
|
||||||
case QtDebugMsg:
|
case QtDebugMsg:
|
||||||
|
|
|
||||||
|
|
@ -202,6 +202,15 @@ Q_ENUM_NS(ConsolidatedPresence);
|
||||||
linphone::ConsolidatedPresence toLinphone(const LinphoneEnums::ConsolidatedPresence &state);
|
linphone::ConsolidatedPresence toLinphone(const LinphoneEnums::ConsolidatedPresence &state);
|
||||||
LinphoneEnums::ConsolidatedPresence fromLinphone(const linphone::ConsolidatedPresence &state);
|
LinphoneEnums::ConsolidatedPresence fromLinphone(const linphone::ConsolidatedPresence &state);
|
||||||
|
|
||||||
|
enum class MagicSearchAggregation {
|
||||||
|
Friend = int(linphone::MagicSearch::Aggregation::Friend),
|
||||||
|
None = int(linphone::MagicSearch::Aggregation::None)
|
||||||
|
};
|
||||||
|
Q_ENUM_NS(MagicSearchAggregation);
|
||||||
|
|
||||||
|
linphone::MagicSearch::Aggregation toLinphone(const LinphoneEnums::MagicSearchAggregation &data);
|
||||||
|
LinphoneEnums::MagicSearchAggregation fromLinphone(const linphone::MagicSearch::Aggregation &data);
|
||||||
|
|
||||||
linphone::LogLevel toLinphone(const QtMsgType &data);
|
linphone::LogLevel toLinphone(const QtMsgType &data);
|
||||||
QtMsgType fromLinphone(const linphone::LogLevel &data);
|
QtMsgType fromLinphone(const linphone::LogLevel &data);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue