public static String generateSeasonDir(String template, TvShowEpisode episode) { String seasonDir = template; // replace $1 and $2 as the only episode specific tokens seasonDir = seasonDir.replace("$1", String.valueOf(episode.getSeason())); seasonDir = seasonDir.replace("$2", lz(episode.getSeason())); seasonDir = seasonDir.replace("$1", String.valueOf(episode.getDvdSeason())); seasonDir = seasonDir.replace("$2", lz(episode.getDvdSeason())); // replace all other tokens seasonDir = createDestination(seasonDir, episode.getTvShow(), new ArrayList<TvShowEpisode>()); // only allow empty season dir if the season is in the filename if (StringUtils.isBlank(seasonDir) && !(SETTINGS.getRenamerFilename().contains("$1") || SETTINGS.getRenamerFilename().contains("$2") || SETTINGS.getRenamerFilename().contains("$3") || SETTINGS.getRenamerFilename().contains("$4"))) { seasonDir = "Season " + String.valueOf(episode.getSeason()); } return seasonDir; }
private static String generateName( String template, TvShow tvShow, MediaFile mf, boolean forFile) { String filename = ""; List<TvShowEpisode> eps = TvShowList.getInstance().getTvEpisodesByFile(tvShow, mf.getFile()); if (eps == null || eps.size() == 0) { // this should not happen, but unluckily ODB does it sometimes; try a second time to get the // episode try { Thread.sleep(250); } catch (Exception ex) { } eps = TvShowList.getInstance().getTvEpisodesByFile(tvShow, mf.getFile()); } if (eps == null || eps.size() == 0) { return ""; } if (StringUtils.isBlank(template)) { filename = createDestination(SETTINGS.getRenamerFilename(), tvShow, eps); } else { filename = createDestination(template, tvShow, eps); } // since we can use this method for folders too, use the next options solely for files if (forFile) { if (mf.getType().equals(MediaFileType.THUMB)) { if (SETTINGS.isUseRenamerThumbPostfix()) { filename = filename + "-thumb"; } // else let the filename as is } if (mf.getType().equals(MediaFileType.FANART)) { filename = filename + "-fanart"; } if (mf.getType().equals(MediaFileType.TRAILER)) { filename = filename + "-trailer"; } if (mf.getType().equals(MediaFileType.VIDEO_EXTRA)) { String name = mf.getBasename(); Pattern p = Pattern.compile("(?i).*([ _.-]extras[ _.-]).*"); Matcher m = p.matcher(name); if (m.matches()) { name = name.substring(m.end(1)); // everything behind } // if not, MF must be within /extras/ folder - use name 1:1 filename = filename + "-extras-" + name; } if (mf.getType().equals(MediaFileType.SUBTITLE)) { List<MediaFileSubtitle> subtitles = mf.getSubtitles(); if (subtitles != null && subtitles.size() > 0) { MediaFileSubtitle mfs = mf.getSubtitles().get(0); if (mfs != null) { if (!mfs.getLanguage().isEmpty()) { filename = filename + "." + mfs.getLanguage(); } if (mfs.isForced()) { filename = filename + ".forced"; } } else { // TODO: meh, we didn't have an actual MF yet - need to parse filename ourselves (like // movie). But with a recent scan of files/DB this // should not occur. } } } } // end forFile // ASCII replacement if (SETTINGS.isAsciiReplacement()) { filename = StrgUtils.convertToAscii(filename, false); } filename = filename + "." + mf.getExtension(); // readd original extension return filename; }