Changed add to contacts button so that it adds street number to street field instead...
[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 = NULL;
77
78     if(!contact.name.isEmpty())
79     {
80         char* name = contact.name.toUtf8().data();
81         e_contact_set(newContact, E_CONTACT_FULL_NAME, (gpointer)name);
82     }
83
84     if(!contact.city.isEmpty() || !contact.street.isEmpty())
85     {
86         addr = g_new0 (EContactAddress, 1);
87         addr->address_format = g_strdup("");
88         addr->po = g_strdup("");
89         addr->ext = g_strdup("");
90         addr->region = g_strdup("");
91         addr->code = g_strdup(contact.zipCode.toUtf8().data());
92         addr->country = g_strdup(contact.country.toUtf8().data());
93         addr->street = g_strdup(contact.street.toUtf8().data());
94         addr->locality = g_strdup(contact.city.toUtf8().data());
95         e_contact_set(newContact, E_CONTACT_ADDRESS_OTHER, (gpointer)addr);
96     }
97
98     if(!contact.number.isEmpty())
99     {
100         char* number = contact.number.toUtf8().data();
101         e_contact_set(newContact, E_CONTACT_PHONE_OTHER, (gpointer)number);
102     }
103
104     bool ret = true;
105
106     if(!e_book_add_contact(book_, newContact, &error))
107     {
108         qDebug() << "Couldn't add contact: " <<  error->message;
109         g_error_free(error);
110         ret = false;
111     }
112
113     if(addr)
114     {
115         e_contact_address_free(addr);
116     }
117
118     return ret;
119 }
120
121 bool ContactManager::load()
122 {
123     if(book_)
124     {
125         return true;
126     }
127
128     GError *error;
129     error = 0;
130     book_ = e_book_new_system_addressbook(&error);
131
132     if (!book_)
133     {
134         qDebug() << "Couldn't open addressbook: %s" << error->message;
135         g_error_free(error);
136         return false;
137     }
138
139     /* Open connection to the address book */
140     if (!e_book_open(book_, FALSE, &error))
141     {
142         qDebug() << "Couldn't open addressbook: %s" << error->message;
143         g_error_free(error);
144         return false;
145     }
146
147     return true;
148
149 }
150