aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/github/daneren2005/dsub/domain/MusicDirectory.java32
-rw-r--r--app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java9
-rw-r--r--app/src/main/java/github/daneren2005/dsub/service/CachedMusicService.java17
3 files changed, 40 insertions, 18 deletions
diff --git a/app/src/main/java/github/daneren2005/dsub/domain/MusicDirectory.java b/app/src/main/java/github/daneren2005/dsub/domain/MusicDirectory.java
index 8983051e..b502bdf4 100644
--- a/app/src/main/java/github/daneren2005/dsub/domain/MusicDirectory.java
+++ b/app/src/main/java/github/daneren2005/dsub/domain/MusicDirectory.java
@@ -90,11 +90,11 @@ public class MusicDirectory implements Serializable {
this.children = children;
}
- public List<Entry> getChildren() {
+ public synchronized List<Entry> getChildren() {
return getChildren(true, true);
}
- public List<Entry> getChildren(boolean includeDirs, boolean includeFiles) {
+ public synchronized List<Entry> getChildren(boolean includeDirs, boolean includeFiles) {
if (includeDirs && includeFiles) {
return children;
}
@@ -107,7 +107,7 @@ public class MusicDirectory implements Serializable {
}
return result;
}
- public List<Entry> getSongs() {
+ public synchronized List<Entry> getSongs() {
List<Entry> result = new ArrayList<Entry>();
for (Entry child : children) {
if (child != null && !child.isDirectory() && !child.isVideo()) {
@@ -117,7 +117,7 @@ public class MusicDirectory implements Serializable {
return result;
}
- public int getChildrenSize() {
+ public synchronized int getChildrenSize() {
return children.size();
}
@@ -135,7 +135,7 @@ public class MusicDirectory implements Serializable {
EntryComparator.sort(children, byYear);
}
- public void updateDifferences(Context context, int instance, MusicDirectory refreshedDirectory) {
+ public synchronized void updateMetadata(MusicDirectory refreshedDirectory) {
Iterator<Entry> it = children.iterator();
while(it.hasNext()) {
Entry entry = it.next();
@@ -155,24 +155,36 @@ public class MusicDirectory implements Serializable {
entry.setStarred(refreshed.isStarred());
entry.setRating(refreshed.getRating());
entry.setType(refreshed.getType());
- } else {
- // No longer exists in here
- // it.remove();
+ }
+ }
+ }
+ public synchronized boolean updateEntriesList(Context context, int instance, MusicDirectory refreshedDirectory) {
+ boolean changed = false;
+ Iterator<Entry> it = children.iterator();
+ while(it.hasNext()) {
+ Entry entry = it.next();
+ // No longer exists in here
+ if(refreshedDirectory.children.indexOf(entry) == -1) {
+ it.remove();
+ changed = true;
}
}
// Make sure we contain all children from refreshed set
- /*boolean resort = false;
+ boolean resort = false;
for(Entry refreshed: refreshedDirectory.children) {
if(!this.children.contains(refreshed)) {
this.children.add(refreshed);
resort = true;
+ changed = true;
}
}
if(resort) {
this.sortChildren(context, instance);
- }*/
+ }
+
+ return changed;
}
public static class Entry implements Serializable {
diff --git a/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
index ef5490d1..d2282117 100644
--- a/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
+++ b/app/src/main/java/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java
@@ -647,7 +647,7 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Section
}
}
- return new Pair<MusicDirectory, Boolean>(dir, licenseValid);
+ return new Pair<>(dir, licenseValid);
}
@Override
@@ -655,6 +655,13 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Section
finishLoading();
currentTask = null;
}
+
+ @Override
+ public void updateCache() {
+ if(entryGridAdapter != null) {
+ entryGridAdapter.notifyDataSetChanged();
+ }
+ }
}
@Override
diff --git a/app/src/main/java/github/daneren2005/dsub/service/CachedMusicService.java b/app/src/main/java/github/daneren2005/dsub/service/CachedMusicService.java
index 256fd6df..e85e73c5 100644
--- a/app/src/main/java/github/daneren2005/dsub/service/CachedMusicService.java
+++ b/app/src/main/java/github/daneren2005/dsub/service/CachedMusicService.java
@@ -168,23 +168,26 @@ public class CachedMusicService implements MusicService {
dir = cached;
new SilentBackgroundTask<Void>(context) {
+ MusicDirectory refreshed;
+
@Override
protected Void doInBackground() throws Throwable {
- Util.sleepQuietly(2000L);
- MusicDirectory refreshed = musicService.getMusicDirectory(id, name, true, context, null);
+ refreshed = musicService.getMusicDirectory(id, name, true, context, null);
updateAllSongs(context, refreshed);
- cached.updateDifferences(context, musicService.getInstance(context), refreshed);
+ cached.updateMetadata(refreshed);
FileUtil.serialize(context, refreshed, getCacheName(context, "directory", id));
return null;
}
- // TODO: When upgrading to RecyclerView, this should be usable since won't have split entry/album lists
- /*@Override
+ // Update which entries exist
+ @Override
public void done(Void result) {
if(progressListener != null) {
- progressListener.updateCache();
+ if(cached.updateEntriesList(context, musicService.getInstance(context), refreshed)) {
+ progressListener.updateCache();
+ }
}
- }*/
+ }
@Override
public void error(Throwable error) {