package org.lodder.subtools.multisubdownloader.lib.library; import org.lodder.subtools.multisubdownloader.settings.model.LibrarySettings; import org.lodder.subtools.sublibrary.Manager; import org.lodder.subtools.sublibrary.model.Release; import org.lodder.subtools.sublibrary.model.Subtitle; import org.lodder.subtools.sublibrary.model.TvRelease; import org.lodder.subtools.sublibrary.util.StringUtils; public class FilenameLibraryBuilder extends LibraryBuilder { public FilenameLibraryBuilder(LibrarySettings librarySettings, Manager manager) { super(librarySettings, manager); } public String build(Release release) { String filename = ""; if (((librarySettings.getLibraryAction().equals(LibraryActionType.RENAME) || librarySettings .getLibraryAction().equals(LibraryActionType.MOVEANDRENAME))) && release instanceof TvRelease && !librarySettings.getLibraryFilenameStructure().isEmpty()) { TvRelease tvRelease = (TvRelease) release; String show = getShowName(tvRelease); filename = librarySettings.getLibraryFilenameStructure(); // order is important! filename = filename.replaceAll("%SHOW NAME%", show); filename = replaceFormatedEpisodeNumber(filename, "%EEX%", tvRelease.getEpisodeNumbers(), true); filename = replaceFormatedEpisodeNumber(filename, "%EX%", tvRelease.getEpisodeNumbers(), false); filename = filename.replaceAll("%SS%", formatedNumber(tvRelease.getSeason(), true)); filename = filename.replaceAll("%S%", formatedNumber(tvRelease.getSeason(), false)); filename = filename.replaceAll("%EE%", formatedNumber(tvRelease.getEpisodeNumbers().get(0), true)); filename = filename.replaceAll("%E%", formatedNumber(tvRelease.getEpisodeNumbers().get(0), false)); filename = filename.replaceAll("%TITLE%", tvRelease.getTitle()); filename = filename.replaceAll("%QUALITY%", release.getQuality()); filename = filename.replaceAll("%DESCRIPTION%", release.getDescription()); filename += "." + release.getExtension(); } else { filename = release.getFilename(); } if (librarySettings.isLibraryReplaceChars()) { filename = StringUtils.removeIllegalWindowsChars(filename); } if (librarySettings.isLibraryFilenameReplaceSpace()) { filename = filename.replaceAll(" ", librarySettings.getLibraryFilenameReplacingSpaceSign()); } return filename; } public String buildSubtitle(Release release, Subtitle sub, String filename, int version) { return buildSubtitle(release, filename, sub.getLanguagecode(), version); } public String buildSubtitle(Release release, String filename, String languageCode, int version) { final String extension = "." + release.getExtension(); if (version > 0) { filename = filename.substring(0, filename.indexOf(extension)) + "-v" + version + "." + release.getExtension(); } if (librarySettings.isLibraryIncludeLanguageCode()) { switch (languageCode) { case "nl": if (librarySettings.getDefaultNlText().equals("")) { filename = changeExtension(filename, ".nld.srt"); } else { final String ext = "." + librarySettings.getDefaultNlText() + ".srt"; filename = changeExtension(filename, ext); } break; case "en": if (librarySettings.getDefaultEnText().equals("")) { filename = changeExtension(filename, ".eng.srt"); } else { final String ext = "." + librarySettings.getDefaultEnText() + ".srt"; filename = changeExtension(filename, ext); } break; default: filename = changeExtension(filename, ".nld.srt"); break; } } else { filename = changeExtension(filename, ".srt"); } if (librarySettings.isLibraryReplaceChars()) { filename = StringUtils.removeIllegalWindowsChars(filename); } if (librarySettings.isLibraryFilenameReplaceSpace()) { filename = filename.replaceAll(" ", librarySettings.getLibraryFilenameReplacingSpaceSign()); } return filename; } // ============================================== changeExtension // changes extension to new extension // example: x = changeExtension("data.txt", ".java") // will assign "data.java" to x. public static String changeExtension(String originalName, String newExtension) { int lastDot = originalName.lastIndexOf("."); if (lastDot != -1) { return originalName.substring(0, lastDot) + newExtension; } else { return originalName + newExtension; } } }