Fixed a bug that caused Eniro search results to sometimes have phone number in street...
[jenirok] / src / common / contactmanager.cpp
1 /*
2  * This file is part of Jenirok.
3  *
4  * Jenirok is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * Jenirok is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with Jenirok.  If not, see <http://www.gnu.org/licenses/>.
16  *
17  */
18
19 #include <QtCore/QDebug>
20 #include "contactmanager.h"
21
22
23 ContactManager::ContactManager(): book_(0)
24 {
25 }
26
27 ContactManager::~ContactManager()
28 {
29     if(book_)
30     {
31         g_object_unref(book_);
32     }
33 }
34
35 bool ContactManager::numberExists(QString const& number)
36 {
37     if(!load())
38     {
39         return false;
40     }
41
42     EBookQuery* query;
43     GList *g_contacts;
44
45     // Just check the last 7 digits
46     QString clean = number.right(7);
47
48     query = e_book_query_any_field_contains(clean.toLatin1());
49
50     if (!e_book_get_contacts (book_, query, &g_contacts, NULL))
51     {
52         qDebug() << "Couldn't get query results.\n";
53         return false;
54     }
55
56     e_book_query_unref(query);
57
58     if (g_contacts == 0)
59     {
60         return false;
61     }
62
63     return true;
64
65 }
66
67 bool ContactManager::addContact(Contact const& contact)
68 {
69     if(!load())
70     {
71         return false;
72     }
73
74     EContact* newContact = e_contact_new();
75     GError* error = NULL;
76     //EContactAddress* addr = new EContactAddress;
77
78     if(!contact.name.isEmpty())
79     {
80         char* name = contact.name.toLatin1().data();
81         e_contact_set(newContact, E_CONTACT_FULL_NAME, (gpointer)name);
82     }
83
84     // Doesn't work for some reason
85     /*if(!contact.city.isEmpty() || !contact.street.isEmpty())
86         {
87                 addr->street = contact.street.toLatin1().data();
88                 addr->locality = contact.city.toLatin1().data();
89                 e_contact_set(newContact, E_CONTACT_ADDRESS_HOME, (gpointer)addr);
90         }*/
91
92     if(!contact.number.isEmpty())
93     {
94         char* number = contact.number.toLatin1().data();
95         e_contact_set(newContact, E_CONTACT_PHONE_HOME, (gpointer)number);
96     }
97
98     if(!e_book_add_contact(book_, newContact, &error))
99     {
100         qDebug() << "Couldn't add contact: %s" <<  error->message;
101         g_error_free(error);
102         return false;
103     }
104
105     return true;
106 }
107
108 bool ContactManager::load()
109 {
110     if(book_)
111     {
112         return true;
113     }
114
115     GError *error;
116     error = 0;
117     book_ = e_book_new_system_addressbook(&error);
118
119     if (!book_)
120     {
121         qDebug() << "Couldn't open addressbook: %s" << error->message;
122         g_error_free(error);
123         return false;
124     }
125
126     /* Open connection to the address book */
127     if (!e_book_open(book_, FALSE, &error))
128     {
129         qDebug() << "Couldn't open addressbook: %s" << error->message;
130         g_error_free(error);
131         return false;
132     }
133
134     return true;
135
136 }
137