Diffstat (limited to 'libopie2/opiepim/core/ocontactaccess.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | libopie2/opiepim/core/ocontactaccess.cpp | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/libopie2/opiepim/core/ocontactaccess.cpp b/libopie2/opiepim/core/ocontactaccess.cpp new file mode 100644 index 0000000..2d808f7 --- a/dev/null +++ b/libopie2/opiepim/core/ocontactaccess.cpp | |||
@@ -0,0 +1,174 @@ | |||
1 | /* | ||
2 | * Class to manage the Contacts. | ||
3 | * | ||
4 | * Copyright (c) 2002 by Stefan Eilers (Eilers.Stefan@epost.de) | ||
5 | * | ||
6 | * ===================================================================== | ||
7 | *This program is free software; you can redistribute it and/or | ||
8 | *modify it under the terms of the GNU Library General Public | ||
9 | * License as published by the Free Software Foundation; either | ||
10 | * version 2 of the License, or (at your option) any later version. | ||
11 | * ===================================================================== | ||
12 | * Info: This class could just work with a change in the header-file | ||
13 | * of the Contact class ! Therefore our libopie only compiles | ||
14 | * with our version of libqpe | ||
15 | * ===================================================================== | ||
16 | * ToDo: XML-Backend: Automatic reload if something was changed... | ||
17 | * | ||
18 | * | ||
19 | * ===================================================================== | ||
20 | * Version: $Id$ | ||
21 | * ===================================================================== | ||
22 | * History: | ||
23 | * $Log$ | ||
24 | * Revision 1.1 2002/09/27 17:11:44 eilers | ||
25 | * Added API for accessing the Contact-Database ! It is compiling, but | ||
26 | * please do not expect that anything is working ! | ||
27 | * I will debug that stuff in the next time .. | ||
28 | * Please read README_COMPILE for compiling ! | ||
29 | * | ||
30 | * | ||
31 | */ | ||
32 | |||
33 | #include "ocontactaccess.h" | ||
34 | |||
35 | #include <qasciidict.h> | ||
36 | #include <qdatetime.h> | ||
37 | #include <qfile.h> | ||
38 | #include <qregexp.h> | ||
39 | #include <qlist.h> | ||
40 | #include <qcopchannel_qws.h> | ||
41 | |||
42 | //#include <qpe/qcopenvelope_qws.h> | ||
43 | #include <qpe/global.h> | ||
44 | |||
45 | #include <errno.h> | ||
46 | #include <fcntl.h> | ||
47 | #include <unistd.h> | ||
48 | #include <stdlib.h> | ||
49 | |||
50 | #include "ocontactaccessbackend_xml.h" | ||
51 | |||
52 | |||
53 | OContactAccess::OContactAccess ( const QString appname, const QString filename, | ||
54 | OContactAccessBackend* end, bool autosync ): | ||
55 | OPimAccessTemplate<OContact>( end ), | ||
56 | m_changed ( false ) | ||
57 | { | ||
58 | /* take care of the backend. If there is no one defined, we | ||
59 | * will use the XML-Backend as default (until we have a cute SQL-Backend..). | ||
60 | */ | ||
61 | if( end == 0 ) { | ||
62 | end = new OContactAccessBackend_XML( appname, filename ); | ||
63 | } | ||
64 | m_backEnd = end; | ||
65 | |||
66 | /* Connect signal of external db change to function */ | ||
67 | QCopChannel *dbchannel = new QCopChannel( "QPE/PIM", this ); | ||
68 | connect( dbchannel, SIGNAL(received(const QCString &, const QByteArray &)), | ||
69 | this, SLOT(copMessage( const QCString &, const QByteArray &)) ); | ||
70 | if ( autosync ){ | ||
71 | QCopChannel *syncchannel = new QCopChannel( "QPE/Sync", this ); | ||
72 | connect( syncchannel, SIGNAL(received(const QCString &, const QByteArray &)), | ||
73 | this, SLOT(copMessage( const QCString &, const QByteArray &)) ); | ||
74 | } | ||
75 | |||
76 | |||
77 | } | ||
78 | OContactAccess::~OContactAccess () | ||
79 | { | ||
80 | /* The user may forget to save the changed database, therefore try to | ||
81 | * do it for him.. | ||
82 | */ | ||
83 | if ( m_changed ) | ||
84 | save(); | ||
85 | delete m_backEnd; | ||
86 | } | ||
87 | |||
88 | bool OContactAccess::load() | ||
89 | { | ||
90 | return ( m_backEnd->load() ); | ||
91 | } | ||
92 | |||
93 | bool OContactAccess::save () | ||
94 | { | ||
95 | /* If the database was changed externally, we could not save the | ||
96 | * Data. This will remove added items which is unacceptable ! | ||
97 | * Therefore: Reload database and merge the data... | ||
98 | */ | ||
99 | if ( m_backEnd->wasChangedExternally() ) | ||
100 | reload(); | ||
101 | |||
102 | if ( m_changed ){ | ||
103 | bool status = m_backEnd->save(); | ||
104 | if ( !status ) return false; | ||
105 | |||
106 | m_changed = false; | ||
107 | /* Now tell everyone that new data is available. | ||
108 | */ | ||
109 | QCopEnvelope e( "QPE/PIM", "addressbookUpdated()" ); | ||
110 | |||
111 | } | ||
112 | |||
113 | return true; | ||
114 | } | ||
115 | |||
116 | const uint OContactAccess::querySettings() | ||
117 | { | ||
118 | return ( m_backEnd->querySettings() ); | ||
119 | } | ||
120 | |||
121 | bool OContactAccess::hasQuerySettings ( int querySettings ) const | ||
122 | { | ||
123 | return ( m_backEnd->hasQuerySettings ( querySettings ) ); | ||
124 | } | ||
125 | |||
126 | bool OContactAccess::add ( const OContact& newcontact ) | ||
127 | { | ||
128 | m_changed = true; | ||
129 | return ( m_backEnd->add ( newcontact ) ); | ||
130 | } | ||
131 | |||
132 | bool OContactAccess::replace ( const OContact& contact ) | ||
133 | { | ||
134 | m_changed = true; | ||
135 | return ( m_backEnd->replace ( contact ) ); | ||
136 | } | ||
137 | |||
138 | bool OContactAccess::remove ( const OContact& t ) | ||
139 | { | ||
140 | m_changed = true; | ||
141 | return ( m_backEnd->remove ( t.uid() ) ); | ||
142 | } | ||
143 | |||
144 | bool OContactAccess::remove ( int uid ) | ||
145 | { | ||
146 | m_changed = true; | ||
147 | return ( m_backEnd->remove ( uid ) ); | ||
148 | } | ||
149 | |||
150 | bool OContactAccess::wasChangedExternally()const | ||
151 | { | ||
152 | return ( m_backEnd->wasChangedExternally() ); | ||
153 | } | ||
154 | |||
155 | |||
156 | bool OContactAccess::reload() | ||
157 | { | ||
158 | return ( m_backEnd->reload() ); | ||
159 | } | ||
160 | |||
161 | void OContactAccess::copMessage( const QCString &msg, const QByteArray & ) | ||
162 | { | ||
163 | if ( msg == "addressbookUpdated()" ){ | ||
164 | qWarning ("OContactAccess: Received addressbokUpdated()"); | ||
165 | emit signalChanged ( this ); | ||
166 | } else if ( msg == "flush()" ) { | ||
167 | qWarning ("OContactAccess: Received flush()"); | ||
168 | save (); | ||
169 | } else if ( msg == "reload()" ) { | ||
170 | qWarning ("OContactAccess: Received reload()"); | ||
171 | reload (); | ||
172 | emit signalChanged ( this ); | ||
173 | } | ||
174 | } | ||