mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
saving work for next unread msg in forum model
This commit is contained in:
parent
65f2d26651
commit
6bb8e3ffd0
@ -1022,6 +1022,42 @@ static void recursPrintModel(const std::vector<ForumModelPostEntry>& entries,For
|
|||||||
recursPrintModel(entries,e.mChildren[i],depth+1);
|
recursPrintModel(entries,e.mChildren[i],depth+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QModelIndex RsGxsForumModel::getIndexOfMessage(const RsGxsMessageId& mid) const
|
||||||
|
{
|
||||||
|
// brutal search. This is not so nice, so dont call that in a loop!
|
||||||
|
|
||||||
|
for(uint32_t i=0;i<mPosts.size();++i)
|
||||||
|
if(mPosts[i].mMsgId == mid)
|
||||||
|
{
|
||||||
|
void *ref ;
|
||||||
|
convertTabEntryToRefPointer(i,ref);
|
||||||
|
|
||||||
|
return createIndex(mPosts[i].prow,0,ref);
|
||||||
|
}
|
||||||
|
|
||||||
|
return QModelIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex RsGxsForumModel::getNextIndex(const QModelIndex& i,bool unread_only) const
|
||||||
|
{
|
||||||
|
#ifdef TODO
|
||||||
|
ForumModelIndex fmi ;
|
||||||
|
convertRefPointerToTabEntry(i.internalPointer(),fmi);
|
||||||
|
|
||||||
|
// Algorithm is simple: visit children recursively. When none available, go to parent. We need of course a stack of parents to the current index.
|
||||||
|
|
||||||
|
std::list<ForumModelIndex> parent_stack ;
|
||||||
|
|
||||||
|
for(ForumModelIndex tmp(fmi);tmp!=0;tmp=mPosts[tmp].mParent)
|
||||||
|
parent_stack.push_front(tmp);
|
||||||
|
|
||||||
|
// now get to next unread item
|
||||||
|
|
||||||
|
if(!mPosts[fmi].mChildren.empty())
|
||||||
|
#endif
|
||||||
|
return QModelIndex();
|
||||||
|
}
|
||||||
|
|
||||||
void RsGxsForumModel::debug_dump()
|
void RsGxsForumModel::debug_dump()
|
||||||
{
|
{
|
||||||
std::cerr << "Model data dump:" << std::endl;
|
std::cerr << "Model data dump:" << std::endl;
|
||||||
|
@ -80,6 +80,8 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
QModelIndex root() const{ return createIndex(0,0,(void*)NULL) ;}
|
QModelIndex root() const{ return createIndex(0,0,(void*)NULL) ;}
|
||||||
|
QModelIndex getIndexOfMessage(const RsGxsMessageId& mid) const;
|
||||||
|
QModelIndex getNextIndex(const QModelIndex& i,bool unread_only) const;
|
||||||
|
|
||||||
// This method will asynchroneously update the data
|
// This method will asynchroneously update the data
|
||||||
void setForum(const RsGxsGroupId& forumGroup);
|
void setForum(const RsGxsGroupId& forumGroup);
|
||||||
|
@ -100,6 +100,12 @@ class DistributionItemDelegate: public QStyledItemDelegate
|
|||||||
public:
|
public:
|
||||||
DistributionItemDelegate() {}
|
DistributionItemDelegate() {}
|
||||||
|
|
||||||
|
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
|
||||||
|
{
|
||||||
|
const QRect r = option.rect;
|
||||||
|
return QSize(r.height(),r.height());
|
||||||
|
}
|
||||||
|
|
||||||
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
if(!index.isValid())
|
if(!index.isValid())
|
||||||
@ -518,7 +524,9 @@ void GxsForumThreadWidget::processSettings(bool load)
|
|||||||
|
|
||||||
void GxsForumThreadWidget::groupIdChanged()
|
void GxsForumThreadWidget::groupIdChanged()
|
||||||
{
|
{
|
||||||
|
#ifdef TO_REMOVE
|
||||||
ui->forumName->setText(groupId().isNull () ? "" : tr("Loading"));
|
ui->forumName->setText(groupId().isNull () ? "" : tr("Loading"));
|
||||||
|
#endif
|
||||||
mNewCount = 0;
|
mNewCount = 0;
|
||||||
mUnreadCount = 0;
|
mUnreadCount = 0;
|
||||||
|
|
||||||
@ -2029,43 +2037,17 @@ void GxsForumThreadWidget::downloadAllFiles()
|
|||||||
|
|
||||||
void GxsForumThreadWidget::nextUnreadMessage()
|
void GxsForumThreadWidget::nextUnreadMessage()
|
||||||
{
|
{
|
||||||
#ifdef TODO
|
QModelIndex index = mThreadModel->getNextIndex(getCurrentIndex(),true);
|
||||||
QTreeWidgetItem *currentItem = ui->threadTreeWidget->currentItem();
|
|
||||||
|
|
||||||
while (true) {
|
ui->threadTreeWidget->setCurrentIndex(index);
|
||||||
QTreeWidgetItemIterator itemIterator = currentItem ? QTreeWidgetItemIterator(currentItem, QTreeWidgetItemIterator::NotHidden) : QTreeWidgetItemIterator(ui->threadTreeWidget, QTreeWidgetItemIterator::NotHidden);
|
ui->threadTreeWidget->setFocus();
|
||||||
|
|
||||||
QTreeWidgetItem *item;
|
|
||||||
while ((item = *itemIterator) != NULL) {
|
|
||||||
++itemIterator;
|
|
||||||
|
|
||||||
if (item == currentItem) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t status = item->data(RsGxsForumModel::COLUMN_THREAD_DATA, ROLE_THREAD_STATUS).toUInt();
|
|
||||||
if (IS_MSG_UNREAD(status)) {
|
|
||||||
ui->threadTreeWidget->setCurrentItem(item);
|
|
||||||
ui->threadTreeWidget->scrollToItem(item, QAbstractItemView::EnsureVisible);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currentItem == NULL) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* start from top */
|
|
||||||
currentItem = NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef TO_REMOVE
|
||||||
/* get selected messages
|
/* get selected messages
|
||||||
the messages tree is single selected, but who knows ... */
|
the messages tree is single selected, but who knows ... */
|
||||||
int GxsForumThreadWidget::getSelectedMsgCount(QList<QTreeWidgetItem*> *rows, QList<QTreeWidgetItem*> *rowsRead, QList<QTreeWidgetItem*> *rowsUnread)
|
int GxsForumThreadWidget::getSelectedMsgCount(QList<QTreeWidgetItem*> *rows, QList<QTreeWidgetItem*> *rowsRead, QList<QTreeWidgetItem*> *rowsUnread)
|
||||||
{
|
{
|
||||||
#ifdef TODO
|
|
||||||
if (rowsRead) rowsRead->clear();
|
if (rowsRead) rowsRead->clear();
|
||||||
if (rowsUnread) rowsUnread->clear();
|
if (rowsUnread) rowsUnread->clear();
|
||||||
|
|
||||||
@ -2083,14 +2065,11 @@ int GxsForumThreadWidget::getSelectedMsgCount(QList<QTreeWidgetItem*> *rows, QLi
|
|||||||
}
|
}
|
||||||
|
|
||||||
return selectedItems.size();
|
return selectedItems.size();
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GxsForumThreadWidget::setMsgReadStatus(QList<QTreeWidgetItem*> &rows, bool read)
|
void GxsForumThreadWidget::setMsgReadStatus(QList<QTreeWidgetItem*> &rows, bool read)
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef TODO
|
|
||||||
QList<QTreeWidgetItem*>::iterator row;
|
QList<QTreeWidgetItem*>::iterator row;
|
||||||
std::list<QTreeWidgetItem*> changedItems;
|
std::list<QTreeWidgetItem*> changedItems;
|
||||||
|
|
||||||
@ -2161,8 +2140,8 @@ void GxsForumThreadWidget::setMsgReadStatus(QList<QTreeWidgetItem*> &rows, bool
|
|||||||
}
|
}
|
||||||
calculateUnreadCount();
|
calculateUnreadCount();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void GxsForumThreadWidget::markMsgAsReadUnread (bool read, bool children, bool forum)
|
void GxsForumThreadWidget::markMsgAsReadUnread (bool read, bool children, bool forum)
|
||||||
{
|
{
|
||||||
@ -2257,32 +2236,15 @@ void GxsForumThreadWidget::setAllMessagesReadDo(bool read, uint32_t &/*token*/)
|
|||||||
|
|
||||||
bool GxsForumThreadWidget::navigate(const RsGxsMessageId &msgId)
|
bool GxsForumThreadWidget::navigate(const RsGxsMessageId &msgId)
|
||||||
{
|
{
|
||||||
#ifdef TODO
|
QModelIndex index = mThreadModel->getIndexOfMessage(msgId);
|
||||||
if (mStateHelper->isLoading(mTokenTypeInsertThreads)) {
|
|
||||||
mNavigatePendingMsgId = msgId;
|
|
||||||
|
|
||||||
/* No information if message is available */
|
if(!index.isValid())
|
||||||
return true;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
QString msgIdString = QString::fromStdString(msgId.toStdString());
|
ui->threadTreeWidget->setCurrentIndex(index);
|
||||||
|
|
||||||
/* Search exisiting item */
|
|
||||||
QTreeWidgetItemIterator itemIterator(ui->threadTreeWidget);
|
|
||||||
QTreeWidgetItem *item = NULL;
|
|
||||||
while ((item = *itemIterator) != NULL) {
|
|
||||||
++itemIterator;
|
|
||||||
|
|
||||||
if (item->data(RsGxsForumModel::COLUMN_THREAD_MSGID,Qt::DisplayRole).toString() == msgIdString) {
|
|
||||||
ui->threadTreeWidget->setCurrentItem(item);
|
|
||||||
ui->threadTreeWidget->setFocus();
|
ui->threadTreeWidget->setFocus();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GxsForumThreadWidget::isLoading()
|
bool GxsForumThreadWidget::isLoading()
|
||||||
{
|
{
|
||||||
@ -2298,10 +2260,11 @@ void GxsForumThreadWidget::copyMessageLink()
|
|||||||
if (groupId().isNull() || mThreadId.isNull()) {
|
if (groupId().isNull() || mThreadId.isNull()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef TODO
|
|
||||||
QTreeWidgetItem *item = ui->threadTreeWidget->currentItem();
|
|
||||||
|
|
||||||
QString thread_title = (item != NULL)?item->text(RsGxsForumModel::COLUMN_THREAD_TITLE):QString() ;
|
ForumModelPostEntry fmpe ;
|
||||||
|
getCurrentPost(fmpe);
|
||||||
|
|
||||||
|
QString thread_title = QString::fromUtf8(fmpe.mTitle.c_str());
|
||||||
|
|
||||||
RetroShareLink link = RetroShareLink::createGxsMessageLink(RetroShareLink::TYPE_FORUM, groupId(), mThreadId, thread_title);
|
RetroShareLink link = RetroShareLink::createGxsMessageLink(RetroShareLink::TYPE_FORUM, groupId(), mThreadId, thread_title);
|
||||||
|
|
||||||
@ -2310,7 +2273,6 @@ void GxsForumThreadWidget::copyMessageLink()
|
|||||||
urls.push_back(link);
|
urls.push_back(link);
|
||||||
RSLinkClipboard::copyLinks(urls);
|
RSLinkClipboard::copyLinks(urls);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GxsForumThreadWidget::subscribeGroup(bool subscribe)
|
void GxsForumThreadWidget::subscribeGroup(bool subscribe)
|
||||||
|
Loading…
Reference in New Issue
Block a user