From 69b9393987f22dbb759f3e3a8321bed6de1adfb2 Mon Sep 17 00:00:00 2001 From: Adrian Ulrich Date: Sat, 26 Nov 2016 19:29:15 +0100 Subject: [PATCH] vorbis: guess YEAR from DATE --- .../medialibrary/MediaMetadataExtractor.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ch/blinkenlights/android/medialibrary/MediaMetadataExtractor.java b/src/ch/blinkenlights/android/medialibrary/MediaMetadataExtractor.java index 6e95fd72..7bf18be1 100644 --- a/src/ch/blinkenlights/android/medialibrary/MediaMetadataExtractor.java +++ b/src/ch/blinkenlights/android/medialibrary/MediaMetadataExtractor.java @@ -19,8 +19,10 @@ package ch.blinkenlights.android.medialibrary; import ch.blinkenlights.bastp.Bastp; import android.media.MediaMetadataRetriever; -import java.util.HashMap; import java.util.ArrayList; +import java.util.HashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class MediaMetadataExtractor extends HashMap> { // Well known tags @@ -39,6 +41,11 @@ public class MediaMetadataExtractor extends HashMap> { public final static String TITLE = "TITLE"; public final static String YEAR = "YEAR"; + /** + * Regexp used to match a year in a date field + */ + private static final Pattern sExtractYear = Pattern.compile("(\\d{4})"); + /** * Constructor for MediaMetadataExtractor * @@ -131,6 +138,19 @@ public class MediaMetadataExtractor extends HashMap> { put(map[i+1], tags); } } + + // Try to guess YEAR from date field if only DATE was specified + // We expect it to match \d{4} + if (containsKey(YEAR) == false && bastp.containsKey("DATE")) { + ArrayList dateList = (ArrayList)bastp.get("DATE"); + Matcher dateMatch = sExtractYear.matcher(dateList.get(0)); + if (dateMatch.matches()) { + ArrayList year = new ArrayList(1); + year.add(dateMatch.group(1)); + this.put(YEAR, year); + } + } + } /**