From 85e171ed994b8e31b3fae42754c25267fb0c2520 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Mon, 23 Jul 2012 14:10:48 +0200 Subject: [PATCH] implemented import worker --- res/values/strings.xml | 2 + .../asynctask/OpmlImportWorker.java | 103 ++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 src/de/danoeh/antennapod/asynctask/OpmlImportWorker.java diff --git a/res/values/strings.xml b/res/values/strings.xml index e5a21b2b1..9debe78fb 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -131,5 +131,7 @@ Start import OPML import ERROR! + Reading OPML file + An error has occured while reading the opml document: \ No newline at end of file diff --git a/src/de/danoeh/antennapod/asynctask/OpmlImportWorker.java b/src/de/danoeh/antennapod/asynctask/OpmlImportWorker.java new file mode 100644 index 000000000..de2db951e --- /dev/null +++ b/src/de/danoeh/antennapod/asynctask/OpmlImportWorker.java @@ -0,0 +1,103 @@ +package de.danoeh.antennapod.asynctask; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; + +import org.xmlpull.v1.XmlPullParserException; + +import de.danoeh.antennapod.AppConfig; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.opml.OpmlElement; +import de.danoeh.antennapod.opml.OpmlReader; + +import android.app.AlertDialog; +import android.app.ProgressDialog; +import android.app.AlertDialog.Builder; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.os.AsyncTask; +import android.util.Log; + +public class OpmlImportWorker extends + AsyncTask> { + private static final String TAG = "OpmlImportWorker"; + + private Context context; + private File file; // path to opml file + private Exception exception; + + private ProgressDialog progDialog; + + public OpmlImportWorker(Context context, File file) { + super(); + this.context = context; + this.file = file; + } + + @Override + protected ArrayList doInBackground(Void... params) { + if (AppConfig.DEBUG) + Log.d(TAG, "Starting background work"); + FileReader reader = null; + // Create reader + try { + reader = new FileReader(file); + if (AppConfig.DEBUG) Log.d(TAG, "Parsing " + file.toString()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + exception = e; + return null; + } + OpmlReader opmlReader = new OpmlReader(); + try { + ArrayList result = opmlReader.readDocument(reader); + reader.close(); + return result; + } catch (XmlPullParserException e) { + e.printStackTrace(); + exception = e; + return null; + } catch (IOException e) { + e.printStackTrace(); + exception = e; + return null; + } + + } + + @Override + protected void onPostExecute(ArrayList result) { + progDialog.dismiss(); + if (exception != null) { + if (AppConfig.DEBUG) + Log.d(TAG, + "An error occured while trying to parse the opml document"); + AlertDialog.Builder alert = new AlertDialog.Builder(context); + alert.setTitle(R.string.error_label); + alert.setMessage(context.getString(R.string.opml_reader_error) + + exception.getMessage()); + alert.setNeutralButton(android.R.string.ok, new OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + + }); + } + } + + @Override + protected void onPreExecute() { + progDialog = new ProgressDialog(context); + progDialog.setMessage(context.getString(R.string.reading_opml_label)); + progDialog.setIndeterminate(true); + progDialog.setCancelable(false); + progDialog.show(); + } + +}