linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #04257
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2561: show bundle contents
------------------------------------------------------------
revno: 2561
committer: Jacek Sieka <arnetheduck@xxxxxxxxx>
branch nick: dcplusplus
timestamp: Sun 2011-06-19 20:17:09 +0200
message:
show bundle contents
modified:
dcpp/Bundle.cpp
dcpp/Bundle.h
win32/QueueFrame.cpp
win32/QueueFrame.h
--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk
Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'dcpp/Bundle.cpp'
--- dcpp/Bundle.cpp 2011-05-28 15:31:50 +0000
+++ dcpp/Bundle.cpp 2011-06-19 18:17:09 +0000
@@ -19,10 +19,12 @@
#include "stdinc.h"
#include "Bundle.h"
+#include <boost/range/algorithm/find_if.hpp>
#include <boost/range/algorithm/for_each.hpp>
namespace dcpp {
+using boost::find_if;
using boost::for_each;
TTHValue Bundle::getHash() const {
@@ -33,4 +35,8 @@
return TTHValue(ret.finalize());
}
+bool Bundle::contains(const TTHValue &tth) const {
+ return find_if(entries, [&](const Entry &e) { return e.tth == tth; }) != entries.end();
+}
+
}
=== modified file 'dcpp/Bundle.h'
--- dcpp/Bundle.h 2011-05-28 15:31:50 +0000
+++ dcpp/Bundle.h 2011-06-19 18:17:09 +0000
@@ -52,6 +52,7 @@
};
TTHValue getHash() const;
+ bool contains(const TTHValue& tth) const;
string name;
=== modified file 'win32/QueueFrame.cpp'
--- win32/QueueFrame.cpp 2011-06-19 15:00:44 +0000
+++ win32/QueueFrame.cpp 2011-06-19 18:17:09 +0000
@@ -22,6 +22,11 @@
#include <dcpp/QueueManager.h>
#include <dcpp/version.h>
+#include <boost/range/adaptor/filtered.hpp>
+#include <boost/range/adaptor/map.hpp>
+#include <boost/range/algorithm/find.hpp>
+#include <boost/range/algorithm/for_each.hpp>
+
#include <dwt/widgets/Grid.h>
#include <dwt/widgets/FolderDialog.h>
#include <dwt/widgets/MessageBox.h>
@@ -40,6 +45,11 @@
using dwt::SplitterContainer;
using dwt::FolderDialog;
+using boost::for_each;
+using boost::find;
+using boost::adaptors::filtered;
+using boost::adaptors::map_values;
+
const string QueueFrame::id = "Queue";
const string& QueueFrame::getId() const { return id; }
@@ -255,7 +265,7 @@
if(updateDir) {
addDirectory(dir, ii->isSet(QueueItem::FLAG_USER_LIST));
}
- if(!showTree->getChecked() || isCurDir(dir)) {
+ if(isVisible(ii)) {
ii->update();
if(noSort) {
files->insert(files->size(), ii);
@@ -281,18 +291,46 @@
layout();
}
+bool QueueFrame::isVisible(const QueueItemInfo* qii) const {
+ if(!showTree->getChecked()) { return true; }
+
+ auto selected = dirs->getSelectedData();
+ if(!selected) { return false; }
+
+ if(selected->getIsBundle()) {
+ auto bii = bundleInfos.find(TTHValue(selected->getDir()));
+ if(bii == bundleInfos.end()) { return false; }
+ return bii->second->getBundleItem().getBundle()->contains(qii->getTTH());
+ }
+ return isCurDir(qii->getPath());
+}
+
void QueueFrame::updateFiles() {
HoldRedraw hold(files);
files->clear();
- auto i = showTree->getChecked()
- ? directories.equal_range(getSelectedDir())
- : make_pair(directories.begin(), directories.end());
-
- for(auto j = i.first; j != i.second; ++j) {
- QueueItemInfo* ii = j->second;
- ii->update();
- files->insert(files->size(), ii);
+
+ auto add = [&](QueueItemInfo* qii) {
+ qii->update();
+ files->insert(files->size(), qii);
+ };
+
+ if(showTree->getChecked()) {
+ auto sel = dirs->getSelectedData();
+ if(sel) {
+ if(sel->getIsBundle()) {
+ auto bii = bundleInfos.find(TTHValue(sel->getDir()));
+ if(bii != bundleInfos.end()) {
+ auto filter = [&](QueueItemInfo* qii) {
+ return bii->second->getBundleItem().getBundle()->contains(qii->getTTH());
+ };
+
+ for_each(directories | map_values | filtered(filter), add);
+ }
+ } else {
+ for_each(directories.equal_range(sel->getDir()) | map_values, add);
+ }
+ }
}
files->resort();
@@ -1054,7 +1092,7 @@
return;
}
- if(!showTree->getChecked() || isCurDir(ii->getPath()) ) {
+ if(isVisible(ii)) {
dcassert(files->find(ii) != -1);
files->erase(ii);
}
@@ -1100,7 +1138,7 @@
ii->updateMask |= QueueItemInfo::MASK_PRIORITY | QueueItemInfo::MASK_USERS | QueueItemInfo::MASK_ERRORS | QueueItemInfo::MASK_STATUS | QueueItemInfo::MASK_DOWNLOADED;
- if(!showTree->getChecked() || isCurDir(ii->getPath())) {
+ if(isVisible(ii)) {
dcassert(files->find(ii) != -1);
ii->update();
files->update(ii);
=== modified file 'win32/QueueFrame.h'
--- win32/QueueFrame.h 2011-06-19 15:00:44 +0000
+++ win32/QueueFrame.h 2011-06-19 18:17:09 +0000
@@ -241,6 +241,7 @@
void removeDirectory(const string& dir, bool isFileList = false);
bool isCurDir(const string& aDir) const;
+ bool isVisible(const QueueItemInfo *qii) const;
QueueItemInfo* getItemInfo(const string& target);