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();