Introduce "Absolute Airdate Order" to improve support for "Match by Airdate Number (e.g. 20161231)" and "Match by Episode Title" kind of use case

This commit is contained in:
Reinhard Pointner 2017-02-17 20:28:21 +08:00
parent 04e8691553
commit 223a82deb5
2 changed files with 20 additions and 9 deletions

View File

@ -7,11 +7,20 @@ import java.util.List;
public enum SortOrder { public enum SortOrder {
Airdate, DVD, Absolute; Airdate, DVD, Absolute, AbsoluteAirdate;
@Override @Override
public String toString() { public String toString() {
return name() + " Order"; switch (this) {
case Airdate:
return "Airdate Order";
case DVD:
return "DVD Order";
case Absolute:
return "Absolute Order";
default:
return "Absolute Airdate Order";
}
} }
public static List<String> names() { public static List<String> names() {
@ -25,7 +34,7 @@ public enum SortOrder {
} }
} }
throw new IllegalArgumentException("Illegal SortOrder: " + name); throw new IllegalArgumentException(String.format("%s not in %s", name, names()));
} }
} }

View File

@ -179,12 +179,14 @@ public class TheTVDBClientV1 extends AbstractEpisodeListProvider implements Artw
Integer specialNumber = (episodeNumber != null) ? episodeNumber : filterBySeason(specials, seasonNumber).size() + 1; Integer specialNumber = (episodeNumber != null) ? episodeNumber : filterBySeason(specials, seasonNumber).size() + 1;
specials.add(new Episode(seriesInfo.getName(), seasonNumber, null, episodeName, absoluteNumber, specialNumber, airdate, id, new SeriesInfo(seriesInfo))); specials.add(new Episode(seriesInfo.getName(), seasonNumber, null, episodeName, absoluteNumber, specialNumber, airdate, id, new SeriesInfo(seriesInfo)));
} else { } else {
// adjust for absolute numbering if possible // adjust for forced absolute numbering (if possible)
if (sortOrder == SortOrder.Absolute) { if (sortOrder == SortOrder.Absolute && absoluteNumber != null && absoluteNumber > 0) {
if (absoluteNumber != null && absoluteNumber > 0) { seasonNumber = null;
episodeNumber = absoluteNumber; episodeNumber = absoluteNumber;
seasonNumber = null; } else if (sortOrder == SortOrder.AbsoluteAirdate && airdate != null) {
} // use airdate as absolute episode number
seasonNumber = null;
episodeNumber = airdate.getYear() * 1_00_00 + airdate.getMonth() * 1_00 + airdate.getDay();
} }
// handle as normal episode // handle as normal episode