mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-01 16:13:57 -04:00
68 lines
2.0 KiB
C++
68 lines
2.0 KiB
C++
|
#ifndef FILE_NODE_HPP__
|
||
|
#define FILE_NODE_HPP__
|
||
|
|
||
|
#include <QTreeWidgetItem>
|
||
|
|
||
|
#include "RemoteFile.hpp"
|
||
|
|
||
|
class QNetworkAccessManager;
|
||
|
class QString;
|
||
|
class QUrl;
|
||
|
|
||
|
//
|
||
|
// A holder for a RemoteFile object linked to a QTreeWidget row.
|
||
|
//
|
||
|
// It renders the file name in first column and holds download
|
||
|
// progress data in the second column. The progress information is a
|
||
|
// 64 bit integer number of bytes in the DisplayRole and a total bytes
|
||
|
// expected in the UserRole. The first column also renders a check box
|
||
|
// that downloads the file when checked and removes the downloaded
|
||
|
// file when unchecked. The URL and local absolute file path are
|
||
|
// stored in the UserData and UserData+1 roles of the first column.
|
||
|
//
|
||
|
class FileNode final
|
||
|
: public QTreeWidgetItem
|
||
|
, protected RemoteFile::ListenerInterface
|
||
|
{
|
||
|
public:
|
||
|
explicit FileNode (QTreeWidgetItem * parent
|
||
|
, QNetworkAccessManager * network_manager
|
||
|
, QString const& local_path
|
||
|
, QUrl const& url);
|
||
|
|
||
|
bool local () const {return remote_file_.local ();}
|
||
|
bool sync (bool local);
|
||
|
void abort ();
|
||
|
|
||
|
static int const Type {UserType + 1};
|
||
|
|
||
|
//
|
||
|
// Clients may use this RAII class to block nested calls to sync
|
||
|
// which may be troublesome, e.g. when UI updates cause recursion.
|
||
|
//
|
||
|
struct sync_blocker
|
||
|
{
|
||
|
sync_blocker (FileNode * node) : node_ {node} {node_->block_sync_ = true;}
|
||
|
sync_blocker (sync_blocker const&) = delete;
|
||
|
sync_blocker& operator = (sync_blocker const&) = delete;
|
||
|
~sync_blocker () {node_->block_sync_ = false;}
|
||
|
private:
|
||
|
FileNode * node_;
|
||
|
};
|
||
|
|
||
|
protected:
|
||
|
void error (QString const& title, QString const& message) override;
|
||
|
bool redirect_request (QUrl const&) override {return true;} // allow
|
||
|
void download_progress (qint64 bytes_received, qint64 total_bytes) override;
|
||
|
void download_finished (bool success) override;
|
||
|
|
||
|
private:
|
||
|
QNetworkAccessManager * network_manager_;
|
||
|
RemoteFile remote_file_; // active download
|
||
|
bool block_sync_;
|
||
|
|
||
|
friend struct sync_blocker;
|
||
|
};
|
||
|
|
||
|
#endif
|