From c6129022d37658ccb5c1989efaececf098f84c12 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Tue, 20 May 2014 21:51:50 -0700 Subject: #335 For songs with identical titles, base title off of filename --- .../daneren2005/dsub/domain/MusicDirectory.java | 13 ++++++++++ .../dsub/service/parser/MusicDirectoryParser.java | 28 +++++++++++++++++----- 2 files changed, 35 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/domain/MusicDirectory.java b/src/github/daneren2005/dsub/domain/MusicDirectory.java index fefbb682..7189e31f 100644 --- a/src/github/daneren2005/dsub/domain/MusicDirectory.java +++ b/src/github/daneren2005/dsub/domain/MusicDirectory.java @@ -167,6 +167,19 @@ public class MusicDirectory implements Serializable { Log.i(TAG, "Device doesn't properly support MediaMetadataRetreiver", e); } } + public void rebaseTitleOffPath() { + String filename = getPath(); + if(filename.indexOf('/') != -1) { + filename = filename.substring(filename.lastIndexOf('/') + 1); + if(getTrack() != null) { + filename = filename.replace(String.format("%02d ", getTrack()), ""); + } + + filename = filename.substring(0, filename.lastIndexOf('.')); + + setTitle(filename); + } + } public String getId() { return id; diff --git a/src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java b/src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java index e09aa33b..d968f82e 100644 --- a/src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java +++ b/src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java @@ -28,6 +28,10 @@ import github.daneren2005.dsub.util.Util; import org.xmlpull.v1.XmlPullParser; import java.io.Reader; +import java.util.HashMap; +import java.util.Map; + +import static github.daneren2005.dsub.domain.MusicDirectory.*; /** * @author Sindre Mehus @@ -43,19 +47,34 @@ public class MusicDirectoryParser extends MusicDirectoryEntryParser { } public MusicDirectory parse(String artist, Reader reader, ProgressListener progressListener) throws Exception { - long t0 = System.currentTimeMillis(); init(reader); MusicDirectory dir = new MusicDirectory(); int eventType; boolean isArtist = false; + Map titleMap = new HashMap(); do { eventType = nextParseEvent(); if (eventType == XmlPullParser.START_TAG) { String name = getElementName(); if ("child".equals(name) || "song".equals(name) || "video".equals(name)) { - MusicDirectory.Entry entry = parseEntry(artist); + Entry entry = parseEntry(artist); entry.setGrandParent(dir.getParent()); + + // Check if duplicates + Entry duplicate = titleMap.get(entry.getTitle()); + if(duplicate != null) { + // Check if the first already has been rebased or not + if(duplicate.getTitle().equals(entry.getTitle())) { + duplicate.rebaseTitleOffPath(); + } + + // Rebase if this is the second instance of this title found + entry.rebaseTitleOffPath(); + } else { + titleMap.put(entry.getTitle(), entry); + } + dir.addChild(entry); } else if ("directory".equals(name) || "artist".equals(name) || ("album".equals(name) && !isArtist)) { dir.setName(get("name")); @@ -63,7 +82,7 @@ public class MusicDirectoryParser extends MusicDirectoryEntryParser { dir.setParent(get("parent")); isArtist = true; } else if("album".equals(name)) { - MusicDirectory.Entry entry = parseEntry(artist); + Entry entry = parseEntry(artist); entry.setDirectory(true); dir.addChild(entry); } else if ("error".equals(name)) { @@ -79,9 +98,6 @@ public class MusicDirectoryParser extends MusicDirectoryEntryParser { dir.sortChildren(); } - long t1 = System.currentTimeMillis(); - Log.d(TAG, "Got music directory in " + (t1 - t0) + "ms."); - return dir; } } -- cgit v1.2.3