package de.danoeh.antennapodsp.syndication.namespace; import de.danoeh.antennapodsp.feed.FeedImage; import de.danoeh.antennapodsp.syndication.handler.HandlerState; import org.xml.sax.Attributes; import java.util.concurrent.TimeUnit; public class NSITunes extends Namespace { public static final String NSTAG = "itunes"; public static final String NSURI = "http://www.itunes.com/dtds/podcast-1.0.dtd"; private static final String IMAGE = "image"; private static final String IMAGE_TITLE = "image"; private static final String IMAGE_HREF = "href"; private static final String AUTHOR = "author"; public static final String DURATION = "duration"; @Override public SyndElement handleElementStart(String localName, HandlerState state, Attributes attributes) { if (localName.equals(IMAGE)) { FeedImage image = new FeedImage(); image.setTitle(IMAGE_TITLE); image.setDownload_url(attributes.getValue(IMAGE_HREF)); if (state.getCurrentItem() != null) { // this is an items image image.setTitle(state.getCurrentItem().getTitle()+IMAGE_TITLE); state.getCurrentItem().setImage(image); } else { // this is the feed image if (state.getFeed().getImage() == null) { state.getFeed().setImage(image); } } } return new SyndElement(localName, this); } @Override public void handleElementEnd(String localName, HandlerState state) { if (localName.equals(AUTHOR)) { state.getFeed().setAuthor(state.getContentBuf().toString()); } else if (localName.equals(DURATION)) { String[] parts = state.getContentBuf().toString().split(":"); try { int duration = 0; if (parts.length == 2) { duration += TimeUnit.MINUTES.toMillis(Long.valueOf(parts[0])) + TimeUnit.SECONDS.toMillis(Long.valueOf(parts[1])); } else if (parts.length >= 3) { duration += TimeUnit.HOURS.toMillis(Long.valueOf(parts[0])) + TimeUnit.MINUTES.toMillis(Long.valueOf(parts[1])) + TimeUnit.SECONDS.toMillis(Long.valueOf(parts[2])); } else { return; } state.getTempObjects().put(DURATION, duration); } catch (NumberFormatException e) { e.printStackTrace(); } } } }