use different temp file class; use VERYYYYMMMDD version from file

This commit is contained in:
Brian Moran 2023-03-16 19:13:59 -07:00
parent b812ac2786
commit 88b1e46ee4
4 changed files with 32 additions and 23 deletions

View File

@ -25,7 +25,8 @@ void FileDownload::errorOccurred(QNetworkReply::NetworkError code)
{ {
LOG_INFO(QString{"FileDownload [%1]: errorOccurred %2 -> %3"}.arg(user_agent_).arg(code).arg(reply_->errorString())); LOG_INFO(QString{"FileDownload [%1]: errorOccurred %2 -> %3"}.arg(user_agent_).arg(code).arg(reply_->errorString()));
Q_EMIT error (reply_->errorString ()); Q_EMIT error (reply_->errorString ());
delete tmpfile_; destfile_.cancelWriting ();
destfile_.commit ();
} }
void FileDownload::configure(QNetworkAccessManager *network_manager, const QString &source_url, const QString &destination_path, const QString &user_agent) void FileDownload::configure(QNetworkAccessManager *network_manager, const QString &source_url, const QString &destination_path, const QString &user_agent)
@ -38,17 +39,16 @@ void FileDownload::configure(QNetworkAccessManager *network_manager, const QStri
void FileDownload::store() void FileDownload::store()
{ {
if (tmpfile_->isOpen()) if (destfile_.isOpen())
tmpfile_->write (reply_->read (reply_->bytesAvailable ())); destfile_.write (reply_->read (reply_->bytesAvailable ()));
else else
LOG_INFO(QString{ "FileDownload [%1]: tmpfile is not open"}.arg(user_agent_)); LOG_INFO(QString{ "FileDownload [%1]: file is not open."}.arg(user_agent_));
} }
void FileDownload::replyComplete() void FileDownload::replyComplete()
{ {
QFileInfo destination_file(destination_filename_); QFileInfo destination_file(destination_filename_);
QString const tmpfile_path = destination_file.absolutePath(); QDir tmpdir_(destination_file.absoluteFilePath());
QDir tmpdir_(tmpfile_path);
LOG_DEBUG(QString{ "FileDownload [%1]: replyComplete"}.arg(user_agent_)); LOG_DEBUG(QString{ "FileDownload [%1]: replyComplete"}.arg(user_agent_));
if (!reply_) if (!reply_)
@ -83,8 +83,8 @@ void FileDownload::replyComplete()
} }
else if (reply_->error () != QNetworkReply::NoError) else if (reply_->error () != QNetworkReply::NoError)
{ {
tmpfile_->close(); destfile_.cancelWriting();
delete tmpfile_; destfile_.commit();
url_valid_ = false; // reset url_valid_ = false; // reset
// report errors that are not due to abort // report errors that are not due to abort
if (QNetworkReply::OperationCanceledError != reply_->error ()) if (QNetworkReply::OperationCanceledError != reply_->error ())
@ -107,14 +107,8 @@ void FileDownload::replyComplete()
url_valid_ = false; // reset url_valid_ = false; // reset
// load the database asynchronously // load the database asynchronously
// future_load_ = std::async (std::launch::async, &LotWUsers::impl::load_dictionary, this, csv_file_.fileName ()); // future_load_ = std::async (std::launch::async, &LotWUsers::impl::load_dictionary, this, csv_file_.fileName ());
LOG_INFO(QString{ "FileDownload [%1]: complete. tempfile path is %2"}.arg(user_agent_).arg(tmpfile_->fileName())); LOG_INFO(QString{ "FileDownload [%1]: complete. File path is %2"}.arg(user_agent_).arg(destfile_.fileName()));
// move the file to the destination destfile_.commit();
tmpdir_.remove(destination_filename_+".old"); // get rid of previous version
tmpdir_.rename(destination_filename_, destination_filename_+".old");
tmpdir_.rename(tmpfile_->fileName(), destination_filename_);
LOG_INFO(QString{ "FileDownload [%1]: moved tempfile %2 to %3"}.arg(user_agent_).arg(tmpfile_->fileName()).arg(destination_filename_));
tmpfile_->close();
delete tmpfile_;
emit complete(destination_filename_); emit complete(destination_filename_);
} }
} }
@ -184,15 +178,18 @@ void FileDownload::download(QUrl qurl)
QObject::connect(manager_, &QNetworkAccessManager::finished, this, &FileDownload::downloadComplete, Qt::UniqueConnection); QObject::connect(manager_, &QNetworkAccessManager::finished, this, &FileDownload::downloadComplete, Qt::UniqueConnection);
QObject::connect(reply_, &QNetworkReply::downloadProgress, this, &FileDownload::downloadProgress, Qt::UniqueConnection); QObject::connect(reply_, &QNetworkReply::downloadProgress, this, &FileDownload::downloadProgress, Qt::UniqueConnection);
QObject::connect(reply_, &QNetworkReply::finished, this,&FileDownload::replyComplete, Qt::UniqueConnection); QObject::connect(reply_, &QNetworkReply::finished, this,&FileDownload::replyComplete, Qt::UniqueConnection);
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
QObject::connect(reply_, &QNetworkReply::errorOccurred,this,&FileDownload::errorOccurred, Qt::UniqueConnection); QObject::connect(reply_, &QNetworkReply::errorOccurred,this,&FileDownload::errorOccurred, Qt::UniqueConnection);
#else
QObject::connect(reply_, &QNetworkReply::error, this, &FileDownload::errorOccurred, Qt::UniqueConnection);
#endif
QObject::connect (reply_, &QNetworkReply::readyRead, this, &FileDownload::store, Qt::UniqueConnection); QObject::connect (reply_, &QNetworkReply::readyRead, this, &FileDownload::store, Qt::UniqueConnection);
QFileInfo destination_file(destination_filename_); QFileInfo destination_file(destination_filename_);
QString const tmpfile_base = destination_file.fileName(); QString const tmpfile_base = destination_file.fileName();
QString const tmpfile_path = destination_file.absolutePath(); QString const tmpfile_path = destination_file.absolutePath();
tmpfile_ = new QTemporaryFile(tmpfile_path+QDir::separator()+tmpfile_base+".XXXXXX"); destfile_.setFileName(destination_file.absoluteFilePath());
if (!tmpfile_->open()) if (!destfile_.open(QSaveFile::WriteOnly))
{ {
LOG_INFO(QString{"FileDownload [%1]: Unable to open the temporary file based on %2"}.arg(user_agent_).arg(tmpfile_path)); LOG_INFO(QString{"FileDownload [%1]: Unable to open the temporary file based on %2"}.arg(user_agent_).arg(tmpfile_path));
return; return;

View File

@ -7,6 +7,7 @@
#include <QtNetwork/QNetworkAccessManager> #include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply> #include <QtNetwork/QNetworkReply>
#include <QTemporaryFile> #include <QTemporaryFile>
#include <QSaveFile>
class FileDownload : public QObject { class FileDownload : public QObject {
Q_OBJECT Q_OBJECT
@ -24,7 +25,7 @@ private:
QString user_agent_; QString user_agent_;
QPointer<QNetworkReply> reply_; QPointer<QNetworkReply> reply_;
QNetworkRequest request_; QNetworkRequest request_;
QPointer<QTemporaryFile> tmpfile_; QSaveFile destfile_;
bool url_valid_; bool url_valid_;
int redirect_count_; int redirect_count_;
signals: signals:

View File

@ -16,6 +16,7 @@
#include <QTextStream> #include <QTextStream>
#include <QDebug> #include <QDebug>
#include <QDebugStateSaver> #include <QDebugStateSaver>
#include <QRegularExpression>
#include "Configuration.hpp" #include "Configuration.hpp"
#include "Radio.hpp" #include "Radio.hpp"
#include "pimpl_impl.hpp" #include "pimpl_impl.hpp"
@ -233,6 +234,8 @@ public:
Configuration const * configuration_; Configuration const * configuration_;
QString path_; QString path_;
QString cty_version_; QString cty_version_;
QString cty_version_date_;
entities_type entities_; entities_type entities_;
prefixes_type prefixes_; prefixes_type prefixes_;
}; };
@ -330,11 +333,14 @@ QString AD1CCty::impl::get_cty_path(Configuration const * configuration)
void AD1CCty::impl::load_cty(QFile &file) void AD1CCty::impl::load_cty(QFile &file)
{ {
QRegularExpression version_pattern{R"(VER\d{8})"};
int entity_id = 0; int entity_id = 0;
int line_number{0}; int line_number{0};
entities_.clear(); entities_.clear();
prefixes_.clear(); prefixes_.clear();
cty_version_ = QString{};
cty_version_date_ = QString{};
QTextStream in{&file}; QTextStream in{&file};
while (!in.atEnd()) while (!in.atEnd())
@ -377,6 +383,11 @@ void AD1CCty::impl::load_cty(QFile &file)
{ {
prefix = prefix.mid(1); prefix = prefix.mid(1);
exact = true; exact = true;
// match version pattern to prefix
if (version_pattern.match(prefix).hasMatch())
{
cty_version_date_ = prefix;
}
} }
prefixes_.emplace(prefix, exact, entity_id); prefixes_.emplace(prefix, exact, entity_id);
} }
@ -407,7 +418,7 @@ void AD1CCty::reload(Configuration const * configuration)
m_->impl::load_cty(file); m_->impl::load_cty(file);
m_->cty_version_ = AD1CCty::lookup("VERSION").entity_name; m_->cty_version_ = AD1CCty::lookup("VERSION").entity_name;
Q_EMIT cty_loaded(m_->cty_version_); Q_EMIT cty_loaded(m_->cty_version_);
LOG_INFO(QString{"Loaded CTY.DAT version %1"}.arg (m_->cty_version_)); LOG_INFO(QString{"Loaded CTY.DAT version %1, %2"}.arg (m_->cty_version_date_).arg (m_->cty_version_));
} }
} }
@ -448,5 +459,5 @@ auto AD1CCty::lookup (QString const& call) const -> Record
} }
auto AD1CCty::version () const -> QString auto AD1CCty::version () const -> QString
{ {
return m_->cty_version_; return m_->cty_version_date_;
} }

View File

@ -530,7 +530,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
else else
{ {
m_config.set_CTY_DAT_version(cty_version); m_config.set_CTY_DAT_version(cty_version);
showStatusMessage (tr ("Scanned ADIF log, %1 worked-before records created. CTY: %2. CTY: %2").arg (record_count).arg (cty_version)); showStatusMessage (tr ("Scanned ADIF log, %1 worked-before records created. CTY: %2").arg (record_count).arg (cty_version));
} }
}); });