Skip to content
Snippets Groups Projects
Commit 4265f63f authored by Stepan Salenikovich's avatar Stepan Salenikovich Committed by Edric Milaret
Browse files

TextRecording: add unread text messages filter

To be able to to easily fetch all the unread text messages or just
get their number.

Change-Id: I2e4e776b49be9367003fffe47aedd31e1feb637b
Tuleap: #203
parent ab154eac
No related branches found
No related tags found
No related merge requests found
......@@ -212,10 +212,10 @@ void Media::TextRecording::setAllRead()
be replaced by the new one, be it in KItemModels (the KDE abstract proxy
library) or QtCore.
*/
class BooleanProxyModel : public QSortFilterProxyModel
class TextProxyModel : public QSortFilterProxyModel
{
public:
explicit BooleanProxyModel(QObject* parent) : QSortFilterProxyModel(parent){}
explicit TextProxyModel(QObject* parent) : QSortFilterProxyModel(parent){}
virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override
{
const QModelIndex srcIdx = sourceModel()->index(source_row, filterKeyColumn(), source_parent);
......@@ -230,15 +230,46 @@ public:
*/
QAbstractItemModel* Media::TextRecording::instantTextMessagingModel() const
{
if (!d_ptr->m_pTextMessagesModels) {
auto p = new BooleanProxyModel(const_cast<TextRecording*>(this));
if (!d_ptr->m_pTextMessagesModel) {
auto p = new TextProxyModel(const_cast<TextRecording*>(this));
p->setSourceModel(instantMessagingModel());
d_ptr->m_pTextMessagesModels = p;
d_ptr->m_pTextMessagesModel = p;
}
return d_ptr->m_pTextMessagesModels;
return d_ptr->m_pTextMessagesModel;
}
/**
* Proxy model to get the unread text messages, as well as their number (rowCount)
*/
class UnreadProxyModel : public QSortFilterProxyModel
{
public:
explicit UnreadProxyModel(QObject* parent) : QSortFilterProxyModel(parent){}
virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override
{
const QModelIndex srcIdx = sourceModel()->index(source_row, filterKeyColumn(), source_parent);
return !srcIdx.data((int)Media::TextRecording::Role::IsRead).toBool();
}
};
/**
* Subset of the instantTextMessagingModel() with only unread plain text and HTML
* messages. This model can be used to get the number of unread messages.
*/
QAbstractItemModel* Media::TextRecording::unreadInstantTextMessagingModel() const
{
if (!d_ptr->m_pUnreadTextMessagesModel) {
auto p = new UnreadProxyModel(instantTextMessagingModel());
p->setSourceModel(instantTextMessagingModel());
d_ptr->m_pUnreadTextMessagesModel = p;
}
return d_ptr->m_pUnreadTextMessagesModel;
}
bool Media::TextRecording::isEmpty() const
{
return !d_ptr->m_lNodes.size();
......
......@@ -69,6 +69,7 @@ public:
//Getter
QAbstractItemModel* instantMessagingModel ( ) const;
QAbstractItemModel* instantTextMessagingModel( ) const;
QAbstractItemModel* unreadInstantTextMessagingModel( ) const;
bool isEmpty ( ) const;
bool hasMimeType ( const QString& mimeType ) const;
QStringList mimeTypes ( ) const;
......
......@@ -158,7 +158,8 @@ public:
QList<Serializable::Peers*> m_lAssociatedPeers ;
QHash<QString,bool> m_hMimeTypes ;
QStringList m_lMimeTypes ;
QAbstractItemModel* m_pTextMessagesModels {nullptr};
QAbstractItemModel* m_pTextMessagesModel {nullptr};
QAbstractItemModel* m_pUnreadTextMessagesModel {nullptr};
//Helper
void insertNewMessage(const QMap<QString,QString>& message, ContactMethod* cm, Media::Media::Direction direction);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment