@Override public Boolean isSupported(final ArchiveFactory factory, final boolean allowDeepInspection) { if (splitType.matches(factory.getFilePath())) { if (factory instanceof DownloadLinkArchiveFactory) { for (final DownloadLink link : ((DownloadLinkArchiveFactory) factory).getDownloadLinks()) { final ExtensionsFilterInterface hint = CompiledFiletypeFilter.getExtensionsFilterInterface(link.getMimeHint()); if (hint != null && !hint.isSameExtensionGroup(CompiledFiletypeFilter.ArchiveExtensions.NUM)) { return false; } } } else if (factory instanceof CrawledLinkFactory) { for (final CrawledLink link : ((CrawledLinkFactory) factory).getLinks()) { final DownloadLink dlLink = link.getDownloadLink(); if (dlLink != null) { final ExtensionsFilterInterface hint = CompiledFiletypeFilter.getExtensionsFilterInterface(dlLink.getMimeHint()); if (hint != null && !hint.isSameExtensionGroup(CompiledFiletypeFilter.ArchiveExtensions.NUM)) { return false; } } } } if (allowDeepInspection) { try { return SplitType.createArchive(factory, splitType, allowDeepInspection) != null; } catch (ArchiveException e) { getLogger().log(e); } } else { return true; } } return false; }
public static LinkInfo getLinkInfo(AbstractPackageChildrenNode abstractChildrenNode) { if (abstractChildrenNode != null) { final String fileName; if (abstractChildrenNode instanceof DownloadLink) { fileName = ((DownloadLink) abstractChildrenNode).getView().getDisplayName(); } else { fileName = abstractChildrenNode.getName(); } final String fileNameExtension = Files.getExtension(fileName); int num = -1; try { String partID = new Regex(fileName, "\\.r(\\d+)$").getMatch(0); if (partID == null) { partID = new Regex(fileName, "\\.pa?r?t?\\.?(\\d+).*?\\.rar$").getMatch(0); } if (partID != null) { num = Integer.parseInt(partID); } } catch (Throwable e) { e.printStackTrace(); } final String ID = fileNameExtension + "_" + num; synchronized (CACHE) { LinkInfo ret = null; WeakReference<LinkInfo> linkInfo = CACHE.get(ID); if (linkInfo == null || (ret = linkInfo.get()) == null) { ExtensionsFilterInterface extension = CompiledFiletypeFilter.getExtensionsFilterInterface(fileNameExtension); if (extension == null) { extension = new ExtensionsFilterInterface() { @Override public Pattern compiledAllPattern() { return null; } @Override public String getDesc() { return fileNameExtension; } @Override public String getIconID() { return null; } @Override public Pattern getPattern() { return null; } @Override public String name() { return fileNameExtension; } @Override public boolean isSameExtensionGroup(ExtensionsFilterInterface extension) { return extension != null && extension.getPattern() == null && extension.getIconID() == null && StringUtils.equals(extension.name(), name()); } }; } ret = new LinkInfo(num, extension, getIcon(fileName, extension)); CACHE.put(ID, new WeakReference<LinkInfo>(ret)); } return ret; } } return null; }