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..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,29 @@ 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(); List recentAlbums = getAlbumDao().getNewestAlbums(0, RECENT_COUNT, allFolders); @@ -51,4 +78,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); + } }