From 3090a711e8424a7a1905eba7b715265a79baaec7 Mon Sep 17 00:00:00 2001 From: J-F Martel Date: Thu, 17 Dec 2015 18:53:13 -0500 Subject: [PATCH] Voip.MS dev --- MasterCtrl.pro | 8 +- Sources/Gui/AppIconWidget.cpp | 22 ++++ Sources/Gui/AppIconWidget.h | 18 +++ Sources/MasterCtrl.cpp | 5 + Sources/MasterCtrl.h | 2 + Sources/VoipSMS/VoipMsSMSClient.cpp | 191 ++++++++++++++++++---------- Sources/VoipSMS/VoipMsSMSClient.h | 9 ++ 7 files changed, 185 insertions(+), 70 deletions(-) create mode 100644 Sources/Gui/AppIconWidget.cpp create mode 100644 Sources/Gui/AppIconWidget.h diff --git a/MasterCtrl.pro b/MasterCtrl.pro index 23f26c4..72d5208 100644 --- a/MasterCtrl.pro +++ b/MasterCtrl.pro @@ -17,7 +17,9 @@ HEADERS += \ Sources/VoipSMS/CSMSMessage.h \ Sources/Gui/SystemTrayManager.h \ Sources/Gui/SettingsWindow.h \ - Sources/ProgramSettings.h + Sources/ProgramSettings.h \ + Sources/Gui/AppIconWidget.h \ + ../../SMSClient/Sources/SMSClient.h SOURCES += \ Sources/main.cpp \ @@ -32,7 +34,9 @@ SOURCES += \ Sources/VoipSMS/CSMSMessage.cpp \ Sources/Gui/SystemTrayManager.cpp \ Sources/Gui/SettingsWindow.cpp \ - Sources/ProgramSettings.cpp + Sources/ProgramSettings.cpp \ + Sources/Gui/AppIconWidget.cpp \ + ../../SMSClient/Sources/SMSClient.cpp #win32:SOURCES += $$PWD/Source/qextserialport/win_qextserialport.cpp \ diff --git a/Sources/Gui/AppIconWidget.cpp b/Sources/Gui/AppIconWidget.cpp new file mode 100644 index 0000000..29a9ae7 --- /dev/null +++ b/Sources/Gui/AppIconWidget.cpp @@ -0,0 +1,22 @@ +#include "AppIconWidget.h" +#include + + +CAppIconWidget::CAppIconWidget() +{ + setWindowFlags(Qt::Popup | Qt::FramelessWindowHint); + setParent(0); // Create TopLevel-Widget + setAttribute(Qt::WA_NoSystemBackground, true); + setAttribute(Qt::WA_TranslucentBackground, true); + setAttribute(Qt::WA_PaintOnScreen); // not needed in Qt 5.2 and up +} + + +void CAppIconWidget::paintEvent(QPaintEvent *event) +{ + QRectF Rect(100,100,100,100); + QPainter Painter(this); + + Painter.fillRect(Rect,Qt::SolidPattern); +} + diff --git a/Sources/Gui/AppIconWidget.h b/Sources/Gui/AppIconWidget.h new file mode 100644 index 0000000..953aad9 --- /dev/null +++ b/Sources/Gui/AppIconWidget.h @@ -0,0 +1,18 @@ +#ifndef CAPPICONWIDGET_H +#define CAPPICONWIDGET_H + +#include "GlobalDefine.h" +#include + +class CAppIconWidget : public QWidget +{ + Q_OBJECT +public: + CAppIconWidget(); + + + + virtual void paintEvent(QPaintEvent *event); +}; + +#endif // CAPPICONWIDGET_H diff --git a/Sources/MasterCtrl.cpp b/Sources/MasterCtrl.cpp index 0851f1b..3c8aede 100644 --- a/Sources/MasterCtrl.cpp +++ b/Sources/MasterCtrl.cpp @@ -37,6 +37,11 @@ void CMasterCtrl::Start() mSettingsManager.LoadSettings(&mMasterCtrlSettings); mSettingsWindow->SetSettingsData(&mMasterCtrlSettings); + mVoipMsSMSClient->SetVOIPMsSettings(&mMasterCtrlSettings.mVoipMSSettings); + mVoipMsSMSClient->DownloadSMSFromServer(); + + // mAppWidget.show(); + } diff --git a/Sources/MasterCtrl.h b/Sources/MasterCtrl.h index 7307a48..7d43f75 100644 --- a/Sources/MasterCtrl.h +++ b/Sources/MasterCtrl.h @@ -8,6 +8,7 @@ #include "SystemTrayManager.h" #include "SettingsWindow.h" #include "ProgramSettings.h" +//#include "AppIconWidget.h" class CMasterCtrl : public QObject { @@ -23,6 +24,7 @@ public: CSystemTrayManager *mSystemTrayManager; CSettingsWindow *mSettingsWindow; CProgramSettings mSettingsManager; + // CAppIconWidget mAppWidget; diff --git a/Sources/VoipSMS/VoipMsSMSClient.cpp b/Sources/VoipSMS/VoipMsSMSClient.cpp index ff9b340..2a11c0e 100644 --- a/Sources/VoipSMS/VoipMsSMSClient.cpp +++ b/Sources/VoipSMS/VoipMsSMSClient.cpp @@ -4,17 +4,25 @@ #include #include #include +#include CVoipMsSMSClient::CVoipMsSMSClient() { mVOIPMSSocket = new QNetworkAccessManager(); connect(mVOIPMSSocket,SIGNAL(finished(QNetworkReply*)),this,SLOT(VoipServerReplyFinished(QNetworkReply*))); + + mVOIPMsNotificationServer = new QTcpServer; + connect(mVOIPMsNotificationServer,SIGNAL(newConnection()),this,SLOT(VoipNotificationServerConnected())); + mVOIPMsNotificationServer->listen(QHostAddress::Any,80); + } CVoipMsSMSClient::~CVoipMsSMSClient() { delete mVOIPMSSocket; mSMSMessagesList.clear(); + mVOIPMsNotificationServer->close(); + delete mVOIPMsNotificationServer; } unsigned int CVoipMsSMSClient::SetVOIPMsSettings(CVoipMSSMSSettings *SettingsData) @@ -27,37 +35,9 @@ unsigned int CVoipMsSMSClient::SetVOIPMsSettings(CVoipMSSMSSettings *SettingsDat int CVoipMsSMSClient::DownloadSMSFromServer() { -// QDate EndDate; -// mCurStartDate = mVOIPMsSettings.mStartDate; -// if(mCurStartDate.daysTo(QDate::currentDate()) > VOIP_MS_SMS_DATESPAN) -// { -// EndDate = mCurStartDate.addDays(VOIP_MS_SMS_DATESPAN); -// } -// else -// { -// EndDate = mCurStartDate.addDays(mCurStartDate.daysTo(QDate::currentDate())); -// } mCurStartDate = QDate::currentDate().addDays(-VOIP_MS_SMS_DATESPAN); SendSMSDownloadRequest(mCurStartDate,QDate::currentDate()); - -// QString Url; -// Url.clear(); -// QTextStream UrlStream(&Url); - -// // Url = "https://www.voip.ms/api/v1/rest.php?api_username=jean-francois.martel@polymtl.ca&api_password=Pentium2&method=getSMS&from=2015-11-01&to=2015-11-11&did=5143606463&limit=50"; - -// UrlStream << VOIP_MS_API_URL -// << "api_username=" << mVOIPMsSettings.mUsername << "&" -// << "api_password=" << mVOIPMsSettings.mPassword << "&" -// << "method=" << "getSMS" << "&" -// << "from=" << mCurStartDate.toString("yyyy-MM-dd") << "&" -// << "to=" << EndDate.toString("yyyy-MM-dd") << "&" -// << "did=" << mVOIPMsSettings.mDefaultDID << "&" -// << "limit=" << "50"; - -// qDebug() << "Cmd: " << Url; -// mVOIPMSSocket->get(QNetworkRequest(Url)); -// mCurStartDate = EndDate; + mSMSMessagesList.clear(); return RET_OK; } @@ -85,9 +65,15 @@ int CVoipMsSMSClient::SendSMSDownloadRequest(QDate StartDate, QDate EndDate) mVOIPMSSocket->get(QNetworkRequest(Url)); mCurStartDate = EndDate; + return RET_OK; } +int CVoipMsSMSClient::DownloadNewSMS() +{ + SendSMSDownloadRequest(QDate::currentDate(),QDate::currentDate()); +} + unsigned int CVoipMsSMSClient::GetDidFromUserAccount(const QString username, const QString Password) { QString Method = "getDIDsInfo"; @@ -160,33 +146,71 @@ unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray) NBMsgReceived = NewMessages.size(); qDebug() << "Received " << NBMsgReceived << "messages"; + if(mSMSMessagesList.size() >0 && NewMessages.size() > 0) { //remove existing messages... bool finished = false; - int i = 0; - while(!finished) - { - //compare starting from the end for efficiency... - QDateTime NewDate = NewMessages.at(0).mDateTime; - QDateTime OldDate = mSMSMessagesList.last().mDateTime; - if(NewDate >= OldDate) + QDateTime NewDate = NewMessages.at(0).mDateTime; + QDateTime OldDate = mSMSMessagesList.at(0).mDateTime; + + if(NewDate > OldDate) + { + while(!finished) { - NewMessages.removeAt(0); - if(NewMessages.size() == 0) + //compare starting from the end for efficiency... + NewDate = NewMessages.last().mDateTime; + OldDate = mSMSMessagesList.at(0).mDateTime; + + if(NewDate <= OldDate) + { + NewMessages.removeLast(); + if(NewMessages.size() == 0) + { + finished = true; + } + } + else { finished = true; } } - else + + NewMessages.append(mSMSMessagesList); + mSMSMessagesList = NewMessages; + } + else + { + + while(!finished) { - finished = true; + //compare starting from the end for efficiency... + NewDate = NewMessages.at(0).mDateTime; + OldDate = mSMSMessagesList.last().mDateTime; + + if(NewDate >= OldDate) + { + NewMessages.removeAt(0); + if(NewMessages.size() == 0) + { + finished = true; + } + } + else + { + finished = true; + } } + mSMSMessagesList.append(NewMessages); } } + else + { + mSMSMessagesList.append(NewMessages); + } + - mSMSMessagesList.append(NewMessages); if(NBMsgReceived == VOIP_MS_SMS_MAX_COUNT) @@ -203,7 +227,7 @@ unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray) qDebug(" "); for(int i = 0; i < mSMSMessagesList.size(); i++) { - qDebug() << mSMSMessagesList.at(i).mDateTime.toString("yyyy:MM:dd hh:mm:ss") << " : " << mSMSMessagesList.at(i).mContact << " : " << mSMSMessagesList.at(i).mMessageText.toUtf8().data(); + qDebug() << mSMSMessagesList.at(i).mDateTime.toString("yyyy-MM-dd hh:mm:ss") << " : " << mSMSMessagesList.at(i).mContact << " : " << mSMSMessagesList.at(i).mMessageText.toUtf8().data(); } qDebug("-----------------------------------------------------------------------"); qDebug(" "); @@ -215,34 +239,17 @@ unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray) qDebug("No SMS to download in this period."); } + return RET_OK; +} +unsigned int CVoipMsSMSClient::NewSMSNotification(QString DID) +{ + if(DID != mVOIPMsSettings.mDefaultDID) + { + return RET_ERROR; + } - - - - - -// if(mCurStartDate != QDate::currentDate()) -// { -// if(mSMSMessagesList.size() != 0) -// { -// mCurStartDate = QDate::fromString(mSMSMessagesList.last().mDateTime.toString("yyyy-MM-dd")); -// } - -// QDate EndDate; -// if(mCurStartDate.daysTo(QDate::currentDate()) > VOIP_MS_SMS_DATESPAN) -// { -// EndDate = mCurStartDate.addDays(VOIP_MS_SMS_DATESPAN); -// } -// else -// { -// EndDate = mCurStartDate.addDays(mCurStartDate.daysTo(QDate::currentDate())); -// } - -// SendSMSDownloadRequest(mCurStartDate,EndDate); -// } - -// qDebug("Added %d messages in the list",mSMSMessagesList.size()); + DownloadNewSMS(); return RET_OK; } @@ -268,6 +275,54 @@ unsigned int CVoipMsSMSClient::DIDsInfoReceived(QJsonArray *DIDsInfoPtr) return RET_OK; } +void CVoipMsSMSClient::VoipNotificationServerConnected() +{ + qDebug("Client Connected"); + + mClientConnection = mVOIPMsNotificationServer->nextPendingConnection(); + connect(mClientConnection,SIGNAL(readyRead()),this,SLOT(VoipNotificationServerDataAvail())); + // ClientConnection->waitForReadyRead(); + +} + +void CVoipMsSMSClient::VoipNotificationServerDataAvail() +{ + QString Notification(mClientConnection->readAll()); + QStringList Parts = Notification.split(" "); + QString Data; + QString Did; + + for(int i = 0; i < Parts.size(); i++) + { + if(Parts.at(i).contains("/?")) + { + Data = Parts.at(i); + break; + } + } + + if(Data.isEmpty() == false) + { + Parts = Data.remove("/?").split("&"); + + for(int i = 0; i < Parts.size(); i++) + { + if(Parts.at(i).contains("did=")) + { + Data = Parts.at(i); + Did = Data.remove("did="); + } + } + } + + qDebug() << "New SMS from did: " << Did; + +// qDebug() << Notification; + mClientConnection->close(); + + NewSMSNotification(Did); +} + //https://www.voip.ms/api/v1/rest.php?api_username=jean-francois.martel@polymtl.ca&api_password=Pentium2&method=getBalance&advanced=True diff --git a/Sources/VoipSMS/VoipMsSMSClient.h b/Sources/VoipSMS/VoipMsSMSClient.h index 1a0ea87..89db7e8 100644 --- a/Sources/VoipSMS/VoipMsSMSClient.h +++ b/Sources/VoipSMS/VoipMsSMSClient.h @@ -10,6 +10,7 @@ #include #include #include "ProgramSettings.h" +#include #define VOIP_MS_API_URL "https://www.voip.ms/api/v1/rest.php?" #define VOIP_MS_SMS_DATESPAN 90 @@ -31,11 +32,13 @@ public: int DownloadSMSFromServer(); int SendSMSDownloadRequest(QDate StartDate, QDate EndDate); + int DownloadNewSMS(); QList mSMSMessagesList; unsigned int GetDidFromUserAccount(const QString username, const QString Password); unsigned int SetVOIPMsSettings(CVoipMSSMSSettings *SettingsData); + unsigned int NewSMSNotification(QString DID); private: QNetworkAccessManager *mVOIPMSSocket; @@ -47,12 +50,18 @@ private: QDate mCurStartDate; + QTcpServer *mVOIPMsNotificationServer; + QTcpSocket *mClientConnection; + signals: void DIDSFetched(QStringList); public slots: void VoipServerReplyFinished(QNetworkReply*); + void VoipNotificationServerConnected(); + void VoipNotificationServerDataAvail(); + }; #endif // CVOIPMSSMSCLIENT_H