From 1b4efd1ff269650558a6a9ac874b87148c176d3a Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sat, 16 Aug 2014 15:31:02 -0700 Subject: Check if unstarred entry exists in current playing list --- .../daneren2005/dsub/service/CachedMusicService.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/CachedMusicService.java b/src/github/daneren2005/dsub/service/CachedMusicService.java index 027f6694..e989036a 100644 --- a/src/github/daneren2005/dsub/service/CachedMusicService.java +++ b/src/github/daneren2005/dsub/service/CachedMusicService.java @@ -440,7 +440,7 @@ public class CachedMusicService implements MusicService { @Override public void updateResult(List objects, Entry result) { - result.setStarred(starred); + setEntryStarred(result, starred); } }.execute(); } @@ -571,7 +571,7 @@ public class CachedMusicService implements MusicService { @Override public void updateResult(List objects, Entry result) { - result.setStarred(starred); + setEntryStarred(result, starred); } }.execute(); } @@ -596,6 +596,21 @@ public class CachedMusicService implements MusicService { }.execute(); } } + private void setEntryStarred(Entry entry, boolean starred) { + entry.setStarred(starred); + + DownloadService downloadService = DownloadService.getInstance(); + if(downloadService != null && !entry.isDirectory()) { + List files = downloadService.getDownloads(); + for(DownloadFile file: files) { + Entry check = file.getSong(); + if(entry.getId().equals(check.getId())) { + check.setStarred(starred); + break; + } + } + } + } @Override public List getShares(Context context, ProgressListener progressListener) throws Exception { -- cgit v1.2.3 From 199576746d20729489f83d11bf89f4ab35f22b63 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sat, 16 Aug 2014 15:33:27 -0700 Subject: Move to fragment logic so more easily expanded upon --- .../daneren2005/dsub/fragments/SubsonicFragment.java | 12 ++++++++++++ .../daneren2005/dsub/service/CachedMusicService.java | 19 ++----------------- 2 files changed, 14 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java index 516c4c59..7e842425 100644 --- a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java +++ b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java @@ -665,6 +665,18 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR musicService.setStarred(Arrays.asList(entry.getId()), null, null, parents, starred, null, context); } + DownloadService downloadService = DownloadService.getInstance(); + if(downloadService != null && !entry.isDirectory()) { + List files = downloadService.getDownloads(); + for(DownloadFile file: files) { + MusicDirectory.Entry check = file.getSong(); + if(entry.getId().equals(check.getId())) { + check.setStarred(starred); + break; + } + } + } + return null; } diff --git a/src/github/daneren2005/dsub/service/CachedMusicService.java b/src/github/daneren2005/dsub/service/CachedMusicService.java index e989036a..027f6694 100644 --- a/src/github/daneren2005/dsub/service/CachedMusicService.java +++ b/src/github/daneren2005/dsub/service/CachedMusicService.java @@ -440,7 +440,7 @@ public class CachedMusicService implements MusicService { @Override public void updateResult(List objects, Entry result) { - setEntryStarred(result, starred); + result.setStarred(starred); } }.execute(); } @@ -571,7 +571,7 @@ public class CachedMusicService implements MusicService { @Override public void updateResult(List objects, Entry result) { - setEntryStarred(result, starred); + result.setStarred(starred); } }.execute(); } @@ -596,21 +596,6 @@ public class CachedMusicService implements MusicService { }.execute(); } } - private void setEntryStarred(Entry entry, boolean starred) { - entry.setStarred(starred); - - DownloadService downloadService = DownloadService.getInstance(); - if(downloadService != null && !entry.isDirectory()) { - List files = downloadService.getDownloads(); - for(DownloadFile file: files) { - Entry check = file.getSong(); - if(entry.getId().equals(check.getId())) { - check.setStarred(starred); - break; - } - } - } - } @Override public List getShares(Context context, ProgressListener progressListener) throws Exception { -- cgit v1.2.3 From c09e74463e1f0e935e5f4b3fb85615c9a3059672 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sat, 16 Aug 2014 15:39:02 -0700 Subject: Apply check for current playing to mass unstar method as well --- .../dsub/fragments/SelectDirectoryFragment.java | 5 +++++ .../dsub/fragments/SubsonicFragment.java | 26 +++++++++++++--------- 2 files changed, 20 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java index 09a2e42b..ef9a6163 100644 --- a/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java +++ b/src/github/daneren2005/dsub/fragments/SelectDirectoryFragment.java @@ -1064,6 +1064,11 @@ public class SelectDirectoryFragment extends SubsonicFragment implements Adapter } } musicService.setStarred(ids, artists, albums, parents, false, this, context); + + for(MusicDirectory.Entry entry: unstar) { + setEntryStarred(entry, false); + } + return null; } diff --git a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java index 7e842425..c37ece79 100644 --- a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java +++ b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java @@ -665,17 +665,7 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR musicService.setStarred(Arrays.asList(entry.getId()), null, null, parents, starred, null, context); } - DownloadService downloadService = DownloadService.getInstance(); - if(downloadService != null && !entry.isDirectory()) { - List files = downloadService.getDownloads(); - for(DownloadFile file: files) { - MusicDirectory.Entry check = file.getSong(); - if(entry.getId().equals(check.getId())) { - check.setStarred(starred); - break; - } - } - } + setEntryStarred(entry, starred); return null; } @@ -702,6 +692,20 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR } }.execute(); } + protected void setEntryStarred(MusicDirectory.Entry entry, boolean starred) { + DownloadService downloadService = DownloadService.getInstance(); + if(downloadService != null && !entry.isDirectory()) { + List files = downloadService.getDownloads(); + for(DownloadFile file: files) { + MusicDirectory.Entry check = file.getSong(); + if(entry.getId().equals(check.getId())) { + check.setStarred(starred); + break; + } + } + } + } + public void toggleStarred(final Artist entry) { final boolean starred = !entry.isStarred(); entry.setStarred(starred); -- cgit v1.2.3 From 92f924b46d2ecd05669e27a93f5ced3d00f79cf7 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sat, 16 Aug 2014 15:51:42 -0700 Subject: Serialize star change, update any current views with star data --- .../daneren2005/dsub/fragments/SubsonicFragment.java | 6 ++++++ src/github/daneren2005/dsub/service/DownloadService.java | 6 ++++++ src/github/daneren2005/dsub/view/SongView.java | 4 ++++ src/github/daneren2005/dsub/view/UpdateView.java | 14 ++++++++++++++ 4 files changed, 30 insertions(+) (limited to 'src') diff --git a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java index c37ece79..580016bb 100644 --- a/src/github/daneren2005/dsub/fragments/SubsonicFragment.java +++ b/src/github/daneren2005/dsub/fragments/SubsonicFragment.java @@ -700,10 +700,16 @@ public class SubsonicFragment extends Fragment implements SwipeRefreshLayout.OnR MusicDirectory.Entry check = file.getSong(); if(entry.getId().equals(check.getId())) { check.setStarred(starred); + downloadService.serializeQueue(); break; } } } + + MusicDirectory.Entry find = UpdateView.findEntry(entry); + if(find != null) { + find.setStarred(starred); + } } public void toggleStarred(final Artist entry) { diff --git a/src/github/daneren2005/dsub/service/DownloadService.java b/src/github/daneren2005/dsub/service/DownloadService.java index 76e2dd89..b311df6b 100644 --- a/src/github/daneren2005/dsub/service/DownloadService.java +++ b/src/github/daneren2005/dsub/service/DownloadService.java @@ -1598,6 +1598,12 @@ public class DownloadService extends Service { } } + public synchronized void serializeQueue() { + if(playerState == PlayerState.PAUSED) { + lifecycleSupport.serializeDownloadQueue(); + } + } + private void handleError(Exception x) { Log.w(TAG, "Media player error: " + x, x); if(mediaPlayer != null) { diff --git a/src/github/daneren2005/dsub/view/SongView.java b/src/github/daneren2005/dsub/view/SongView.java index 55eff6f1..d5b7c0f2 100644 --- a/src/github/daneren2005/dsub/view/SongView.java +++ b/src/github/daneren2005/dsub/view/SongView.java @@ -248,4 +248,8 @@ public class SongView extends UpdateView implements Checkable { public void toggle() { checkedTextView.toggle(); } + + public MusicDirectory.Entry getEntry() { + return song; + } } diff --git a/src/github/daneren2005/dsub/view/UpdateView.java b/src/github/daneren2005/dsub/view/UpdateView.java index f30ec42a..5f34a765 100644 --- a/src/github/daneren2005/dsub/view/UpdateView.java +++ b/src/github/daneren2005/dsub/view/UpdateView.java @@ -33,6 +33,7 @@ import java.util.ArrayList; import java.util.List; import java.util.WeakHashMap; +import github.daneren2005.dsub.domain.MusicDirectory; import github.daneren2005.dsub.util.ImageLoader; import github.daneren2005.dsub.R; import github.daneren2005.dsub.util.SilentBackgroundTask; @@ -211,6 +212,19 @@ public class UpdateView extends LinearLayout { public static void removeActiveActivity() { activeActivities--; } + + public static MusicDirectory.Entry findEntry(MusicDirectory.Entry entry) { + for(UpdateView view: INSTANCES.keySet()) { + if(view instanceof SongView) { + MusicDirectory.Entry check = ((SongView) view).getEntry(); + if(check != null && entry != check && check.getId().equals(entry.getId())) { + return check; + } + } + } + + return null; + } protected void updateBackground() { -- cgit v1.2.3 From b9959f41efe45548757d0a7f1b1c9eb4ec9f9e92 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Sun, 17 Aug 2014 12:19:37 -0700 Subject: Update playlist caches for stars as well --- .../dsub/service/CachedMusicService.java | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src') diff --git a/src/github/daneren2005/dsub/service/CachedMusicService.java b/src/github/daneren2005/dsub/service/CachedMusicService.java index 027f6694..e97ffe24 100644 --- a/src/github/daneren2005/dsub/service/CachedMusicService.java +++ b/src/github/daneren2005/dsub/service/CachedMusicService.java @@ -386,6 +386,11 @@ public class CachedMusicService implements MusicService { private void updateStarredList(Context context, List list, final boolean starred, final boolean isTagBrowsing) { for(final Entry entry: list) { + // Don't waste time when status is the same + if(entry.isStarred() == starred) { + continue; + } + String cacheName, parent = null; boolean isArtist = false; if(isTagBrowsing) { @@ -595,6 +600,30 @@ public class CachedMusicService implements MusicService { } }.execute(); } + + // Update playlist caches if there is at least one song to be starred + if(ids != null && ids.size() > 0) { + List playlists = FileUtil.deserialize(context, getCacheName(context, "playlist"), ArrayList.class); + for(Playlist playlist: playlists) { + new MusicDirectoryUpdater(context, "playlist", playlist.getId()) { + @Override + public boolean checkResult(Entry check) { + for (String id : checkIds) { + if (id.equals(check.getId())) { + return true; + } + } + + return false; + } + + @Override + public void updateResult(List objects, Entry result) { + result.setStarred(starred); + } + }.execute(); + } + } } @Override -- cgit v1.2.3