1 #ifndef WSPRNET_H
2 #define WSPRNET_H
3 
4 #include <QObject>
5 #include <QTimer>
6 #include <QString>
7 #include <QList>
8 #include <QUrlQuery>
9 #include <QQueue>
10 
11 class QNetworkAccessManager;
12 class QNetworkReply;
13 
14 class WSPRNet : public QObject
15 {
16   Q_OBJECT
17 
18   using SpotQueue = QQueue<QUrlQuery>;
19 
20 public:
21   explicit WSPRNet (QNetworkAccessManager *, QObject *parent = nullptr);
22   void upload (QString const& call, QString const& grid, QString const& rfreq, QString const& tfreq,
23                QString const& mode, float TR_peirod, QString const& tpct, QString const& dbm,
24                QString const& version, QString const& fileName);
25   void post (QString const& call, QString const& grid, QString const& rfreq, QString const& tfreq,
26              QString const& mode, float TR_period, QString const& tpct, QString const& dbm,
27              QString const& version, QString const& decode_text = QString {});
28 signals:
29   void uploadStatus (QString);
30 
31 public slots:
32   void networkReply (QNetworkReply *);
33   void work ();
34   void abortOutstandingRequests ();
35 
36 private:
37   bool decodeLine (QString const& line, SpotQueue::value_type& query) const;
38   SpotQueue::value_type urlEncodeNoSpot () const;
39   SpotQueue::value_type urlEncodeSpot (SpotQueue::value_type& spot) const;
40   QString encode_mode () const;
41 
42   QNetworkAccessManager * network_manager_;
43   QList<QNetworkReply *> m_outstandingRequests;
44   QString m_call;
45   QString m_grid;;
46   QString m_rfreq;
47   QString m_tfreq;
48   QString m_mode;
49   QString m_tpct;
50   QString m_dbm;
51   QString m_vers;
52   QString m_file;
53   float TR_period_;
54   int spots_to_send_;
55   SpotQueue spot_queue_;
56   QTimer upload_timer_;
57   int m_uploadType;
58 };
59 
60 #endif // WSPRNET_H
61