summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordaniel oeh <daniel.oeh@gmail.com>2012-07-23 13:18:42 +0200
committerdaniel oeh <daniel.oeh@gmail.com>2012-07-23 13:18:42 +0200
commit65505fad568e698371c9d8097e29cfeddbd30c72 (patch)
tree2244438d7d3b40b3c6ab5060582395754150de6b
parent26e8b191cb3067da4bbb831b7373971d6c21139c (diff)
downloadAntennaPod-65505fad568e698371c9d8097e29cfeddbd30c72.zip
Implemented opml reader
-rw-r--r--src/de/danoeh/antennapod/opml/OpmlElement.java46
-rw-r--r--src/de/danoeh/antennapod/opml/OpmlReader.java78
2 files changed, 124 insertions, 0 deletions
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<OpmlElement> elementList;
+
+ /** Reads an Opml document and returns a list of all OPML elements it can find
+ * @throws IOException
+ * @throws XmlPullParserException*/
+ public ArrayList<OpmlElement> readDocument(Reader reader) throws XmlPullParserException, IOException {
+ elementList = new ArrayList<OpmlElement>();
+ 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;
+ }
+
+
+}