aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2014-05-20 21:51:50 -0700
committerScott Jackson <daneren2005@gmail.com>2014-05-20 21:51:50 -0700
commitc6129022d37658ccb5c1989efaececf098f84c12 (patch)
treea19ee5f114620ea68853a797cab06dd217038cdd /src
parent142f32a422c695780fc2bce91855d4e38403def3 (diff)
downloaddsub-c6129022d37658ccb5c1989efaececf098f84c12.tar.gz
dsub-c6129022d37658ccb5c1989efaececf098f84c12.tar.bz2
dsub-c6129022d37658ccb5c1989efaececf098f84c12.zip
#335 For songs with identical titles, base title off of filename
Diffstat (limited to 'src')
-rw-r--r--src/github/daneren2005/dsub/domain/MusicDirectory.java13
-rw-r--r--src/github/daneren2005/dsub/service/parser/MusicDirectoryParser.java28
2 files changed, 35 insertions, 6 deletions
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<String, Entry> titleMap = new HashMap<String, Entry>();
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;
}
}