WaterLevelSensor/requestworker.h
2026-09-23 17:36:00 +05:30

74 lines
2 KiB
C++

#ifndef REQUESTWORKER_H
#define REQUESTWORKER_H
#include <QObject>
#include <QQmlEngine>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QMediaPlayer>
#include <QAudioOutput>
#include <QTimer>
#include <QThread>
#include <chrono>
#ifdef Q_OS_ANDROID
#include "wifihelper.h"
#include <QJniObject>
#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<std::chrono::high_resolution_clock> 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