Checksums: keep the transfer checksum in the database as the content checksum

Currently, we only use this for .eml files. But we can just store this checksum
in the database if it was computed anyway.

Issue #4487
This commit is contained in:
Olivier Goffart 2016-02-25 17:17:14 +01:00
parent 1fafb1325b
commit e6f81d3965
3 changed files with 15 additions and 3 deletions

View file

@ -550,7 +550,7 @@ void PropagateDownloadFileQNAM::slotGetFinished()
// as this is (still) also correct.
ValidateChecksumHeader *validator = new ValidateChecksumHeader(this);
connect(validator, SIGNAL(validated(QByteArray,QByteArray)),
SLOT(downloadFinished()));
SLOT(downloadFinished(QByteArray,QByteArray)));
connect(validator, SIGNAL(validationFailed(QString)),
SLOT(slotChecksumFail(QString)));
auto checksumHeader = job->reply()->rawHeader(checkSumHeaderC);
@ -638,8 +638,13 @@ static void handleRecallFile(const QString &fn)
}
} // end namespace
void PropagateDownloadFileQNAM::downloadFinished()
void PropagateDownloadFileQNAM::downloadFinished(const QByteArray& transportChecksumType,
const QByteArray& transportChecksum)
{
// by default, reuse the transport checksum as content checksum
_item->_contentChecksum = transportChecksum;
_item->_contentChecksumType = transportChecksumType;
QString fn = _propagator->getFilePath(_item->_file);
// In case of file name clash, report an error

View file

@ -128,7 +128,8 @@ public:
private slots:
void slotGetFinished();
void abort() Q_DECL_OVERRIDE;
void downloadFinished();
void downloadFinished(const QByteArray& transportChecksumType = QByteArray(),
const QByteArray &transportChecksum = QByteArray());
void slotDownloadProgress(qint64,qint64);
void slotChecksumFail( const QString& errMsg );

View file

@ -282,6 +282,12 @@ void PropagateUploadFileQNAM::slotStartUpload(const QByteArray& transmissionChec
_transmissionChecksum = transmissionChecksum;
_transmissionChecksumType = transmissionChecksumType;
if (_item->_contentChecksum.isEmpty() && _item->_contentChecksumType.isEmpty()) {
// If the _contentChecksum was not set, reuse the transmission checksum as the content checksum.
_item->_contentChecksum = transmissionChecksum;
_item->_contentChecksumType = transmissionChecksumType;
}
const QString fullFilePath = _propagator->getFilePath(_item->_file);
if (!FileSystem::fileExists(fullFilePath)) {