diff --git a/kde/src/AkonadiBackend.cpp b/kde/src/AkonadiBackend.cpp index f8d6dc3067684e8e67ea22aca36a88170430ead4..cbf270c44c535bffcd09b9458b2d123658b5a68a 100644 --- a/kde/src/AkonadiBackend.cpp +++ b/kde/src/AkonadiBackend.cpp @@ -10,8 +10,11 @@ #include <akonadi/itemfetchscope.h> #include <akonadi/collectionfetchjob.h> #include <akonadi/collectionfetchscope.h> +#include <akonadi/contact/contacteditor.h> +#include <kdialog.h> #include "lib/Contact.h" +#include "SFLPhone.h" AkonadiBackend* AkonadiBackend::m_pInstance = 0; @@ -62,6 +65,7 @@ ContactList AkonadiBackend::update(Akonadi::Collection collection) if ( item.hasPayload<KABC::Addressee>() ) { KABC::Addressee tmp = item.payload<KABC::Addressee>(); Contact* aContact = new Contact(); + m_pAddrHash[tmp.uid()] = tmp; KABC::PhoneNumber::List numbers = tmp.phoneNumbers(); PhoneNumbers newNumbers; @@ -113,4 +117,49 @@ void AkonadiBackend::collectionsReceived( const Akonadi::Collection::List& list update(coll); emit collectionChanged(); } +} + +void AkonadiBackend::editContact(Contact* contact) +{ + KABC::Addressee ct = m_pAddrHash[contact->getUid()]; + if (ct.uid() != contact->getUid()) { + qDebug() << "Contact not found"; + return; + } + Akonadi::ContactEditor *editor = new Akonadi::ContactEditor( Akonadi::ContactEditor::EditMode, SFLPhone::app()->view() ); + Akonadi::Item item; + item.setPayload<KABC::Addressee>(ct); + editor->loadContact(item); + KDialog* dlg = new KDialog(SFLPhone::app()->view()); + dlg->setMainWidget(editor); + dlg->exec(); +} + +void AkonadiBackend::addNewContact(Contact* contact) +{ + KABC::Addressee newContact; + newContact.setNickName ( contact->getNickName() ); + newContact.setFormattedName ( contact->getFormattedName() ); + newContact.setGivenName ( contact->getFirstName() ); + newContact.setFamilyName ( contact->getSecondName() ); + newContact.setOrganization ( contact->getOrganization() ); + //newContact.setPreferredEmail ( contact->getPreferredEmail() );//TODO + + + //aContact->setPhoneNumbers (newNumbers );//TODO + + Akonadi::ContactEditor *editor = new Akonadi::ContactEditor( Akonadi::ContactEditor::CreateMode, SFLPhone::app()->view() ); + + editor->setContactTemplate(newContact); + + KDialog* dlg = new KDialog(SFLPhone::app()->view()); + dlg->setMainWidget(editor); + dlg->exec(); + + + + if ( !editor->saveContact() ) { + qDebug() << "Unable to save new contact to storage"; + return; + } } \ No newline at end of file diff --git a/kde/src/AkonadiBackend.h b/kde/src/AkonadiBackend.h index c58e0430d94abf6918f0c261f79f2050014311b3..3f11d8a2b9b5482f449278f33b8f390ee4c31583 100644 --- a/kde/src/AkonadiBackend.h +++ b/kde/src/AkonadiBackend.h @@ -9,24 +9,31 @@ class Contact; +namespace KABC { + class Addressee; +} + typedef QList<Contact*> ContactList; class AkonadiBackend : public QObject { Q_OBJECT public: - static AkonadiBackend* getInstance(); - Contact* getContactByPhone(QString phoneNumber); - Contact* getContactByUid(QString uid); + static AkonadiBackend* getInstance(); + Contact* getContactByPhone ( QString phoneNumber ); + Contact* getContactByUid ( QString uid ); + void editContact ( Contact* contact ); + void addNewContact ( Contact* contact ); private: AkonadiBackend(QObject* parent); virtual ~AkonadiBackend(); //Attributes - static AkonadiBackend* m_pInstance; - Akonadi::Session* m_pSession; - Akonadi::Collection m_pCollection; - QHash<QString,Contact*> m_pContactByPhone; - QHash<QString,Contact*> m_pContactByUid; + static AkonadiBackend* m_pInstance ; + Akonadi::Session* m_pSession ; + Akonadi::Collection m_pCollection ; + QHash<QString,Contact*> m_pContactByPhone ; + QHash<QString,Contact*> m_pContactByUid ; + QHash<QString,KABC::Addressee> m_pAddrHash ; public slots: ContactList update(); ContactList update(Akonadi::Collection collection); diff --git a/kde/src/conf/dlgaccounts.cpp b/kde/src/conf/dlgaccounts.cpp index ea2445fa556c979810ef503337091d087c76a922..da0bec4c0911cabef121eecbe5240e84cdd8a24f 100755 --- a/kde/src/conf/dlgaccounts.cpp +++ b/kde/src/conf/dlgaccounts.cpp @@ -360,6 +360,7 @@ void DlgAccounts::loadAccount(QListWidgetItem * item) } updateStatusLabel(account); + enablePublished(); frame2_editAccounts->setEnabled(true); } diff --git a/kde/src/lib/Call.cpp b/kde/src/lib/Call.cpp index fe36a4f16938a2050fc894b5912112bfa5e72040..5437f16324757a6168188e7f3072dbe5a6c7c5d3 100644 --- a/kde/src/lib/Call.cpp +++ b/kde/src/lib/Call.cpp @@ -341,6 +341,7 @@ QString Call::getCallNumber() const void Call::setCallNumber(QString number) { callNumber = number; + emit changed(); } diff --git a/kde/src/widgets/CallTreeItem.cpp b/kde/src/widgets/CallTreeItem.cpp index 707df76393a929af250d7b22893070b55fb4bcc3..9626b0b6a8f21125515c1a722b65587a091f4c29 100644 --- a/kde/src/widgets/CallTreeItem.cpp +++ b/kde/src/widgets/CallTreeItem.cpp @@ -108,8 +108,7 @@ void CallTreeItem::setCall(Call *call) setLayout(mainLayout); setMinimumSize(QSize(50, 30)); - connect(itemCall, SIGNAL(changed()), - this, SLOT(updated())); + connect(itemCall, SIGNAL(changed()), this, SLOT(updated())); updated(); } diff --git a/kde/src/widgets/ContactItemWidget.cpp b/kde/src/widgets/ContactItemWidget.cpp index 3789226b4f29f0e23014e86f90a3cdbfe16666d0..3b580fddaff58dde3501efdfe03b19269c667815 100644 --- a/kde/src/widgets/ContactItemWidget.cpp +++ b/kde/src/widgets/ContactItemWidget.cpp @@ -32,6 +32,7 @@ #include "lib/sflphone_const.h" #include "ContactItemWidget.h" +#include "AkonadiBackend.h" ContactItemWidget::ContactItemWidget(QWidget *parent) : QWidget(parent), m_pMenu(0),init(false) @@ -218,7 +219,8 @@ void ContactItemWidget::copy() void ContactItemWidget::editContact() { - qDebug() << "Adding contact"; + qDebug() << "Edit contact"; + AkonadiBackend::getInstance()->editContact(m_pContactKA); } void ContactItemWidget::addPhone() diff --git a/kde/src/widgets/HistoryDock.cpp b/kde/src/widgets/HistoryDock.cpp index 23142473a1049bd10c9e52b092da41895c4bc536..98cf9481de91fb27fc00a12914deaf0edba3d15e 100644 --- a/kde/src/widgets/HistoryDock.cpp +++ b/kde/src/widgets/HistoryDock.cpp @@ -276,6 +276,7 @@ bool HistoryTree::dropMimeData(QTreeWidgetItem *parent, int index, const QMimeDa { Q_UNUSED(index) Q_UNUSED(action) + Q_UNUSED(parent) QByteArray encodedData = data->data(MIME_CALLID); diff --git a/kde/src/widgets/HistoryTreeItem.cpp b/kde/src/widgets/HistoryTreeItem.cpp index 3a2f10f4b1911c04191ed4110b90074fa4eb2988..ed3f1156ca23c8c44edee2cc01c31348d9735afe 100644 --- a/kde/src/widgets/HistoryTreeItem.cpp +++ b/kde/src/widgets/HistoryTreeItem.cpp @@ -32,6 +32,7 @@ #include "HistoryTreeItem.h" #include "AkonadiBackend.h" #include "lib/Contact.h" +#include "SFLPhone.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}; @@ -51,11 +52,11 @@ HistoryTreeItem::HistoryTreeItem(QWidget *parent) m_pCallAgain->setIcon (KIcon(ICON_DIALING) ); m_pAddToContact->setShortcut (Qt::CTRL + Qt::Key_E ); - m_pAddToContact->setText ("Add to contact" ); + m_pAddToContact->setText ("Add Number to Contact" ); m_pAddToContact->setIcon (KIcon("list-resource-add") ); m_pAddContact->setShortcut (Qt::CTRL + Qt::Key_E ); - m_pAddContact->setText ("Add to contact" ); + m_pAddContact->setText ("Add Contact" ); m_pAddContact->setIcon (KIcon("contact-new") ); m_pCopy->setShortcut (Qt::CTRL + Qt::Key_C ); @@ -220,6 +221,8 @@ void HistoryTreeItem::sendEmail() void HistoryTreeItem::callAgain() { qDebug() << "Calling "<< itemCall->getPeerPhoneNumber(); + SFLPhone::app()->model()->addDialingCall(m_pName, SFLPhone::app()->model()->getCurrentAccountId())->setCallNumber(m_pPhoneNumber); + } void HistoryTreeItem::copy() @@ -230,6 +233,10 @@ void HistoryTreeItem::copy() void HistoryTreeItem::addContact() { qDebug() << "Adding contact"; + Contact* aContact = new Contact(); + aContact->setPhoneNumbers(PhoneNumbers() << new Contact::PhoneNumber(m_pPhoneNumber, "Home")); + aContact->setFormattedName(m_pName); + AkonadiBackend::getInstance()->addNewContact(aContact); } void HistoryTreeItem::addToContact()