diff --git a/src/contactmethod.cpp b/src/contactmethod.cpp index 60600550820fc0d24569e35d476bb79c505ad4b3..6833172165c2115746e9369a4fa4d8f11cd0f14d 100644 --- a/src/contactmethod.cpp +++ b/src/contactmethod.cpp @@ -294,6 +294,15 @@ bool ContactMethod::setType(ContactMethod::Type t) return false; } +///Update the last time used only if t is more recent than m_LastUsed +void ContactMethod::setLastUsed(time_t t) +{ + if (t > d_ptr->m_LastUsed) { + d_ptr->m_LastUsed = t; + emit lastUsedChanged(t); + } +} + ///Set if this number is tracking presence information void ContactMethod::setTracked(bool track) { @@ -490,7 +499,7 @@ QVariant ContactMethod::roleData(int role) const break; case static_cast<int>(Ring::Role::LastUsed): case static_cast<int>(Call::Role::Date): - cat = cat = !lastCall ? QVariant() : QDateTime::fromTime_t(lastCall->startTimeStamp()); + cat = d_ptr->m_LastUsed <= 0 ? QVariant() : QDateTime::fromTime_t(d_ptr->m_LastUsed); break; case static_cast<int>(Ring::Role::Length): case static_cast<int>(Call::Role::Length): @@ -498,16 +507,14 @@ QVariant ContactMethod::roleData(int role) const break; case static_cast<int>(Ring::Role::FormattedLastUsed): case static_cast<int>(Call::Role::FormattedDate): - cat = !lastCall ? QVariant() : HistoryTimeCategoryModel::timeToHistoryCategory(lastCall->startTimeStamp()); + case static_cast<int>(Call::Role::FuzzyDate): + cat = HistoryTimeCategoryModel::timeToHistoryCategory(d_ptr->m_LastUsed); break; case static_cast<int>(Ring::Role::IndexedLastUsed): - return QVariant(static_cast<int>(HistoryTimeCategoryModel::timeToHistoryConst(lastCall->startTimeStamp()))); + return QVariant(static_cast<int>(HistoryTimeCategoryModel::timeToHistoryConst(d_ptr->m_LastUsed))); case static_cast<int>(Call::Role::HasAVRecording): cat = cat = !lastCall ? QVariant() : lastCall->isAVRecording(); break; - case static_cast<int>(Call::Role::FuzzyDate): - cat = cat = !lastCall ? QVariant() : HistoryTimeCategoryModel::timeToHistoryCategory(lastCall->startTimeStamp()); - break; case static_cast<int>(Call::Role::ContactMethod): case static_cast<int>(Ring::Role::Object): case static_cast<int>(Role::Object): @@ -576,17 +583,12 @@ void ContactMethod::addCall(Call* call) d_ptr->callAdded(call); - if (call->startTimeStamp() > d_ptr->m_LastUsed) { - d_ptr->m_LastUsed = call->startTimeStamp(); + setLastUsed(call->startTimeStamp()); - if (d_ptr->m_LastUsed) - emit lastUsedChanged(d_ptr->m_LastUsed); - - //Notify the account directly. This avoid having to track all contact - //methods from there - if (d_ptr->m_pAccount && d_ptr->m_pAccount->d_ptr->m_LastUsed < d_ptr->m_LastUsed) - d_ptr->m_pAccount->d_ptr->m_LastUsed = d_ptr->m_LastUsed; - } + //Notify the account directly. This avoid having to track all contact + //methods from there + if (d_ptr->m_pAccount && d_ptr->m_pAccount->d_ptr->m_LastUsed < d_ptr->m_LastUsed) + d_ptr->m_pAccount->d_ptr->m_LastUsed = d_ptr->m_LastUsed; d_ptr->changed(); diff --git a/src/contactmethod.h b/src/contactmethod.h index 83bb652c09174e28920e4c915adbe0412ff3e5df..b823fe5ac225d7d15289d6d20b0fd931249c39b9 100644 --- a/src/contactmethod.h +++ b/src/contactmethod.h @@ -65,7 +65,7 @@ public: //Properties Q_PROPERTY(Account* account READ account WRITE setAccount ) Q_PROPERTY(Person* person READ contact WRITE setPerson ) - Q_PROPERTY(int lastUsed READ lastUsed ) + Q_PROPERTY(int lastUsed READ lastUsed WRITE setLastUsed ) Q_PROPERTY(QString uri READ uri ) Q_PROPERTY(int callCount READ callCount ) Q_PROPERTY(QList<Call*> calls READ calls ) @@ -143,6 +143,7 @@ public: void setBookmarked(bool bookmarked); void setUid (const QString& uri ); bool setType (ContactMethod::Type t ); + void setLastUsed (time_t t ); //Mutator Q_INVOKABLE void addCall(Call* call); diff --git a/src/media/textrecording.cpp b/src/media/textrecording.cpp index a8663cd3f174856f338aec164c5341344b204582..c2a0d8f4af7c32d2d21d8d0fcdbb7d50294a0fbd 100644 --- a/src/media/textrecording.cpp +++ b/src/media/textrecording.cpp @@ -282,9 +282,8 @@ Media::TextRecording* Media::TextRecording::fromJson(const QList<QJsonObject>& i return t; } -void Media::TextRecordingPrivate::insertNewMessage(const QMap<QString,QString>& message, const ContactMethod* cm, Media::Media::Direction direction) +void Media::TextRecordingPrivate::insertNewMessage(const QMap<QString,QString>& message, ContactMethod* cm, Media::Media::Direction direction) { - //Only create it if none was found on the disk if (!m_pCurrentGroup) { m_pCurrentGroup = new Serializable::Group(); @@ -356,6 +355,7 @@ void Media::TextRecordingPrivate::insertNewMessage(const QMap<QString,QString>& //Save the conversation q_ptr->save(); + cm->setLastUsed(currentTime); emit q_ptr->messageInserted(message, const_cast<ContactMethod*>(cm), direction); } diff --git a/src/private/textrecording_p.h b/src/private/textrecording_p.h index e3ffedc2e01d8abc4e1066e1745fc6e5b692917f..5237243490b0c5252ac57eda24ab4c407a190298 100644 --- a/src/private/textrecording_p.h +++ b/src/private/textrecording_p.h @@ -161,7 +161,7 @@ public: QAbstractItemModel* m_pTextMessagesModels {nullptr}; //Helper - void insertNewMessage(const QMap<QString,QString>& message, const ContactMethod* cm, Media::Media::Direction direction); + void insertNewMessage(const QMap<QString,QString>& message, ContactMethod* cm, Media::Media::Direction direction); QHash<QByteArray,QByteArray> toJsons() const; private: