public static NewznabXmlRoot getRssRoot(List<NewznabXmlItem> items, int offset, int total) { NewznabXmlRoot rssRoot = new NewznabXmlRoot(); rssRoot.setVersion("2.0"); NewznabXmlChannel channel = new NewznabXmlChannel(); channel.setTitle("channelTitle"); channel.setDescription("channelDescription"); channel.setLanguage("en-gb"); channel.setWebMaster("webmaster@master.com"); channel.setLink("http://127.0.0.1:5080"); channel.setNewznabResponse(new NewznabXmlResponse(offset, total)); channel.setItems(items); rssRoot.setRssChannel(channel); return rssRoot; }
public RssBuilder newznabResponse(int offset, int total) { this.rssChannel.setNewznabResponse(new NewznabXmlResponse(offset, total)); return this; }
public RssChannelBuilder newznabResponse(int offset, int total) { this.newznabResponse = new NewznabXmlResponse(offset, total); return this; }
public NewznabXmlItem build() { NewznabXmlItem rssItem = new NewznabXmlItem(); rssItem.setTitle(title); rssItem.setLink(link); rssItem.setPubDate(pubDate); rssItem.setDescription(description); rssItem.setComments(comments); rssItem.setCategory(category); rssItem.setGrabs(grabs); rssItem.setNewznabAttributes(newznabAttributes); rssItem.setTorznabAttributes(torznabAttributes); rssItem.setRssGuid(new NewznabXmlGuid(title + "-guid", false)); } else { rssItem.setRssGuid(rssGuid); newznabAttributes.add(new NewznabAttribute("size", String.valueOf(size))); if (enclosure == null) { rssItem.setEnclosure(new NewznabXmlEnclosure(link, size, "application/x-nzb")); } else { rssItem.setEnclosure(enclosure); newznabAttributes.add(new NewznabAttribute("usenetdate", new JaxbPubdateAdapter().marshal(pubDate))); if (grabs != null) { newznabAttributes.add(new NewznabAttribute("grabs", String.valueOf(grabs)));
NewznabXmlRoot getRssRoot(List<SearchResultItem> searchResultItems, Integer offset, int total, SearchRequest searchRequest) { NewznabXmlRoot rssRoot = new NewznabXmlRoot(); NewznabXmlChannel rssChannel = new NewznabXmlChannel(); rssChannel.setTitle("NZBHydra 2"); rssChannel.setLink("https://www.github.com/theotherp/nzbhydra2"); rssChannel.setWebMaster("theotherp@gmx.de"); if (searchRequest.getDownloadType() == org.nzbhydra.searching.dtoseventsenums.DownloadType.NZB) { rssChannel.setNewznabResponse(new NewznabXmlResponse(offset == null ? 0 : offset, total)); } rssChannel.setGenerator("NZBHydra2"); rssRoot.setRssChannel(rssChannel); List<NewznabXmlItem> items = new ArrayList<>(); for (SearchResultItem searchResultItem : searchResultItems) { NewznabXmlItem rssItem = buildRssItem(searchResultItem, searchRequest); items.add(rssItem); } rssChannel.setItems(items); return rssRoot; }
public NewznabXmlChannel build() { NewznabXmlChannel rssChannel = new NewznabXmlChannel(); rssChannel.setTitle(title); rssChannel.setDescription(description); rssChannel.setLink(link); rssChannel.setLanguage(language); rssChannel.setWebMaster(webMaster); rssChannel.setGenerator(generator); rssChannel.setNewznabResponse(newznabResponse); rssChannel.setItems(items); return rssChannel; } }
@Override protected List<SearchResultItem> getSearchResultItems(NewznabXmlRoot rssRoot) throws IndexerParsingException { List<SearchResultItem> items = new ArrayList<>(); for (NewznabXmlItem rssItem : rssRoot.getRssChannel().getItems()) { SearchResultItem item = new SearchResultItem(); item.setOriginalCategory("Anime"); item.setTitle(rssItem.getTitle()); item.setLink(rssItem.getLink()); item.setIndexerGuid(rssItem.getRssGuid().getGuid()); item.setSize(rssItem.getEnclosure().getLength()); item.setPubDate(rssItem.getPubDate()); item.setIndexerScore(config.getScore().orElse(0)); item.setHasNfo(HasNfo.NO); item.setAgePrecise(true); item.setCategory(categoryProvider.getByInternalName("Anime")); item.setIndexer(this); item.setDownloadType(DownloadType.NZB); items.add(item); } return items; }
protected boolean isTorznabResult(NewznabXmlRoot rssRoot) { return rssRoot.getRssChannel().getItems().stream().anyMatch(x -> x.getEnclosures().stream().anyMatch(enclosure -> "application/x-bittorrent".equals(enclosure.getType())) || !x.getTorznabAttributes().isEmpty()); }
public NewznabXmlRoot build() { NewznabXmlRoot rssRoot = new NewznabXmlRoot(); rssChannel.getItems().addAll(items); rssRoot.setRssChannel(rssChannel); return rssRoot; } }
protected void completeIndexerSearchResult(Xml response, IndexerSearchResult indexerSearchResult, AcceptorResult acceptorResult, SearchRequest searchRequest, int offset, Integer limit) { NewznabXmlResponse newznabResponse = ((NewznabXmlRoot) response).getRssChannel().getNewznabResponse(); if (newznabResponse != null) { indexerSearchResult.setTotalResultsKnown(true); if (newznabResponse.getTotal() != null) { //Animetosho doesn't provide a total number of results indexerSearchResult.setTotalResults(newznabResponse.getTotal()); indexerSearchResult.setHasMoreResults(newznabResponse.getTotal() > newznabResponse.getOffset() + indexerSearchResult.getSearchResultItems().size() + acceptorResult.getNumberOfRejectedResults()); } else { indexerSearchResult.setTotalResults(indexerSearchResult.getSearchResultItems().size()); indexerSearchResult.setHasMoreResults(false); } indexerSearchResult.setOffset(newznabResponse.getOffset()); indexerSearchResult.setLimit(100); } else { indexerSearchResult.setTotalResultsKnown(false); indexerSearchResult.setHasMoreResults(false); indexerSearchResult.setOffset(0); indexerSearchResult.setLimit(0); } }
@Override protected List<SearchResultItem> getSearchResultItems(Xml rssRoot) { List<SearchResultItem> searchResultItems = new ArrayList<>(); for (NewznabXmlItem item : ((NewznabXmlRoot) rssRoot).getRssChannel().getItems()) { try { SearchResultItem searchResultItem = createSearchResultItem(item); searchResultItems.add(searchResultItem); } catch (NzbHydraException e) { //Already logged } } return searchResultItems; }
public RssItemBuilder categoryNewznab(String... categories) { for (String s : categories) { newznabAttributes.add(new NewznabAttribute("category", s)); } return this; }
public IndexerErrorCodeException(NewznabXmlError response) { super(String.format("Indexer returned with error code %s and description %s", response.getCode(), response.getDescription())); } }
@ExceptionHandler(value = ExternalApiException.class) public NewznabXmlError handler(ExternalApiException e) { NewznabXmlError error = new NewznabXmlError(e.getStatusCode(), e.getMessage()); return error; }
protected boolean isNewznabResult(NewznabXmlRoot rssRoot) { return rssRoot.getRssChannel().getItems().stream().anyMatch(x -> x.getEnclosures().stream().anyMatch(enclosure -> "application/x-nzb".equals(enclosure.getType()))); }
protected void completeIndexerSearchResult(Xml response, IndexerSearchResult indexerSearchResult, AcceptorResult acceptorResult, SearchRequest searchRequest, int offset, Integer limit) { NewznabXmlResponse newznabResponse = ((NewznabXmlRoot) response).getRssChannel().getNewznabResponse(); //DogNZB does not return a reliable total number. It's always 100 if there are more results, less if it's the last page indexerSearchResult.setTotalResultsKnown(false); if (newznabResponse != null) { if (newznabResponse.getTotal() == 100) { indexerSearchResult.setHasMoreResults(true); indexerSearchResult.setTotalResults(100); } else { indexerSearchResult.setTotalResultsKnown(true); indexerSearchResult.setHasMoreResults(false); indexerSearchResult.setTotalResults(searchRequest.getOffset().orElse(0) + newznabResponse.getTotal()); } indexerSearchResult.setOffset(newznabResponse.getOffset()); indexerSearchResult.setLimit(100); } else { indexerSearchResult.setTotalResults(0); indexerSearchResult.setHasMoreResults(false); indexerSearchResult.setOffset(0); indexerSearchResult.setLimit(0); } }
@Override protected void completeIndexerSearchResult(Xml response, IndexerSearchResult indexerSearchResult, AcceptorResult acceptorResult, SearchRequest searchRequest, int offset, Integer limit) { NewznabXmlChannel rssChannel = ((NewznabXmlRoot) response).getRssChannel(); super.completeIndexerSearchResult(response, indexerSearchResult, acceptorResult, searchRequest, offset, limit); indexerSearchResult.setTotalResultsKnown(true); indexerSearchResult.setHasMoreResults(false); indexerSearchResult.setOffset(0); indexerSearchResult.setTotalResults(rssChannel.getItems().size()); indexerSearchResult.setLimit(10000); }
public RssItemBuilder hasNfo(boolean hasNfo) { newznabAttributes.add(new NewznabAttribute("nfo", hasNfo ? "1" : "0")); return this; }
public RssItemBuilder group(String group) { newznabAttributes.add(new NewznabAttribute("group", group)); return this; }
public RssItemBuilder poster(String poster) { newznabAttributes.add(new NewznabAttribute("poster", poster)); return this; }