package net.x4a42.volksempfaenger.feedparser; import java.io.IOException; import java.io.Reader; import java.util.HashMap; import net.x4a42.volksempfaenger.feedparser.Enums.GpodderKey; import android.util.JsonReader; import android.util.JsonToken; public class GpodderJsonReader { public final static String KEY_TITLE = "title"; public final static String KEY_URL = "url"; public final static String KEY_DESCRIPTION = "description"; public final static String KEY_WEBSITE = "website"; public final static String KEY_SCALED_LOGO = "scaled_logo_url"; private final JsonReader reader; private final GpodderJsonReaderListener listener; public GpodderJsonReader(Reader in, GpodderJsonReaderListener listener) { reader = new JsonReader(in); this.listener = listener; } public void read() throws IOException { try { readPodcastArray(); } finally { reader.close(); } } public void readPodcastArray() throws IOException { reader.beginArray(); while (reader.hasNext()) { readPodcast(); } reader.endArray(); } public void readPodcast() throws IOException { HashMap<String, String> podcast = new HashMap<String, String>(); reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); GpodderKey key = StringLookup.lookupGpodderKey(name); switch (key) { case DESCRIPTION: if (reader.peek() == JsonToken.STRING) { podcast.put(KEY_DESCRIPTION, reader.nextString()); } else { podcast.put(KEY_DESCRIPTION, ""); reader.skipValue(); } break; case SCALED_LOGO_URL: if (reader.peek() == JsonToken.STRING) { podcast.put(KEY_SCALED_LOGO, reader.nextString()); } else { podcast.put(KEY_SCALED_LOGO, ""); reader.skipValue(); } break; case TITLE: if (reader.peek() == JsonToken.STRING) { podcast.put(KEY_TITLE, reader.nextString()); } else { podcast.put(KEY_TITLE, ""); reader.skipValue(); } break; case URL: if (reader.peek() == JsonToken.STRING) { podcast.put(KEY_URL, reader.nextString()); } else { podcast.put(KEY_URL, ""); reader.skipValue(); } break; case WEBSITE: if (reader.peek() == JsonToken.STRING) { podcast.put(KEY_WEBSITE, reader.nextString()); } else { podcast.put(KEY_WEBSITE, ""); reader.skipValue(); } break; case UNKNOWN: reader.skipValue(); break; } } reader.endObject(); listener.onPodcast(podcast); } }