From 8328d0d94b883d63a1c63a132d6a8fbbbf4636f3 Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Mon, 10 Jun 2019 15:30:01 +0700 Subject: [PATCH] Improved mapping behaviour --- source/net/filebot/web/Episode.java | 2 +- source/net/filebot/web/EpisodeFormat.java | 5 ++- source/net/filebot/web/MappedEpisode.java | 48 ++++++++++++++--------- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/source/net/filebot/web/Episode.java b/source/net/filebot/web/Episode.java index d3dc1830..92d8b1b3 100644 --- a/source/net/filebot/web/Episode.java +++ b/source/net/filebot/web/Episode.java @@ -154,7 +154,7 @@ public class Episode implements Serializable { } public Episode derive(String seriesName, Integer season, Integer episode, Integer absolute, Integer special) { - return new Episode(seriesName, season, episode, getTitle(), absolute, special, getAirdate(), getId(), new SeriesInfo(getSeriesInfo())); + return new Episode(seriesName, season, episode, null, absolute, special, null, null, null); } @Override diff --git a/source/net/filebot/web/EpisodeFormat.java b/source/net/filebot/web/EpisodeFormat.java index 6363a499..64d41edf 100644 --- a/source/net/filebot/web/EpisodeFormat.java +++ b/source/net/filebot/web/EpisodeFormat.java @@ -55,7 +55,10 @@ public class EpisodeFormat extends Format { sb.append(" - ").append("Special " + episode.getSpecial()); } } - sb.append(" - ").append(episode.getTitle()); + + if (episode.getTitle() != null) { + sb.append(" - ").append(episode.getTitle()); + } return sb; } diff --git a/source/net/filebot/web/MappedEpisode.java b/source/net/filebot/web/MappedEpisode.java index 930cff4c..fc8aa886 100644 --- a/source/net/filebot/web/MappedEpisode.java +++ b/source/net/filebot/web/MappedEpisode.java @@ -1,11 +1,17 @@ package net.filebot.web; +import java.util.Optional; import java.util.Set; +import java.util.function.Function; public class MappedEpisode extends Episode { protected Episode mapping; + public MappedEpisode() { + // used by deserializer + } + public MappedEpisode(Episode original, Episode mapping) { super(original); this.mapping = mapping; @@ -19,59 +25,60 @@ public class MappedEpisode extends Episode { return mapping; } + private T getFirst(Function getter) { + return Optional.ofNullable(getter.apply(mapping)).orElseGet(() -> { + return Optional.ofNullable(getter.apply(getOriginal())).orElse(null); + }); + } + @Override public String getSeriesName() { - return mapping.getSeriesName(); + return getFirst(Episode::getSeriesName); } @Override public Integer getEpisode() { - return mapping.getEpisode(); + return mapping.getEpisode(); // always use mapped episode number } @Override public Integer getSeason() { - return mapping.getSeason(); + return mapping.getSeason(); // always use mapped season number } @Override public String getTitle() { - return mapping.getTitle(); + return getFirst(Episode::getTitle); } @Override public Integer getAbsolute() { - return mapping.getAbsolute(); + return mapping.getAbsolute(); // always use mapped absolute number } @Override public Integer getSpecial() { - return mapping.getSpecial(); + return mapping.getSpecial(); // always use mapped special number } @Override public SimpleDate getAirdate() { - return mapping.getAirdate(); + return getFirst(Episode::getAirdate); } @Override public Integer getId() { - return mapping.getId(); - } - - @Override - public SeriesInfo getSeriesInfo() { - return mapping.getSeriesInfo(); + return getFirst(Episode::getId); } @Override public Set getSeriesNames() { - return mapping.getSeriesNames(); + return getFirst(Episode::getSeriesNames); } @Override public boolean isAnime() { - return mapping.isAnime(); + return super.isAnime(); // series info is only stored in the original episode object } @Override @@ -84,14 +91,19 @@ public class MappedEpisode extends Episode { return mapping.isSpecial(); } + @Override + public SeriesInfo getSeriesInfo() { + return super.getSeriesInfo(); // series info is only stored in the original episode object + } + @Override public boolean equals(Object obj) { - return mapping.equals(obj); + return super.equals(obj); // use original episode object for episode comparison } @Override public int hashCode() { - return mapping.hashCode(); + return super.hashCode(); // use original episode object for episode comparison } @Override @@ -116,7 +128,7 @@ public class MappedEpisode extends Episode { @Override public String toString() { - return mapping.toString(); + return String.format("%s [%s]", getMapping(), getOriginal()); } }