X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fcommon%2Fcontactmanager.cpp;h=974c7a5304f73a3b92fb8e5b8e6c07e62d2e92c2;hb=71122b1057b6c12b250b37f6693ed8259f20b34c;hp=3f8affee425ce3f3e53a0802438d5a75cb297fa1;hpb=89496ceee9788c2908c27ad4e2535f2728310d76;p=jenirok diff --git a/src/common/contactmanager.cpp b/src/common/contactmanager.cpp index 3f8affe..974c7a5 100644 --- a/src/common/contactmanager.cpp +++ b/src/common/contactmanager.cpp @@ -16,14 +16,9 @@ * */ -#include +#include #include "contactmanager.h" -namespace -{ - const int COUNTRY_CODES[] = {358, 45, 46, 47}; - const int NUM_OF_CODES = 4; -} ContactManager::ContactManager(): book_(0) { @@ -31,146 +26,112 @@ ContactManager::ContactManager(): book_(0) ContactManager::~ContactManager() { + if(book_) + { + g_object_unref(book_); + } } bool ContactManager::numberExists(QString const& number) { - if(!load()) - { - return false; - } + if(!load()) + { + return false; + } - EBookQuery* query; - GList *g_contacts; + EBookQuery* query; + GList *g_contacts; - QString copy(number); - QString clean = removeCountryCode(copy); + // Just check the last 7 digits + QString clean = number.right(7); - query = e_book_query_any_field_contains(clean.toLatin1()); + query = e_book_query_any_field_contains(clean.toLatin1()); - if (!e_book_get_contacts (book_, query, &g_contacts, NULL)) - { - qDebug() << "Couldn't get query results.\n"; - return false; - } + if (!e_book_get_contacts (book_, query, &g_contacts, NULL)) + { + qDebug() << "Couldn't get query results.\n"; + return false; + } - if (g_contacts == 0) - { - qDebug() << "no contacts"; - return false; - } + e_book_query_unref(query); - return true; + if (g_contacts == 0) + { + return false; + } + + return true; } bool ContactManager::addContact(Contact const& contact) { - if(!load()) - { - return false; - } - - EContact* newContact = e_contact_new(); - GError* error = NULL; - //EContactAddress* addr = new EContactAddress; - - if(!contact.name.isEmpty()) - { - char* name = contact.name.toLatin1().data(); - e_contact_set(newContact, E_CONTACT_FULL_NAME, (gpointer)name); - } - - // Doesn't work for some reason - /*if(!contact.city.isEmpty() || !contact.street.isEmpty()) + if(!load()) + { + return false; + } + + EContact* newContact = e_contact_new(); + GError* error = NULL; + //EContactAddress* addr = new EContactAddress; + + if(!contact.name.isEmpty()) + { + char* name = contact.name.toLatin1().data(); + e_contact_set(newContact, E_CONTACT_FULL_NAME, (gpointer)name); + } + + // Doesn't work for some reason + /*if(!contact.city.isEmpty() || !contact.street.isEmpty()) { addr->street = contact.street.toLatin1().data(); addr->locality = contact.city.toLatin1().data(); e_contact_set(newContact, E_CONTACT_ADDRESS_HOME, (gpointer)addr); }*/ - if(!contact.number.isEmpty()) - { - char* number = contact.number.toLatin1().data(); - e_contact_set(newContact, E_CONTACT_PHONE_HOME, (gpointer)number); - } + if(!contact.number.isEmpty()) + { + char* number = contact.number.toLatin1().data(); + e_contact_set(newContact, E_CONTACT_PHONE_HOME, (gpointer)number); + } - if(!e_book_add_contact(book_, newContact, &error)) - { - qDebug() << "Couldn't add contact: %s" << error->message; - g_error_free(error); - return false; - } + if(!e_book_add_contact(book_, newContact, &error)) + { + qDebug() << "Couldn't add contact: %s" << error->message; + g_error_free(error); + return false; + } - return true; + return true; } bool ContactManager::load() { - if(book_) - { - return true; - } - - GError* error = NULL; - book_ = e_book_new_system_addressbook(&error); - - if (!book_) - { - qDebug() << "Couldn't open addressbook: %s" << error->message; - g_error_free(error); - return false; - } - - /* Open connection to the address book */ - if (!e_book_open(book_, FALSE, &error)) - { - qDebug() << "Couldn't open addressbook: %s" << error->message; - g_error_free(error); - return false; - } - - return true; - -} - -QString& ContactManager::removeCountryCode(QString& number) -{ - if(number.isEmpty()) - { - return number; - } - - if(number.at(0) == '0') - { - return number.remove(0, 1); - } - else if(number.at(0) != '+') - { - return number; - } - - static QRegExp countryCodeCleaner; - static bool countryCodeCleanerLoaded = false; - - if(!countryCodeCleanerLoaded) - { - QString match = ""; - - for(int i = 0; i < NUM_OF_CODES; i++) - { - if(i > 0) - { - match += "|"; - } - - match += "\\+" + QString::number(COUNTRY_CODES[i]); - } - - countryCodeCleaner = QRegExp("^(" + match + ")"); - countryCodeCleanerLoaded = true; - } + if(book_) + { + return true; + } + + GError *error; + error = 0; + book_ = e_book_new_system_addressbook(&error); + + if (!book_) + { + qDebug() << "Couldn't open addressbook: %s" << error->message; + g_error_free(error); + return false; + } + + /* Open connection to the address book */ + if (!e_book_open(book_, FALSE, &error)) + { + qDebug() << "Couldn't open addressbook: %s" << error->message; + g_error_free(error); + return false; + } + + return true; - return number.replace(countryCodeCleaner, ""); }