Creation
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
#include "Contact.h"
|
||||
|
||||
CContact::CContact(QString ContactNbr, QString ContactName, QPixmap *Picture)
|
||||
{
|
||||
|
||||
mRAWContactNbr = ContactNbr;
|
||||
mContactNumber = ContactNbr;
|
||||
mContactNumber.insert(0,'(');
|
||||
mContactNumber.insert(4,") ");
|
||||
mContactNumber.insert(9,'-');
|
||||
|
||||
mContactName = ContactName;
|
||||
if(mContactName == "")
|
||||
{
|
||||
mContactName = mContactNumber;
|
||||
}
|
||||
|
||||
|
||||
if(Picture == 0)
|
||||
{
|
||||
mContactPicture = QPixmap("./Ico/contact.png");
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Picture->isNull())
|
||||
{
|
||||
mContactPicture = QPixmap("./Ico/contact.png");
|
||||
}
|
||||
else
|
||||
{
|
||||
mContactPicture = QPixmap(*Picture);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
CContact::CContact()
|
||||
{
|
||||
mContactNumber="INVALID";
|
||||
mContactPicture = QPixmap("./Ico/contact.png");
|
||||
}
|
||||
|
||||
CContact::~CContact()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int CContact::SetContactImage(QString FilePath)
|
||||
{
|
||||
mContactPicture = QPixmap(FilePath);
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
bool operator ==(const CContact& left, const CContact& right)
|
||||
{
|
||||
if(left.mRAWContactNbr == right.mRAWContactNbr)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
bool operator !=(const CContact& left, const CContact& right)
|
||||
{
|
||||
return !(left==right);
|
||||
}
|
||||
|
||||
CContact & CContact::operator=(const CContact source)
|
||||
{
|
||||
if(&source == this)
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
this->mRAWContactNbr = source.mRAWContactNbr;
|
||||
this->mContactName = source.mContactName;
|
||||
this->mContactNumber = source.mContactNumber;
|
||||
this->mContactPicture = source.mContactPicture;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
QDataStream &operator<<(QDataStream &out, const CContact &source)
|
||||
{
|
||||
out << source.mContactName
|
||||
<< source.mContactNumber
|
||||
<< source.mContactPicture
|
||||
<< source.mRAWContactNbr;
|
||||
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
QDataStream &operator>>(QDataStream &in, CContact &dest)
|
||||
{
|
||||
in >> dest.mContactName
|
||||
>> dest.mContactNumber
|
||||
>> dest.mContactPicture
|
||||
>> dest.mRAWContactNbr;
|
||||
|
||||
|
||||
|
||||
return in;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
#ifndef CCONTACT_H
|
||||
#define CCONTACT_H
|
||||
|
||||
#include "GlobalDefine.h"
|
||||
#include <QString>
|
||||
#include <QPixmap>
|
||||
|
||||
class CContact
|
||||
{
|
||||
public:
|
||||
CContact(QString ContactNbr, QString ContactName = "", QPixmap *Picture = 0);
|
||||
CContact();
|
||||
virtual ~CContact();
|
||||
|
||||
int SetContactImage(QString FilePath);
|
||||
|
||||
QString mContactName;
|
||||
QPixmap mContactPicture;
|
||||
QString mContactNumber, mRAWContactNbr;
|
||||
|
||||
CContact &operator=(const CContact source);
|
||||
};
|
||||
|
||||
bool operator==(const CContact& left, const CContact& right);
|
||||
bool operator!=(const CContact& left, const CContact& right);
|
||||
|
||||
QDataStream &operator<<(QDataStream &out, const CContact &source);
|
||||
QDataStream &operator>>(QDataStream &in, CContact &dest);
|
||||
#endif // CCONTACT_H
|
||||
@@ -0,0 +1,168 @@
|
||||
#include "ContactRepository.h"
|
||||
#include <QFile>
|
||||
|
||||
CContactRepository::CContactRepository()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//int CContactRepository::LoadContacts()
|
||||
//{
|
||||
// QFile* ContactsFile = new QFile("./Configuration/Contacts.mcc");
|
||||
// if(ContactsFile)
|
||||
// {
|
||||
// if(ContactsFile->open(QIODevice::ReadOnly | QIODevice::Unbuffered) == false)
|
||||
// {
|
||||
// if(ContactsFile->open(QIODevice::WriteOnly | QIODevice::Unbuffered) == true)
|
||||
// {
|
||||
// mContactsList.clear();
|
||||
// SaveContacts(); //create an empty file...
|
||||
// }
|
||||
// return 0;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return 0;
|
||||
// }
|
||||
|
||||
// mContactsList.clear();
|
||||
|
||||
// QDataStream * InputStream = new QDataStream(ContactsFile);
|
||||
|
||||
// quint32 MagicNbr;// = 0xBAADCAFE;
|
||||
// quint32 NbEntries;
|
||||
|
||||
// *InputStream >> MagicNbr;
|
||||
|
||||
// if(MagicNbr != 0xDEADBEEF)
|
||||
// {
|
||||
// return RET_ERROR;
|
||||
// }
|
||||
|
||||
// *InputStream >> NbEntries;
|
||||
|
||||
// for(unsigned int i = 0; i < NbEntries; i++)
|
||||
// {
|
||||
// CContact NewContact;
|
||||
// *InputStream >> NewContact;
|
||||
// mContactsList.append(NewContact);
|
||||
// }
|
||||
|
||||
// qDebug("Loaded %d contacts",mContactsList.size());
|
||||
// ContactsFile->close();
|
||||
// delete ContactsFile;
|
||||
// delete InputStream;
|
||||
|
||||
// return mContactsList.size();
|
||||
//}
|
||||
|
||||
int CContactRepository::SetContacts(QList<CContact> *ContactsList)
|
||||
{
|
||||
mContactsList.clear();
|
||||
mContactsList = *ContactsList;
|
||||
|
||||
return mContactsList.size();
|
||||
}
|
||||
|
||||
CContact * CContactRepository::FindContact(QString ContactRawNumber)
|
||||
{
|
||||
for(int i = 0; i < mContactsList.size(); i++)
|
||||
{
|
||||
if(mContactsList.at(i).mRAWContactNbr == ContactRawNumber)
|
||||
{
|
||||
return &mContactsList[i];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CContactRepository::AddContact(CContact Contact)
|
||||
{
|
||||
|
||||
for(int i = 0; i < mContactsList.size(); i++)
|
||||
{
|
||||
if(mContactsList.at(i) == Contact)
|
||||
{
|
||||
mContactsList[i] = Contact;
|
||||
//SaveContacts();
|
||||
return RET_OK;
|
||||
}
|
||||
}
|
||||
|
||||
mContactsList.append(Contact);
|
||||
// SaveContacts();
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CContactRepository::DeleteContact(int index)
|
||||
{
|
||||
if(index < 0 || index >= mContactsList.size())
|
||||
{
|
||||
return RET_ERROR;
|
||||
}
|
||||
|
||||
mContactsList.takeAt(index);
|
||||
// SaveContacts();
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CContactRepository::GetContact(int index,CContact& Contact)
|
||||
{
|
||||
if(index < 0 || index >= mContactsList.size())
|
||||
{
|
||||
return RET_ERROR;
|
||||
}
|
||||
|
||||
Contact = mContactsList.at(index);
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
CContact *CContactRepository::GetContactPtr(int index)
|
||||
{
|
||||
if(index < 0 || index >= mContactsList.size())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return &mContactsList[index];
|
||||
}
|
||||
|
||||
//int CContactRepository::SaveContacts()
|
||||
//{
|
||||
// QFile* ContactsFile = new QFile("./Configuration/Contacts.mcc");
|
||||
// if(ContactsFile)
|
||||
// {
|
||||
// if(ContactsFile->open(QIODevice::WriteOnly | QIODevice::Unbuffered | QIODevice::Truncate) == false)
|
||||
// {
|
||||
|
||||
// return 0;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return 0;
|
||||
// }
|
||||
|
||||
|
||||
// QDataStream * InputStream = new QDataStream(ContactsFile);
|
||||
|
||||
// quint32 MagicNbr = 0xDEADBEEF;
|
||||
|
||||
// *InputStream << MagicNbr;
|
||||
// *InputStream << mContactsList.size();
|
||||
|
||||
// for(int i = 0; i < mContactsList.size(); i++)
|
||||
// {
|
||||
// *InputStream << mContactsList.at(i);
|
||||
// }
|
||||
|
||||
// ContactsFile->close();
|
||||
// delete ContactsFile;
|
||||
// delete InputStream;
|
||||
|
||||
// qDebug("SAved %d contacts",mContactsList.size());
|
||||
|
||||
// return mContactsList.size();
|
||||
//}
|
||||
@@ -0,0 +1,27 @@
|
||||
#ifndef CCONTACTREPOSITORY_H
|
||||
#define CCONTACTREPOSITORY_H
|
||||
|
||||
#include "Contact.h"
|
||||
#include <QList>
|
||||
|
||||
|
||||
class CContactRepository
|
||||
{
|
||||
public:
|
||||
CContactRepository();
|
||||
|
||||
// int LoadContacts();
|
||||
// int SaveContacts();
|
||||
int SetContacts(QList<CContact> *ContactsList);
|
||||
int AddContact(CContact Contact);
|
||||
QList<CContact> *GetContacts(){return &mContactsList;}
|
||||
int GetContact(int index, CContact &Contact);
|
||||
CContact *GetContactPtr(int index);
|
||||
CContact *FindContact(QString ContactRawNumber);
|
||||
int DeleteContact(int index);
|
||||
|
||||
private:
|
||||
QList<CContact> mContactsList;
|
||||
};
|
||||
|
||||
#endif // CCONTACTREPOSITORY_H
|
||||
@@ -0,0 +1,198 @@
|
||||
#include "SMSClient.h"
|
||||
#include <QApplication>
|
||||
|
||||
|
||||
|
||||
CSMSClient::CSMSClient(CSMSGui *GuiHandle, CVoipMSSMSSettings *ProgramSettings)
|
||||
{
|
||||
qDebug("Creation...");
|
||||
mSMSDatabase.mProgramHandle = this;
|
||||
mGuiHandle = GuiHandle;
|
||||
mGuiHandle->mProgramHandle = this;
|
||||
mGuiHandle->mSMSDatabase = &mSMSDatabase;
|
||||
mSettings = ProgramSettings;
|
||||
|
||||
// mSystemTrayManager = new CSystemTrayManager;
|
||||
// mSystemTrayManager->mProgramHandle = this;
|
||||
// mSettingsWindow = new CSettingsWindow();
|
||||
// mSettingsWindow->mProgramHandle = this;
|
||||
//mMainPanel = new Panel;
|
||||
// mMasterCtrlIF = new CMasterCtrlInterface();
|
||||
|
||||
|
||||
}
|
||||
|
||||
CSMSClient::~CSMSClient()
|
||||
{
|
||||
// delete mSystemTrayManager;
|
||||
// delete mSettingsWindow;
|
||||
// delete mMainPanel;
|
||||
// delete mMasterCtrlIF;
|
||||
|
||||
}
|
||||
|
||||
void CSMSClient::Start()
|
||||
{
|
||||
qDebug("Started!");
|
||||
mMasterCtrlIF = new CSMSMasterCtrlInterface(this);
|
||||
mSMSDatabase.mContactRepository = &mContactRepository;
|
||||
|
||||
mMasterCtrlIF->ConnectToMasterCtrl();
|
||||
}
|
||||
|
||||
int CSMSClient::SetAllMsgsDatabase(QString DID, QList<CSMSMessage> *MessagesList)
|
||||
{
|
||||
if(mSMSDatabase.SetAllMessages(DID,MessagesList) == RET_OK)
|
||||
{
|
||||
mGuiHandle->FullConversationsUpdate();
|
||||
// mMainPanel->mConversationsWindow->FullConversationsUpdate();
|
||||
// mMainPanel->mConversationWindow->hide();
|
||||
}
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CSMSClient::SetDIDDatabase(QString DID)
|
||||
{
|
||||
mSMSDatabase.SetDID(DID);
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CSMSClient::NewMessagesEvent(QList<CSMSMessage> *MessagesList)
|
||||
{
|
||||
mSMSDatabase.SetNewMessages("",MessagesList);
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CSMSClient::SetContacts(QList<CContact> *ContactsList)
|
||||
{
|
||||
mContactRepository.SetContacts(ContactsList);
|
||||
mSMSDatabase.ContactsRepositoryChanged();
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
//unsigned int CSMSClient::QuitApplicationRequest()
|
||||
//{
|
||||
|
||||
// QApplication::exit(69);
|
||||
// return RET_OK;
|
||||
//}
|
||||
|
||||
//unsigned int CSMSClient::ShowSettingsWindowRequest()
|
||||
//{
|
||||
// mSettingsWindow->show();
|
||||
// return RET_OK;
|
||||
//}
|
||||
|
||||
//unsigned int CSMSClient::SaveSettings(CSettings *Settings)
|
||||
//{
|
||||
// CSettings toto;
|
||||
// toto = *Settings;
|
||||
// mSMSClientSettings = toto;
|
||||
// mSettingsManager.SaveSettings(&mSMSClientSettings);
|
||||
|
||||
// return RET_OK;
|
||||
//}
|
||||
|
||||
//unsigned int CSMSClient::SettingsWindowClosed()
|
||||
//{
|
||||
|
||||
// return RET_OK;
|
||||
//}
|
||||
|
||||
//int CSMSClient::AppToggle()
|
||||
//{
|
||||
//// if(mMainPanel->mConversationWindow->isVisible())
|
||||
//// {
|
||||
//// mMainPanel->mConversationWindow->hide();
|
||||
|
||||
//// }
|
||||
//// else if(mMainPanel->mConversationsWindow->isVisible())
|
||||
//// {
|
||||
//// mMainPanel->mConversationsWindow->hide();
|
||||
//// }
|
||||
//// else
|
||||
//// {
|
||||
//// mMainPanel->mConversationsWindow->show();
|
||||
//// }
|
||||
|
||||
// return RET_OK;
|
||||
//}
|
||||
//int CSMSClient::AppPosChanged(int NewPosX, int NewPosY)
|
||||
//{
|
||||
//// mMainPanel->mConversationsWindow->setPos(50,50);
|
||||
//// mMainPanel->mConversationWindow->setPos(50,50);
|
||||
// return RET_OK;
|
||||
//}
|
||||
|
||||
int CSMSClient::ShowConversation(QString Contact)
|
||||
{
|
||||
CSMSConversation* Conversation;
|
||||
Conversation = mSMSDatabase.GetConversation(Contact);
|
||||
|
||||
if(Conversation == 0)
|
||||
{
|
||||
return RET_ERROR;
|
||||
}
|
||||
|
||||
// mMainPanel->mConversationWindow->SetConversation(Conversation);
|
||||
|
||||
// mMainPanel->mConversationsWindow->hide();
|
||||
// mMainPanel->mConversationWindow->show();
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
//int CSMSClient::CloseConversationsWindow()
|
||||
//{
|
||||
//// mMainPanel->mConversationsWindow->hide();
|
||||
// return RET_OK;
|
||||
//}
|
||||
|
||||
//int CSMSClient::CloseConversationWindow(CConversationWindow *Window)
|
||||
//{
|
||||
// Q_UNUSED(Window)
|
||||
|
||||
//// mMainPanel->mConversationsWindow->FullConversationsUpdate();
|
||||
//// mMainPanel->mConversationWindow->hide();
|
||||
//// mMainPanel->mConversationsWindow->show();
|
||||
|
||||
// return RET_OK;
|
||||
//}
|
||||
|
||||
int CSMSClient::SendSMSMessage(CSMSMessage Message)
|
||||
{
|
||||
mMasterCtrlIF->SendSMS(Message);
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CSMSClient::NewMessageNotification(CSMSConversation *Conversation, int MessageIndex)
|
||||
{
|
||||
// if(mMainPanel->mConversationWindow->NewMessageNotification(Conversation,MessageIndex) == true)
|
||||
// {
|
||||
// mSMSDatabase.SetConversationAsRead(Conversation);
|
||||
// }
|
||||
// mMainPanel->mConversationsWindow->UpdateConversation(Conversation);
|
||||
mGuiHandle->NewMessageNotification(Conversation,MessageIndex);
|
||||
|
||||
MessageCountChangeNotification(mSMSDatabase.GetNbUnreadMsgs());
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CSMSClient::SyncConversations()
|
||||
{
|
||||
// mMainPanel->mConversationsWindow->FullConversationsUpdate();
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CSMSClient::MessageCountChangeNotification(int MsgCount)
|
||||
{
|
||||
// mMainPanel->mAppIconWidget->SetNewMsgCount(MsgCount);
|
||||
mTrayIconMgr->NewSMSMessagesPendingCount(MsgCount);
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
//int CSMSClient::NewConversationAddedToDatabase(CSMSConversation *Conversation)
|
||||
//{
|
||||
|
||||
//}
|
||||
@@ -0,0 +1,77 @@
|
||||
#ifndef MASTERCTRL_H
|
||||
#define MASTERCTRL_H
|
||||
|
||||
#include "GlobalDefine.h"
|
||||
#include "SystemTrayManager.h"
|
||||
#include "SettingsWindow.h"
|
||||
#include "ProgramSettings.h"
|
||||
//#include "AppIconWidget.h"
|
||||
//#include "MainPanel.h"
|
||||
#include "SMSMasterCtrlInterface.h"
|
||||
#include "SMSDatabase.h"
|
||||
#include "ContactRepository.h"
|
||||
#include "SMSGui.h"
|
||||
|
||||
|
||||
|
||||
class CSMSClient : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CSMSClient(CSMSGui *GuiHandle, CVoipMSSMSSettings *ProgramSettings);
|
||||
~CSMSClient();
|
||||
|
||||
void Start(void);
|
||||
// CSystemTrayManager *mSystemTrayManager;
|
||||
// CSettingsWindow *mSettingsWindow;
|
||||
// CProgramSettings mSettingsManager;
|
||||
//Panel *mMainPanel;
|
||||
CSMSMasterCtrlInterface *mMasterCtrlIF;
|
||||
CSMSDatabase mSMSDatabase;
|
||||
CContactRepository mContactRepository;
|
||||
CSMSGui *mGuiHandle;
|
||||
CVoipMSSMSSettings *mSettings;
|
||||
CSystemTrayManager *mTrayIconMgr;
|
||||
|
||||
|
||||
|
||||
|
||||
// unsigned int QuitApplicationRequest();
|
||||
// unsigned int ShowSettingsWindowRequest();
|
||||
// unsigned int SaveSettings(CSettings *Settings);
|
||||
|
||||
// unsigned int SettingsWindowClosed();
|
||||
|
||||
//AppIconWidget requests
|
||||
// int AppToggle();
|
||||
// int AppPosChanged(int NewPosX, int NewPosY);
|
||||
|
||||
//MasterCtrlIngerface Requests
|
||||
int SetAllMsgsDatabase(QString DID, QList<CSMSMessage> *MessagesList);
|
||||
int SetDIDDatabase(QString DID);
|
||||
int NewMessagesEvent(QList<CSMSMessage> *MessagesList);
|
||||
int SetContacts(QList<CContact> *ContactsList);
|
||||
|
||||
|
||||
//ConversationsWindow requests
|
||||
int ShowConversation(QString Contact);
|
||||
// int CloseConversationsWindow();
|
||||
|
||||
|
||||
//ConversationWindow requests
|
||||
//int CloseConversationWindow(CConversationWindow* Window);
|
||||
int SendSMSMessage(CSMSMessage Message);
|
||||
|
||||
//SMSDatabase requests
|
||||
int NewMessageNotification(CSMSConversation* Conversation, int MessageIndex);
|
||||
// void NewConversationAddedToDatabase(CSMSConversation *Conversation);
|
||||
int SyncConversations();
|
||||
int MessageCountChangeNotification(int MsgCount);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
CSettings mSMSClientSettings;
|
||||
};
|
||||
|
||||
#endif // MASTERCTRL_H
|
||||
@@ -0,0 +1,61 @@
|
||||
#include "SMSConversation.h"
|
||||
|
||||
CSMSConversation::CSMSConversation(CContact ConversationContact)
|
||||
{
|
||||
mConversationContact = ConversationContact;
|
||||
}
|
||||
|
||||
CSMSConversation::CSMSConversation()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CSMSConversation::~CSMSConversation()
|
||||
{
|
||||
for(int i = 0; i < mMessages.size(); i++)
|
||||
{
|
||||
delete mMessages.at(i);
|
||||
}
|
||||
|
||||
mMessages.clear();
|
||||
}
|
||||
|
||||
int CSMSConversation::InsertNewMessage(CSMSMessage *Message)
|
||||
{
|
||||
mMessages.prepend(Message);
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CSMSConversation::InsertMessage(CSMSMessage *Message)
|
||||
{
|
||||
mMessages.append(Message);
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
CContact* CSMSConversation::GetConversationContact()
|
||||
{
|
||||
return &mConversationContact;
|
||||
}
|
||||
|
||||
int CSMSConversation::SetConversationContact(CContact *Contact)
|
||||
{
|
||||
mConversationContact = *Contact;
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
CSMSMessage* CSMSConversation::GetMostRecentMessage()
|
||||
{
|
||||
if(mMessages.isEmpty())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return mMessages.at(0);
|
||||
}
|
||||
|
||||
QList<CSMSMessage*> *CSMSConversation::GetMessages()
|
||||
{
|
||||
return &mMessages;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
#ifndef CSMSCONVERSATION_H
|
||||
#define CSMSCONVERSATION_H
|
||||
|
||||
#include "SMSMessage.h"
|
||||
#include <QList>
|
||||
#include "Contact.h"
|
||||
|
||||
class CSMSConversation
|
||||
{
|
||||
public:
|
||||
CSMSConversation(CContact ConversationContact);
|
||||
CSMSConversation();
|
||||
~CSMSConversation();
|
||||
|
||||
CContact mConversationContact;
|
||||
QList<CSMSMessage*> mMessages;
|
||||
|
||||
int InsertNewMessage(CSMSMessage *Message);
|
||||
int InsertMessage(CSMSMessage *Message);
|
||||
CContact *GetConversationContact();
|
||||
int SetConversationContact(CContact *Contact);
|
||||
CSMSMessage *GetMostRecentMessage();
|
||||
QList<CSMSMessage*> *GetMessages();
|
||||
|
||||
};
|
||||
|
||||
#endif // CSMSCONVERSATION_H
|
||||
@@ -0,0 +1,204 @@
|
||||
#include "SMSDatabase.h"
|
||||
#include "SMSClient.h"
|
||||
|
||||
CSMSDatabase::CSMSDatabase()
|
||||
{
|
||||
mProgramHandle = 0;
|
||||
mNbUnreadMessages = 0;
|
||||
mConversations.clear();
|
||||
}
|
||||
|
||||
|
||||
CSMSDatabase::~CSMSDatabase()
|
||||
{
|
||||
for(int i = 0; i < mConversations.size(); i++)
|
||||
{
|
||||
delete mConversations.at(i);
|
||||
}
|
||||
mConversations.clear();
|
||||
}
|
||||
|
||||
int CSMSDatabase::SetAllMessages(QString DID, QList<CSMSMessage> *MessagesList)
|
||||
{
|
||||
Q_UNUSED(DID)
|
||||
mConversations.clear();
|
||||
mNbUnreadMessages = 0;
|
||||
// SetDID(DID);
|
||||
mContactsHash.clear();
|
||||
|
||||
for(int i = 0; i < MessagesList->size(); i++)
|
||||
{
|
||||
CSMSMessage *CurMsg = new CSMSMessage(MessagesList->at(i));
|
||||
QString ContactNbr = CurMsg->mContact;
|
||||
|
||||
if(mContactsHash.contains(ContactNbr) == true)
|
||||
{
|
||||
int Index = mContactsHash.value(ContactNbr);
|
||||
mConversations.at(Index)->InsertMessage(CurMsg);
|
||||
}
|
||||
else
|
||||
{
|
||||
CSMSConversation *NewConversation = new CSMSConversation(CContact(CurMsg->mContact));
|
||||
CContact *Contact = mContactRepository->FindContact(CurMsg->mContact);
|
||||
if(Contact != 0)
|
||||
{
|
||||
NewConversation->SetConversationContact(Contact);
|
||||
}
|
||||
mConversations.append(NewConversation);
|
||||
int Index = mConversations.size()-1;
|
||||
mContactsHash.insert(CurMsg->mContact,Index);
|
||||
mConversations.at(Index)->InsertMessage(CurMsg);
|
||||
}
|
||||
}
|
||||
|
||||
qDebug("Rx %d Messages",MessagesList->size());
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CSMSDatabase::SetNewMessages(QString DID, QList<CSMSMessage> *MessagesList)
|
||||
{
|
||||
Q_UNUSED(DID)
|
||||
|
||||
bool SyncConversations = false;
|
||||
|
||||
for(int i = 0; i < MessagesList->size(); i++)
|
||||
{
|
||||
CSMSMessage *CurMsg = new CSMSMessage(MessagesList->at(i));
|
||||
QString ContactNbr = CurMsg->mContact;
|
||||
// if(CurMsg->mType == SMS_RECEIVED_TYPE)
|
||||
{
|
||||
mNbUnreadMessages++;
|
||||
CurMsg->mIsRead = false;
|
||||
}
|
||||
|
||||
if(mContactsHash.contains(ContactNbr) == true)
|
||||
{
|
||||
int Index = mContactsHash.value(ContactNbr);
|
||||
mConversations.at(Index)->InsertNewMessage(CurMsg);
|
||||
|
||||
|
||||
mProgramHandle->NewMessageNotification(mConversations.at(Index),0);
|
||||
|
||||
// if(Index != 0)
|
||||
// {
|
||||
// CSMSConversation *Conversation = mConversations.takeAt(Index);
|
||||
// mConversations.prepend(Conversation);
|
||||
// mContactsHash.clear();
|
||||
|
||||
// for(int i = 0; i < mConversations.size(); i++)
|
||||
// {
|
||||
// mContactsHash.insert(mConversations.at(i)->mConversationContact.mRAWContactNbr,i);
|
||||
// }
|
||||
|
||||
// SyncConversations = true;
|
||||
// }
|
||||
}
|
||||
else
|
||||
{
|
||||
CSMSConversation *NewConversation = new CSMSConversation(CContact(CurMsg->mContact));
|
||||
mConversations.append(NewConversation);
|
||||
int Index = mConversations.size()-1;
|
||||
mContactsHash.insert(CurMsg->mContact,Index);
|
||||
mConversations.at(Index)->InsertNewMessage(CurMsg);
|
||||
|
||||
SyncConversations = true;
|
||||
mProgramHandle->MessageCountChangeNotification(mNbUnreadMessages);
|
||||
}
|
||||
}
|
||||
|
||||
if(SyncConversations)
|
||||
{
|
||||
mProgramHandle->SyncConversations();
|
||||
}
|
||||
|
||||
qDebug("Rx %d New Messages",MessagesList->size());
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
QList<CSMSConversation*>* CSMSDatabase::GetConversations(QString DID)
|
||||
{
|
||||
Q_UNUSED(DID);
|
||||
|
||||
return &mConversations;
|
||||
}
|
||||
|
||||
CSMSConversation * CSMSDatabase::GetConversation(QString Contact)
|
||||
{
|
||||
if(mContactsHash.contains(Contact))
|
||||
{
|
||||
return mConversations.at(mContactsHash.value(Contact));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CSMSDatabase::SetDID(QString DID)
|
||||
{
|
||||
mClientDID = DID;
|
||||
|
||||
mFormattedDID = DID;
|
||||
mFormattedDID.insert(0,'(');
|
||||
mFormattedDID.insert(4,") ");
|
||||
mFormattedDID.insert(9,'-');
|
||||
|
||||
return RET_OK;
|
||||
|
||||
}
|
||||
|
||||
int CSMSDatabase::SetConversationAsRead(CSMSConversation *Conversation, bool ForceAll)
|
||||
{
|
||||
if(Conversation == 0)
|
||||
{
|
||||
return RET_ERROR;
|
||||
}
|
||||
|
||||
QList<CSMSMessage*> *Messages = Conversation->GetMessages();
|
||||
|
||||
for(int i = 0; i < Messages->size(); i++)
|
||||
{
|
||||
if(Messages->at(i)->mIsRead == true)
|
||||
{
|
||||
if(ForceAll == false)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Messages->at(i)->mIsRead = true;
|
||||
// if(Messages->at(i)->mType == SMS_RECEIVED_TYPE)
|
||||
{
|
||||
mNbUnreadMessages--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mProgramHandle->MessageCountChangeNotification(mNbUnreadMessages);
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
|
||||
int CSMSDatabase::ContactsRepositoryChanged()
|
||||
{
|
||||
CContact *Contact;
|
||||
for(int i = 0; i < mConversations.size(); i++)
|
||||
{
|
||||
Contact = mContactRepository->FindContact(mConversations.at(i)->GetConversationContact()->mRAWContactNbr);
|
||||
if(Contact != 0)
|
||||
{
|
||||
mConversations.at(i)->SetConversationContact(Contact);
|
||||
}
|
||||
}
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
#ifndef CSMSDATABASE_H
|
||||
#define CSMSDATABASE_H
|
||||
|
||||
|
||||
#include "SMSConversation.h"
|
||||
#include "SMSMessage.h"
|
||||
#include "ContactRepository.h"
|
||||
#include <QList>
|
||||
#include <QHash>
|
||||
|
||||
class CSMSClient;
|
||||
|
||||
|
||||
class CSMSDatabase
|
||||
{
|
||||
public:
|
||||
enum eNewMessageReadStatus
|
||||
{
|
||||
DB_NEW_MSG_READ,
|
||||
DB_NEW_MSG_UNREAD
|
||||
};
|
||||
|
||||
CSMSDatabase();
|
||||
~CSMSDatabase();
|
||||
|
||||
CSMSClient *mProgramHandle;
|
||||
CContactRepository *mContactRepository;
|
||||
|
||||
QList<CSMSConversation*> mConversations;
|
||||
QString mClientDID, mFormattedDID;
|
||||
|
||||
QHash<QString,int> mContactsHash;
|
||||
int mNbUnreadMessages;
|
||||
|
||||
int SetAllMessages(QString DID, QList<CSMSMessage> *MessagesList);
|
||||
int SetNewMessages(QString DID, QList<CSMSMessage> *MessagesList);
|
||||
int SetDID(QString DID);
|
||||
int SetConversationAsRead(CSMSConversation* Conversation, bool ForceAll = false);
|
||||
int ContactsRepositoryChanged();
|
||||
|
||||
QList<CSMSConversation *> *GetConversations(QString DID = "");
|
||||
CSMSConversation* GetConversation(QString Contact);
|
||||
QString GetDID(){return mClientDID;}
|
||||
QString GetFormattedDID(){return mFormattedDID;}
|
||||
int GetNbUnreadMsgs(){return mNbUnreadMessages;}
|
||||
|
||||
// bool SortConversations();
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // CSMSDATABASE_H
|
||||
@@ -0,0 +1,276 @@
|
||||
#include "SMSGui.h"
|
||||
#include "ui_SMSGui.h"
|
||||
#include <QScrollBar>
|
||||
#include "SMSClient.h"
|
||||
#include <QKeyEvent>
|
||||
|
||||
CSMSGui::CSMSGui(QWidget *parent) :
|
||||
QWidget(parent)
|
||||
|
||||
{
|
||||
setupUi(this);
|
||||
mSMSDatabase = 0;
|
||||
mSelectedConversation = 0;
|
||||
mProgramHandle = 0;
|
||||
mCharCounter = 160;
|
||||
mMsgCounter = 0;
|
||||
|
||||
mSMSMessageStatsLabel->setText(QString().sprintf("Nombre de caractères du message %d/160\nNombre de messages à envoyer: %d msg",mCharCounter,mMsgCounter+1));
|
||||
|
||||
// connect(mContactsTreeWidget,SIGNAL(itemActivated(QTreeWidgetItem*,int)),this,SLOT(ConversationSelected(QTreeWidgetItem*,int)));
|
||||
connect(mContactsTreeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(ConversationClicked(QTreeWidgetItem*,int)));
|
||||
connect(mSMSSendBtn,SIGNAL(clicked(bool)),this,SLOT(SendMsgBtnClicked(bool)));
|
||||
connect(mSMSEdit,SIGNAL(textChanged()),this,SLOT(SMSEditZoneContentsChanged()));
|
||||
|
||||
mSMSEdit->installEventFilter(this);
|
||||
}
|
||||
|
||||
CSMSGui::~CSMSGui()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
int CSMSGui::FullConversationsUpdate()
|
||||
{
|
||||
QList<CSMSConversation*> *ConversationsList = mSMSDatabase->GetConversations();
|
||||
|
||||
mContactsTreeWidget->clear();
|
||||
mContactsTreeWidget->setColumnCount(3);
|
||||
mContactsTreeWidget->setIconSize(QSize(25,25));
|
||||
|
||||
|
||||
|
||||
for(int i = 0; i < ConversationsList->size(); i++)
|
||||
{
|
||||
QFont NewMsgFont;
|
||||
NewMsgFont.setBold(true);
|
||||
|
||||
QTreeWidgetItem *NewContact = new QTreeWidgetItem(mContactsTreeWidget);
|
||||
CSMSConversation *Conversation = ConversationsList->at(i);
|
||||
CSMSMessage *LastMsg = Conversation->GetMostRecentMessage();
|
||||
NewContact->setIcon(0,QIcon(Conversation->GetConversationContact()->mContactPicture));
|
||||
if(LastMsg->mIsRead == false)
|
||||
{
|
||||
NewContact->setFont(1,NewMsgFont);
|
||||
NewContact->setFont(2,NewMsgFont);
|
||||
}
|
||||
NewContact->setText(1,Conversation->GetConversationContact()->mContactName);
|
||||
NewContact->setText(2,Conversation->GetConversationContact()->mContactNumber);
|
||||
// QVariant data = QVariant::fromValue((void*)Conversation);
|
||||
NewContact->setData(0,Qt::UserRole,QVariant::fromValue((void*)Conversation));
|
||||
mContactsTreeWidget->insertTopLevelItem(0,NewContact);
|
||||
}
|
||||
|
||||
mContactsTreeWidget->resizeColumnToContents(0);
|
||||
mContactsTreeWidget->resizeColumnToContents(1);
|
||||
mContactsTreeWidget->resizeColumnToContents(2);
|
||||
mContactsTreeWidget->topLevelItem(0)->setSelected(true);
|
||||
ConversationClicked(mContactsTreeWidget->topLevelItem(0),0);
|
||||
|
||||
|
||||
// mContactsTreeWidget->addTopLevelItem(QTreeWidget());
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
void CSMSGui::ConversationClicked(QTreeWidgetItem *item, int column)
|
||||
{
|
||||
//qDebug("Clicked %d",column);
|
||||
mSelectedConversation = (CSMSConversation*) item->data(0,Qt::UserRole).value<void*>();
|
||||
QString MessageText;
|
||||
MessageText.clear();
|
||||
|
||||
mConversationText->clear();
|
||||
|
||||
// for(int i = 0; i < Conversation->GetMessages()->size(); i++)
|
||||
for(int i = mSelectedConversation->GetMessages()->size()-1; i >=0; i--)
|
||||
{
|
||||
MessageText.append(mSelectedConversation->GetMessages()->at(i)->mDateTime.toString("yyyy/MM/dd hh:mm - "));
|
||||
|
||||
if(mSelectedConversation->GetMessages()->at(i)->mType == SMS_SENT_TYPE)
|
||||
{
|
||||
MessageText.append("YOU: ");
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageText.append(mSelectedConversation->GetConversationContact()->mContactName);
|
||||
MessageText.append(": ");
|
||||
}
|
||||
MessageText.append(mSelectedConversation->GetMessages()->at(i)->mMessageText);
|
||||
MessageText.append("\n\r");
|
||||
}
|
||||
|
||||
mConversationText->setText(MessageText);
|
||||
|
||||
QFont font;
|
||||
font.setBold(false);
|
||||
item->setFont(0,font);
|
||||
item->setFont(1,font);
|
||||
item->setFont(2,font);
|
||||
|
||||
QTextCursor cursor( mConversationText->textCursor() );
|
||||
cursor.movePosition( QTextCursor::End );
|
||||
|
||||
QScrollBar *bar = mConversationText->verticalScrollBar();
|
||||
if( bar )
|
||||
{
|
||||
if( !bar->isSliderDown() )
|
||||
bar->setValue( bar->maximum() );
|
||||
}
|
||||
else
|
||||
mConversationText->ensureCursorVisible();
|
||||
|
||||
mContactPic->setPixmap(mSelectedConversation->GetConversationContact()->mContactPicture.scaled(mContactPic->size()));
|
||||
font.setPointSize(26);
|
||||
mContactName->setFont(font);
|
||||
mContactName->setText(mSelectedConversation->GetConversationContact()->mContactName);
|
||||
|
||||
mSMSDatabase->SetConversationAsRead(mSelectedConversation);
|
||||
|
||||
|
||||
}
|
||||
|
||||
int CSMSGui::UpdateDisplayedConversation(int MessageIndex)
|
||||
{
|
||||
if(MessageIndex != -1)
|
||||
{
|
||||
QString MessageText;
|
||||
MessageText = mConversationText->toPlainText();
|
||||
|
||||
MessageText.append(mSelectedConversation->GetMessages()->at(MessageIndex)->mDateTime.toString("yyyy/MM/dd hh:mm - "));
|
||||
|
||||
if(mSelectedConversation->GetMessages()->at(MessageIndex)->mType == SMS_SENT_TYPE)
|
||||
{
|
||||
MessageText.append("YOU: ");
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageText.append(mSelectedConversation->GetMessages()->at(MessageIndex)->mContact);
|
||||
MessageText.append(": ");
|
||||
}
|
||||
MessageText.append(mSelectedConversation->GetMessages()->at(MessageIndex)->mMessageText);
|
||||
MessageText.append("\n\r");
|
||||
|
||||
mConversationText->setText(MessageText);
|
||||
}
|
||||
|
||||
|
||||
|
||||
QTextCursor cursor( mConversationText->textCursor() );
|
||||
cursor.movePosition( QTextCursor::End );
|
||||
|
||||
QScrollBar *bar = mConversationText->verticalScrollBar();
|
||||
if( bar )
|
||||
{
|
||||
if( !bar->isSliderDown() )
|
||||
bar->setValue( bar->maximum() );
|
||||
}
|
||||
else
|
||||
mConversationText->ensureCursorVisible();
|
||||
|
||||
return RET_OK;
|
||||
|
||||
}
|
||||
|
||||
//void CSMSGui::ConversationSelected(QTreeWidgetItem *item, int column)
|
||||
//{
|
||||
// // qDebug("Selected, %d",column);
|
||||
//}
|
||||
|
||||
int CSMSGui::NewMessageNotification(CSMSConversation *Conversation, int MessageIndex)
|
||||
{
|
||||
if(Conversation == 0)
|
||||
{
|
||||
return NEW_MSG_ERROR_STATUS;
|
||||
}
|
||||
if(mSelectedConversation == Conversation) //the new msg comes from the currently displayed contact conversation
|
||||
{
|
||||
UpdateDisplayedConversation(MessageIndex);
|
||||
mSMSDatabase->SetConversationAsRead(mSelectedConversation);
|
||||
return NEW_MSG_READ_STATUS;
|
||||
}
|
||||
|
||||
//Find conversation...
|
||||
for(int i = 0; i < mContactsTreeWidget->topLevelItemCount(); i++)
|
||||
{
|
||||
void *data = mContactsTreeWidget->topLevelItem(i)->data(0,Qt::UserRole).value<void*>();
|
||||
if((CSMSConversation*)data == Conversation)
|
||||
{
|
||||
//found it!
|
||||
QFont font;
|
||||
font.setBold(true);
|
||||
mContactsTreeWidget->topLevelItem(i)->setFont(0,font);
|
||||
mContactsTreeWidget->topLevelItem(i)->setFont(1,font);
|
||||
mContactsTreeWidget->topLevelItem(i)->setFont(2,font);
|
||||
return NEW_MSG_UNREAD_STATUS;
|
||||
}
|
||||
}
|
||||
return NEW_MSG_ERROR_STATUS;
|
||||
}
|
||||
|
||||
int CSMSGui::SendEditMessage()
|
||||
{
|
||||
if(mSelectedConversation == 0)
|
||||
{
|
||||
return RET_ERROR;
|
||||
}
|
||||
|
||||
QString MsgTxt = mSMSEdit->toPlainText();
|
||||
|
||||
if(MsgTxt.isEmpty())
|
||||
{
|
||||
return RET_ERROR;
|
||||
}
|
||||
|
||||
CSMSMessage Message;
|
||||
Message.mContact = mSelectedConversation->mConversationContact.mRAWContactNbr;
|
||||
Message.mDID = mSMSDatabase->GetDID();
|
||||
Message.mMessageText = MsgTxt;
|
||||
|
||||
mProgramHandle->SendSMSMessage(Message);
|
||||
mSMSEdit->clear();
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
void CSMSGui::SendMsgBtnClicked(bool checked)
|
||||
{
|
||||
Q_UNUSED(checked)
|
||||
SendEditMessage();
|
||||
}
|
||||
|
||||
bool CSMSGui::eventFilter(QObject *obj, QEvent *event)
|
||||
{
|
||||
if (event->type() == QEvent::KeyPress)
|
||||
{
|
||||
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
|
||||
if(keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return)
|
||||
{
|
||||
// qDebug("Ate key press %d", keyEvent->key());
|
||||
SendEditMessage();
|
||||
return true;
|
||||
}
|
||||
// qDebug("Key press %d", keyEvent->key());
|
||||
|
||||
}
|
||||
|
||||
// standard event processing
|
||||
return QObject::eventFilter(obj, event);
|
||||
}
|
||||
|
||||
void CSMSGui::SMSEditZoneContentsChanged()
|
||||
{
|
||||
int CurStringCharCount = mSMSEdit->toPlainText().size();
|
||||
if(CurStringCharCount <= 160)
|
||||
{
|
||||
mCharCounter = 160-CurStringCharCount;
|
||||
mMsgCounter = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
mMsgCounter = (int)(CurStringCharCount / 160);
|
||||
mCharCounter = 160 - (CurStringCharCount - (mMsgCounter*160));
|
||||
}
|
||||
mSMSMessageStatsLabel->setText(QString().sprintf("Nombre de caractères du message %d/160\nNombre de messages à envoyer: %d msg",mCharCounter,mMsgCounter+1));
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
#ifndef SMSGUI_H
|
||||
#define SMSGUI_H
|
||||
|
||||
#include <QWidget>
|
||||
#include "ui_SMSGui.h"
|
||||
#include "SMSDatabase.h"
|
||||
|
||||
//namespace Ui {
|
||||
//class CSMSGui;
|
||||
//}
|
||||
class CSMSClient;
|
||||
|
||||
enum eNewMessageStatus
|
||||
{
|
||||
NEW_MSG_READ_STATUS,
|
||||
NEW_MSG_UNREAD_STATUS,
|
||||
NEW_MSG_ERROR_STATUS
|
||||
};
|
||||
|
||||
class CSMSGui : public QWidget, private Ui::CSMSGui
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit CSMSGui(QWidget *parent = 0);
|
||||
~CSMSGui();
|
||||
|
||||
int FullConversationsUpdate();
|
||||
int NewMessageNotification(CSMSConversation* Conversation, int MessageIndex);
|
||||
int SendEditMessage();
|
||||
|
||||
int UpdateDisplayedConversation(int MessageIndex = -1);
|
||||
virtual bool eventFilter(QObject *obj, QEvent *event);
|
||||
|
||||
CSMSDatabase *mSMSDatabase;
|
||||
CSMSConversation *mSelectedConversation;
|
||||
CSMSClient *mProgramHandle;
|
||||
|
||||
private:
|
||||
int mCharCounter, mMsgCounter;
|
||||
|
||||
public slots:
|
||||
// void ConversationSelected(QTreeWidgetItem * item, int column);
|
||||
void ConversationClicked(QTreeWidgetItem * item, int column);
|
||||
void SendMsgBtnClicked(bool);
|
||||
void SMSEditZoneContentsChanged();
|
||||
};
|
||||
|
||||
#endif // SMSGUI_H
|
||||
@@ -0,0 +1,291 @@
|
||||
#include "SMSMasterCtrlInterface.h"
|
||||
#include <QByteArray>
|
||||
#include <QDataStream>
|
||||
#include <QBuffer>
|
||||
#include "SystemGui.h"
|
||||
#include "Contact.h"
|
||||
#include "SMSClient.h"
|
||||
|
||||
|
||||
CSMSMasterCtrlInterface::CSMSMasterCtrlInterface(CSMSClient *ProgramHandle)
|
||||
{
|
||||
mDeviceAddress = 1;
|
||||
mNetworkPort = 2182;
|
||||
mMasterCtrlAddress = "127.0.0.1";
|
||||
// mNetworkPort = 6463;
|
||||
// mMasterCtrlAddress = "192.168.0.112";
|
||||
mNetworkCommSocket = 0;
|
||||
mMyDeviceID = ID_SMS_CLIENT;
|
||||
|
||||
mProgramHandle = ProgramHandle;
|
||||
}
|
||||
|
||||
CSMSMasterCtrlInterface::~CSMSMasterCtrlInterface()
|
||||
{
|
||||
if(mNetworkCommSocket !=0)
|
||||
{
|
||||
// mNetworkCommSocket->disconnectFromHost();
|
||||
// delete mNetworkCommSocket;
|
||||
}
|
||||
}
|
||||
|
||||
//int CSMSMasterCtrlInterface::ConnectToMasterCtrl()
|
||||
//{
|
||||
//// if(mNetworkCommSocket == 0)
|
||||
//// {
|
||||
//// mNetworkCommSocket = new QTcpSocket();
|
||||
//// }
|
||||
//// connect(mNetworkCommSocket,SIGNAL(connected()),this,SLOT(NetworkSocketConnected()));
|
||||
//// connect(mNetworkCommSocket,SIGNAL(disconnected()),this,SLOT(NetworkSocketDisconnected()));
|
||||
//// connect(mNetworkCommSocket,SIGNAL(readyRead()),this,SLOT(NetworkSocketDataAvailable()));
|
||||
|
||||
//// mNetworkCommSocket->connectToHost(mMasterCtrlAddress,mNetworkPort);
|
||||
|
||||
// return RET_OK;
|
||||
//}
|
||||
|
||||
int CSMSMasterCtrlInterface::DeviceConnectedToMaster(bool Connected)
|
||||
{
|
||||
if(Connected)
|
||||
{
|
||||
mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_DID_INFO_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress));
|
||||
}
|
||||
else
|
||||
{
|
||||
//???
|
||||
}
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CSMSMasterCtrlInterface::DeviceFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderDeviceID, int SenderAddress, int MessageID, int DataSize, QByteArray Data)
|
||||
{
|
||||
Q_UNUSED(DataSize)
|
||||
|
||||
|
||||
// if(TargetDeviceID == ID_ETHERNET_VIRTUAL)
|
||||
// {
|
||||
// switch(MessageID)
|
||||
// {
|
||||
// case ETH_NETWK_DEVICE_INFO_REQUEST:
|
||||
// {
|
||||
// QByteArray Frame,ResponseData;
|
||||
// ResponseData.append((char)ID_SMS_CLIENT);
|
||||
// ResponseData.append((char)mDeviceAddress);
|
||||
// Frame = GetTxPacket(ETH_NETWK_DEVICE_INFO_RESPONSE,0,ResponseData.data(),ResponseData.size(),1,ID_MASTER,ID_ETHERNET_VIRTUAL,mDeviceAddress);
|
||||
// mNetworkCommSocket->write(Frame);
|
||||
// break;
|
||||
// }
|
||||
// case ETH_NETWK_CONNECTION_REFUSED:
|
||||
// {
|
||||
// qDebug("MasterCtrl connection refused");
|
||||
// mNetworkCommSocket->close();
|
||||
// delete mNetworkCommSocket;
|
||||
// mNetworkCommSocket = 0;
|
||||
// break;
|
||||
// }
|
||||
// case ETH_NETWK_SET_DEVICE_INFO_ACK:
|
||||
// {
|
||||
// mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_DID_INFO_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress));
|
||||
// qDebug("MasterCtrl accepted connection");
|
||||
// break;
|
||||
// }
|
||||
// case ETH_NETWK_DEVICE_INFO_RESPONSE:
|
||||
// default:
|
||||
// {
|
||||
// break;
|
||||
// }
|
||||
|
||||
// }
|
||||
// }
|
||||
/* else*/ if(TargetDeviceID == ID_SMS_CLIENT && (TargetDeviceAddress == BROADCAST_VALUE || TargetDeviceAddress == mDeviceAddress))
|
||||
{
|
||||
switch(MessageID)
|
||||
{
|
||||
case SMS_CLIENT_DEVICE_ACK:
|
||||
{
|
||||
break;
|
||||
}
|
||||
case SMS_CLIENT_DEVICE_STATUS_REQUEST:
|
||||
{
|
||||
QByteArray Frame,ResponseData;
|
||||
ResponseData.append(ACK);
|
||||
ResponseData.append((char)SMS_CLIENT_DEVICE_STATUS_REQUEST);
|
||||
Frame = GetTxPacket(SMS_CLIENT_DEVICE_STATUS_RESPONSE,0,ResponseData.data(),ResponseData.size(),1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress);
|
||||
mNetworkCommSocket->write(Frame);
|
||||
// qDebug("Rx Status Request");
|
||||
break;
|
||||
}
|
||||
case SMS_CLIENT_DEVICE_DID_INFO_RESPONSE:
|
||||
{
|
||||
QString DidInfo;
|
||||
QDataStream *Strm = new QDataStream(Data);
|
||||
*Strm >> DidInfo;
|
||||
delete Strm;
|
||||
qDebug("Rx DID info: %s",DidInfo.toUtf8().data());
|
||||
mProgramHandle->SetDIDDatabase(DidInfo);
|
||||
|
||||
// mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress));
|
||||
mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_GET_CONTACTS_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress));
|
||||
break;
|
||||
}
|
||||
case SMS_CLIENT_DEVICE_GET_ALL_MSG_RESPONSE:
|
||||
{
|
||||
QList<CSMSMessage> RAWSMSList;
|
||||
QDataStream *Stream = new QDataStream(Data);
|
||||
CSMSMessage NewMsg;
|
||||
|
||||
int NbMsg;
|
||||
*Stream >> NbMsg;
|
||||
|
||||
for(int i = 0; i < NbMsg; i++)
|
||||
{
|
||||
*Stream >> NewMsg;
|
||||
RAWSMSList.append(NewMsg);
|
||||
}
|
||||
|
||||
mProgramHandle->SetAllMsgsDatabase("",&RAWSMSList);
|
||||
|
||||
RAWSMSList.clear();
|
||||
|
||||
|
||||
delete Stream;
|
||||
break;
|
||||
}
|
||||
case SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION:
|
||||
{
|
||||
QList<CSMSMessage> RAWSMSList;
|
||||
QDataStream *Stream = new QDataStream(Data);
|
||||
CSMSMessage NewMsg;
|
||||
|
||||
int NbMsg;
|
||||
*Stream >> NbMsg;
|
||||
|
||||
for(int i = 0; i < NbMsg; i++)
|
||||
{
|
||||
*Stream >> NewMsg;
|
||||
RAWSMSList.append(NewMsg);
|
||||
}
|
||||
|
||||
mProgramHandle->NewMessagesEvent(&RAWSMSList);
|
||||
|
||||
RAWSMSList.clear();
|
||||
|
||||
|
||||
delete Stream;
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
case SMS_CLIENT_DEVICE_SEND_SMS_ACK:
|
||||
{
|
||||
|
||||
QDataStream *Stream = new QDataStream(Data);
|
||||
qint32 Success;
|
||||
*Stream >> Success;
|
||||
if(Success == 1)
|
||||
{
|
||||
qDebug("SMS Sent!!!");
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug("Send SMS Failed");
|
||||
}
|
||||
|
||||
delete Stream;
|
||||
|
||||
break;
|
||||
}
|
||||
case SMS_CLIENT_DEVICE_GET_CONTACTS_RESPONSE:
|
||||
{
|
||||
QList<CContact> ContactsList;
|
||||
QDataStream *Stream = new QDataStream(Data);
|
||||
CContact NewContact;
|
||||
|
||||
int NbContact;
|
||||
*Stream >> NbContact;
|
||||
|
||||
for(int i = 0; i < NbContact; i++)
|
||||
{
|
||||
*Stream >> NewContact;
|
||||
ContactsList.append(NewContact);
|
||||
}
|
||||
|
||||
mProgramHandle->SetContacts(&ContactsList);
|
||||
|
||||
ContactsList.clear();
|
||||
qDebug("Contacts downloaded!");
|
||||
|
||||
|
||||
delete Stream;
|
||||
|
||||
mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress));
|
||||
break;
|
||||
}
|
||||
case SMS_CLIENT_DEVICE_CONTACTS_CHANGED_NOTIFICATION:
|
||||
{
|
||||
mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_GET_CONTACTS_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress));
|
||||
break;
|
||||
}
|
||||
|
||||
case SMS_CLIENT_DEVICE_SEND_SMS_REQUEST:
|
||||
case SMS_CLIENT_DEVICE_STATUS_RESPONSE:
|
||||
case SMS_CLIENT_DEVICE_DID_INFO_REQUEST:
|
||||
case SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST:
|
||||
default:
|
||||
{
|
||||
qDebug("SMSDevice: Invalid Ethernet MSg received: %d",MessageID);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
//int CSMSMasterCtrlInterface::DisconnectMasterCtrl()
|
||||
//{
|
||||
// if(mNetworkCommSocket != 0)
|
||||
// {
|
||||
// mNetworkCommSocket->close();
|
||||
// // mNetworkCommSocket->deleteLater();
|
||||
// }
|
||||
|
||||
// return RET_OK;
|
||||
//}
|
||||
|
||||
//void CSMSMasterCtrlInterface::NetworkSocketConnected()
|
||||
//{
|
||||
// qDebug("Connected to MasterCtrl");
|
||||
//}
|
||||
|
||||
//void CSMSMasterCtrlInterface::NetworkSocketDataAvailable()
|
||||
//{
|
||||
// AnalyzeRxBuffer(mNetworkCommSocket->readAll());
|
||||
//}
|
||||
|
||||
void CSMSMasterCtrlInterface::SendSMS(CSMSMessage Message)
|
||||
{
|
||||
QByteArray FrameData;
|
||||
QBuffer FrameBuffer(&FrameData);
|
||||
FrameBuffer.open(QIODevice::ReadWrite);
|
||||
QDataStream *FrameDataStrm = new QDataStream(&FrameBuffer);
|
||||
|
||||
qint32 NbMsg = 1;
|
||||
|
||||
*FrameDataStrm << NbMsg << Message;
|
||||
|
||||
FrameBuffer.seek(0);
|
||||
|
||||
mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_SEND_SMS_REQUEST,0,FrameData,FrameData.size(),1,ID_MASTER));
|
||||
|
||||
FrameBuffer.close();
|
||||
delete FrameDataStrm;
|
||||
}
|
||||
|
||||
//void CSMSMasterCtrlInterface::NetworkSocketDisconnected()
|
||||
//{
|
||||
// qDebug("Disconnected from MasterCtrl");
|
||||
//// delete mNetworkCommSocket;
|
||||
//// mNetworkCommSocket = 0;
|
||||
//}
|
||||
@@ -0,0 +1,47 @@
|
||||
#ifndef CSMSMASTERCTRLINTERFACE_H
|
||||
#define CSMSMASTERCTRLINTERFACE_H
|
||||
|
||||
//#include "NetworkProtocol.h"
|
||||
//#include "GlobalDefine.h"
|
||||
//#include "ProtocolDefs.h"
|
||||
//#include <QTcpSocket>
|
||||
//#include "SMSMessage.h"
|
||||
#include "MasterCtrlInterface.h"
|
||||
|
||||
|
||||
class CSystemGui;
|
||||
class CSMSClient
|
||||
;
|
||||
class CSMSMasterCtrlInterface: public CMasterCtrlInterface//CNetworkProtocol
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CSMSMasterCtrlInterface(CSMSClient *ProgramHandle);
|
||||
~CSMSMasterCtrlInterface();
|
||||
|
||||
CSMSClient *mProgramHandle;
|
||||
|
||||
// virtual int DeviceFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data);
|
||||
|
||||
// QTcpSocket *mNetworkCommSocket;
|
||||
// int mDeviceAddress;
|
||||
// int mNetworkPort;
|
||||
// QString mMasterCtrlAddress;
|
||||
|
||||
|
||||
// int ConnectToMasterCtrl();
|
||||
// int DisconnectMasterCtrl();
|
||||
// virtual int NewFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data);
|
||||
|
||||
virtual int DeviceFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data);
|
||||
virtual int DeviceConnectedToMaster(bool Connected);
|
||||
|
||||
void SendSMS(CSMSMessage Message);
|
||||
|
||||
//public slots:
|
||||
// void NetworkSocketConnected();
|
||||
// void NetworkSocketDataAvailable();
|
||||
// void NetworkSocketDisconnected();
|
||||
};
|
||||
|
||||
#endif // CSMSMasterCtrlInterface_H
|
||||
@@ -0,0 +1,63 @@
|
||||
#include "SMSMessage.h"
|
||||
#include <QDataStream>
|
||||
|
||||
|
||||
|
||||
CSMSMessage::CSMSMessage()
|
||||
{
|
||||
this->mContact = "INVALID";
|
||||
this->mDateTime = QDateTime::currentDateTime();
|
||||
this->mDID = "INVALID";
|
||||
this->mMessageText = "INVALID";
|
||||
this->mType = SMS_INVALID_TYPE;
|
||||
this->mVOIPMSDatabaseID = "INVALID";
|
||||
|
||||
mIsRead = true;
|
||||
}
|
||||
|
||||
CSMSMessage::CSMSMessage(const CSMSMessage &Message)
|
||||
{
|
||||
this->mContact = Message.mContact;
|
||||
this->mDateTime = Message.mDateTime;
|
||||
this->mDID = Message.mDID;
|
||||
this->mMessageText = Message.mMessageText;
|
||||
this->mType = Message.mType;
|
||||
this->mVOIPMSDatabaseID = Message.mVOIPMSDatabaseID;
|
||||
|
||||
mIsRead = true;
|
||||
}
|
||||
|
||||
|
||||
CSMSMessage::~CSMSMessage()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
QDataStream &operator<<(QDataStream &out, const CSMSMessage &source)
|
||||
{
|
||||
|
||||
out << source.mDID
|
||||
<< source.mDateTime
|
||||
<< source.mMessageText
|
||||
<< source.mContact
|
||||
<< (qint32)source.mType
|
||||
<< source.mVOIPMSDatabaseID;
|
||||
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
QDataStream &operator>>(QDataStream &in, CSMSMessage &dest)
|
||||
{
|
||||
qint32 temp;
|
||||
in >> dest.mDID
|
||||
>> dest.mDateTime
|
||||
>> dest.mMessageText
|
||||
>> dest.mContact
|
||||
>> temp
|
||||
>> dest.mVOIPMSDatabaseID;
|
||||
|
||||
dest.mType = (eSMSType)temp;
|
||||
|
||||
return in;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
#ifndef CSMSMESSAGE_H
|
||||
#define CSMSMESSAGE_H
|
||||
|
||||
#include "GlobalDefine.h"
|
||||
#include <QString>
|
||||
#include <QDateTime>
|
||||
|
||||
typedef enum eSMSType
|
||||
{
|
||||
SMS_SENT_TYPE,
|
||||
SMS_RECEIVED_TYPE,
|
||||
SMS_INVALID_TYPE
|
||||
}SmsType_t;
|
||||
|
||||
class CSMSMessage
|
||||
{
|
||||
|
||||
public:
|
||||
CSMSMessage();
|
||||
CSMSMessage(const CSMSMessage &Message);
|
||||
~CSMSMessage();
|
||||
|
||||
/*qint64*/QString mVOIPMSDatabaseID;
|
||||
QDateTime mDateTime;
|
||||
SmsType_t mType;
|
||||
QString mDID, mContact, mMessageText;
|
||||
|
||||
bool mIsRead;
|
||||
|
||||
|
||||
|
||||
// [id] => 111120
|
||||
// [date] => 2014-03-30 10:24:16
|
||||
// [type] => 0
|
||||
// [did] => 8574884828
|
||||
// [contact] => 8577884821
|
||||
// [message] => hello+john
|
||||
|
||||
};
|
||||
|
||||
QDataStream &operator<<(QDataStream &out, const CSMSMessage &source);
|
||||
QDataStream &operator>>(QDataStream &in, CSMSMessage &dest);
|
||||
|
||||
#endif // CSMSOBJECT_H
|
||||
Reference in New Issue
Block a user