From cdc8adab8d59f229eb93365ebbdf3a6f1673c689 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sat, 23 Jun 2012 22:37:54 +0200 Subject: Added content:encoded support --- src/de/podfetcher/activity/ItemviewActivity.java | 2 +- src/de/podfetcher/feed/FeedItem.java | 10 +++++ src/de/podfetcher/feed/FeedManager.java | 8 +++- src/de/podfetcher/storage/PodDBAdapter.java | 3 ++ .../syndication/handler/SyndHandler.java | 8 +++- .../syndication/namespace/content/NSContent.java | 51 ++++++++++++++++++++++ 6 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 src/de/podfetcher/syndication/namespace/content/NSContent.java diff --git a/src/de/podfetcher/activity/ItemviewActivity.java b/src/de/podfetcher/activity/ItemviewActivity.java index 7e6e9c43e..7d6565f38 100644 --- a/src/de/podfetcher/activity/ItemviewActivity.java +++ b/src/de/podfetcher/activity/ItemviewActivity.java @@ -83,7 +83,7 @@ public class ItemviewActivity extends SherlockActivity { .getTime(), System.currentTimeMillis(), DateFormat.MEDIUM, DateFormat.SHORT)); txtvTitle.setText(item.getTitle()); - webvDescription.loadData(item.getDescription(), "text/html", null); + webvDescription.loadData(item.getContentEncoded(), "text/html", null); } /* TODO implement diff --git a/src/de/podfetcher/feed/FeedItem.java b/src/de/podfetcher/feed/FeedItem.java index 92b887e99..9806fbb77 100644 --- a/src/de/podfetcher/feed/FeedItem.java +++ b/src/de/podfetcher/feed/FeedItem.java @@ -11,6 +11,7 @@ import java.util.Date; public class FeedItem extends FeedComponent{ private String title; private String description; + private String contentEncoded; private String link; private Date pubDate; private FeedMedia media; @@ -84,5 +85,14 @@ public class FeedItem extends FeedComponent{ public boolean isRead() { return read; } + + public String getContentEncoded() { + return contentEncoded; + } + + public void setContentEncoded(String contentEncoded) { + this.contentEncoded = contentEncoded; + } + } diff --git a/src/de/podfetcher/feed/FeedManager.java b/src/de/podfetcher/feed/FeedManager.java index 938b94bd6..b3d5372c0 100644 --- a/src/de/podfetcher/feed/FeedManager.java +++ b/src/de/podfetcher/feed/FeedManager.java @@ -76,8 +76,10 @@ public class FeedManager { launchIntent.putExtra(PlaybackService.EXTRA_MEDIA_ID, media.getId()); launchIntent.putExtra(PlaybackService.EXTRA_FEED_ID, media.getItem() .getFeed().getId()); - launchIntent.putExtra(PlaybackService.EXTRA_START_WHEN_PREPARED, startWhenPrepared); - launchIntent.putExtra(PlaybackService.EXTRA_SHOULD_STREAM, shouldStream); + launchIntent.putExtra(PlaybackService.EXTRA_START_WHEN_PREPARED, + startWhenPrepared); + launchIntent + .putExtra(PlaybackService.EXTRA_SHOULD_STREAM, shouldStream); context.startService(launchIntent); if (showPlayer) { // Launch Mediaplayer @@ -409,6 +411,8 @@ public class FeedManager { .getColumnIndex(PodDBAdapter.KEY_LINK))); item.setDescription(itemlistCursor.getString(itemlistCursor .getColumnIndex(PodDBAdapter.KEY_DESCRIPTION))); + item.setContentEncoded(itemlistCursor.getString(itemlistCursor + .getColumnIndex(PodDBAdapter.KEY_CONTENT_ENCODED))); item.setPubDate(new Date(itemlistCursor.getLong(itemlistCursor .getColumnIndex(PodDBAdapter.KEY_PUBDATE)))); item.setMedia(adapter.getFeedMedia(itemlistCursor diff --git a/src/de/podfetcher/storage/PodDBAdapter.java b/src/de/podfetcher/storage/PodDBAdapter.java index 49261a743..4debdf70b 100644 --- a/src/de/podfetcher/storage/PodDBAdapter.java +++ b/src/de/podfetcher/storage/PodDBAdapter.java @@ -51,6 +51,7 @@ public class PodDBAdapter { public static final String KEY_FEEDFILETYPE = "feedfile_type"; public static final String KEY_COMPLETION_DATE = "completion_date"; public static final String KEY_FEEDITEM = "feeditem"; + public static final String KEY_CONTENT_ENCODED = "content_encoded"; // Table names public static final String TABLE_NAME_FEEDS = "Feeds"; @@ -74,6 +75,7 @@ public class PodDBAdapter { private static final String CREATE_TABLE_FEED_ITEMS = "CREATE TABLE " + TABLE_NAME_FEED_ITEMS + " (" + TABLE_PRIMARY_KEY + KEY_TITLE + " TEXT," + KEY_LINK + " TEXT," + KEY_DESCRIPTION + " TEXT," + + KEY_CONTENT_ENCODED + " TEXT," + KEY_PUBDATE + " INTEGER," + KEY_MEDIA + " INTEGER," + KEY_FEED + " INTEGER," + KEY_READ + " INTEGER)"; @@ -253,6 +255,7 @@ public class PodDBAdapter { values.put(KEY_TITLE, item.getTitle()); values.put(KEY_LINK, item.getLink()); values.put(KEY_DESCRIPTION, item.getDescription()); + values.put(KEY_CONTENT_ENCODED, item.getContentEncoded()); values.put(KEY_PUBDATE, item.getPubDate().getTime()); if (item.getMedia() != null) { if (item.getMedia().getId() == 0) { diff --git a/src/de/podfetcher/syndication/handler/SyndHandler.java b/src/de/podfetcher/syndication/handler/SyndHandler.java index 36dcd74c6..4951b9561 100644 --- a/src/de/podfetcher/syndication/handler/SyndHandler.java +++ b/src/de/podfetcher/syndication/handler/SyndHandler.java @@ -10,6 +10,7 @@ import de.podfetcher.feed.Feed; import de.podfetcher.syndication.namespace.Namespace; import de.podfetcher.syndication.namespace.SyndElement; import de.podfetcher.syndication.namespace.atom.NSAtom; +import de.podfetcher.syndication.namespace.content.NSContent; import de.podfetcher.syndication.namespace.rss20.NSRSS20; /** Superclass for all SAX Handlers which process Syndication formats */ @@ -77,13 +78,18 @@ public class SyndHandler extends DefaultHandler { state.defaultNamespaces.push(new NSAtom()); } else if (prefix.equals(NSAtom.NSTAG)) { state.namespaces.put(uri, new NSAtom()); + Log.d(TAG, "Recognized Atom namespace"); } + } else if (uri.equals(NSContent.NSURI) && prefix.equals(NSContent.NSTAG)) { + state.namespaces.put(uri, new NSContent()); + Log.d(TAG, "Recognized Content namespace"); } } private Namespace getHandlingNamespace(String uri) { Namespace handler = state.namespaces.get(uri); - if (handler == null && uri.equals(DEFAULT_PREFIX) &&!state.defaultNamespaces.empty()) { + if (handler == null && uri.equals(DEFAULT_PREFIX) + && !state.defaultNamespaces.empty()) { handler = state.defaultNamespaces.peek(); } return handler; diff --git a/src/de/podfetcher/syndication/namespace/content/NSContent.java b/src/de/podfetcher/syndication/namespace/content/NSContent.java new file mode 100644 index 000000000..8f5187518 --- /dev/null +++ b/src/de/podfetcher/syndication/namespace/content/NSContent.java @@ -0,0 +1,51 @@ +package de.podfetcher.syndication.namespace.content; + +import org.xml.sax.Attributes; + +import de.podfetcher.syndication.handler.HandlerState; +import de.podfetcher.syndication.namespace.Namespace; +import de.podfetcher.syndication.namespace.SyndElement; +import de.podfetcher.syndication.namespace.rss20.NSRSS20; + +public class NSContent extends Namespace { + public static final String NSTAG = "content"; + public static final String NSURI = "http://purl.org/rss/1.0/modules/content/"; + + private static final String ENCODED = "encoded"; + + private StringBuffer encoded; + + @Override + public SyndElement handleElementStart(String localName, HandlerState state, + Attributes attributes) { + if (localName.equals(ENCODED)) { + encoded = new StringBuffer(); + } + return new SyndElement(localName, this); + } + + @Override + public void handleCharacters(HandlerState state, char[] ch, int start, + int length) { + if (state.getTagstack().size() >= 2) { + String content = new String(ch, start, length); + SyndElement topElement = state.getTagstack().peek(); + String top = topElement.getName(); + SyndElement secondElement = state.getSecondTag(); + String second = secondElement.getName(); + if (top.equals(ENCODED) && second.equals(NSRSS20.ITEM)) { + encoded.append(content); + } + } + + } + + @Override + public void handleElementEnd(String localName, HandlerState state) { + if (localName.equals(ENCODED)) { + state.getCurrentItem().setContentEncoded(encoded.toString()); + encoded = null; + } + } + +} -- cgit v1.2.3