package de.test.antennapod.util.syndication.feedgenerator; import android.util.Xml; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.util.DateUtils; import org.xmlpull.v1.XmlSerializer; import java.io.IOException; import java.io.OutputStream; /** * Creates RSS 2.0 feeds. See FeedGenerator for more information. */ public class RSS2Generator implements FeedGenerator{ public static final long FEATURE_WRITE_GUID = 1; @Override public void writeFeed(Feed feed, OutputStream outputStream, String encoding, long flags) throws IOException { if (feed == null) throw new IllegalArgumentException("feed = null"); if (outputStream == null) throw new IllegalArgumentException("outputStream = null"); if (encoding == null) throw new IllegalArgumentException("encoding = null"); XmlSerializer xml = Xml.newSerializer(); xml.setOutput(outputStream, encoding); xml.startDocument(encoding, null); xml.setPrefix("atom", "http://www.w3.org/2005/Atom"); xml.startTag(null, "rss"); xml.attribute(null, "version", "2.0"); xml.startTag(null, "channel"); // Write Feed data if (feed.getTitle() != null) { xml.startTag(null, "title"); xml.text(feed.getTitle()); xml.endTag(null, "title"); } if (feed.getDescription() != null) { xml.startTag(null, "description"); xml.text(feed.getDescription()); xml.endTag(null, "description"); } if (feed.getLink() != null) { xml.startTag(null, "link"); xml.text(feed.getLink()); xml.endTag(null, "link"); } if (feed.getLanguage() != null) { xml.startTag(null, "language"); xml.text(feed.getLanguage()); xml.endTag(null, "language"); } if (feed.getPaymentLink() != null) { GeneratorUtil.addPaymentLink(xml, feed.getPaymentLink(), true); } // Write FeedItem data if (feed.getItems() != null) { for (FeedItem item : feed.getItems()) { xml.startTag(null, "item"); if (item.getTitle() != null) { xml.startTag(null, "title"); xml.text(item.getTitle()); xml.endTag(null, "title"); } if (item.getDescription() != null) { xml.startTag(null, "description"); xml.text(item.getDescription()); xml.endTag(null, "description"); } if (item.getLink() != null) { xml.startTag(null, "link"); xml.text(item.getLink()); xml.endTag(null, "link"); } if (item.getPubDate() != null) { xml.startTag(null, "pubDate"); xml.text(DateUtils.formatRFC822Date(item.getPubDate())); xml.endTag(null, "pubDate"); } if ((flags & FEATURE_WRITE_GUID) != 0) { xml.startTag(null, "guid"); xml.text(item.getItemIdentifier()); xml.endTag(null, "guid"); } if (item.getMedia() != null) { xml.startTag(null, "enclosure"); xml.attribute(null, "url", item.getMedia().getDownload_url()); xml.attribute(null, "length", String.valueOf(item.getMedia().getSize())); xml.attribute(null, "type", item.getMedia().getMime_type()); xml.endTag(null, "enclosure"); } if (item.getPaymentLink() != null) { GeneratorUtil.addPaymentLink(xml, item.getPaymentLink(), true); } xml.endTag(null, "item"); } } xml.endTag(null, "channel"); xml.endTag(null, "rss"); xml.endDocument(); } }