From 65505fad568e698371c9d8097e29cfeddbd30c72 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Mon, 23 Jul 2012 13:18:42 +0200 Subject: Implemented opml reader --- src/de/danoeh/antennapod/opml/OpmlElement.java | 46 +++++++++++++++ src/de/danoeh/antennapod/opml/OpmlReader.java | 78 ++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 src/de/danoeh/antennapod/opml/OpmlElement.java create mode 100644 src/de/danoeh/antennapod/opml/OpmlReader.java diff --git a/src/de/danoeh/antennapod/opml/OpmlElement.java b/src/de/danoeh/antennapod/opml/OpmlElement.java new file mode 100644 index 000000000..4cb563c04 --- /dev/null +++ b/src/de/danoeh/antennapod/opml/OpmlElement.java @@ -0,0 +1,46 @@ +package de.danoeh.antennapod.opml; + +/** Represents a single feed in an OPML file. */ +public class OpmlElement { + private String text; + private String xmlUrl; + private String htmlUrl; + private String type; + + public OpmlElement() { + + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getXmlUrl() { + return xmlUrl; + } + + public void setXmlUrl(String xmlUrl) { + this.xmlUrl = xmlUrl; + } + + public String getHtmlUrl() { + return htmlUrl; + } + + public void setHtmlUrl(String htmlUrl) { + this.htmlUrl = htmlUrl; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + +} diff --git a/src/de/danoeh/antennapod/opml/OpmlReader.java b/src/de/danoeh/antennapod/opml/OpmlReader.java new file mode 100644 index 000000000..82ba38dea --- /dev/null +++ b/src/de/danoeh/antennapod/opml/OpmlReader.java @@ -0,0 +1,78 @@ +package de.danoeh.antennapod.opml; + +import java.io.IOException; +import java.io.Reader; +import java.util.ArrayList; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlPullParserFactory; + +import de.danoeh.antennapod.AppConfig; + +import android.content.Context; +import android.util.Log; + +/** Reads OPML documents. */ +public class OpmlReader { + private static final String TAG = "OpmlReader"; + + // TAGS + private static final String OPML = "opml"; + private static final String BODY = "body"; + private static final String OUTLINE = "outline"; + private static final String TEXT = "text"; + private static final String XMLURL = "xmlUrl"; + private static final String HTMLURL = "htmlUrl"; + private static final String TYPE = "type"; + + // ATTRIBUTES + private boolean isInOpml = false; + private boolean isInBody = false; + private ArrayList elementList; + + /** Reads an Opml document and returns a list of all OPML elements it can find + * @throws IOException + * @throws XmlPullParserException*/ + public ArrayList readDocument(Reader reader) throws XmlPullParserException, IOException { + elementList = new ArrayList(); + XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); + factory.setNamespaceAware(true); + XmlPullParser xpp = factory.newPullParser(); + xpp.setInput(reader); + int eventType = xpp.getEventType(); + + while (eventType != XmlPullParser.END_DOCUMENT) { + switch (eventType) { + case XmlPullParser.START_DOCUMENT: + if (AppConfig.DEBUG) Log.d(TAG, "Reached beginning of document"); + break; + case XmlPullParser.START_TAG: + if (xpp.getName().equals(OPML)) { + isInOpml = true; + if (AppConfig.DEBUG) Log.d(TAG, "Reached beginning of OPML tree."); + } else if (isInOpml && xpp.getName().equals(BODY)) { + isInBody = true; + if (AppConfig.DEBUG) Log.d(TAG, "Reached beginning of body tree."); + + } else if (isInBody && xpp.getName().equals(OUTLINE)) { + if (AppConfig.DEBUG) Log.d(TAG, "Found new Opml element"); + OpmlElement element = new OpmlElement(); + element.setText(xpp.getAttributeValue(null, TEXT)); + element.setXmlUrl(xpp.getAttributeValue(null, XMLURL)); + element.setHtmlUrl(xpp.getAttributeValue(null, HTMLURL)); + element.setType(xpp.getAttributeValue(null, TYPE)); + elementList.add(element); + } + break; + } + eventType = xpp.next(); + } + + if (AppConfig.DEBUG) Log.d(TAG, "Parsing finished."); + + return elementList; + } + + +} -- cgit v1.2.3