+ Improved support for Plex multi-episode naming scheme (i.e. use ranges like S01E01-E05)

@see https://www.filebot.net/forums/viewtopic.php?f=10&t=3310
This commit is contained in:
Reinhard Pointner 2016-01-07 09:18:27 +00:00
parent 0a48dd41b0
commit b83fcad638
2 changed files with 18 additions and 28 deletions

View File

@ -133,7 +133,7 @@ public class FormatDialog extends JDialog {
public Format getFormat() {
switch (this) {
case Episode:
return new EpisodeFormat(true, true);
return new EpisodeFormat();
case Movie: // case Movie
return new MovieFormat(true, true, false);
case Music:

View File

@ -20,15 +20,7 @@ import java.util.stream.Collectors;
public class EpisodeFormat extends Format {
public static final EpisodeFormat SeasonEpisode = new EpisodeFormat(true, false);
private final boolean includeAirdate;
private final boolean includeSpecial;
public EpisodeFormat(boolean includeSpecial, boolean includeAirdate) {
this.includeSpecial = includeSpecial;
this.includeAirdate = includeAirdate;
}
public static final EpisodeFormat SeasonEpisode = new EpisodeFormat();
@Override
public StringBuffer format(Object obj, StringBuffer sb, FieldPosition pos) {
@ -51,27 +43,33 @@ public class EpisodeFormat extends Format {
if (episode.getEpisode() != null) {
sb.append(String.format("%02d", episode.getEpisode()));
} else if (includeSpecial && episode.getSpecial() != null) {
} else if (episode.getSpecial() != null) {
sb.append("Special " + episode.getSpecial());
}
} else {
// episode, but no season
if (episode.getEpisode() != null) {
sb.append(" - ").append(episodeNumber);
} else if (includeSpecial && episode.getSpecial() != null) {
} else if (episode.getSpecial() != null) {
sb.append(" - ").append("Special " + episode.getSpecial());
}
}
sb.append(" - ").append(episode.getTitle());
if (includeAirdate && episode.getAirdate() != null) {
sb.append(" [").append(episode.getAirdate().format("yyyy-MM-dd")).append("]");
}
return sb;
}
public String formatMultiEpisode(List<Episode> episodes) {
Set<String> name = new LinkedHashSet<String>(2);
Set<String> sxe = new LinkedHashSet<String>(2);
Set<String> title = new LinkedHashSet<String>(2);
for (Episode it : episodes) {
name.add(it.getSeriesName());
sxe.add(formatSxE(it));
title.add(removeTrailingBrackets(it.getTitle()));
}
return String.format("%s - %s - %s", join(name, " & "), join(" & ", sxe), join(" & ", title));
}
public String formatSxE(Episode episode) {
if (episode instanceof MultiEpisode) {
return formatMultiRangeSxE(((MultiEpisode) episode).getEpisodes());
@ -102,16 +100,8 @@ public class EpisodeFormat extends Format {
return sb.toString();
}
public String formatMultiEpisode(Iterable<Episode> episodes) {
Set<String> name = new LinkedHashSet<String>();
Set<String> sxe = new LinkedHashSet<String>();
Set<String> title = new LinkedHashSet<String>();
for (Episode it : episodes) {
name.add(it.getSeriesName());
sxe.add(formatSxE(it));
title.add(removeTrailingBrackets(it.getTitle()));
}
return String.format("%s - %s - %s", join(name, " & "), join(" & ", sxe), join(" & ", title));
public String formatMultiTitle(List<Episode> episodes) {
return episodes.stream().map(e -> removeTrailingBrackets(e.getTitle())).distinct().collect(Collectors.joining(" & "));
}
public String formatMultiRangeSxE(List<Episode> episodes) {