private static TvShowEpisodeToXbmcNfoConnector parseNfoPart(String part) throws Exception { Unmarshaller um = context.createUnmarshaller(); if (um == null) { throw new Exception("could not create unmarshaller"); } try { Reader in = new StringReader(part); return (TvShowEpisodeToXbmcNfoConnector) um.unmarshal(in); } catch (UnmarshalException e) { LOGGER.error("tried to unmarshal; now trying to clean xml stream"); } catch (IllegalArgumentException e) { LOGGER.warn("tried to unmarshal; now trying to clean xml stream"); } // clean NFO string and retry StringReader in = new StringReader(ParserUtils.cleanNfo(part)); return (TvShowEpisodeToXbmcNfoConnector) um.unmarshal(in); }
ParserInfo(String name) { this.name = name.trim(); String[] ty = detectCleanMovienameAndYear(this.name); this.clean = ty[0]; this.year = ty[1]; }
/** * for all strings, return the "cleanest" one detected by rateCleanness() * * @param names * strings * @return cleanest one */ public static ParserInfo getCleanerString(String... names) { ArrayList<ParserInfo> info = new ArrayList<>(1); ParserInfo ret = null; int rate = -10000; for (String s : names) { info.add(new ParserInfo(s)); } for (ParserInfo i : info) { int tmp = ParserUtils.rateCleanness(i); if (tmp > rate) { ret = i; rate = tmp; } } return ret; }
String[] ty = ParserUtils.detectCleanMovienameAndYear(FilenameUtils.getBaseName(Utils.cleanStackingMarkers(file.getName()))); h.add(ty[0] + ty[1]); // title+year, just temp imdb = ParserUtils.detectImdbId(imdb); if (!imdb.isEmpty()) { LOGGER.debug("Found IMDB id: " + imdb); String imdb = ParserUtils.detectImdbId(txtFile); if (!imdb.isEmpty()) { LOGGER.debug("Found IMDB id: " + imdb); String[] video = ParserUtils.detectCleanMovienameAndYear(movieDir.getName()); movie.setTitle(video[0]); if (!video[1].isEmpty()) {
movie.setImdbId(ParserUtils.detectImdbId(mf.getFileAsPath().toString()));
public static String cleanEpisodeTitle(String titleToClean, String tvShowName) { String basename = FilenameUtils.getBaseName(ParserUtils.removeStopwordsAndBadwordsFromTvEpisodeName(titleToClean)); // parse foldername Pattern regex = Pattern.compile("(.*[\\/\\\\])"); Matcher m = regex.matcher(basename); if (m.find()) { basename = basename.replaceAll(regex.pattern(), ""); } basename = basename + " "; // remove show name if (tvShowName != null && !tvShowName.isEmpty()) { // remove string like tvshow name (440, 24, ...) basename = basename.replaceAll("(?i)^" + Pattern.quote(tvShowName) + "", ""); basename = basename.replaceAll("(?i) " + Pattern.quote(tvShowName) + " ", ""); } basename = basename.replaceFirst("\\.\\w{1,4}$", ""); // remove extension if 1-4 chars basename = basename.replaceFirst("[\\(\\[]\\d{4}[\\)\\]]", ""); // remove (xxxx) or [xxxx] as year return removeEpisodeVariantsFromTitle(basename); }
String imdb = ParserUtils.detectImdbId(txtFile); if (movie.getImdbId().isEmpty() && !imdb.isEmpty()) { LOGGER.debug("| Found IMDB id: " + imdb); String[] video = ParserUtils.detectCleanMovienameAndYear(movieDir.getFileName().toString()); movie.setTitle(video[0]); if (!video[1].isEmpty()) {
movie.setImdbId(ParserUtils.detectImdbId(mf.getFile().getAbsolutePath()));
String basename = ParserUtils.removeStopwordsAndBadwordsFromTvEpisodeName(name); String foldername = "";
String[] mfileTY = ParserUtils.detectCleanMovienameAndYear(FilenameUtils.getBaseName(Utils.cleanStackingMarkers(mfile.getFilename()))); String[] mfTY = ParserUtils.detectCleanMovienameAndYear(FilenameUtils.getBaseName(Utils.cleanStackingMarkers(mf.getFilename()))); if (mfileTY[0].equals(mfTY[0]) && mfileTY[1].equals(mfTY[1])) { // title AND year (even empty) match LOGGER.debug("found possible movie '" + m.getTitle() + "' from filename " + file); String[] ty = ParserUtils.detectCleanMovienameAndYear(basename); movie.setTitle(ty[0]); if (!ty[1].isEmpty()) { movie.setImdbId(ParserUtils.detectImdbId(mf.getFile().getAbsolutePath()));
/** * Tries to get movie name from filename<br> * 1. splits string using common delimiters ".- ()"<br> * 2. searches for first occurrence of common stopwords<br> * 3. if last token is 4 digits, assume year and remove<br> * 4. everything before the first stopword must be the movie name :p<br> * <br> * Deprecated in favor of detectCleanMovienameAndYear (avoid possible dupes) * * @param filename * the filename to get the title from * @return the (hopefully) correct parsed movie name */ @Deprecated public static String detectCleanMoviename(String filename) { return detectCleanMovienameAndYear(filename)[0]; }
private static TvShowToXbmcNfoConnector parseNFO(File nfoFile) throws Exception { Unmarshaller um = context.createUnmarshaller(); if (um == null) { MessageManager.instance.pushMessage(new Message(MessageLevel.ERROR, nfoFile, "message.nfo.readerror")); throw new Exception("could not create unmarshaller"); } try { Reader in = new InputStreamReader(new FileInputStream(nfoFile), "UTF-8"); return (TvShowToXbmcNfoConnector) um.unmarshal(in); } catch (UnmarshalException e) { LOGGER.error("tried to unmarshal; now trying to clean xml stream"); } // now trying to parse it via string String completeNFO = FileUtils.readFileToString(nfoFile, "UTF-8").trim().replaceFirst("^([\\W]+)<", "<"); Reader in = new StringReader(ParserUtils.cleanNfo(completeNFO)); return (TvShowToXbmcNfoConnector) um.unmarshal(in); }
try { String imdb = Utils.readFileToString(mf.getFileAsPath()); imdb = ParserUtils.detectImdbId(imdb); if (!imdb.isEmpty()) { LOGGER.debug("| Found IMDB id: " + imdb);
String[] mfileTY = ParserUtils.detectCleanMovienameAndYear(FilenameUtils.getBaseName(Utils.cleanStackingMarkers(mfile.getFilename()))); String[] mfTY = ParserUtils.detectCleanMovienameAndYear(FilenameUtils.getBaseName(Utils.cleanStackingMarkers(mf.getFilename()))); if (mfileTY[0].equals(mfTY[0]) && mfileTY[1].equals(mfTY[1])) { // title AND year (even empty) match LOGGER.debug("| found possible movie '" + m.getTitle() + "' from filename " + mf); String[] ty = ParserUtils.detectCleanMovienameAndYear(basename); movie.setTitle(ty[0]); if (!ty[1].isEmpty()) { movie.setImdbId(ParserUtils.detectImdbId(mf.getFileAsPath().toString()));
String[] ty = ParserUtils.detectCleanMovienameAndYear(FilenameUtils.getBaseName(Utils.cleanStackingMarkers(mf.getFilename()))); normalizedVideoFiles.add(ty[0] + ty[1]);
"<movie xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"); try { in = new StringReader(ParserUtils.cleanNfo(completeNFO)); mp = (MovieToMpNfoConnector) um.unmarshal(in);
String[] ty = ParserUtils.detectCleanMovienameAndYear(showDir.getFileName().toString()); tvShow.setTitle(ty[0]); if (!ty[1].isEmpty()) {
in = new StringReader(ParserUtils.cleanNfo(completeNFO)); kodi = (MovieToKodiNfoConnector) um.unmarshal(in);
String[] ty = ParserUtils.detectCleanMovienameAndYear(dir.getName()); tvShow.setTitle(ty[0]); if (!ty[1].isEmpty()) {
in = new StringReader(ParserUtils.cleanNfo(completeNFO)); xbmc = (MovieToXbmcNfoConnector) um.unmarshal(in);