Diffstat (limited to 'libopie2/opiepim/backend/ocontactaccessbackend_xml.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | libopie2/opiepim/backend/ocontactaccessbackend_xml.cpp | 171 |
1 files changed, 88 insertions, 83 deletions
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_xml.cpp b/libopie2/opiepim/backend/ocontactaccessbackend_xml.cpp index c5a7820..661cd51 100644 --- a/libopie2/opiepim/backend/ocontactaccessbackend_xml.cpp +++ b/libopie2/opiepim/backend/ocontactaccessbackend_xml.cpp @@ -18,4 +18,9 @@ * History: * $Log$ + * Revision 1.5 2003/04/13 18:07:10 zecke + * More API doc + * QString -> const QString& + * QString = 0l -> QString::null + * * Revision 1.4 2003/03/21 14:32:54 mickeyl * g++ compliance fix: default arguments belong into the declaration, but not the definition @@ -94,5 +99,5 @@ #include <qarray.h> #include <qmap.h> -#include <qdatetime.h> +#include <qdatetime.h> #include <qpe/global.h> @@ -108,5 +113,5 @@ using namespace Opie; -OContactAccessBackend_XML::OContactAccessBackend_XML ( QString appname, QString filename ): +OContactAccessBackend_XML::OContactAccessBackend_XML ( const QString& appname, const QString& filename ): m_changed( false ) { @@ -117,9 +122,9 @@ OContactAccessBackend_XML::OContactAccessBackend_XML ( QString appname, QString m_appName = appname; - + /* Set journalfile name ... */ m_journalName = getenv("HOME"); m_journalName +="/.abjournal" + appname; - + /* Expecting to access the default filename if nothing else is set */ if ( filename.isEmpty() ){ @@ -127,20 +132,20 @@ OContactAccessBackend_XML::OContactAccessBackend_XML ( QString appname, QString } else m_fileName = filename; - + /* Load Database now */ load (); } -bool OContactAccessBackend_XML::save() +bool OContactAccessBackend_XML::save() { - + if ( !m_changed ) return true; - + QString strNewFile = m_fileName + ".new"; QFile f( strNewFile ); if ( !f.open( IO_WriteOnly|IO_Raw ) ) return false; - + int total_written; int idx_offset = 0; @@ -175,5 +180,5 @@ bool OContactAccessBackend_XML::save() } out += " </Contacts>\n</AddressBook>\n"; - + // Write Footer cstr = out.utf8(); @@ -185,5 +190,5 @@ bool OContactAccessBackend_XML::save() } f.close(); - + // move the file over, I'm just going to use the system call // because, I don't feel like using QDir. @@ -194,17 +199,17 @@ bool OContactAccessBackend_XML::save() QFile::remove( strNewFile ); } - + /* The journalfile should be removed now... */ removeJournal(); - + m_changed = false; return true; } -bool OContactAccessBackend_XML::load () +bool OContactAccessBackend_XML::load () { m_contactList.clear(); m_uidToContact.clear(); - + /* Load XML-File and journal if it exists */ if ( !load ( m_fileName, false ) ) @@ -217,9 +222,9 @@ bool OContactAccessBackend_XML::load () */ load (m_journalName, true); - + return true; } -void OContactAccessBackend_XML::clear () +void OContactAccessBackend_XML::clear () { m_contactList.clear(); @@ -232,20 +237,20 @@ bool OContactAccessBackend_XML::wasChangedExternally() { QFileInfo fi( m_fileName ); - + QDateTime lastmod = fi.lastModified (); - + return (lastmod != m_readtime); } -QArray<int> OContactAccessBackend_XML::allRecords() const +QArray<int> OContactAccessBackend_XML::allRecords() const { QArray<int> uid_list( m_contactList.count() ); - - uint counter = 0; + + uint counter = 0; QListIterator<OContact> it( m_contactList ); for( ; it.current(); ++it ){ uid_list[counter++] = (*it)->uid(); } - + return ( uid_list ); } @@ -254,5 +259,5 @@ OContact OContactAccessBackend_XML::find ( int uid ) const { OContact foundContact; //Create empty contact - + OContact* found = m_uidToContact.find( QString().setNum( uid ) ); @@ -260,16 +265,16 @@ OContact OContactAccessBackend_XML::find ( int uid ) const foundContact = *found; } - + return ( foundContact ); } -QArray<int> OContactAccessBackend_XML::queryByExample ( const OContact &query, int settings, +QArray<int> OContactAccessBackend_XML::queryByExample ( const OContact &query, int settings, const QDateTime& d ) { - + QArray<int> m_currentQuery( m_contactList.count() ); QListIterator<OContact> it( m_contactList ); uint arraycounter = 0; - + for( ; it.current(); ++it ){ /* Search all fields and compare them with query object. Store them into list @@ -291,5 +296,5 @@ QArray<int> OContactAccessBackend_XML::queryByExample ( const OContact &query, i checkDate = new QDate( (*it)->anniversary() ); } - + if ( queryDate->isValid() ){ if( checkDate->isValid() ){ @@ -297,18 +302,18 @@ QArray<int> OContactAccessBackend_XML::queryByExample ( const OContact &query, i if ( queryDate->year() != checkDate->year() ) allcorrect = false; - } + } if ( settings & OContactAccess::DateMonth ){ if ( queryDate->month() != checkDate->month() ) allcorrect = false; - } + } if ( settings & OContactAccess::DateDay ){ if ( queryDate->day() != checkDate->day() ) allcorrect = false; - } + } if ( settings & OContactAccess::DateDiff ) { QDate current; // If we get an additional date, we // will take this date instead of - // the current one.. + // the current one.. if ( !d.date().isValid() ) current = QDate::currentDate(); @@ -318,10 +323,10 @@ QArray<int> OContactAccessBackend_XML::queryByExample ( const OContact &query, i // We have to equalize the year, otherwise // the search will fail.. - checkDate->setYMD( current.year(), - checkDate->month(), + checkDate->setYMD( current.year(), + checkDate->month(), checkDate->day() ); if ( *checkDate < current ) - checkDate->setYMD( current.year()+1, - checkDate->month(), + checkDate->setYMD( current.year()+1, + checkDate->month(), checkDate->day() ); @@ -329,10 +334,10 @@ QArray<int> OContactAccessBackend_XML::queryByExample ( const OContact &query, i // the current/given date and the maximum date // ( maximum time range ) ! - qWarning("Checking if %s is between %s and %s ! ", + qWarning("Checking if %s is between %s and %s ! ", checkDate->toString().latin1(), - current.toString().latin1(), + current.toString().latin1(), queryDate->toString().latin1() ); if ( current.daysTo( *queryDate ) >= 0 ){ - if ( !( ( *checkDate >= current ) && + if ( !( ( *checkDate >= current ) && ( *checkDate <= *queryDate ) ) ){ allcorrect = false; @@ -346,5 +351,5 @@ QArray<int> OContactAccessBackend_XML::queryByExample ( const OContact &query, i } } - + delete queryDate; queryDate = 0l; @@ -360,7 +365,7 @@ QArray<int> OContactAccessBackend_XML::queryByExample ( const OContact &query, i | OContactAccess::DateMonth | OContactAccess::DateDay - | OContactAccess::MatchOne + | OContactAccess::MatchOne ) ){ - + case OContactAccess::RegExp:{ QRegExp expr ( query.field(i), @@ -398,8 +403,8 @@ QArray<int> OContactAccessBackend_XML::queryByExample ( const OContact &query, i } } - + // Shrink to fit.. m_currentQuery.resize(arraycounter); - + return m_currentQuery; } @@ -410,14 +415,14 @@ QArray<int> OContactAccessBackend_XML::matchRegexp( const QRegExp &r ) const QListIterator<OContact> it( m_contactList ); uint arraycounter = 0; - + for( ; it.current(); ++it ){ if ( (*it)->match( r ) ){ m_currentQuery[arraycounter++] = (*it)->uid(); } - + } // Shrink to fit.. m_currentQuery.resize(arraycounter); - + return m_currentQuery; } @@ -428,5 +433,5 @@ const uint OContactAccessBackend_XML::querySettings() | OContactAccess::IgnoreCase | OContactAccess::RegExp - | OContactAccess::ExactMatch + | OContactAccess::ExactMatch | OContactAccess::DateDiff | OContactAccess::DateYear @@ -438,12 +443,12 @@ const uint OContactAccessBackend_XML::querySettings() bool OContactAccessBackend_XML::hasQuerySettings (uint querySettings) const { - /* OContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay + /* OContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay * may be added with any of the other settings. IgnoreCase should never used alone. * Wildcards, RegExp, ExactMatch should never used at the same time... */ - - if ( querySettings == OContactAccess::IgnoreCase ) + + if ( querySettings == OContactAccess::IgnoreCase ) return false; - + switch ( querySettings & ~( OContactAccess::IgnoreCase | OContactAccess::DateDiff @@ -451,5 +456,5 @@ bool OContactAccessBackend_XML::hasQuerySettings (uint querySettings) const | OContactAccess::DateMonth | OContactAccess::DateDay - ) + ) ){ case OContactAccess::RegExp: @@ -464,12 +469,12 @@ bool OContactAccessBackend_XML::hasQuerySettings (uint querySettings) const } -// Currently only asc implemented.. -QArray<int> OContactAccessBackend_XML::sorted( bool asc, int , int , int ) +// Currently only asc implemented.. +QArray<int> OContactAccessBackend_XML::sorted( bool asc, int , int , int ) { QMap<QString, int> nameToUid; QStringList names; QArray<int> m_currentQuery( m_contactList.count() ); - - // First fill map and StringList with all Names + + // First fill map and StringList with all Names // Afterwards sort namelist and use map to fill array to return.. QListIterator<OContact> it( m_contactList ); @@ -479,5 +484,5 @@ QArray<int> OContactAccessBackend_XML::sorted( bool asc, int , int , int ) } names.sort(); - + int i = 0; if ( asc ){ @@ -488,7 +493,7 @@ QArray<int> OContactAccessBackend_XML::sorted( bool asc, int , int , int ) m_currentQuery[i++] = nameToUid[ (*it) ]; } - + return m_currentQuery; - + } @@ -498,7 +503,7 @@ bool OContactAccessBackend_XML::add ( const OContact &newcontact ) updateJournal (newcontact, ACTION_ADD); addContact_p( newcontact ); - + m_changed = true; - + return true; } @@ -507,5 +512,5 @@ bool OContactAccessBackend_XML::replace ( const OContact &contact ) { m_changed = true; - + OContact* found = m_uidToContact.find ( QString().setNum( contact.uid() ) ); @@ -529,5 +534,5 @@ bool OContactAccessBackend_XML::remove ( int uid ) { m_changed = true; - + OContact* found = m_uidToContact.find ( QString().setNum( uid ) ); @@ -556,7 +561,7 @@ void OContactAccessBackend_XML::addContact_p( const OContact &newcontact ) /* This function loads the xml-database and the journalfile */ -bool OContactAccessBackend_XML::load( const QString filename, bool isJournal ) +bool OContactAccessBackend_XML::load( const QString filename, bool isJournal ) { - + /* We use the time of the last read to check if the file was * changed externally. @@ -566,8 +571,8 @@ bool OContactAccessBackend_XML::load( const QString filename, bool isJournal ) m_readtime = fi.lastModified (); } - + const int JOURNALACTION = Qtopia::Notes + 1; const int JOURNALROW = JOURNALACTION + 1; - + bool foundAction = false; journal_action action = ACTION_ADD; @@ -577,5 +582,5 @@ bool OContactAccessBackend_XML::load( const QString filename, bool isJournal ) QMap<QString, QString>::Iterator customIt; QAsciiDict<int> dict( 47 ); - + dict.setAutoDelete( TRUE ); dict.insert( "Uid", new int(Qtopia::AddressUid) ); @@ -624,7 +629,7 @@ bool OContactAccessBackend_XML::load( const QString filename, bool isJournal ) dict.insert( "action", new int(JOURNALACTION) ); dict.insert( "actionrow", new int(JOURNALROW) ); - + //qWarning( "OContactDefaultBackEnd::loading %s", filename.latin1() ); - + XMLElement *root = XMLElement::load( filename ); if(root != 0l ){ // start parsing @@ -635,5 +640,5 @@ bool OContactAccessBackend_XML::load( const QString filename, bool isJournal ) //qWarning("OContactAccess::load tagName(): %s", root->tagName().latin1() ); element = element->firstChild(); - + /* Search Tag "Contacts" which is the parent of all Contacts */ while( element && !isJournal ){ @@ -662,5 +667,5 @@ bool OContactAccessBackend_XML::load( const QString filename, bool isJournal ) QString dummy; foundAction = false; - + XMLElement::AttributeMap aMap = element->attributes(); XMLElement::AttributeMap::Iterator it; @@ -669,5 +674,5 @@ bool OContactAccessBackend_XML::load( const QString filename, bool isJournal ) for( it = aMap.begin(); it != aMap.end(); ++it ){ // qWarning ("Read Attribute: %s=%s", it.key().latin1(),it.data().latin1()); - + int *find = dict[ it.key() ]; /* Unknown attributes will be stored as "Custom" elements */ @@ -678,5 +683,5 @@ bool OContactAccessBackend_XML::load( const QString filename, bool isJournal ) continue; } - + /* Check if special conversion is needed and add attribute * into Contact class @@ -706,9 +711,9 @@ bool OContactAccessBackend_XML::load( const QString filename, bool isJournal ) /* now generate the Contact contact */ OContact contact( contactMap ); - + for (customIt = customMap.begin(); customIt != customMap.end(); ++customIt ) { contact.setCustomField( customIt.key(), customIt.data() ); } - + if (foundAction){ foundAction = false; @@ -735,5 +740,5 @@ bool OContactAccessBackend_XML::load( const QString filename, bool isJournal ) addContact_p (contact); } - + /* Move to next element */ element = element->nextChild(); @@ -749,5 +754,5 @@ bool OContactAccessBackend_XML::load( const QString filename, bool isJournal ) void OContactAccessBackend_XML::updateJournal( const OContact& cnt, - journal_action action ) + journal_action action ) { QFile f( m_journalName ); @@ -755,8 +760,8 @@ void OContactAccessBackend_XML::updateJournal( const OContact& cnt, if ( !f.open(IO_WriteOnly|IO_Append) ) return; - + QString buf; QCString str; - + // if the file was created, we have to set the Tag "<CONTACTS>" to // get a XML-File which is readable by our parser. @@ -767,5 +772,5 @@ void OContactAccessBackend_XML::updateJournal( const OContact& cnt, f.writeBlock( cstr.data(), cstr.length() ); } - + buf = "<Contact "; cnt.save( buf ); |