mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
fixed download from RsCollection dialog
This commit is contained in:
parent
094c80e046
commit
27f0962654
@ -238,7 +238,7 @@ void RsCollection::recursCollectColFileInfos(const QDomElement& e,std::vector<Co
|
||||
void RsCollection::recursAddElements(RsFileTree::DirIndex parent, const DirDetails& dd, FileSearchFlags flags)
|
||||
{
|
||||
if (dd.type == DIR_TYPE_FILE)
|
||||
mFileTree->addFile(parent,dd.name,dd.hash,dd.size);
|
||||
mHashes[dd.hash] = mFileTree->addFile(parent,dd.name,dd.hash,dd.size);
|
||||
else if (dd.type == DIR_TYPE_DIR)
|
||||
{
|
||||
RsFileTree::DirIndex new_dir_index = mFileTree->addDirectory(parent,dd.name);
|
||||
@ -488,6 +488,7 @@ bool RsCollection::save(const QString& fileName) const
|
||||
|
||||
bool RsCollection::recursParseXml(QDomDocument& doc,const QDomNode& e,const RsFileTree::DirIndex parent)
|
||||
{
|
||||
mHashes.clear();
|
||||
QDomNode n = e.firstChild() ;
|
||||
#ifdef COLLECTION_DEBUG
|
||||
std::cerr << "Parsing element " << e.tagName().toStdString() << std::endl;
|
||||
@ -509,7 +510,7 @@ bool RsCollection::recursParseXml(QDomDocument& doc,const QDomNode& e,const RsFi
|
||||
std::string name = purifyFileName(ee.attribute(QString("name")), bad_chars_detected).toUtf8().constData() ;
|
||||
uint64_t size = ee.attribute(QString("size")).toULongLong() ;
|
||||
|
||||
mFileTree->addFile(parent,name,hash,size);
|
||||
mHashes[hash] = mFileTree->addFile(parent,name,hash,size);
|
||||
#ifdef TO_REMOVE
|
||||
mFileTree.addFile(parent,)
|
||||
ColFileInfo newChild ;
|
||||
@ -551,10 +552,6 @@ bool RsCollection::recursParseXml(QDomDocument& doc,const QDomNode& e,const RsFi
|
||||
|
||||
n = n.nextSibling() ;
|
||||
}
|
||||
mHashes.clear();
|
||||
for(uint64_t i=0;i<mFileTree->numFiles();++i)
|
||||
mHashes.insert(std::make_pair(mFileTree->fileData(i).hash,i ));
|
||||
|
||||
return true;
|
||||
}
|
||||
bool RsCollection::recursExportToXml(QDomDocument& doc,QDomElement& e,const RsFileTree::DirData& dd) const
|
||||
|
@ -1421,13 +1421,55 @@ void RsCollectionDialog::cancel()
|
||||
*/
|
||||
void RsCollectionDialog::download()
|
||||
{
|
||||
#ifdef TODO_COLLECTION
|
||||
std::cerr << "Downloading!" << std::endl;
|
||||
|
||||
QString dldir = ui.downloadFolder_LE->text();
|
||||
|
||||
std::cerr << "downloading all these files:" << std::endl;
|
||||
|
||||
std::function<void(RsFileTree::DirIndex,const std::string&)> recursDL = [&](RsFileTree::DirIndex index,const std::string& path)
|
||||
{
|
||||
const auto& dirdata(mCollection->fileTree().directoryData(index));
|
||||
RsCollectionModel::EntryIndex e;
|
||||
|
||||
for(uint32_t i=0;i<dirdata.subdirs.size();++i)
|
||||
{
|
||||
e.index = dirdata.subdirs[i];
|
||||
e.is_file = false;
|
||||
|
||||
if(!mCollectionModel->isChecked(e))
|
||||
continue;
|
||||
|
||||
const auto& sdd = mCollection->fileTree().directoryData(e.index);
|
||||
std::string subpath = RsDirUtil::makePath(path,sdd.name);
|
||||
|
||||
std::cerr << "Creating subdir " << sdd.name << " to directory " << path << std::endl;
|
||||
|
||||
if(!QDir(QApplication::applicationDirPath()).mkpath(QString::fromUtf8(subpath.c_str())))
|
||||
QMessageBox::warning(NULL,tr("Unable to make path"),tr("Unable to make path:")+"<br> "+QString::fromUtf8(subpath.c_str())) ;
|
||||
|
||||
recursDL(dirdata.subdirs[i],subpath);
|
||||
}
|
||||
for(uint32_t i=0;i<dirdata.subfiles.size();++i)
|
||||
{
|
||||
e.index = dirdata.subfiles[i];
|
||||
e.is_file = true;
|
||||
|
||||
if(!mCollectionModel->isChecked(e))
|
||||
continue;
|
||||
|
||||
std::string subpath = RsDirUtil::makePath(path,dirdata.name);
|
||||
const auto& f(mCollection->fileTree().fileData(dirdata.subfiles[i]));
|
||||
|
||||
std::cerr << "Requesting file " << f.name << " to directory " << path << std::endl;
|
||||
|
||||
rsFiles->FileRequest(f.name,f.hash,f.size,path,RS_FILE_REQ_ANONYMOUS_ROUTING,std::list<RsPeerId>());
|
||||
}
|
||||
};
|
||||
|
||||
recursDL(mCollection->fileTree().root(),dldir.toUtf8().constData());
|
||||
close();
|
||||
#ifdef TO_REMOVE
|
||||
while ((item = *itemIterator) != NULL) {
|
||||
++itemIterator;
|
||||
|
||||
|
@ -438,6 +438,13 @@ QVariant RsCollectionModel::decorationRole(const EntryIndex& i,int col) const
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
bool RsCollectionModel::isChecked(EntryIndex i)
|
||||
{
|
||||
if(i.is_file)
|
||||
return mFileInfos[i.index].is_checked;
|
||||
else
|
||||
return mDirInfos[i.index].check_state != DirCheckState::UNSELECTED;
|
||||
}
|
||||
void RsCollectionModel::notifyFilesBeingHashed(const std::list<RsFileHash>& files)
|
||||
{
|
||||
mFilesBeingHashed.insert(files.begin(),files.end());
|
||||
|
@ -50,6 +50,7 @@ class RsCollectionModel: public QAbstractItemModel
|
||||
|
||||
void notifyFilesBeingHashed(const std::list<RsFileHash>& files);
|
||||
void fileHashingFinished(const RsFileHash& hash);
|
||||
bool isChecked(EntryIndex);
|
||||
signals:
|
||||
void sizesChanged(); // tells that the total size of the top level dir has changed (due to selection)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user