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
Branches
Tags
No related merge requests found
...@@ -212,10 +212,10 @@ void Media::TextRecording::setAllRead() ...@@ -212,10 +212,10 @@ void Media::TextRecording::setAllRead()
be replaced by the new one, be it in KItemModels (the KDE abstract proxy be replaced by the new one, be it in KItemModels (the KDE abstract proxy
library) or QtCore. library) or QtCore.
*/ */
class BooleanProxyModel : public QSortFilterProxyModel class TextProxyModel : public QSortFilterProxyModel
{ {
public: 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 virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override
{ {
const QModelIndex srcIdx = sourceModel()->index(source_row, filterKeyColumn(), source_parent); const QModelIndex srcIdx = sourceModel()->index(source_row, filterKeyColumn(), source_parent);
...@@ -230,15 +230,46 @@ public: ...@@ -230,15 +230,46 @@ public:
*/ */
QAbstractItemModel* Media::TextRecording::instantTextMessagingModel() const QAbstractItemModel* Media::TextRecording::instantTextMessagingModel() const
{ {
if (!d_ptr->m_pTextMessagesModels) { if (!d_ptr->m_pTextMessagesModel) {
auto p = new BooleanProxyModel(const_cast<TextRecording*>(this)); auto p = new TextProxyModel(const_cast<TextRecording*>(this));
p->setSourceModel(instantMessagingModel()); 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 bool Media::TextRecording::isEmpty() const
{ {
return !d_ptr->m_lNodes.size(); return !d_ptr->m_lNodes.size();
......
...@@ -69,6 +69,7 @@ public: ...@@ -69,6 +69,7 @@ public:
//Getter //Getter
QAbstractItemModel* instantMessagingModel ( ) const; QAbstractItemModel* instantMessagingModel ( ) const;
QAbstractItemModel* instantTextMessagingModel( ) const; QAbstractItemModel* instantTextMessagingModel( ) const;
QAbstractItemModel* unreadInstantTextMessagingModel( ) const;
bool isEmpty ( ) const; bool isEmpty ( ) const;
bool hasMimeType ( const QString& mimeType ) const; bool hasMimeType ( const QString& mimeType ) const;
QStringList mimeTypes ( ) const; QStringList mimeTypes ( ) const;
......
...@@ -158,7 +158,8 @@ public: ...@@ -158,7 +158,8 @@ public:
QList<Serializable::Peers*> m_lAssociatedPeers ; QList<Serializable::Peers*> m_lAssociatedPeers ;
QHash<QString,bool> m_hMimeTypes ; QHash<QString,bool> m_hMimeTypes ;
QStringList m_lMimeTypes ; QStringList m_lMimeTypes ;
QAbstractItemModel* m_pTextMessagesModels {nullptr}; QAbstractItemModel* m_pTextMessagesModel {nullptr};
QAbstractItemModel* m_pUnreadTextMessagesModel {nullptr};
//Helper //Helper
void insertNewMessage(const QMap<QString,QString>& message, ContactMethod* cm, Media::Media::Direction direction); 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