Skip to content
Snippets Groups Projects
Commit d5893eb8 authored by Emmanuel Lepage's avatar Emmanuel Lepage
Browse files

Complete contact support is back

parent 39764571
No related branches found
No related tags found
No related merge requests found
Showing
with 429 additions and 212 deletions
......@@ -31,7 +31,6 @@ ActionSetAccountFirst::ActionSetAccountFirst(Account* account, QObject *parent)
this, SLOT(emitSetFirst()));
}
ActionSetAccountFirst::~ActionSetAccountFirst()
{
}
......
......@@ -4,44 +4,109 @@
#include <akonadi/collectionfilterproxymodel.h>
#include <akonadi/collectionmodel.h>
#include <akonadi/kmime/messagemodel.h>
#include <contactgroupsearchjob.h>
#include <kabc/contactgroup.h>
#include <kabc/phonenumber.h>
#include <akonadi/recursiveitemfetchjob.h>
#include <akonadi/itemfetchscope.h>
#include <akonadi/collectionfetchjob.h>
#include <akonadi/collectionfetchscope.h>
#include "lib/Contact.h"
AkonadiBackend* AkonadiBackend::m_pInstance = 0;
AkonadiBackend::AkonadiBackend(QObject* parent) : QObject(parent)
{
QTimer::singleShot( 0, this, SLOT( delayedInit() ) );
//QTimer::singleShot( 0, this, SLOT( delayedInit() ) );
m_pSession = new Akonadi::Session( "SFLPhone::instance" );
// fetching all collections containing emails recursively, starting at the root collection
Akonadi::CollectionFetchJob *job = new Akonadi::CollectionFetchJob( Akonadi::Collection::root(), Akonadi::CollectionFetchJob::Recursive, this );
job->fetchScope().setContentMimeTypes( QStringList() << "text/directory" );
connect( job, SIGNAL( collectionsReceived( const Akonadi::Collection::List& ) ), this, SLOT( collectionsReceived( const Akonadi::Collection::List& ) ) );
}
virtual AkonadiBackend::~AkonadiBackend()
AkonadiBackend::~AkonadiBackend()
{
}
AkonadiBackend* AkonadiBackend::getInstance()
{
if (m_pInstance == NULL) {
m_pInstance = new AkonadiBackend(0);
}
return m_pInstance;
}
static bool AkonadiBackend::init()
ContactList AkonadiBackend::update(Akonadi::Collection collection)
{
if ( !Akonadi::Control::start( this ) ) {
return false;
m_pCollection = collection;
ContactList contacts;
if ( !collection.isValid() ) {
qDebug() << "The current collection is not valid";
return contacts;
}
Akonadi::RecursiveItemFetchJob *job = new Akonadi::RecursiveItemFetchJob( collection, QStringList() << KABC::Addressee::mimeType() << KABC::ContactGroup::mimeType());
job->fetchScope().fetchFullPayload();
if ( job->exec() ) {
const Akonadi::Item::List items = job->items();
foreach ( const Akonadi::Item &item, items ) {
if ( item.hasPayload<KABC::ContactGroup>() ) {
qDebug() << "Group:" << item.payload<KABC::ContactGroup>().name();
}
return true;
if ( item.hasPayload<KABC::Addressee>() ) {
KABC::Addressee tmp = item.payload<KABC::Addressee>();
Contact* aContact = new Contact();
KABC::PhoneNumber::List numbers = tmp.phoneNumbers();
PhoneNumbers newNumbers;
foreach (KABC::PhoneNumber number, numbers) {
newNumbers << new Contact::PhoneNumber(number.number(),number.typeLabel());
m_pContactByPhone[number.number()] = aContact;
}
void AkonadiBackend::createModels()
{
Akonadi::CollectionModel *collectionModel = new Akonadi::CollectionModel( this );
aContact->setNickName (tmp.nickName() );
aContact->setFormattedName (tmp.formattedName() );
aContact->setFirstName (tmp.givenName() );
aContact->setFamilyName (tmp.familyName() );
aContact->setOrganization (tmp.organization() );
aContact->setPreferredEmail (tmp.preferredEmail() );
aContact->setPhoneNumbers (newNumbers );
Akonadi::CollectionFilterProxyModel *filterModel = new Akonadi::CollectionFilterProxyModel( this );
filterModel->setSourceModel( collectionModel );
filterModel->addMimeTypeFilter( QLatin1String( "message/rfc822" ) );
if (!tmp.photo().data().isNull())
aContact->setPhoto(new QPixmap(QPixmap::fromImage( tmp.photo().data()).scaled(QSize(48,48))));
else
aContact->setPhoto(0);
contacts << aContact;
}
}
}
qDebug() << "End collect "<< contacts.size() << "\n\n\n";
return contacts;
}
ContactList AkonadiBackend::update()
{
return update(m_pCollection);
}
Akonadi::ItemModel *itemModel = new Akonadi::MessageModel( this );
ui_detacherview_base.folderView->setModel( filterModel );
ui_detacherview_base.messageView->setModel( itemModel );
Contact* AkonadiBackend::getContactByPhone(QString phoneNumber)
{
return m_pContactByPhone[phoneNumber];
}
connect( ui_detacherview_base.folderView, SIGNAL( currentChanged( Akonadi::Collection ) ),
itemModel, SLOT( setCollection( Akonadi::Collection ) ) );
void AkonadiBackend::collectionsReceived( const Akonadi::Collection::List& list)
{
foreach (Akonadi::Collection coll, list) {
qDebug() << "\n\n\n\n\n\nLoading collection" << coll.name();
update(coll);
emit collectionChanged();
}
}
\ No newline at end of file
......@@ -2,17 +2,37 @@
#define AKONADI_BACKEND_H
#include <QObject>
#include <akonadi/session.h>
#include <akonadi/collectionmodel.h>
#include <kabc/addressee.h>
#include <kabc/addresseelist.h>
class Contact;
typedef QList<Contact*> ContactList;
class AkonadiBackend : public QObject {
Q_OBJECT
public:
AkonadiBackend* getInstance();
static AkonadiBackend* getInstance();
Contact* getContactByPhone(QString phoneNumber);
private:
AkonadiBackend(QObject* parent);
virtual ~AkonadiBackend();
static bool init();
//Attributes
AkonadiBackend* instance;
static AkonadiBackend* m_pInstance;
Akonadi::Session* m_pSession;
Akonadi::Collection m_pCollection;
QHash<QString,Contact*> m_pContactByPhone;
public slots:
ContactList update();
ContactList update(Akonadi::Collection collection);
void collectionsReceived( const Akonadi::Collection::List& );
signals:
void collectionChanged();
};
#endif
\ No newline at end of file
......@@ -45,6 +45,7 @@ SET( sflphone_client_kde_SRCS
widgets/BookmarkDock.cpp
Codec.cpp
AccountListModel.cpp
AkonadiBackend.cpp
CallView.cpp
AccountView.cpp
)
......
......@@ -35,6 +35,8 @@
#include "lib/sflphone_const.h"
#include "lib/instance_interface_singleton.h"
#include "lib/configurationmanager_interface_singleton.h"
#include "lib/Contact.h"
#include "AkonadiBackend.h"
SFLPhone* SFLPhone::m_sApp = NULL;
......@@ -278,24 +280,6 @@ void SFLPhone::quitButton()
qApp->quit();
}
void SFLPhone::sendNotif(QString caller)
{
// notification = new KNotification ( QString("test_notification"), this );
// notification->setText("messageText") ;
// notification->setPixmap( QPixmap( this->windowIcon().pixmap(32, 32) ));
// notification->setActions( QStringList( i18n( "Open chat" ) ) );
// notification->addContext( QString::fromLatin1("call") , "caller" ) ;
// notification->sendEvent();
// KNotification::event(QString("test_notification"),
// QString("Allo"),
// this->windowIcon().pixmap(32, 32),
// parentWidget(),
// KNotification::CloseOnTimeout,
// KGlobal::mainComponent());
KNotification::event(KNotification::Notification, "New incomming call", "New call from: \n" + caller);
}
void SFLPhone::changeEvent(QEvent* event)
{
if (event->type() == QEvent::ActivationChange && iconChanged && isActiveWindow()) {
......@@ -397,7 +381,11 @@ void SFLPhone::on_m_pView_incomingCall(const Call * call)
putForeground();
}*/
//if(configurationManager.getNotify()) {
sendNotif(call->getPeerName().isEmpty() ? call->getPeerPhoneNumber() : call->getPeerName());
Contact* contact = AkonadiBackend::getInstance()->getContactByPhone(call->getPeerPhoneNumber());
if (contact) {
KNotification::event(KNotification::Notification, "New incomming call", "New call from: \n" + call->getPeerName().isEmpty() ? call->getPeerPhoneNumber() : call->getPeerName(),*contact->getPhoto());
}
KNotification::event(KNotification::Notification, "New incomming call", "New call from: \n" + call->getPeerName().isEmpty() ? call->getPeerPhoneNumber() : call->getPeerName());
//}
}
......
......@@ -121,7 +121,6 @@ public:
~SFLPhone();
bool initialize();
void setupActions();
void sendNotif(QString caller);
void trayIconSignal();
SFLPhoneView * getView();
QList<QAction *> getCallActions();
......
......@@ -48,6 +48,9 @@
<entry name="displayDataRange" type="Bool">
<label>Defines whether call history is restricted to a specific date range</label>
</entry>
<entry name="displayContactCallHistory" type="Bool">
<label>Defines if the individual contact history list is visible</label>
</entry>
<!-- Audio Settings -->
......
......@@ -46,7 +46,7 @@ Contact::Contact()
Contact::~Contact()
{
delete photo;
delete m_pPhoto;
}
void Contact::initItem()
......@@ -59,34 +59,88 @@ void Contact::initItemWidget()
}
QString Contact::getPhoneNumber() const
PhoneNumbers Contact::getPhoneNumbers() const
{
return phoneNumber;
return m_pNumbers;
}
QString Contact::getNickName() const
{
return nickName;
return m_pNickName;
}
QString Contact::getFirstName() const
{
return firstName;
return m_pFirstName;
}
QString Contact::getSecondName() const
{
return secondName;
return m_pSecondName;
}
const QPixmap* Contact::getPhoto() const
{
return photo;
return m_pPhoto;
}
QString Contact::getFormattedName() const
{
return m_pFormattedName;
}
QString Contact::getOrganization() const
{
return m_pOrganization;
}
QString Contact::getPreferredEmail() const
{
return m_pPreferredEmail;
}
QString Contact::getType() const
{
return type;
return m_pType;
}
void Contact::setPhoneNumbers(PhoneNumbers numbers)
{
m_pNumbers = numbers;
}
void Contact::setNickName(QString name)
{
m_pNickName = name;
}
void Contact::setFirstName(QString name)
{
m_pFirstName = name;
}
void Contact::setFamilyName(QString name)
{
m_pSecondName = name;
}
void Contact::setPhoto(QPixmap* photo)
{
m_pPhoto = photo;
}
void Contact::setFormattedName(QString name)
{
m_pFormattedName = name;
}
void Contact::setOrganization(QString name)
{
m_pOrganization = name;
}
void Contact::setPreferredEmail(QString name)
{
m_pPreferredEmail = name;
}
\ No newline at end of file
......@@ -36,33 +36,65 @@
@author Jérémy Quentin <jeremy.quentin@savoirfairelinux.com>
*/
class LIB_EXPORT Contact : public QObject{
Q_OBJECT
public:
class PhoneNumber {
public:
PhoneNumber(QString number, QString type)
: m_pNumber(number),m_pType(type){}
QString& getNumber() {
return m_pNumber ;
}
QString& getType() {
return m_pType ;
}
private:
QString firstName;
QString secondName;
QString nickName;
QString phoneNumber;
QPixmap* photo;
QString type;
bool displayPhoto;
QString m_pNumber ;
QString m_pType ;
};
typedef QList<Contact::PhoneNumber*> PhoneNumbers;
private:
QString m_pFirstName ;
QString m_pSecondName ;
QString m_pNickName ;
QPixmap* m_pPhoto ;
QString m_pType ;
QString m_pFormattedName ;
QString m_pPreferredEmail ;
QString m_pOrganization ;
bool displayPhoto ;
PhoneNumbers m_pNumbers ;
public:
//Constructors & Destructors
explicit Contact();
virtual ~Contact();
//Getters
virtual QString getPhoneNumber() const;
virtual PhoneNumbers getPhoneNumbers() const;
virtual QString getNickName() const;
virtual QString getFirstName() const;
virtual QString getSecondName() const;
virtual QString getFormattedName() const;
virtual QString getOrganization() const;
virtual QString getPreferredEmail() const;
virtual const QPixmap* getPhoto() const;
virtual QString getType() const;
virtual void initItem();
virtual void setPhoneNumbers (PhoneNumbers );
virtual void setFormattedName (QString name );
virtual void setNickName (QString name );
virtual void setFirstName (QString name );
virtual void setFamilyName (QString name );
virtual void setOrganization (QString name );
virtual void setPreferredEmail (QString name );
virtual void setPhoto (QPixmap* photo );
protected:
virtual void initItemWidget();
};
typedef Contact::PhoneNumbers PhoneNumbers;
#endif
......@@ -26,6 +26,8 @@
#include "lib/sflphone_const.h"
#include "CallTreeItem.h"
#include "lib/Contact.h"
#include "AkonadiBackend.h"
const char * CallTreeItem::callStateIcons[12] = {ICON_INCOMING, ICON_RINGING, ICON_CURRENT, ICON_DIALING, ICON_HOLD, ICON_FAILURE, ICON_BUSY, ICON_TRANSFER, ICON_TRANSF_HOLD, "", "", ICON_CONFERENCE};
......@@ -69,6 +71,7 @@ void CallTreeItem::setCall(Call *call)
labelCallNumber2 = new QLabel(itemCall->getPeerPhoneNumber());
labelTransferPrefix = new QLabel(i18n("Transfer to : "));
labelTransferNumber = new QLabel();
labelPeerName = new QLabel();
QSpacerItem* verticalSpacer = new QSpacerItem(16777215, 20, QSizePolicy::Expanding, QSizePolicy::Expanding);
QHBoxLayout* mainLayout = new QHBoxLayout();
......@@ -89,7 +92,7 @@ void CallTreeItem::setCall(Call *call)
mainLayout->addWidget(labelIcon);
if(! itemCall->getPeerName().isEmpty()) {
labelPeerName = new QLabel(itemCall->getPeerName());
labelPeerName->setText(itemCall->getPeerName());
descr->addWidget(labelPeerName);
}
......@@ -113,6 +116,22 @@ void CallTreeItem::setCall(Call *call)
void CallTreeItem::updated()
{
Contact* contact = AkonadiBackend::getInstance()->getContactByPhone(itemCall->getPeerPhoneNumber());
if (contact) {
labelIcon->setPixmap(*contact->getPhoto());
labelPeerName->setText("<b>"+contact->getFormattedName()+"</b>");
}
else {
labelIcon->setPixmap(QPixmap(KIcon("user-identity").pixmap(QSize(48,48))));
if(! itemCall->getPeerName().trimmed().isEmpty()) {
labelPeerName->setText("<b>"+itemCall->getPeerName()+"</b>");
}
else {
labelPeerName->setText("<b>Unknow</b>");
}
}
call_state state = itemCall->getState();
bool recording = itemCall->getRecording();
if(state != CALL_STATE_OVER) {
......
......@@ -2,15 +2,16 @@
#include "ContactDock.h"
#include <QtGui/QVBoxLayout>
#include <QtGui/QTableWidget>
#include <QtGui/QListWidget>
#include <QtGui/QTreeWidget>
#include <QtGui/QHeaderView>
#include <QtGui/QCheckBox>
#include <QtCore/QDateTime>
#include <akonadi/collectionfilterproxymodel.h>
#include <akonadi/contact/contactstreemodel.h>
#include <akonadi/kmime/messagemodel.h>
#include <akonadi/changerecorder.h>
#include <akonadi/session.h>
#include <kabc/addressee.h>
#include <kabc/picture.h>
#include <kabc/phonenumber.h>
......@@ -25,7 +26,11 @@
#include <akonadi/recursiveitemfetchjob.h>
#include <kicon.h>
#include "AkonadiBackend.h"
#include "ContactItemWidget.h"
#include "conf/ConfigurationSkeleton.h"
#include "lib/Call.h"
#include "SFLPhone.h"
class QNumericTreeWidgetItem : public QTreeWidgetItem {
public:
......@@ -49,11 +54,11 @@ class QNumericTreeWidgetItem : public QTreeWidgetItem {
ContactDock::ContactDock(QWidget* parent) : QDockWidget(parent)
{
m_pFilterLE = new KLineEdit ( );
m_pCollCCB = new Akonadi::CollectionComboBox;
m_pSplitter = new QSplitter ( Qt::Vertical,this );
m_pSortByCBB = new QComboBox ( this );
m_pContactView = new QTreeWidget ( this );
m_pCallView = new QTableWidget(this);
m_pCallView = new QListWidget ( this );
m_pShowHistoCK = new QCheckBox ( this );
QStringList sortType;
sortType << "Name" << "Organisation" << "Phone number type" << "Rencently used" << "Group";
......@@ -71,10 +76,13 @@ ContactDock::ContactDock(QWidget* parent) : QDockWidget(parent)
m_pFilterLE->setPlaceholderText("Filter");
m_pFilterLE->setClearButtonShown(true);
m_pShowHistoCK->setChecked(ConfigurationSkeleton::displayContactCallHistory());
m_pShowHistoCK->setText("Display history");
QVBoxLayout* mainLayout = new QVBoxLayout(mainWidget);
mainLayout->addWidget(m_pCollCCB);
mainLayout->addWidget ( m_pSortByCBB );
mainLayout->addWidget ( m_pShowHistoCK );
mainLayout->addWidget ( m_pSplitter );
m_pSplitter->addWidget ( m_pContactView );
m_pSplitter->addWidget ( m_pCallView );
......@@ -83,12 +91,10 @@ ContactDock::ContactDock(QWidget* parent) : QDockWidget(parent)
m_pSplitter->setChildrenCollapsible(true);
m_pSplitter->setStretchFactor(0,7);
m_pCollCCB->setMimeTypeFilter( QStringList() << KABC::Addressee::mimeType() );
m_pCollCCB->setAccessRightsFilter( Akonadi::Collection::ReadOnly );
Akonadi::Session *session = new Akonadi::Session( "SFLPhone::instance" );
connect (m_pCollCCB, SIGNAL(currentChanged(Akonadi::Collection)),this,SLOT(reloadContact()));
connect (AkonadiBackend::getInstance(),SIGNAL(collectionChanged()), this, SLOT(reloadContact() ));
connect (m_pContactView, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),this, SLOT(loadContactHistory(QTreeWidgetItem*) ));
connect (m_pFilterLE, SIGNAL(textChanged(QString)), this, SLOT(filter(QString) ));
connect (m_pShowHistoCK, SIGNAL(toggled(bool)), m_pCallView, SLOT(setVisible(bool) ));
setWindowTitle("Contact");
}
......@@ -97,60 +103,63 @@ ContactDock::~ContactDock()
}
KABC::Addressee::List ContactDock::collectAddressBookContacts() const
{
KABC::Addressee::List contacts;
const Akonadi::Collection collection = m_pCollCCB->currentCollection();
if ( !collection.isValid() ) {
qDebug() << "The current collection is not valid";
return contacts;
}
Akonadi::RecursiveItemFetchJob *job = new Akonadi::RecursiveItemFetchJob( collection, QStringList() << KABC::Addressee::mimeType() << KABC::ContactGroup::mimeType());
job->fetchScope().fetchFullPayload();
if ( job->exec() ) {
const Akonadi::Item::List items = job->items();
foreach ( const Akonadi::Item &item, items ) {
if ( item.hasPayload<KABC::ContactGroup>() ) {
qDebug() << "Group:" << item.payload<KABC::ContactGroup>().name();
}
if ( item.hasPayload<KABC::Addressee>() ) {
contacts << item.payload<KABC::Addressee>();
qDebug() << "Addressee:" << item.payload<KABC::Addressee>().givenName();
}
}
}
qDebug() << "End collect "<< contacts.size() << "\n\n\n";
return contacts;
}
void ContactDock::reloadContact()
{
KABC::Addressee::List list = collectAddressBookContacts();
qDebug() << "About to display items" << list.size();
foreach (KABC::Addressee addr, list) {
qDebug() << "In list:";
ContactList list = AkonadiBackend::getInstance()->update();
foreach (Contact* cont, list) {
ContactItemWidget* aContact = new ContactItemWidget(m_pContactView);
QNumericTreeWidgetItem* item = new QNumericTreeWidgetItem(m_pContactView);
item->widget = aContact;
aContact->setItem(item);
aContact->setContact(addr);
aContact->setContact(cont);
KABC::PhoneNumber::List numbers = aContact->getCallNumbers();
if (aContact->getCallNumbers().count() > 1) {
foreach (KABC::PhoneNumber number, numbers) {
PhoneNumbers numbers = aContact->getContact()->getPhoneNumbers();
qDebug() << "Phone count" << numbers.count();
if (numbers.count() > 1) {
foreach (Contact::PhoneNumber* number, numbers) {
QNumericTreeWidgetItem* item2 = new QNumericTreeWidgetItem(item);
QLabel* numberL = new QLabel("<b>"+number.typeLabel()+":</b>"+number.number());
QLabel* numberL = new QLabel("<b>"+number->getType()+":</b>"+number->getNumber());
m_pContactView->setItemWidget(item2,0,numberL);
}
}
m_pContactView->addTopLevelItem(item);
m_pContactView->setItemWidget(item,0,aContact);
m_pContacts << aContact;
}
}
void ContactDock::loadContactHistory(QTreeWidgetItem* item)
{
if (m_pShowHistoCK->isChecked()) {
m_pCallView->clear();
if (dynamic_cast<QNumericTreeWidgetItem*>(item) != NULL) {
QNumericTreeWidgetItem* realItem = dynamic_cast<QNumericTreeWidgetItem*>(item);
foreach (Call* call, SFLPhone::app()->model()->getHistory()) {
if (realItem->widget != 0) {
foreach (Contact::PhoneNumber* number, realItem->widget->getContact()->getPhoneNumbers()) {
if (number->getNumber() == call->getPeerPhoneNumber()) {
m_pCallView->addItem(QDateTime::fromTime_t(call->getStartTimeStamp().toUInt()).toString());
}
}
}
}
}
}
}
void ContactDock::filter(QString text)
{
foreach(ContactItemWidget* item, m_pContacts) {
bool foundNumber = false;
foreach (Contact::PhoneNumber* number, item->getContact()->getPhoneNumbers()) {
foundNumber |= number->getNumber().toLower().indexOf(text) != -1;
}
bool visible = (item->getContact()->getFormattedName().toLower().indexOf(text) != -1)
|| (item->getContact()->getOrganization().toLower().indexOf(text) != -1)
|| (item->getContact()->getPreferredEmail().toLower().indexOf(text) != -1)
|| foundNumber;
item->getItem()->setHidden(!visible);
}
m_pContactView->expandAll();
}
\ No newline at end of file
......@@ -12,8 +12,11 @@
#include <akonadi/collectioncombobox.h>
class QTreeWidget;
class QTableWidget;
class QListWidget;
class QComboBox;
class QTreeWidgetItem;
class QCheckBox;
class ContactItemWidget;
class ContactDock : public QDockWidget {
Q_OBJECT
......@@ -21,17 +24,19 @@ public:
ContactDock(QWidget* parent);
virtual ~ContactDock();
private:
//Attributes
KLineEdit* m_pFilterLE;
Akonadi::CollectionComboBox* m_pCollCCB;
QSplitter* m_pSplitter;
QTreeWidget* m_pContactView;
QTableWidget* m_pCallView;
QListWidget* m_pCallView;
QComboBox* m_pSortByCBB;
QCheckBox* m_pShowHistoCK;
QList<ContactItemWidget*> m_pContacts;
public slots:
KABC::Addressee::List collectAddressBookContacts() const;
private slots:
void reloadContact();
void loadContactHistory(QTreeWidgetItem* item);
void filter(QString text);
};
#endif
\ No newline at end of file
......@@ -39,7 +39,7 @@ ContactItemWidget::~ContactItemWidget()
}
void ContactItemWidget::setContact(KABC::Addressee& contact)
void ContactItemWidget::setContact(Contact* contact)
{
m_pContactKA = contact;
m_pIconL = new QLabel(this);
......@@ -75,9 +75,9 @@ void ContactItemWidget::setContact(KABC::Addressee& contact)
void ContactItemWidget::updated()
{
m_pContactNameL->setText("<b>"+m_pContactKA.formattedName()+"</b>");
if (!m_pContactKA.organization().isEmpty()) {
m_pOrganizationL->setText(m_pContactKA.organization());
m_pContactNameL->setText("<b>"+m_pContactKA->getFormattedName()+"</b>");
if (!m_pContactKA->getOrganization().isEmpty()) {
m_pOrganizationL->setText(m_pContactKA->getOrganization());
}
else {
m_pOrganizationL->setVisible(false);
......@@ -90,51 +90,50 @@ void ContactItemWidget::updated()
m_pEmailL->setVisible(false);
}
KABC::PhoneNumber::List numbers = m_pContactKA.phoneNumbers();
foreach (KABC::PhoneNumber number, numbers) {
qDebug() << "Phone:" << number.number() << number.typeLabel();
PhoneNumbers numbers = m_pContactKA->getPhoneNumbers();
foreach (Contact::PhoneNumber* number, numbers) {
qDebug() << "Phone:" << number->getNumber() << number->getType();
}
if (getCallNumbers().count() == 1)
m_pCallNumberL->setText(getCallNumbers()[0].number());
m_pCallNumberL->setText(getCallNumbers()[0]->getNumber());
else
m_pCallNumberL->setText(QString::number(getCallNumbers().count())+" numbers");
QImage photo = m_pContactKA.photo().data();
if (photo.isNull())
if (!m_pContactKA->getPhoto())
m_pIconL->setPixmap(QPixmap(KIcon("user-identity").pixmap(QSize(48,48))));
else
m_pIconL->setPixmap(QPixmap::fromImage( m_pContactKA.photo().data()).scaled(QSize(48,48)));;
m_pIconL->setPixmap(*m_pContactKA->getPhoto());
}
QPixmap* ContactItemWidget::getIcon()
{
return new QPixmap();
}
// QPixmap* ContactItemWidget::getIcon()
// {
// return new QPixmap();
// }
QString ContactItemWidget::getContactName()
QString ContactItemWidget::getContactName() const
{
return m_pContactKA.formattedName();
return m_pContactKA->getFormattedName();
}
KABC::PhoneNumber::List ContactItemWidget::getCallNumbers()
PhoneNumbers ContactItemWidget::getCallNumbers() const
{
return m_pContactKA.phoneNumbers();
return m_pContactKA->getPhoneNumbers();
}
QString ContactItemWidget::getOrganization()
QString ContactItemWidget::getOrganization() const
{
return m_pContactKA.organization();
return m_pContactKA->getOrganization();
}
QString ContactItemWidget::getEmail()
QString ContactItemWidget::getEmail() const
{
return m_pContactKA.fullEmail();
return m_pContactKA->getPreferredEmail();
}
QString ContactItemWidget::getPicture()
QPixmap* ContactItemWidget::getPicture() const
{
return m_pContactKA.photo().url();
return (QPixmap*) m_pContactKA->getPhoto();
}
QTreeWidgetItem* ContactItemWidget::getItem()
......@@ -146,3 +145,8 @@ void ContactItemWidget::setItem(QTreeWidgetItem* item)
{
m_pItem = item;
}
Contact* ContactItemWidget::getContact()
{
return m_pContactKA;
}
\ No newline at end of file
......@@ -35,6 +35,8 @@
#include <kabc/picture.h>
#include <kabc/phonenumber.h>
#include <lib/Contact.h>
class QTreeWidgetItem;
class ContactItemWidget : public QWidget
......@@ -45,21 +47,22 @@ class ContactItemWidget : public QWidget
~ContactItemWidget();
KABC::Addressee* contact() const;
void setContact(KABC::Addressee& contact);
void setContact(Contact* contact);
static const char * callStateIcons[12];
QPixmap* getIcon();
QString getContactName();
KABC::PhoneNumber::List getCallNumbers();
QString getOrganization();
QString getEmail();
QString getPicture();
//QPixmap* getIcon();
QString getContactName() const;
PhoneNumbers getCallNumbers() const;
QString getOrganization() const;
QString getEmail() const;
QPixmap* getPicture() const;
QTreeWidgetItem* getItem();
Contact* getContact();
void setItem(QTreeWidgetItem* item);
private:
KABC::Addressee m_pContactKA;
Contact* m_pContactKA;
QLabel* m_pIconL;
QLabel* m_pContactNameL;
......
......@@ -14,6 +14,7 @@
#include "SFLPhone.h"
#include "widgets/HistoryTreeItem.h"
#include "conf/ConfigurationSkeleton.h"
#include "AkonadiBackend.h"
class QNumericTreeWidgetItem : public QTreeWidgetItem {
public:
......@@ -76,13 +77,11 @@ HistoryDock::HistoryDock(QWidget* parent) : QDockWidget(parent)
mainLayout->addWidget(m_pSortByL ,0,0 );
mainLayout->addWidget(m_pSortByCBB ,0,1,1,2 );
mainLayout->addWidget(m_pAllTimeCB ,1,0,1,3 );
mainLayout->addWidget(m_pLinkPB ,3,2,3,1 );
mainLayout->addWidget(m_pFromL ,2,0,1,2 );
mainLayout->addWidget(m_pFromDW ,3,0,1,2 );
mainLayout->addWidget(m_pToL ,4,0,1,2 );
mainLayout->addWidget(m_pToDW ,5,0,1,2 );
mainLayout->addWidget(m_pItemView ,6,0,1,3 );
mainLayout->addWidget(m_pFilterLE ,7,0,1,3 );
......@@ -100,6 +99,7 @@ HistoryDock::HistoryDock(QWidget* parent) : QDockWidget(parent)
connect(m_pFromDW , SIGNAL(changed(QDate)), this, SLOT(updateLinkedFromDate(QDate) ));
connect(m_pToDW , SIGNAL(changed(QDate)), this, SLOT(updateLinkedToDate(QDate) ));
connect(m_pSortByCBB, SIGNAL(currentIndexChanged(int)), this, SLOT(reload() ));
connect(AkonadiBackend::getInstance(), SIGNAL(collectionChanged()), this, SLOT(updateContactInfo() ));
}
HistoryDock::~HistoryDock()
......@@ -114,6 +114,13 @@ QString HistoryDock::getIdentity(HistoryTreeItem* item)
return item->getName();
}
void HistoryDock::updateContactInfo()
{
foreach(HistoryTreeItem* hitem, m_pHistory) {
hitem->updated();
}
}
void HistoryDock::reload()
{
m_pItemView->clear();
......
......@@ -55,6 +55,7 @@ private slots:
void updateLinkedFromDate(QDate date);
void updateLinkedToDate(QDate date);
void reload();
void updateContactInfo();
};
#endif
\ No newline at end of file
......@@ -27,6 +27,8 @@
#include "lib/sflphone_const.h"
#include "HistoryTreeItem.h"
#include "AkonadiBackend.h"
#include "lib/Contact.h"
const char * HistoryTreeItem::callStateIcons[12] = {ICON_INCOMING, ICON_RINGING, ICON_CURRENT, ICON_DIALING, ICON_HOLD, ICON_FAILURE, ICON_BUSY, ICON_TRANSFER, ICON_TRANSF_HOLD, "", "", ICON_CONFERENCE};
......@@ -54,25 +56,17 @@ void HistoryTreeItem::setCall(Call *call)
labelIcon->setVisible(true);
return;
}
labelIcon = new QLabel(this);
labelPeerName = new QLabel();
labelIcon = new QLabel();
labelIcon->setMinimumSize(70,48);
labelIcon->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
labelCallNumber2 = new QLabel(itemCall->getPeerPhoneNumber());
QSpacerItem* verticalSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding);
labelIcon->setPixmap(QPixmap(KIcon("user-identity").pixmap(QSize(48,48))));
if(! itemCall->getPeerName().trimmed().isEmpty()) {
labelPeerName = new QLabel("<b>"+itemCall->getPeerName()+"</b>");
}
else {
labelPeerName = new QLabel("<b>Unknow</b>");
}
m_pTimeL = new QLabel();
m_pTimeL->setText(QDateTime::fromTime_t(itemCall->getStartTimeStamp().toUInt()).toString());
......@@ -91,9 +85,7 @@ void HistoryTreeItem::setCall(Call *call)
setLayout(mainLayout);
setMinimumSize(QSize(50, 30));
connect(itemCall, SIGNAL(changed()),
this, SLOT(updated()));
connect(itemCall, SIGNAL(changed()), this, SLOT(updated()));
updated();
m_pTimeStamp = itemCall->getStartTimeStamp().toUInt();
......@@ -104,6 +96,22 @@ void HistoryTreeItem::setCall(Call *call)
void HistoryTreeItem::updated()
{
Contact* contact = AkonadiBackend::getInstance()->getContactByPhone(itemCall->getPeerPhoneNumber());
if (contact) {
labelIcon->setPixmap(*contact->getPhoto());
labelPeerName->setText("<b>"+contact->getFormattedName()+"</b>");
}
else {
labelIcon->setPixmap(QPixmap(KIcon("user-identity").pixmap(QSize(48,48))));
if(! itemCall->getPeerName().trimmed().isEmpty()) {
labelPeerName->setText("<b>"+itemCall->getPeerName()+"</b>");
}
else {
labelPeerName->setText("<b>Unknow</b>");
}
}
call_state state = itemCall->getState();
bool recording = itemCall->getRecording();
if(state != CALL_STATE_OVER) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment