#ifndef REQUESTWORKER_H #define REQUESTWORKER_H #include #include #include #include #include #include #include #include #include #include #ifdef Q_OS_ANDROID #include "wifihelper.h" #include #endif class RequestWorker : public QObject { Q_OBJECT QML_ELEMENT Q_PROPERTY(QString status READ status WRITE setStatus NOTIFY statusChanged FINAL) QNetworkAccessManager *manager = nullptr; QTimer *timer = nullptr; QString url; int interval; float prev_distance = 0; int max_height = 0; int min_height = 0; bool stop_timer = false; int reply_number = 0; int alarm_thres = 0; bool enable_alarm = false; bool player_started = false; QMediaPlayer *player = nullptr; QAudioOutput *audioOutput = nullptr; #ifdef Q_OS_ANDROID WiFiHelper *wifi = nullptr; QTimer *poll_wifi = nullptr; #endif std::chrono::time_point prev_time; public: explicit RequestWorker(QObject *parent = nullptr); QString status() const; void setStatus(const QString &newStatus); signals: void requestFailed(QString request_response_string); void networkReply(int distance, float rate_of_fill, int expected_to_fill, QString data); void statusChanged(); void playMedia(); void connectionText(QString text, bool errored = false); public slots: void startAlarm(); void stopAlarm(); void setConfig(QJsonObject config); void start(); void stop(); private slots: QString getRequestResponseString(QNetworkReply *rep, QString rep_data = ""); void pollWiFi(); void gotWiFiSSID(QString ssid); void playAlarm(); void makeRequest(); void requestFinished(QNetworkReply *rep); private: QString m_status; #ifdef Q_OS_ANDROID QJniObject *m_androidMediaPlayer = nullptr; #endif }; #endif // REQUESTWORKER_H