package org.lodder.subtools.multisubdownloader.lib.library; import java.io.File; import org.lodder.subtools.multisubdownloader.settings.model.LibrarySettings; import org.lodder.subtools.sublibrary.Manager; import org.lodder.subtools.sublibrary.model.MovieRelease; import org.lodder.subtools.sublibrary.model.Release; import org.lodder.subtools.sublibrary.model.TvRelease; import org.lodder.subtools.sublibrary.util.StringUtils; public class PathLibraryBuilder extends LibraryBuilder { public PathLibraryBuilder(LibrarySettings librarySettings, Manager manager) { super(librarySettings, manager); } public String build(Release release) { if (librarySettings.getLibraryAction().equals(LibraryActionType.MOVE) || librarySettings.getLibraryAction().equals(LibraryActionType.MOVEANDRENAME)) { String folder = ""; if (release instanceof TvRelease) folder = buildEpisode((TvRelease) release); else if (release instanceof MovieRelease) folder = buildMovie((MovieRelease) release); return new File(librarySettings.getLibraryFolder(), folder).toString(); } else { return release.getPath().toString(); } } protected String buildEpisode(TvRelease tvRelease) { String folder = librarySettings.getLibraryFolderStructure(); String show = getShowName(tvRelease); if (librarySettings.isLibraryReplaceChars()) { show = StringUtils.removeIllegalWindowsChars(show); } folder = folder.replaceAll("%SHOW NAME%", show); // order is important! folder = replaceFormatedEpisodeNumber(folder, "%EEX%", tvRelease.getEpisodeNumbers(), true); folder = replaceFormatedEpisodeNumber(folder, "%EX%", tvRelease.getEpisodeNumbers(), false); folder = folder.replaceAll("%SS%", formatedNumber(tvRelease.getSeason(), true)); folder = folder.replaceAll("%S%", formatedNumber(tvRelease.getSeason(), false)); folder = folder.replaceAll("%EE%", formatedNumber(tvRelease.getEpisodeNumbers().get(0), true)); folder = folder.replaceAll("%E%", formatedNumber(tvRelease.getEpisodeNumbers().get(0), false)); folder = folder.replaceAll("%TITLE%", tvRelease.getTitle()); try { folder = folder.replaceAll("%SEPARATOR%", File.separator); } catch (IndexOutOfBoundsException | IllegalArgumentException ioobe) // windows hack needs "\\" // instead of "\" { folder = folder.replaceAll("%SEPARATOR%", File.separator + File.separator); } folder = folder.replaceAll("%QUALITY%", tvRelease.getQuality()); if (librarySettings.isLibraryFolderReplaceSpace()) { folder = folder.replaceAll(" ", librarySettings.getLibraryFolderReplacingSpaceSign()); } return folder; } protected String buildMovie(MovieRelease movieRelease) { String folder = librarySettings.getLibraryFolderStructure(); String title = movieRelease.getTitle(); if (librarySettings.isLibraryReplaceChars()) { title = StringUtils.removeIllegalWindowsChars(title); } folder = folder.replaceAll("%MOVIE TITLE%", title); folder = folder.replaceAll("%YEAR%", Integer.toString(movieRelease.getYear())); folder = folder.replaceAll("%SEPARATOR%", File.separator); folder = folder.replaceAll("%QUALITY%", movieRelease.getQuality()); if (librarySettings.isLibraryFolderReplaceSpace()) { folder = folder.replaceAll(" ", librarySettings.getLibraryFolderReplacingSpaceSign()); } return folder; } }