protected List<Integer> tryAndGetCategoryAsNumber(NewznabXmlItem item) { Set<Integer> foundCategories = new HashSet<>(); if (item.getCategory() != null) { try { foundCategories.add(Integer.parseInt(item.getCategory())); } catch (NumberFormatException e) { //NOP } } foundCategories.addAll(item.getNewznabAttributes().stream().filter(x -> x.getName().equals("category")).map(x -> Integer.valueOf(x.getValue())).collect(Collectors.toList())); foundCategories.addAll(item.getTorznabAttributes().stream().filter(x -> x.getName().equals("category")).map(x -> Integer.valueOf(x.getValue())).collect(Collectors.toList())); return new ArrayList<>(foundCategories); }
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()); }
@RequestMapping(value = "/torznab/api", produces = MediaType.TEXT_XML_VALUE) public ResponseEntity<? extends Object> torznabapi(NewznabParameters params) throws Exception { if (params.getT() == ActionAttribute.CAPS) { return new ResponseEntity<Object>(NewznabMockBuilder.getCaps(), HttpStatus.OK); } NewznabXmlRoot rssRoot = NewznabMockBuilder.generateResponse(0, 10, params.getApikey(), false, Collections.emptyList()); Random random = new Random(); for (NewznabXmlItem item : rssRoot.getRssChannel().getItems()) { item.setNewznabAttributes(new ArrayList<>()); item.getTorznabAttributes().add(new NewznabAttribute("seeders", String.valueOf(random.nextInt(30000)))); item.getTorznabAttributes().add(new NewznabAttribute("peers", String.valueOf(random.nextInt(30000)))); if (random.nextInt(5) > 3) { item.getTorznabAttributes().add(new NewznabAttribute("grabs", String.valueOf(random.nextInt(30000)))); } item.setCategory("5000"); item.setGrabs(null); } return new ResponseEntity<Object>(rssRoot, HttpStatus.OK); }
searchResultItem.setGrabs(item.getGrabs()); searchResultItem.setIndexerGuid(item.getRssGuid().getGuid()); for (NewznabAttribute attribute : item.getTorznabAttributes()) { searchResultItem.getAttributes().put(attribute.getName(), attribute.getValue()); switch (attribute.getName()) { if (item.getSize() != null && item.getTorznabAttributes().stream().noneMatch(x -> x.getName().equals("size"))) { searchResultItem.getAttributes().put("size", String.valueOf(item.getSize()));
rssRoot.getRssChannel().getItems().get(0).getEnclosure().setLength(100000L); rssRoot.getRssChannel().getItems().get(0).getNewznabAttributes().clear(); rssRoot.getRssChannel().getItems().get(0).getTorznabAttributes().clear(); rssRoot.getRssChannel().getItems().get(0).getNewznabAttributes().add(new NewznabAttribute("grabs", "100")); rssRoot3.getRssChannel().getItems().get(0).getEnclosure().setLength(200000L); rssRoot3.getRssChannel().getItems().get(0).getNewznabAttributes().clear(); rssRoot3.getRssChannel().getItems().get(0).getTorznabAttributes().clear(); rssRoot3.getRssChannel().getItems().get(0).getNewznabAttributes().add(new NewznabAttribute("grabs", "2000")); rssRoot3.getRssChannel().getItems().get(0).setLink("anotherlink"); //Otherwise it will result in a unique key exception