summaryrefslogtreecommitdiffstats
path: root/kpilot/lib/idmapperxml.cc
diff options
context:
space:
mode:
Diffstat (limited to 'kpilot/lib/idmapperxml.cc')
-rw-r--r--kpilot/lib/idmapperxml.cc213
1 files changed, 213 insertions, 0 deletions
diff --git a/kpilot/lib/idmapperxml.cc b/kpilot/lib/idmapperxml.cc
new file mode 100644
index 000000000..a2a78a0c9
--- /dev/null
+++ b/kpilot/lib/idmapperxml.cc
@@ -0,0 +1,213 @@
+/*
+** Copyright (C) 2006 Bertjan Broeksema <bbroeksema@bluebottle.com>
+*/
+
+/*
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU Lesser General Public License as published by
+** the Free Software Foundation; either version 2.1 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU Lesser General Public License for more details.
+**
+** You should have received a copy of the GNU Lesser General Public License
+** along with this program in a file called COPYING; if not, write to
+** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+** MA 02110-1301, USA.
+*/
+
+/*
+** Bug reports and questions can be sent to kde-pim@kde.org
+*/
+
+#include "idmapperxml.h"
+
+#include "options.h"
+
+IDMapperXml::IDMapperXml( const QString &file ) : fFile(file)
+ , fCurrentMapping( 0l )
+{
+}
+
+IDMapperXml::~IDMapperXml()
+{
+ FUNCTIONSETUP;
+}
+
+bool IDMapperXml::open()
+{
+ FUNCTIONSETUP;
+
+ root = doc.createElement( CSL1("mappings") );
+ QDomNode node = doc.createProcessingInstruction(CSL1("xml")
+ ,CSL1("version=\"1.0\" encoding=\"UTF-8\""));
+
+ doc.appendChild( node );
+ doc.appendChild( root );
+
+ if( !fFile.exists() )
+ {
+ DEBUGKPILOT << fname << ": Creating " << fFile.name() << endl;
+
+ if( fFile.open( IO_ReadWrite ) )
+ {
+ QTextStream out( &fFile );
+ doc.save( out, 4 );
+ fFile.close();
+ return true;
+ }
+ else
+ {
+ DEBUGKPILOT << fname << ": Could not create " << fFile.name() << endl;
+ return false;
+ }
+ }
+ else
+ {
+ DEBUGKPILOT << fname << ": Parsing file " << fFile.name() << endl;
+ QXmlSimpleReader reader;
+ reader.setContentHandler( this );
+
+ // Make sure that the file is closed after parsing.
+ bool result = reader.parse( fFile );
+ fFile.close();
+
+ return result;
+ }
+}
+
+void IDMapperXml::save()
+{
+ FUNCTIONSETUP;
+
+ DEBUGKPILOT << fname << ": Saving " << fMappings.count()
+ << " mappings..." << endl;
+ DEBUGKPILOT << fname << ": ";
+
+ QValueList<IDMapping>::const_iterator it;
+ for ( it = fMappings.begin(); it != fMappings.end(); ++it )
+ {
+ DEBUGKPILOT << ".";
+
+ IDMapping mapping = (*it);
+
+ DEBUGKPILOT << fname << ": " << mapping.conduit();
+
+ QDomElement mappingElement = doc.createElement( CSL1("mapping") );
+ mappingElement.setAttribute( CSL1("conduit"), mapping.conduit() );
+
+ if( !mapping.uid().isNull() )
+ {
+ QDomElement uidElement = doc.createElement( CSL1("uid") );
+ uidElement.setAttribute( CSL1("value"), mapping.uid() );
+ mappingElement.appendChild( uidElement );
+ }
+
+ if( mapping.pid() != 0 )
+ {
+ QDomElement uidElement = doc.createElement( CSL1("pid") );
+ uidElement.setAttribute( CSL1("value"), mapping.pid() );
+ mappingElement.appendChild( uidElement );
+ }
+
+ if( !mapping.lastSyncTime().isNull() )
+ {
+ QDomElement uidElement = doc.createElement( CSL1("pid") );
+ uidElement.setAttribute( CSL1("value"), QString::number( mapping.pid() ) );
+ mappingElement.appendChild( uidElement );
+ }
+
+ root.appendChild( mappingElement );
+ }
+
+ if( fFile.open( IO_ReadWrite ) )
+ {
+ QTextStream out( &fFile );
+ doc.save( out, 4 );
+ fFile.close();
+
+ DEBUGKPILOT << endl << fname << ": finished saving." << endl;
+ }
+}
+
+void IDMapperXml::addMapping( const IDMapping &mapping )
+{
+ FUNCTIONSETUP;
+
+ DEBUGKPILOT << fname << ": " << mapping.conduit() << endl;
+
+ fMappings.append( mapping );
+
+ DEBUGKPILOT << fname << ": " << fMappings.first().conduit() << endl;
+}
+
+QValueList<IDMapping>& IDMapperXml::mappings()
+{
+ return fMappings;
+}
+
+bool IDMapperXml::startElement( const QString &namespaceURI
+ , const QString &localName, const QString &qName
+ , const QXmlAttributes &attribs )
+{
+ FUNCTIONSETUP;
+ Q_UNUSED(namespaceURI);
+ Q_UNUSED(localName);
+
+ if( qName == CSL1("mapping") )
+ {
+ QString conduit( attribs.value( CSL1("conduit") ) );
+
+ fCurrentMapping = new IDMapping( conduit );
+ }
+ else if( qName == CSL1("uid") )
+ {
+ fCurrentMapping->setUid( attribs.value( CSL1("value") ) );
+ }
+ else if( qName == CSL1("pid") )
+ {
+ fCurrentMapping->setPid( attribs.value( CSL1("value") ).toULong() );
+ }
+ else if( qName == CSL1("lastsync") )
+ {
+ // NOTE: this isn't very robuust!
+ // Parses only dates in the form: dd-mm-yyyy hh:mm:ss
+ QString date = attribs.value( CSL1("value") );
+ int day = date.left(2).toInt();
+ int month = date.mid(3,2).toInt();
+ int year = date.mid(6, 4).toInt();
+
+ int hour = date.mid(11,2).toInt();
+ int minute = date.mid(14,2).toInt();
+ int second = date.mid(17,2).toInt();
+
+ QDate tmpDate = QDate( year, month, day );
+ QTime tmpTime = QTime( hour, minute, second );
+
+ fCurrentMapping->setLastSyncTime( QDateTime( tmpDate, tmpTime ) );
+ }
+
+ return true;
+}
+
+bool IDMapperXml::endElement( const QString &namespaceURI
+ , const QString &localName, const QString &qName )
+{
+ FUNCTIONSETUP;
+
+ Q_UNUSED(namespaceURI);
+ Q_UNUSED(localName);
+ Q_UNUSED(qName);
+
+ if( qName == CSL1("mapping") )
+ {
+ addMapping( *fCurrentMapping );
+ delete fCurrentMapping;
+ fCurrentMapping = 0l;
+ }
+
+ return true;
+}