mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -05: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
							 |