use of com.biglybt.pif.utils.subscriptions.SubscriptionResult in project BiglyBT by BiglySoftware.
the class SubscriptionRSSFeed method generate.
@Override
public boolean generate(TrackerWebPageRequest request, TrackerWebPageResponse response) throws IOException {
InetSocketAddress local_address = request.getLocalAddress();
if (local_address == null) {
return (false);
}
URL url = request.getAbsoluteURL();
String path = url.getPath();
path = path.substring(PROVIDER.length() + 1);
try {
SubscriptionManager sman = plugin_interface.getUtilities().getSubscriptionManager();
Subscription[] subs = sman.getSubscriptions();
OutputStream os = response.getOutputStream();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(os, "UTF-8"));
if (path.length() <= 1) {
response.setContentType("text/html; charset=UTF-8");
pw.println("<HTML><HEAD><TITLE>" + Constants.APP_NAME + " Subscription Feeds</TITLE></HEAD><BODY>");
for (Subscription s : subs) {
if (s.isSearchTemplate()) {
continue;
}
String name = s.getName();
pw.println("<LI><A href=\"" + PROVIDER + "/" + s.getID() + "\">" + name + "</A></LI>");
}
pw.println("</BODY></HTML>");
} else {
String id = path.substring(1);
Subscription subscription = null;
for (Subscription s : subs) {
if (s.getID().equals(id)) {
subscription = s;
break;
}
}
if (subscription == null) {
response.setReplyStatus(404);
return (true);
}
URL feed_url = url;
// absolute url is borked as it doesn't set the host properly. hack
String host = (String) request.getHeaders().get("host");
if (host != null) {
int pos = host.indexOf(':');
if (pos != -1) {
host = host.substring(0, pos);
}
feed_url = UrlUtils.setHost(url, host);
}
response.setContentType("application/xml; charset=UTF-8");
pw.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
pw.println("<rss version=\"2.0\" " + "xmlns:vuze=\"http://www.vuze.com\" " + "xmlns:media=\"http://search.yahoo.com/mrss/\" " + "xmlns:atom=\"http://www.w3.org/2005/Atom\" " + "xmlns:itunes=\"http://www.itunes.com/dtds/podcast-1.0.dtd\">");
pw.println("<channel>");
String channel_title = "Vuze Subscription: " + escape(subscription.getName());
pw.println("<title>" + channel_title + "</title>");
pw.println("<link>http://vuze.com</link>");
pw.println("<atom:link href=\"" + escape(feed_url.toExternalForm()) + "\" rel=\"self\" type=\"application/rss+xml\" />");
pw.println("<description>" + Constants.APP_NAME + " RSS Feed for subscription " + escape(subscription.getName()) + "</description>");
pw.println("<itunes:image href=\"http://www.vuze.com/img/vuze_icon_128.png\"/>");
pw.println("<image><url>http://www.vuze.com/img/vuze_icon_128.png</url><title>" + channel_title + "</title><link>http://vuze.com</link></image>");
SubscriptionResult[] results = subscription.getResults();
String feed_date_key = "subscriptions.feed_date." + subscription.getID();
long feed_date = COConfigurationManager.getLongParameter(feed_date_key);
boolean new_date = false;
for (SubscriptionResult result : results) {
Date date = (Date) result.getProperty(SearchResult.PR_PUB_DATE);
long millis = date.getTime();
if (millis > feed_date) {
feed_date = millis;
new_date = true;
}
}
if (new_date) {
COConfigurationManager.setParameter(feed_date_key, feed_date);
}
pw.println("<pubDate>" + TimeFormatter.getHTTPDate(feed_date) + "</pubDate>");
for (SubscriptionResult result : results) {
try {
pw.println("<item>");
String name = (String) result.getProperty(SearchResult.PR_NAME);
pw.println("<title>" + escape(name) + "</title>");
Date date = (Date) result.getProperty(SearchResult.PR_PUB_DATE);
if (date != null) {
pw.println("<pubDate>" + TimeFormatter.getHTTPDate(date.getTime()) + "</pubDate>");
}
String uid = (String) result.getProperty(SearchResult.PR_UID);
if (uid != null) {
pw.println("<guid isPermaLink=\"false\">" + escape(uid) + "</guid>");
}
String link = (String) result.getProperty(SearchResult.PR_DOWNLOAD_LINK);
Long size = (Long) result.getProperty(SearchResult.PR_SIZE);
if (link != null) {
pw.println("<link>" + escape(link) + "</link>");
if (size != null) {
pw.println("<media:content fileSize=\"" + size + "\" url=\"" + escape(link) + "\"/>");
}
}
if (size != null) {
pw.println("<vuze:size>" + size + "</vuze:size>");
}
Long seeds = (Long) result.getProperty(SearchResult.PR_SEED_COUNT);
if (seeds != null) {
pw.println("<vuze:seeds>" + seeds + "</vuze:seeds>");
}
Long peers = (Long) result.getProperty(SearchResult.PR_LEECHER_COUNT);
if (peers != null) {
pw.println("<vuze:peers>" + peers + "</vuze:peers>");
}
Long rank = (Long) result.getProperty(SearchResult.PR_RANK);
if (rank != null) {
pw.println("<vuze:rank>" + rank + "</vuze:rank>");
}
pw.println("</item>");
} catch (Throwable e) {
Debug.out(e);
}
}
pw.println("</channel>");
pw.println("</rss>");
}
pw.flush();
} catch (Throwable e) {
Debug.out(e);
throw (new IOException(Debug.getNestedExceptionMessage(e)));
}
return (true);
}
use of com.biglybt.pif.utils.subscriptions.SubscriptionResult in project BiglyBT by BiglySoftware.
the class UtilitiesImpl method getSubscriptionManager.
@Override
public SubscriptionManager getSubscriptionManager() throws SubscriptionException {
try {
Method m = Class.forName("com.biglybt.core.subs.SubscriptionManagerFactory").getMethod("getSingleton");
final PluginSubscriptionManager sm = (PluginSubscriptionManager) m.invoke(null);
return (new SubscriptionManager() {
@Override
public void requestSubscription(URL url) {
sm.requestSubscription(url, new HashMap<String, Object>());
}
@Override
public void requestSubscription(URL url, Map<String, Object> options) {
sm.requestSubscription(url, options);
}
@Override
public void requestSubscription(SearchProvider sp, Map<String, Object> search_parameters) throws SubscriptionException {
sm.requestSubscription(sp, search_parameters);
}
@Override
public Subscription[] getSubscriptions() {
PluginSubscription[] p_subs = sm.getSubscriptions(true);
Subscription[] subs = new Subscription[p_subs.length];
for (int i = 0; i < subs.length; i++) {
final PluginSubscription p_sub = p_subs[i];
subs[i] = new Subscription() {
@Override
public String getID() {
return (p_sub.getID());
}
@Override
public String getName() {
return (p_sub.getName());
}
@Override
public boolean isSearchTemplate() {
return (p_sub.isSearchTemplate());
}
@Override
public SubscriptionResult[] getResults() {
PluginSubscriptionResult[] p_results = p_sub.getResults(false);
SubscriptionResult[] results = new SubscriptionResult[p_results.length];
for (int i = 0; i < results.length; i++) {
final PluginSubscriptionResult p_res = p_results[i];
results[i] = new SubscriptionResult() {
private Map<Integer, Object> map = p_res.toPropertyMap();
@Override
public Object getProperty(int property_name) {
return (map.get(property_name));
}
@Override
public boolean isRead() {
return (p_res.getRead());
}
@Override
public void setRead(boolean read) {
p_res.setRead(read);
}
};
}
return (results);
}
};
}
return (subs);
}
});
} catch (Throwable e) {
throw (new SubscriptionException("Subscriptions unavailable", e));
}
}
Aggregations