--- /dev/null
+/*
+ * Copyright (c) 2010 Mani Chandrasekar <maninc@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <QtXml>
+
+#include "googledocumentlist.h"
+#include "googledocument.h"
+#include "googlecontenthandler.h"
+
+GoogleContentHandler::GoogleContentHandler()
+ : m_docList(0),
+ m_docEntry(0)
+{
+ m_docList = new GoogleDocumentList();
+}
+
+bool GoogleContentHandler::characters ( const QString & ch )
+{
+ if (!insideEntry) {
+ if (QString::compare(m_nodeStack.top(), "title", Qt::CaseInsensitive) == 0) {
+ if (m_nodeStack.count() == 2)
+ m_docList->setTitle(ch);
+ }
+ else if (QString::compare(m_nodeStack.top(), "name", Qt::CaseInsensitive) == 0) {
+ if (m_nodeStack.count() == 3)
+ m_docList->setAuthor(ch);
+ }
+ else if (QString::compare(m_nodeStack.top(), "email", Qt::CaseInsensitive) == 0) {
+ if (m_nodeStack.count() == 3)
+ m_docList->setEmail(ch);
+ }
+ }
+ else
+ {
+ if (m_docEntry == 0)
+ return true;
+
+ if (QString::compare(m_nodeStack.top(), "title", Qt::CaseInsensitive) == 0) {
+ m_docEntry->setTitle(ch);
+ }
+ else if (QString::compare(m_nodeStack.top(), "name", Qt::CaseInsensitive) == 0) {
+ m_docEntry->setAuthor(ch);
+ }
+ else if (QString::compare(m_nodeStack.top(), "resourceId", Qt::CaseInsensitive) == 0) {
+ m_docEntry->setId(ch);
+ }
+ }
+ return true;
+}
+
+bool GoogleContentHandler::endDocument ()
+{
+ //qDebug() << "GoogleContentHandler::endDocument()";
+ return true;
+}
+
+bool GoogleContentHandler::endElement ( const QString & namespaceURI, const QString & localName, const QString & qName )
+{
+ //printName(localName);
+ QString element = m_nodeStack.pop();
+ if (QString::compare(element, "entry") == 0) {
+ insideEntry = false;
+ m_docList->append(m_docEntry);
+ m_docEntry = 0;
+ }
+ return true;
+}
+
+bool GoogleContentHandler::endPrefixMapping ( const QString & prefix )
+{
+ return true;
+}
+
+QString GoogleContentHandler::errorString () const
+{
+ return QString();
+}
+
+bool GoogleContentHandler::ignorableWhitespace ( const QString & ch )
+{
+ return true;
+}
+
+bool GoogleContentHandler::processingInstruction ( const QString & target, const QString & data )
+{
+ return true;
+}
+
+void GoogleContentHandler::setDocumentLocator ( QXmlLocator * locator )
+{
+}
+
+bool GoogleContentHandler::skippedEntity ( const QString & name )
+{
+ return true;
+}
+
+bool GoogleContentHandler::startDocument ()
+{
+ return true;
+}
+
+bool GoogleContentHandler::startElement ( const QString & namespaceURI, const QString & localName,
+ const QString & qName, const QXmlAttributes & atts )
+{
+ m_nodeStack.push(localName);
+
+ if ((m_nodeStack.count() == 1) && (m_docList != 0)) { //Feed element
+ m_docList->setEtag(atts.value("gd:etag"));
+ }
+
+ if (QString::compare(localName, "entry", Qt::CaseInsensitive) == 0 ) {
+ m_docEntry = new GoogleDocument();
+ m_docEntry->setEtag(atts.value("gd:etag"));
+ insideEntry = true;
+ }
+ if ( insideEntry && (QString::compare(localName, "content", Qt::CaseInsensitive) == 0 ) && (m_docEntry != 0)) {
+ m_docEntry->setDocumentUrl(atts.value("src"));
+ }
+
+ //printName(localName);
+
+ return true;
+}
+
+bool GoogleContentHandler::startPrefixMapping ( const QString & prefix, const QString & uri )
+{
+ //qDebug() << "GoogleContentHandler::startPrefixMapping() " << prefix << uri;
+ return true;
+}
+
+void GoogleContentHandler::printName(const QString & name)
+{
+ int count = m_nodeStack.count();
+ QString indent;
+ for (int i=0; i < count; i++)
+ indent.append("\t");
+ indent.append(name);
+
+ if (insideEntry);
+// qDebug() << indent;
+}