summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/core/ocontactaccess.cpp
Unidiff
Diffstat (limited to 'libopie2/opiepim/core/ocontactaccess.cpp') (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiepim/core/ocontactaccess.cpp174
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
53OContactAccess::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}
78OContactAccess::~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
88bool OContactAccess::load()
89{
90 return ( m_backEnd->load() );
91}
92
93bool 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
116const uint OContactAccess::querySettings()
117{
118 return ( m_backEnd->querySettings() );
119}
120
121bool OContactAccess::hasQuerySettings ( int querySettings ) const
122{
123 return ( m_backEnd->hasQuerySettings ( querySettings ) );
124}
125
126bool OContactAccess::add ( const OContact& newcontact )
127{
128 m_changed = true;
129 return ( m_backEnd->add ( newcontact ) );
130}
131
132bool OContactAccess::replace ( const OContact& contact )
133{
134 m_changed = true;
135 return ( m_backEnd->replace ( contact ) );
136}
137
138bool OContactAccess::remove ( const OContact& t )
139{
140 m_changed = true;
141 return ( m_backEnd->remove ( t.uid() ) );
142}
143
144bool OContactAccess::remove ( int uid )
145{
146 m_changed = true;
147 return ( m_backEnd->remove ( uid ) );
148}
149
150bool OContactAccess::wasChangedExternally()const
151{
152 return ( m_backEnd->wasChangedExternally() );
153}
154
155
156bool OContactAccess::reload()
157{
158 return ( m_backEnd->reload() );
159}
160
161void 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}