summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/opml/OpmlReader.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/danoeh/antennapod/opml/OpmlReader.java')
-rw-r--r--src/de/danoeh/antennapod/opml/OpmlReader.java78
1 files changed, 78 insertions, 0 deletions
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;
+ }
+
+
+}