This commit is contained in:
J-F Martel
2017-04-12 13:37:09 -04:00
commit 9f5b83c776
49 changed files with 3693 additions and 0 deletions
+107
View File
@@ -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;
}
+29
View File
@@ -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
+168
View File
@@ -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();
//}
+27
View File
@@ -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
+198
View File
@@ -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)
//{
//}
+77
View File
@@ -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
+61
View File
@@ -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;
}
+27
View File
@@ -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
+204
View File
@@ -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;
}
+52
View File
@@ -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
+276
View File
@@ -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));
}
+49
View File
@@ -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
+63
View File
@@ -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;
}
+44
View File
@@ -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