Masterctrl/Sources/VoipSMS/VoipMsSMSClient.cpp
2015-12-11 14:14:36 -05:00

276 lines
8.7 KiB
C++

#include "VoipMsSMSClient.h"
#include <QTextStream>
#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDateTime>
CVoipMsSMSClient::CVoipMsSMSClient()
{
mVOIPMSSocket = new QNetworkAccessManager();
connect(mVOIPMSSocket,SIGNAL(finished(QNetworkReply*)),this,SLOT(VoipServerReplyFinished(QNetworkReply*)));
}
CVoipMsSMSClient::~CVoipMsSMSClient()
{
delete mVOIPMSSocket;
mSMSMessagesList.clear();
}
unsigned int CVoipMsSMSClient::SetVOIPMsSettings(CVoipMSSMSSettings *SettingsData)
{
mVOIPMsSettings = SettingsData;
return RET_OK;
}
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;
return RET_OK;
}
int CVoipMsSMSClient::SendSMSDownloadRequest(QDate StartDate, QDate EndDate)
{
QString Url;
Url.clear();
QTextStream UrlStream(&Url);
qDebug() << "Sending request for dates from: " << StartDate.toString("yyyy-MM-dd") << " to: " << EndDate.toString("yyyy-MM-dd");
// 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=" << StartDate.toString("yyyy-MM-dd") << "&"
<< "to=" << EndDate.toString("yyyy-MM-dd") << "&"
<< "did=" << mVOIPMsSettings.mDefaultDID << "&"
<< "limit=" << VOIP_MS_SMS_MAX_COUNT;
qDebug() << "Cmd: " << Url;
mVOIPMSSocket->get(QNetworkRequest(Url));
mCurStartDate = EndDate;
return RET_OK;
}
unsigned int CVoipMsSMSClient::GetDidFromUserAccount(const QString username, const QString Password)
{
QString Method = "getDIDsInfo";
QString Url;
Url.clear();
QTextStream UrlStream(&Url);
UrlStream << VOIP_MS_API_URL
<< "api_username=" << username << "&"
<< "api_password=" << Password << "&"
<< "method=" << Method << "&";
mVOIPMSSocket->get(QNetworkRequest(Url));
return RET_OK;
}
void CVoipMsSMSClient::VoipServerReplyFinished(QNetworkReply *NetworkReply)
{
QByteArray Reply = NetworkReply->readAll();
QJsonDocument JsonReply = QJsonDocument::fromJson(Reply);
QJsonObject JsonObject = JsonReply.object();
QStringList Keys = JsonObject.keys();
if(JsonObject["status"].toString() == "success")
{
if(Keys.contains("sms"))
{
QJsonArray SMSArray = JsonObject["sms"].toArray();
SMSReceived(&SMSArray);
}
else if(Keys.contains("dids"))
{
QJsonArray DIDsInfoArray = JsonObject["dids"].toArray();
DIDsInfoReceived(&DIDsInfoArray);
}
}
else
{
qDebug() << "VOIP.MS reply: " << JsonObject["status"].toString();
if(JsonObject["status"].toString() == "no_sms")
{
SMSReceived(0);
}
}
}
unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray)
{
QList<CSMSMessage> NewMessages;
int NBMsgReceived;
if(SMSArray != 0)
{
foreach (const QJsonValue & value, *SMSArray)
{
CSMSMessage NewMessage;
QJsonObject obj = value.toObject();
NewMessage.mContact = obj["contact"].toString();
NewMessage.mDateTime = QDateTime::fromString(obj["date"].toString(),"yyyy-MM-dd HH:mm:ss");
NewMessage.mDID = obj["did"].toString();
NewMessage.mMessageText = obj["message"].toString();
NewMessage.mType = (SmsType_t)obj["type"].toString().toInt();
NewMessage.mVOIPMSDatabaseID = obj["id"].toString();//.toLongLong();
NewMessages.append(NewMessage);
//qDebug() << obj["date"].toString() << " : " << obj["id"].toString();
}
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)
{
NewMessages.removeAt(0);
if(NewMessages.size() == 0)
{
finished = true;
}
}
else
{
finished = true;
}
}
}
mSMSMessagesList.append(NewMessages);
if(NBMsgReceived == VOIP_MS_SMS_MAX_COUNT)
{
//Restart at the last day received...
mCurStartDate = mSMSMessagesList.last().mDateTime.date();
QDate EarlierDate = mCurStartDate.addDays(-VOIP_MS_SMS_DATESPAN);
SendSMSDownloadRequest(EarlierDate,mCurStartDate);
}
else
{
qDebug() << "Finished download of " << mSMSMessagesList.size() << " SMS messages";
qDebug("-----------------------------------------------------------------------");
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("-----------------------------------------------------------------------");
qDebug(" ");
}
}
else
{
qDebug("No SMS to download in this period.");
}
// 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());
return RET_OK;
}
unsigned int CVoipMsSMSClient::DIDsInfoReceived(QJsonArray *DIDsInfoPtr)
{
QStringList DIDs;
QJsonArray DIDsInfo = *DIDsInfoPtr;
foreach (const QJsonValue & value, DIDsInfo)
{
QJsonObject DIDInfo = value.toObject();
QString CurDID = DIDInfo["did"].toString();
int SMSEnabled = DIDInfo["sms_enabled"].toString().toInt();
if(SMSEnabled == 1)
{
DIDs.append(CurDID);
}
qDebug("DID: %s - SMSEnabled %d",CurDID.toUtf8().data(),SMSEnabled);
emit DIDSFetched(DIDs);
}
return RET_OK;
}
//https://www.voip.ms/api/v1/rest.php?api_username=jean-francois.martel@polymtl.ca&api_password=Pentium2&method=getBalance&advanced=True
//https://www.voip.ms/api/v1/rest.php?api_username=jean-francois.martel@polymtl.ca&api_password=Pentium2&method=getSMS&from=2014-01-01&to=2015-11-11&did=5143606463&limit=50