Only read image-tag if it's a sub-element of the channel-tag

This commit is contained in:
daniel oeh 2012-10-20 19:50:15 +02:00
parent 48f1cd2b3b
commit 85d1ed0520
3 changed files with 22 additions and 3 deletions

View File

@ -57,6 +57,15 @@ public class HandlerState {
return second; return second;
} }
public SyndElement getThirdTag() {
SyndElement top = tagstack.pop();
SyndElement second = tagstack.pop();
SyndElement third = tagstack.peek();
tagstack.push(second);
tagstack.push(top);
return third;
}
public StringBuffer getContentBuf() { public StringBuffer getContentBuf() {
return contentBuf; return contentBuf;
} }

View File

@ -67,8 +67,13 @@ public class NSRSS20 extends Namespace {
} }
} else if (localName.equals(IMAGE)) { } else if (localName.equals(IMAGE)) {
if (state.getTagstack().size() >= 1) {
String parent = state.getTagstack().peek().getName();
if (parent.equals(CHANNEL)) {
state.getFeed().setImage(new FeedImage()); state.getFeed().setImage(new FeedImage());
} }
}
}
return new SyndElement(localName, this); return new SyndElement(localName, this);
} }
@ -83,6 +88,10 @@ public class NSRSS20 extends Namespace {
String top = topElement.getName(); String top = topElement.getName();
SyndElement secondElement = state.getSecondTag(); SyndElement secondElement = state.getSecondTag();
String second = secondElement.getName(); String second = secondElement.getName();
String third = null;
if (state.getTagstack().size() >= 3) {
third = state.getThirdTag().getName();
}
if (top.equals(GUID) && second.equals(ITEM)) { if (top.equals(GUID) && second.equals(ITEM)) {
state.getCurrentItem().setItemIdentifier(content); state.getCurrentItem().setItemIdentifier(content);
@ -91,7 +100,7 @@ public class NSRSS20 extends Namespace {
state.getCurrentItem().setTitle(content); state.getCurrentItem().setTitle(content);
} else if (second.equals(CHANNEL)) { } else if (second.equals(CHANNEL)) {
state.getFeed().setTitle(content); state.getFeed().setTitle(content);
} else if (second.equals(IMAGE)) { } else if (second.equals(IMAGE) && third != null && third.equals(CHANNEL)) {
state.getFeed().getImage().setTitle(IMAGE); state.getFeed().getImage().setTitle(IMAGE);
} }
} else if (top.equals(LINK)) { } else if (top.equals(LINK)) {
@ -103,7 +112,7 @@ public class NSRSS20 extends Namespace {
} else if (top.equals(PUBDATE) && second.equals(ITEM)) { } else if (top.equals(PUBDATE) && second.equals(ITEM)) {
state.getCurrentItem().setPubDate( state.getCurrentItem().setPubDate(
SyndDateUtils.parseRFC822Date(content)); SyndDateUtils.parseRFC822Date(content));
} else if (top.equals(URL) && second.equals(IMAGE)) { } else if (top.equals(URL) && second.equals(IMAGE) && third != null && third.equals(CHANNEL)) {
state.getFeed().getImage().setDownload_url(content); state.getFeed().getImage().setDownload_url(content);
} else if (localName.equals(DESCR)) { } else if (localName.equals(DESCR)) {
if (second.equals(CHANNEL)) { if (second.equals(CHANNEL)) {

View File

@ -24,6 +24,7 @@ public class FeedHandlerTest extends AndroidTestCase {
private static final String FEEDS_DIR = "testfeeds"; private static final String FEEDS_DIR = "testfeeds";
private static final String[] urls = { private static final String[] urls = {
"http://podcast.hr-online.de/lateline/podcast.xml",
"http://bitlove.org/nsemak/mikrodilettanten/feed", "http://bitlove.org/nsemak/mikrodilettanten/feed",
"http://bitlove.org/moepmoeporg/riotburnz/feed", "http://bitlove.org/moepmoeporg/riotburnz/feed",
"http://bitlove.org/moepmoeporg/schachcast/feed", "http://bitlove.org/moepmoeporg/schachcast/feed",