From b4ef434c0879c681359f538b7b492580fafb2ae5 Mon Sep 17 00:00:00 2001 From: Allen Petersen Date: Sat, 9 Dec 2017 23:12:16 -0500 Subject: [PATCH 1/2] Issue 617 Removes an incorrect override in AlbumUpnpProcessor which was preventing RecentAlbumUpnpProcessor from behaving correctly. Also adds a correct getAllItemsSize() implementation for RecentAlbumUpnpProcessor. --- .../player/service/upnp/AlbumUpnpProcessor.java | 16 ---------------- .../service/upnp/RecentAlbumUpnpProcessor.java | 8 ++++++++ 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/airsonic-main/src/main/java/org/airsonic/player/service/upnp/AlbumUpnpProcessor.java b/airsonic-main/src/main/java/org/airsonic/player/service/upnp/AlbumUpnpProcessor.java index 9b28a437..b9c4e98b 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/service/upnp/AlbumUpnpProcessor.java +++ b/airsonic-main/src/main/java/org/airsonic/player/service/upnp/AlbumUpnpProcessor.java @@ -26,10 +26,8 @@ import org.airsonic.player.domain.CoverArtScheme; import org.airsonic.player.domain.MediaFile; import org.airsonic.player.domain.MusicFolder; import org.airsonic.player.service.SearchService; -import org.fourthline.cling.support.model.BrowseResult; import org.fourthline.cling.support.model.DIDLContent; import org.fourthline.cling.support.model.PersonWithRole; -import org.fourthline.cling.support.model.SortCriterion; import org.fourthline.cling.support.model.container.Container; import org.fourthline.cling.support.model.container.MusicAlbum; import org.springframework.beans.factory.annotation.Autowired; @@ -61,20 +59,6 @@ public class AlbumUpnpProcessor extends UpnpContentProcessor setRootTitle("Albums"); } - /** - * Browses the top-level content of a type. - */ - public BrowseResult browseRoot(String filter, long firstResult, long maxResults, SortCriterion[] orderBy) throws Exception { - DIDLContent didl = new DIDLContent(); - - List allFolders = getDispatchingContentDirectory().getSettingsService().getAllMusicFolders(); - List selectedItems = getAlbumDao().getAlphabeticalAlbums((int) firstResult, (int) maxResults, false, true, allFolders); - for (Album item : selectedItems) { - addItem(didl, item); - } - - return createBrowseResult(didl, (int) didl.getCount(), getAllItemsSize()); - } public Container createContainer(Album album) throws Exception { MusicAlbum container = new MusicAlbum(); diff --git a/airsonic-main/src/main/java/org/airsonic/player/service/upnp/RecentAlbumUpnpProcessor.java b/airsonic-main/src/main/java/org/airsonic/player/service/upnp/RecentAlbumUpnpProcessor.java index 32023cc6..22707229 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/service/upnp/RecentAlbumUpnpProcessor.java +++ b/airsonic-main/src/main/java/org/airsonic/player/service/upnp/RecentAlbumUpnpProcessor.java @@ -37,6 +37,7 @@ public class RecentAlbumUpnpProcessor extends AlbumUpnpProcessor { setRootTitle("RecentAlbums"); } + @Override public List getAllItems() { List allFolders = getDispatchingContentDirectory().getSettingsService().getAllMusicFolders(); List recentAlbums = getAlbumDao().getNewestAlbums(0, RECENT_COUNT, allFolders); @@ -51,4 +52,11 @@ public class RecentAlbumUpnpProcessor extends AlbumUpnpProcessor { } return recentAlbums; } + + @Override + public int getAllItemsSize() throws Exception { + List allFolders = getDispatchingContentDirectory().getSettingsService().getAllMusicFolders(); + int allAlbumCount = getAlbumDao().getAlbumCount(allFolders); + return Math.min(allAlbumCount, RECENT_COUNT); + } } From dcf41ce9e0e885673f419110062b953ec166474f Mon Sep 17 00:00:00 2001 From: Allen Petersen Date: Mon, 11 Dec 2017 09:44:08 -0500 Subject: [PATCH 2/2] Issue 617 Restores optimization in AlbumUpnpProcessor and instead re-implements default behavior in RecentAlbumUpnpProcessor subclass. --- .../service/upnp/AlbumUpnpProcessor.java | 16 ++++++++++++ .../upnp/RecentAlbumUpnpProcessor.java | 26 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/airsonic-main/src/main/java/org/airsonic/player/service/upnp/AlbumUpnpProcessor.java b/airsonic-main/src/main/java/org/airsonic/player/service/upnp/AlbumUpnpProcessor.java index b9c4e98b..9b28a437 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/service/upnp/AlbumUpnpProcessor.java +++ b/airsonic-main/src/main/java/org/airsonic/player/service/upnp/AlbumUpnpProcessor.java @@ -26,8 +26,10 @@ import org.airsonic.player.domain.CoverArtScheme; import org.airsonic.player.domain.MediaFile; import org.airsonic.player.domain.MusicFolder; import org.airsonic.player.service.SearchService; +import org.fourthline.cling.support.model.BrowseResult; import org.fourthline.cling.support.model.DIDLContent; import org.fourthline.cling.support.model.PersonWithRole; +import org.fourthline.cling.support.model.SortCriterion; import org.fourthline.cling.support.model.container.Container; import org.fourthline.cling.support.model.container.MusicAlbum; import org.springframework.beans.factory.annotation.Autowired; @@ -59,6 +61,20 @@ public class AlbumUpnpProcessor extends UpnpContentProcessor setRootTitle("Albums"); } + /** + * Browses the top-level content of a type. + */ + public BrowseResult browseRoot(String filter, long firstResult, long maxResults, SortCriterion[] orderBy) throws Exception { + DIDLContent didl = new DIDLContent(); + + List allFolders = getDispatchingContentDirectory().getSettingsService().getAllMusicFolders(); + List selectedItems = getAlbumDao().getAlphabeticalAlbums((int) firstResult, (int) maxResults, false, true, allFolders); + for (Album item : selectedItems) { + addItem(didl, item); + } + + return createBrowseResult(didl, (int) didl.getCount(), getAllItemsSize()); + } public Container createContainer(Album album) throws Exception { MusicAlbum container = new MusicAlbum(); diff --git a/airsonic-main/src/main/java/org/airsonic/player/service/upnp/RecentAlbumUpnpProcessor.java b/airsonic-main/src/main/java/org/airsonic/player/service/upnp/RecentAlbumUpnpProcessor.java index 22707229..e4202311 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/service/upnp/RecentAlbumUpnpProcessor.java +++ b/airsonic-main/src/main/java/org/airsonic/player/service/upnp/RecentAlbumUpnpProcessor.java @@ -20,6 +20,10 @@ package org.airsonic.player.service.upnp; import org.airsonic.player.domain.Album; import org.airsonic.player.domain.MusicFolder; +import org.airsonic.player.util.Util; +import org.fourthline.cling.support.model.BrowseResult; +import org.fourthline.cling.support.model.DIDLContent; +import org.fourthline.cling.support.model.SortCriterion; import org.springframework.stereotype.Service; import java.util.List; @@ -37,6 +41,28 @@ public class RecentAlbumUpnpProcessor extends AlbumUpnpProcessor { setRootTitle("RecentAlbums"); } + /** + * Browses the top-level content. + */ + public BrowseResult browseRoot(String filter, long firstResult, long maxResults, SortCriterion[] orderBy) throws Exception { + // AlbumUpnpProcessor overrides browseRoot() with an optimization; + // this restores the default behavior for the subclass. + DIDLContent didl = new DIDLContent(); + List allItems = getAllItems(); + if (filter != null) { + // filter items (not implemented yet) + } + if (orderBy != null) { + // sort items (not implemented yet) + } + List selectedItems = Util.subList(allItems, firstResult, maxResults); + for (Album item : selectedItems) { + addItem(didl, item); + } + + return createBrowseResult(didl, (int) didl.getCount(), allItems.size()); + } + @Override public List getAllItems() { List allFolders = getDispatchingContentDirectory().getSettingsService().getAllMusicFolders();