mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
Circles: Use history for activity, fix search
This commit is contained in:
parent
d9d6f20bf7
commit
79424de10a
|
@ -392,6 +392,26 @@ void HistoryKeeper::markAsSent(int m_id)
|
|||
db->exec(QString("UPDATE sent_status SET status = 1 WHERE id = %1;").arg(m_id));
|
||||
}
|
||||
|
||||
QDate HistoryKeeper::getLatestDate(const QString &chat)
|
||||
{
|
||||
int chat_id = getChatID(chat, ctSingle).first;
|
||||
|
||||
QSqlQuery dbAnswer;
|
||||
dbAnswer = db->exec(QString("SELECT MAX(timestamp) FROM history LEFT JOIN sent_status ON history.id = sent_status.id ") +
|
||||
QString("INNER JOIN aliases ON history.sender = aliases.id AND chat_id = %3;")
|
||||
.arg(chat_id));
|
||||
|
||||
if (dbAnswer.first())
|
||||
{
|
||||
qint64 timeInt = dbAnswer.value(0).toLongLong();
|
||||
|
||||
if (timeInt != 0)
|
||||
return QDateTime::fromMSecsSinceEpoch(timeInt).date();
|
||||
}
|
||||
|
||||
return QDate();
|
||||
}
|
||||
|
||||
void HistoryKeeper::setSyncType(Db::syncType sType)
|
||||
{
|
||||
QString syncCmd;
|
||||
|
|
|
@ -62,6 +62,7 @@ public:
|
|||
qint64 addGroupChatEntry(const QString& chat, const QString& message, const QString& sender, const QDateTime &dt);
|
||||
QList<HistMessage> getChatHistory(ChatType ct, const QString &chat, const QDateTime &time_from, const QDateTime &time_to);
|
||||
void markAsSent(int m_id);
|
||||
QDate getLatestDate(const QString& chat);
|
||||
|
||||
QList<HistMessage> exportMessages();
|
||||
void importMessages(const QList<HistoryKeeper::HistMessage> &lst);
|
||||
|
|
|
@ -296,7 +296,8 @@ void Settings::loadPersonnal(Profile* profile)
|
|||
fp.alias = ps.value("alias").toString();
|
||||
fp.autoAcceptDir = ps.value("autoAcceptDir").toString();
|
||||
fp.circleID = ps.value("circle", -1).toInt();
|
||||
fp.activity = ps.value("activity").toDate();
|
||||
fp.activity = ps.value("activity", QDate()).toDate();
|
||||
|
||||
friendLst[ToxId(fp.addr).publicKey] = fp;
|
||||
}
|
||||
ps.endArray();
|
||||
|
|
|
@ -285,7 +285,7 @@ void CategoryWidget::onCompactChanged(bool _compact)
|
|||
mainLayout->setSpacing(0);
|
||||
mainLayout->setContentsMargins(20, 0, 20, 0);
|
||||
|
||||
container->setFixedHeight(55);
|
||||
container->setFixedHeight(35);
|
||||
container->setLayout(mainLayout);
|
||||
|
||||
topLayout->addWidget(&statusPic);
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "groupwidget.h"
|
||||
#include "circlewidget.h"
|
||||
#include "widget.h"
|
||||
#include "src/persistence/historykeeper.h"
|
||||
#include <QGridLayout>
|
||||
#include <QMimeData>
|
||||
#include <QDragEnterEvent>
|
||||
|
@ -108,6 +109,16 @@ Time getTime(const QDate date)
|
|||
return LongAgo;
|
||||
}
|
||||
|
||||
QDate getDateFriend(Friend* contact)
|
||||
{
|
||||
QDate date = Settings::getInstance().getFriendActivity(contact->getToxId());
|
||||
|
||||
if (date.isNull() && Settings::getInstance().getEnableLogging())
|
||||
date = HistoryKeeper::getInstance()->getLatestDate(contact->getToxId().publicKey);
|
||||
|
||||
return date;
|
||||
}
|
||||
|
||||
FriendListWidget::FriendListWidget(Widget* parent, bool groupsOnTop)
|
||||
: QWidget(parent)
|
||||
// Prevent Valgrind from complaining. We're changing this to Name here.
|
||||
|
@ -164,6 +175,7 @@ void FriendListWidget::setMode(Mode mode)
|
|||
return;
|
||||
|
||||
this->mode = mode;
|
||||
|
||||
if (mode == Name)
|
||||
{
|
||||
circleLayout = new GenericChatItemLayout;
|
||||
|
@ -171,7 +183,10 @@ void FriendListWidget::setMode(Mode mode)
|
|||
circleLayout->getLayout()->setMargin(0);
|
||||
|
||||
for (int i = 0; i < Settings::getInstance().getCircleCount(); ++i)
|
||||
{
|
||||
addCircleWidget(i);
|
||||
CircleWidget::getFromID(i)->setVisible(false);
|
||||
}
|
||||
|
||||
QList<Friend*> friendList = FriendList::getAllFriends();
|
||||
for (Friend* contact : friendList)
|
||||
|
@ -180,7 +195,6 @@ void FriendListWidget::setMode(Mode mode)
|
|||
addFriendWidget(contact->getFriendWidget(), contact->getStatus(), circleId);
|
||||
}
|
||||
|
||||
listLayout->removeItem(activityLayout);
|
||||
listLayout->addLayout(listLayout->getLayoutOnline());
|
||||
listLayout->addLayout(listLayout->getLayoutOffline());
|
||||
listLayout->addLayout(circleLayout->getLayout());
|
||||
|
@ -261,7 +275,7 @@ void FriendListWidget::setMode(Mode mode)
|
|||
QList<Friend*> friendList = FriendList::getAllFriends();
|
||||
for (Friend* contact : friendList)
|
||||
{
|
||||
QDate activityDate = Settings::getInstance().getFriendActivity(contact->getToxId());
|
||||
QDate activityDate = getDateFriend(contact);
|
||||
Time time = getTime(activityDate);
|
||||
CategoryWidget* categoryWidget = dynamic_cast<CategoryWidget*>(activityLayout->itemAt(time)->widget());
|
||||
categoryWidget->addFriendWidget(contact->getFriendWidget(), contact->getStatus());
|
||||
|
@ -270,7 +284,7 @@ void FriendListWidget::setMode(Mode mode)
|
|||
for (int i = 0; i < activityLayout->count(); ++i)
|
||||
{
|
||||
CategoryWidget* categoryWidget = dynamic_cast<CategoryWidget*>(activityLayout->itemAt(i)->widget());
|
||||
categoryWidget->setVisible(categoryWidget->hasChatrooms());
|
||||
categoryWidget->setVisible(categoryWidget->hasChatrooms());
|
||||
}
|
||||
|
||||
listLayout->removeItem(listLayout->getLayoutOnline());
|
||||
|
@ -303,10 +317,6 @@ void FriendListWidget::addGroupWidget(GroupWidget* widget)
|
|||
{
|
||||
groupLayout.addSortedWidget(widget);
|
||||
connect(widget, &GroupWidget::renameRequested, this, &FriendListWidget::renameGroupWidget);
|
||||
|
||||
// Only rename group if groups are visible.
|
||||
if (Widget::getInstance()->groupsVisible())
|
||||
widget->editName();
|
||||
}
|
||||
|
||||
void FriendListWidget::addFriendWidget(FriendWidget* w, Status s, int circleIndex)
|
||||
|
@ -323,7 +333,7 @@ void FriendListWidget::removeFriendWidget(FriendWidget* w)
|
|||
Friend* contact = FriendList::findFriend(w->friendId);
|
||||
if (mode == Activity)
|
||||
{
|
||||
QDate activityDate = Settings::getInstance().getFriendActivity(contact->getToxId());
|
||||
QDate activityDate = getDateFriend(contact);
|
||||
Time time = getTime(activityDate);
|
||||
CategoryWidget* categoryWidget = dynamic_cast<CategoryWidget*>(activityLayout->itemAt(time)->widget());
|
||||
categoryWidget->removeFriendWidget(w, contact->getStatus());
|
||||
|
@ -373,6 +383,7 @@ void FriendListWidget::searchChatrooms(const QString &searchString, bool hideOnl
|
|||
{
|
||||
groupLayout.search(searchString, hideGroups);
|
||||
listLayout->searchChatrooms(searchString, hideOnline, hideOffline);
|
||||
|
||||
if (circleLayout != nullptr)
|
||||
{
|
||||
for (int i = 0; i != circleLayout->getLayout()->count(); ++i)
|
||||
|
@ -381,6 +392,15 @@ void FriendListWidget::searchChatrooms(const QString &searchString, bool hideOnl
|
|||
circleWidget->search(searchString, true, hideOnline, hideOffline);
|
||||
}
|
||||
}
|
||||
else if (activityLayout != nullptr)
|
||||
{
|
||||
for (int i = 0; i != activityLayout->count(); ++i)
|
||||
{
|
||||
CategoryWidget* categoryWidget = static_cast<CategoryWidget*>(activityLayout->itemAt(i)->widget());
|
||||
categoryWidget->search(searchString, true, hideOnline, hideOffline);
|
||||
categoryWidget->setVisible(categoryWidget->hasChatrooms());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FriendListWidget::renameGroupWidget(GroupWidget* groupWidget, const QString &newName)
|
||||
|
@ -427,7 +447,7 @@ void FriendListWidget::cycleContacts(GenericChatroomWidget* activeChatroomWidget
|
|||
if (friendWidget == nullptr)
|
||||
return;
|
||||
|
||||
QDate activityDate = Settings::getInstance().getFriendActivity(FriendList::findFriend(friendWidget->friendId)->getToxId());
|
||||
QDate activityDate = getDateFriend(FriendList::findFriend(friendWidget->friendId));
|
||||
index = getTime(activityDate);
|
||||
CategoryWidget* categoryWidget = dynamic_cast<CategoryWidget*>(activityLayout->itemAt(index)->widget());
|
||||
|
||||
|
@ -615,7 +635,7 @@ void FriendListWidget::moveWidget(FriendWidget* w, Status s, bool add)
|
|||
else
|
||||
{
|
||||
Friend* contact = FriendList::findFriend(w->friendId);
|
||||
QDate activityDate = Settings::getInstance().getFriendActivity(contact->getToxId());
|
||||
QDate activityDate = getDateFriend(contact);
|
||||
Time time = getTime(activityDate);
|
||||
CategoryWidget* categoryWidget = dynamic_cast<CategoryWidget*>(activityLayout->itemAt(time)->widget());
|
||||
categoryWidget->addFriendWidget(contact->getFriendWidget(), contact->getStatus());
|
||||
|
@ -642,6 +662,8 @@ CircleWidget* FriendListWidget::createCircleWidget(int id)
|
|||
if (mode == Activity)
|
||||
return nullptr;
|
||||
|
||||
assert(circleLayout != nullptr);
|
||||
|
||||
CircleWidget* circleWidget = new CircleWidget(this, id);
|
||||
circleLayout->addSortedWidget(circleWidget);
|
||||
connect(this, &FriendListWidget::onCompactChanged, circleWidget, &CircleWidget::onCompactChanged);
|
||||
|
|
|
@ -656,6 +656,8 @@ void Widget::addFriend(int friendId, const QString &userId)
|
|||
connect(core, &Core::friendAvatarRemoved, newfriend->getChatForm(), &ChatForm::onAvatarRemoved);
|
||||
connect(core, &Core::friendAvatarRemoved, newfriend->getFriendWidget(), &FriendWidget::onAvatarRemoved);
|
||||
|
||||
qDebug() << HistoryKeeper::getInstance()->getLatestDate(newfriend->getToxId().publicKey);
|
||||
|
||||
// Try to get the avatar from the cache
|
||||
QPixmap avatar = Settings::getInstance().getSavedAvatar(userId);
|
||||
if (!avatar.isNull())
|
||||
|
@ -1130,7 +1132,11 @@ Group *Widget::createGroup(int groupId)
|
|||
|
||||
void Widget::onEmptyGroupCreated(int groupId)
|
||||
{
|
||||
createGroup(groupId);
|
||||
Group* group = createGroup(groupId);
|
||||
|
||||
// Only rename group if groups are visible.
|
||||
if (Widget::getInstance()->groupsVisible())
|
||||
group->getGroupWidget()->editName();
|
||||
}
|
||||
|
||||
bool Widget::isFriendWidgetCurActiveWidget(const Friend* f) const
|
||||
|
@ -1499,6 +1505,7 @@ void Widget::changeDisplayMode()
|
|||
contactListWidget->setMode(FriendListWidget::Name);
|
||||
|
||||
updateFilterText();
|
||||
searchContacts();
|
||||
}
|
||||
|
||||
void Widget::updateFilterText()
|
||||
|
|
Loading…
Reference in New Issue
Block a user