De-duplicate also if episodes have different but similar media type (#6776)
This commit is contained in:
parent
95f431fec9
commit
6177cc2460
@ -28,7 +28,7 @@ public class FeedItemDuplicateGuesser {
|
|||||||
return titlesLookSimilar(item1, item2)
|
return titlesLookSimilar(item1, item2)
|
||||||
&& datesLookSimilar(item1, item2)
|
&& datesLookSimilar(item1, item2)
|
||||||
&& durationsLookSimilar(media1, media2)
|
&& durationsLookSimilar(media1, media2)
|
||||||
&& TextUtils.equals(media1.getMime_type(), media2.getMime_type());
|
&& mimeTypeLooksSimilar(media1, media2);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean sameAndNotEmpty(String string1, String string2) {
|
private static boolean sameAndNotEmpty(String string1, String string2) {
|
||||||
@ -52,6 +52,19 @@ public class FeedItemDuplicateGuesser {
|
|||||||
return Math.abs(media1.getDuration() - media2.getDuration()) < 10 * 60L * 1000L;
|
return Math.abs(media1.getDuration() - media2.getDuration()) < 10 * 60L * 1000L;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean mimeTypeLooksSimilar(FeedMedia media1, FeedMedia media2) {
|
||||||
|
String mimeType1 = media1.getMime_type();
|
||||||
|
String mimeType2 = media2.getMime_type();
|
||||||
|
if (mimeType1 == null || mimeType2 == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (mimeType1.contains("/") && mimeType2.contains("/")) {
|
||||||
|
mimeType1 = mimeType1.substring(0, mimeType1.indexOf("/"));
|
||||||
|
mimeType2 = mimeType2.substring(0, mimeType2.indexOf("/"));
|
||||||
|
}
|
||||||
|
return TextUtils.equals(mimeType1, mimeType2);
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean titlesLookSimilar(FeedItem item1, FeedItem item2) {
|
private static boolean titlesLookSimilar(FeedItem item1, FeedItem item2) {
|
||||||
return sameAndNotEmpty(canonicalizeTitle(item1.getTitle()), canonicalizeTitle(item2.getTitle()));
|
return sameAndNotEmpty(canonicalizeTitle(item1.getTitle()), canonicalizeTitle(item2.getTitle()));
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,9 @@ public class FeedItemDuplicateGuesserTest {
|
|||||||
assertFalse(FeedItemDuplicateGuesser.seemDuplicates(
|
assertFalse(FeedItemDuplicateGuesser.seemDuplicates(
|
||||||
item("id1", "Title", "example.com/episode1", 10, 5 * MINUTES, "audio/*"),
|
item("id1", "Title", "example.com/episode1", 10, 5 * MINUTES, "audio/*"),
|
||||||
item("id2", "Title", "example.com/episode2", 10, 5 * MINUTES, "video/*")));
|
item("id2", "Title", "example.com/episode2", 10, 5 * MINUTES, "video/*")));
|
||||||
|
assertTrue(FeedItemDuplicateGuesser.seemDuplicates(
|
||||||
|
item("id1", "Title", "example.com/episode1", 10, 5 * MINUTES, "audio/mpeg"),
|
||||||
|
item("id2", "Title", "example.com/episode2", 10, 5 * MINUTES, "audio/mp3")));
|
||||||
assertFalse(FeedItemDuplicateGuesser.seemDuplicates(
|
assertFalse(FeedItemDuplicateGuesser.seemDuplicates(
|
||||||
item("id1", "Title", "example.com/episode1", 5 * DAYS, 5 * MINUTES, "audio/*"),
|
item("id1", "Title", "example.com/episode1", 5 * DAYS, 5 * MINUTES, "audio/*"),
|
||||||
item("id2", "Title", "example.com/episode2", 2 * DAYS, 5 * MINUTES, "audio/*")));
|
item("id2", "Title", "example.com/episode2", 2 * DAYS, 5 * MINUTES, "audio/*")));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user