From 81e172d6f85a3a2a7fa14e2058484bb6a3b3a127 Mon Sep 17 00:00:00 2001 From: drbob Date: Wed, 14 Nov 2012 21:27:34 +0000 Subject: [PATCH] Modifications to use MsgRelatedData for Wiki pages. git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-gxs-b1@5820 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- .../src/gui/WikiPoos/WikiDialog.cpp | 133 +++++++++--------- retroshare-gui/src/gui/WikiPoos/WikiDialog.h | 11 +- 2 files changed, 67 insertions(+), 77 deletions(-) diff --git a/retroshare-gui/src/gui/WikiPoos/WikiDialog.cpp b/retroshare-gui/src/gui/WikiPoos/WikiDialog.cpp index f8350736a..db0253ec0 100644 --- a/retroshare-gui/src/gui/WikiPoos/WikiDialog.cpp +++ b/retroshare-gui/src/gui/WikiPoos/WikiDialog.cpp @@ -598,70 +598,20 @@ void WikiDialog::loadPages(const uint32_t &token) void WikiDialog::insertModsForPage(const RsGxsGrpMsgIdPair &origPageId) { - requestModPageList(origPageId); + requestModPages(origPageId); } -void WikiDialog::requestModPageList(const RsGxsGrpMsgIdPair &origMsgId) +void WikiDialog::requestModPages(const RsGxsGrpMsgIdPair &origMsgId) { RsTokReqOptions opts; - opts.mReqType = GXS_REQUEST_TYPE_MSG_IDS; + opts.mReqType = GXS_REQUEST_TYPE_MSG_RELATED_DATA; opts.mOptions = RS_TOKREQOPT_MSG_VERSIONS; std::vector msgIds; msgIds.push_back(origMsgId); uint32_t token; - mWikiQueue->requestMsgRelatedInfo(token, RS_TOKREQ_ANSTYPE_LIST, opts, msgIds, WIKIDIALOG_MOD_LIST); + mWikiQueue->requestMsgRelatedInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, msgIds, WIKIDIALOG_MOD_PAGES); } - -void WikiDialog::loadModPageList(const uint32_t &token) -{ - std::cerr << "WikiDialog::loadModPageList()"; - std::cerr << std::endl; - - /* translate into latest pages */ - //std::list msgIds; - GxsMsgIdResult msgIds; - - if (rsWiki->getMsgList(token, msgIds)) - { - GxsMsgIdResult::iterator git; - for(git = msgIds.begin(); git != msgIds.end(); git++) - { - std::cerr << "WikiDialog::loadModPageList() Loaded GroupId: " << git->first; - std::cerr << std::endl; - std::vector::iterator vit; - for(vit = git->second.begin(); vit != git->second.end(); vit++) - { - std::cerr << "\tMsgId: " << *vit; - std::cerr << std::endl; - } - } - } - else - { - std::cerr << "WikiDialog::loadModPageList() ERROR No Data"; - std::cerr << std::endl; - return; - } - - requestModPages(msgIds); -} - -void WikiDialog::requestModPages(const GxsMsgIdResult &msgIds) -{ - std::cerr << "WikiDialog::requestModPages()"; - std::cerr << std::endl; - - RsTokReqOptions opts; - opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA; - - uint32_t token; - mWikiQueue->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, msgIds, WIKIDIALOG_MOD_PAGES); - - //mWikiQueue->requestMsgRelatedInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, msgIds, WIKIDIALOG_MOD_PAGES); -} - - void WikiDialog::loadModPages(const uint32_t &token) { std::cerr << "WikiDialog::loadModPages()"; @@ -670,7 +620,7 @@ void WikiDialog::loadModPages(const uint32_t &token) std::vector snapshots; std::vector::iterator vit; - if (!rsWiki->getSnapshots(token, snapshots)) + if (!rsWiki->getRelatedSnapshots(token, snapshots)) { // ERROR std::cerr << "WikiDialog::loadModPages() ERROR"; @@ -682,17 +632,23 @@ void WikiDialog::loadModPages(const uint32_t &token) { RsWikiSnapshot &page = *vit; - std::cerr << "WikiDialog::loadModPages() PageId: " << page.mMeta.mMsgId; - std::cerr << " Page: " << page.mMeta.mMsgName; - std::cerr << std::endl; + std::cerr << "WikiDialog::loadModPages() TopLevel Result: PageTitle: " << page.mMeta.mMsgName; + std::cerr << " GroupId: " << page.mMeta.mGroupId; + std::cerr << std::endl; + std::cerr << "\tOrigMsgId: " << page.mMeta.mOrigMsgId; + std::cerr << " MsgId: " << page.mMeta.mMsgId; + std::cerr << std::endl; + std::cerr << "\tThreadId: " << page.mMeta.mThreadId; + std::cerr << " ParentId: " << page.mMeta.mParentId; + std::cerr << std::endl; - //QTreeWidgetItem *modItem = new QTreeWidgetItem(); - //modItem->setText(WIKI_MODS_COL_ORIGPAGEID, QString::fromStdString(page.mMeta.mOrigMsgId)); - //modItem->setText(WIKI_MODS_COL_PAGEID, QString::fromStdString(page.mMeta.mMsgId)); - //ui.treeWidget_Mods->addTopLevelItem(modItem); + QTreeWidgetItem *modItem = new QTreeWidgetItem(); + modItem->setText(WIKI_MODS_COL_ORIGPAGEID, QString::fromStdString(page.mMeta.mOrigMsgId)); + modItem->setText(WIKI_MODS_COL_PAGEID, QString::fromStdString(page.mMeta.mMsgId)); + modItem->setText(WIKI_MODS_COL_PARENTID, QString::fromStdString(page.mMeta.mParentId)); + ui.treeWidget_Mods->addTopLevelItem(modItem); } - /* then we need to request all pages from this thread */ requestEditTreeData(); } @@ -733,14 +689,43 @@ void WikiDialog::loadEditTreeData(const uint32_t &token) return; } + std::string groupId; + std::string pageId; + std::string origPageId; + if (!getSelectedPage(groupId, pageId, origPageId)) + { + // ERROR + std::cerr << "WikiDialog::loadEditTreeData() ERROR 2"; + std::cerr << std::endl; + return; + } + std::cerr << "WikiDialog::loadEditTreeData() Loaded " << snapshots.size(); std::cerr << std::endl; + std::cerr << "WikiDialog::loadEditTreeData() Using ThreadId: " << origPageId; + std::cerr << std::endl; + + + + std::map items; std::map::iterator iit; std::list unparented; std::list::iterator uit; + // Grab the existing TopLevelItems, and insert into map. + int itemCount = ui.treeWidget_Mods->topLevelItemCount(); + for (int nIndex = 0; nIndex < itemCount; nIndex++) + { + QTreeWidgetItem *item = ui.treeWidget_Mods->topLevelItem(nIndex); + + /* index by MsgId --> ONLY For Wiki Thread Head Items... SPECIAL HACK FOR HERE! */ + std::string msgId = item->text(WIKI_MODS_COL_PAGEID).toStdString(); + items[msgId] = item; + } + + for(vit = snapshots.begin(); vit != snapshots.end(); vit++) { RsWikiSnapshot &snapshot = *vit; @@ -755,12 +740,29 @@ void WikiDialog::loadEditTreeData(const uint32_t &token) std::cerr << " ParentId: " << snapshot.mMeta.mParentId; std::cerr << std::endl; + if (snapshot.mMeta.mParentId == "") + { + /* Ignore! */ + std::cerr << "Ignoring ThreadHead Item"; + std::cerr << std::endl; + continue; + } + + if (snapshot.mMeta.mThreadId != origPageId) + { + /* Ignore! */ + std::cerr << "Ignoring Different Thread Item"; + std::cerr << std::endl; + continue; + } + /* create an Entry */ QTreeWidgetItem *modItem = new QTreeWidgetItem(); modItem->setText(WIKI_MODS_COL_ORIGPAGEID, QString::fromStdString(snapshot.mMeta.mOrigMsgId)); modItem->setText(WIKI_MODS_COL_PAGEID, QString::fromStdString(snapshot.mMeta.mMsgId)); modItem->setText(WIKI_MODS_COL_PARENTID, QString::fromStdString(snapshot.mMeta.mParentId)); +#if 0 /* if no parentId */ if (snapshot.mMeta.mParentId == "") { @@ -771,6 +773,7 @@ void WikiDialog::loadEditTreeData(const uint32_t &token) items[snapshot.mMeta.mMsgId] = modItem; continue; } +#endif /* find the parent */ iit = items.find(snapshot.mMeta.mParentId); @@ -882,10 +885,6 @@ void WikiDialog::loadRequest(const TokenQueue *queue, const TokenRequest &req) loadPages(req.mToken); break; - case WIKIDIALOG_MOD_LIST: - loadModPageList(req.mToken); - break; - case WIKIDIALOG_MOD_PAGES: loadModPages(req.mToken); break; diff --git a/retroshare-gui/src/gui/WikiPoos/WikiDialog.h b/retroshare-gui/src/gui/WikiPoos/WikiDialog.h index 970f61894..c9a1663a7 100644 --- a/retroshare-gui/src/gui/WikiPoos/WikiDialog.h +++ b/retroshare-gui/src/gui/WikiPoos/WikiDialog.h @@ -84,18 +84,10 @@ std::string getSelectedMod(); void requestGroupList(); void loadGroupData(const uint32_t &token); -//void requestOriginalPages(const std::list &groupIds); -//void loadOriginalPages(const uint32_t &token); -//void requestLatestPages(const std::list &msgIds); -//void loadLatestPages(const uint32_t &token); void requestPages(const std::list &groupIds); -//void requestPages(const std::list &msgIds); void loadPages(const uint32_t &token); - -void requestModPageList(const RsGxsGrpMsgIdPair &origMsgId); -void loadModPageList(const uint32_t &token); -void requestModPages(const GxsMsgIdResult &msgIds); +void requestModPages(const RsGxsGrpMsgIdPair &origMsgId); void loadModPages(const uint32_t &token); void requestEditTreeData(); @@ -107,7 +99,6 @@ void loadWikiPage(const uint32_t &token); TokenQueue *mWikiQueue; - WikiAddDialog *mAddPageDialog; WikiAddDialog *mAddGroupDialog; WikiEditDialog *mEditDialog;