Merge pull request #2749 from csoler/v0.6-BugFixing_30

Bug fixing in channels post files
This commit is contained in:
csoler 2023-07-04 22:16:00 +02:00 committed by GitHub
commit 584dd64308
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 85 additions and 58 deletions

View file

@ -442,7 +442,7 @@ public:
{ {
QString strPath = QString::fromUtf8(fileInfo.path.c_str()); QString strPath = QString::fromUtf8(fileInfo.path.c_str());
QString strPathAfterDL = strPath; QString strPathAfterDL = strPath;
strPathAfterDL.replace(QString::fromUtf8(rsFiles->getDownloadDirectory().c_str()),""); strPathAfterDL.replace(QString::fromUtf8(rsFiles->getDownloadDirectory().c_str()),"[Download Dir]");
return QVariant(strPathAfterDL); return QVariant(strPathAfterDL);
} }

View file

@ -50,14 +50,11 @@ GxsChannelFilesStatusWidget::GxsChannelFilesStatusWidget(const RsGxsFile &file,
connect(ui->openFilePushButton, SIGNAL(clicked()), this, SLOT(openFile())); connect(ui->openFilePushButton, SIGNAL(clicked()), this, SLOT(openFile()));
ui->downloadPushButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/download.png")); ui->downloadPushButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/download.png"));
ui->openFolderToolButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/arrow.png"));
QAction *openfolder = new QAction(tr("Open folder"), this); ui->openFolderPushButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/folderopen.png"));
connect(openfolder, SIGNAL(triggered()), this, SLOT(openFolder())); ui->openFolderPushButton->setToolTip(tr("Open folder"));
QMenu *menu = new QMenu(); connect(ui->openFolderPushButton, SIGNAL(clicked()), this, SLOT(openFolder()));
menu->addAction(openfolder);
ui->openFolderToolButton->setMenu(menu);
check(); check();
} }
@ -90,7 +87,9 @@ void GxsChannelFilesStatusWidget::setSize(uint64_t size)
void GxsChannelFilesStatusWidget::check() void GxsChannelFilesStatusWidget::check()
{ {
FileInfo fileInfo; FileInfo fileInfo;
if (rsFiles->alreadyHaveFile(mFile.mHash, fileInfo)) {
if(haveFile(fileInfo))
{
mState = STATE_LOCAL; mState = STATE_LOCAL;
setSize(fileInfo.size); setSize(fileInfo.size);
@ -103,27 +102,25 @@ void GxsChannelFilesStatusWidget::check()
ui->openFilePushButton->setText(tr("Play")); ui->openFilePushButton->setText(tr("Play"));
ui->openFilePushButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/play.png")); ui->openFilePushButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/play.png"));
} }
}
} else { else
FileInfo fileInfo; {
bool detailsOk = rsFiles->FileDetails(mFile.mHash, RS_FILE_HINTS_DOWNLOAD | RS_FILE_HINTS_SPEC_ONLY, fileInfo); switch (fileInfo.downloadStatus)
{
if (detailsOk) {
switch (fileInfo.downloadStatus) {
case FT_STATE_WAITING: case FT_STATE_WAITING:
mState = STATE_WAITING; mState = STATE_WAITING;
break; break;
case FT_STATE_DOWNLOADING: case FT_STATE_DOWNLOADING:
if (fileInfo.avail == fileInfo.size) { if (fileInfo.avail == fileInfo.size)
mState = STATE_LOCAL; mState = STATE_LOCAL;
} else { else
mState = STATE_DOWNLOAD; mState = STATE_DOWNLOAD;
}
setSize(fileInfo.size); setSize(fileInfo.size);
ui->progressBar->setValue(fileInfo.avail / mDivisor); ui->progressBar->setValue(fileInfo.avail / mDivisor);
break; break;
case FT_STATE_COMPLETE: case FT_STATE_COMPLETE: // this should not happen, since the case is handled earlier
mState = STATE_DOWNLOAD; mState = STATE_ERROR;
break; break;
case FT_STATE_QUEUED: case FT_STATE_QUEUED:
mState = STATE_WAITING; mState = STATE_WAITING;
@ -134,12 +131,9 @@ void GxsChannelFilesStatusWidget::check()
case FT_STATE_CHECKING_HASH: case FT_STATE_CHECKING_HASH:
mState = STATE_CHECKING; mState = STATE_CHECKING;
break; break;
case FT_STATE_FAILED: default:
mState = STATE_ERROR;
break;
}
} else {
mState = STATE_REMOTE; mState = STATE_REMOTE;
break;
} }
} }
@ -156,7 +150,7 @@ void GxsChannelFilesStatusWidget::check()
ui->cancelToolButton->hide(); ui->cancelToolButton->hide();
ui->progressBar->hide(); ui->progressBar->hide();
ui->openFilePushButton->hide(); ui->openFilePushButton->hide();
ui->openFolderToolButton->hide(); ui->openFolderPushButton->hide();
statusText = tr("Error"); statusText = tr("Error");
@ -171,7 +165,7 @@ void GxsChannelFilesStatusWidget::check()
ui->cancelToolButton->hide(); ui->cancelToolButton->hide();
ui->progressBar->hide(); ui->progressBar->hide();
ui->openFilePushButton->hide(); ui->openFilePushButton->hide();
ui->openFolderToolButton->hide(); ui->openFolderPushButton->hide();
break; break;
@ -184,7 +178,7 @@ void GxsChannelFilesStatusWidget::check()
ui->cancelToolButton->show(); ui->cancelToolButton->show();
ui->progressBar->show(); ui->progressBar->show();
ui->openFilePushButton->hide(); ui->openFilePushButton->hide();
ui->openFolderToolButton->hide(); ui->openFolderPushButton->hide();
break; break;
@ -197,7 +191,7 @@ void GxsChannelFilesStatusWidget::check()
ui->cancelToolButton->show(); ui->cancelToolButton->show();
ui->progressBar->hide(); ui->progressBar->hide();
ui->openFilePushButton->hide(); ui->openFilePushButton->hide();
ui->openFolderToolButton->hide(); ui->openFolderPushButton->hide();
statusText = tr("Paused"); statusText = tr("Paused");
@ -212,7 +206,7 @@ void GxsChannelFilesStatusWidget::check()
ui->cancelToolButton->show(); ui->cancelToolButton->show();
ui->progressBar->hide(); ui->progressBar->hide();
ui->openFilePushButton->hide(); ui->openFilePushButton->hide();
ui->openFolderToolButton->hide(); ui->openFolderPushButton->hide();
statusText = tr("Waiting"); statusText = tr("Waiting");
@ -227,7 +221,7 @@ void GxsChannelFilesStatusWidget::check()
ui->cancelToolButton->show(); ui->cancelToolButton->show();
ui->progressBar->hide(); ui->progressBar->hide();
ui->openFilePushButton->hide(); ui->openFilePushButton->hide();
ui->openFolderToolButton->hide(); ui->openFolderPushButton->hide();
statusText = tr("Checking"); statusText = tr("Checking");
@ -242,7 +236,7 @@ void GxsChannelFilesStatusWidget::check()
ui->cancelToolButton->hide(); ui->cancelToolButton->hide();
ui->progressBar->hide(); ui->progressBar->hide();
ui->openFilePushButton->show(); ui->openFilePushButton->show();
ui->openFolderToolButton->show(); ui->openFolderPushButton->show();
break; break;
} }
@ -324,35 +318,60 @@ void GxsChannelFilesStatusWidget::cancel()
void GxsChannelFilesStatusWidget::openFolder() void GxsChannelFilesStatusWidget::openFolder()
{ {
FileInfo fileInfo; FileInfo fileInfo;
if (!rsFiles->alreadyHaveFile(mFile.mHash, fileInfo)) { if (!haveFile(fileInfo))
return; return;
}
QFileInfo finfo;
finfo.setFile(QString::fromUtf8(fileInfo.path.c_str()));
/* open folder with a suitable application */ /* open folder with a suitable application */
QDir dir = QFileInfo(QString::fromUtf8(fileInfo.path.c_str())).absoluteDir(); if (!RsUrlHandler::openUrl(QUrl::fromLocalFile(finfo.absolutePath()))) {
if (dir.exists()) {
if (!RsUrlHandler::openUrl(QUrl::fromLocalFile(dir.absolutePath()))) {
if(!mUsedAsEditor) if(!mUsedAsEditor)
QMessageBox::warning(this, "", QString("%1 %2").arg(tr("Can't open folder"), dir.absolutePath())); QMessageBox::warning(this, "", QString("%1 %2").arg(tr("Can't open folder"), finfo.absolutePath()));
else else
RsErr() << "Can't open folder " << dir.absolutePath().toStdString() ; RsErr() << "Can't open folder " << finfo.absolutePath().toStdString() ;
}
}
bool GxsChannelFilesStatusWidget::haveFile(FileInfo& info)
{
bool already_has_file = rsFiles->alreadyHaveFile(mFile.mHash, info);
if(!already_has_file)
if(!(rsFiles->FileDetails(mFile.mHash, RS_FILE_HINTS_DOWNLOAD | RS_FILE_HINTS_SPEC_ONLY, info) && info.downloadStatus==FT_STATE_COMPLETE))
return false;
// We need the code below because FileDetails() returns fileInfo.path as the directory when the file in COMPLETE and
// as a full path when the file is shared. The former is inconsistent with the documentation in rstypes.h, but I'm not
// sure what are the implications of changing the code in libretroshare so that the full path is always returned.
QFileInfo finfo;
if(QDir(QString::fromUtf8(info.path.c_str())).exists())
finfo.setFile(QString::fromUtf8(info.path.c_str()),QString::fromUtf8(info.fname.c_str()));
else if(QFile(QString::fromUtf8(info.path.c_str())).exists())
finfo.setFile(QString::fromUtf8(info.path.c_str()));
else
{
RsErr() << "Cannot find file!" << std::endl;
return false;
} }
}
info.path = finfo.absoluteFilePath().toStdString();
return true;
} }
void GxsChannelFilesStatusWidget::openFile() void GxsChannelFilesStatusWidget::openFile()
{ {
FileInfo fileInfo; FileInfo fileInfo;
if (!rsFiles->alreadyHaveFile(mFile.mHash, fileInfo)) { if(!haveFile(fileInfo))
return; return;
}
/* open file with a suitable application */ QFileInfo finfo;
QFileInfo qinfo; finfo.setFile(QString::fromUtf8(fileInfo.path.c_str()));
qinfo.setFile(QString::fromUtf8(fileInfo.path.c_str()));
if (qinfo.exists()) { if (finfo.exists()) {
if (!RsUrlHandler::openUrl(QUrl::fromLocalFile(qinfo.absoluteFilePath()))) { if (!RsUrlHandler::openUrl(QUrl::fromLocalFile(finfo.absoluteFilePath()))) {
std::cerr << "GxsChannelFilesStatusWidget(): can't open file " << fileInfo.path << std::endl; std::cerr << "GxsChannelFilesStatusWidget(): can't open file " << fileInfo.path << std::endl;
} }
}else{ }else{

View file

@ -53,6 +53,7 @@ private slots:
private: private:
void setSize(uint64_t size); void setSize(uint64_t size);
bool haveFile(FileInfo& info);
private: private:
enum State enum State

View file

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>421</width> <width>473</width>
<height>29</height> <height>36</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -139,7 +139,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QToolButton" name="openFolderToolButton"> <widget class="QToolButton" name="openFolderPushButton">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>

View file

@ -348,9 +348,16 @@ public:
if(r1 && r2) if(r1 && r2)
return (ord==Qt::AscendingOrder)?(fi1.transfered<fi2.transfered):(fi1.transfered>fi2.transfered); return (ord==Qt::AscendingOrder)?(fi1.transfered<fi2.transfered):(fi1.transfered>fi2.transfered);
else else
{
FileInfo fitmp;
if(!r1 && rsFiles->alreadyHaveFile(f1.mHash,fitmp)) fi1.downloadStatus = FT_STATE_COMPLETE;
if(!r2 && rsFiles->alreadyHaveFile(f2.mHash,fitmp)) fi2.downloadStatus = FT_STATE_COMPLETE;
return (ord==Qt::AscendingOrder)?(fi1.downloadStatus<fi2.downloadStatus):(fi1.downloadStatus>fi2.downloadStatus); return (ord==Qt::AscendingOrder)?(fi1.downloadStatus<fi2.downloadStatus):(fi1.downloadStatus>fi2.downloadStatus);
} }
} }
}
} }