More code review feedback. Added case-insensitive (and correctly spelled) option to getAlphabeticalAlbums. Added getAlbumCount() method to AlbumDao. Moved AlbumUpnpProcessor from getting all the albums and returning a subset to requesting the subset directly from the dao, as suggested.
This commit is contained in:
@@ -153,7 +153,22 @@ public class AlbumDao extends AbstractDao {
|
|||||||
* @param musicFolders Only return albums from these folders.
|
* @param musicFolders Only return albums from these folders.
|
||||||
* @return Albums in alphabetical order.
|
* @return Albums in alphabetical order.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public List<Album> getAlphabetialAlbums(final int offset, final int count, boolean byArtist, final List<MusicFolder> musicFolders) {
|
public List<Album> getAlphabetialAlbums(final int offset, final int count, boolean byArtist, final List<MusicFolder> musicFolders) {
|
||||||
|
return getAlphabeticalAlbums(offset, count, byArtist, false, musicFolders);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns albums in alphabetical order.
|
||||||
|
*
|
||||||
|
* @param offset Number of albums to skip.
|
||||||
|
* @param count Maximum number of albums to return.
|
||||||
|
* @param byArtist Whether to sort by artist name
|
||||||
|
* @param musicFolders Only return albums from these folders.
|
||||||
|
* @param ignoreCase Use case insensitive sorting
|
||||||
|
* @return Albums in alphabetical order.
|
||||||
|
*/
|
||||||
|
public List<Album> getAlphabeticalAlbums(final int offset, final int count, boolean byArtist, boolean ignoreCase, final List<MusicFolder> musicFolders) {
|
||||||
if (musicFolders.isEmpty()) {
|
if (musicFolders.isEmpty()) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
@@ -162,11 +177,34 @@ public class AlbumDao extends AbstractDao {
|
|||||||
put("count", count);
|
put("count", count);
|
||||||
put("offset", offset);
|
put("offset", offset);
|
||||||
}};
|
}};
|
||||||
String orderBy = byArtist ? "artist, name" : "name";
|
String orderBy;
|
||||||
|
if (ignoreCase) {
|
||||||
|
orderBy = byArtist ? "LOWER(artist), LOWER(name)" : "LOWER(name)";
|
||||||
|
} else {
|
||||||
|
orderBy = byArtist ? "artist, name" : "name";
|
||||||
|
}
|
||||||
|
|
||||||
return namedQuery("select " + QUERY_COLUMNS + " from album where present and folder_id in (:folders) " +
|
return namedQuery("select " + QUERY_COLUMNS + " from album where present and folder_id in (:folders) " +
|
||||||
"order by " + orderBy + " limit :count offset :offset", rowMapper, args);
|
"order by " + orderBy + " limit :count offset :offset", rowMapper, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the count of albums in the given folders
|
||||||
|
*
|
||||||
|
* @param musicFolders Only return albums from these folders.
|
||||||
|
* @return the count of present albums
|
||||||
|
*/
|
||||||
|
public int getAlbumCount(final List<MusicFolder> musicFolders) {
|
||||||
|
if (musicFolders.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Map<String, Object> args = new HashMap<String, Object>();
|
||||||
|
args.put("folders", MusicFolder.toIdList(musicFolders));
|
||||||
|
|
||||||
|
return getNamedParameterJdbcTemplate().queryForObject("select count(*) from album where present and folder_id in (:folders)", args, Integer.class);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the most frequently played albums.
|
* Returns the most frequently played albums.
|
||||||
*
|
*
|
||||||
|
|||||||
+24
-1
@@ -18,8 +18,10 @@
|
|||||||
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
|
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus
|
||||||
*/
|
*/
|
||||||
package org.libresonic.player.service.upnp;
|
package org.libresonic.player.service.upnp;
|
||||||
|
import org.fourthline.cling.support.model.BrowseResult;
|
||||||
import org.fourthline.cling.support.model.DIDLContent;
|
import org.fourthline.cling.support.model.DIDLContent;
|
||||||
import org.fourthline.cling.support.model.PersonWithRole;
|
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.Container;
|
||||||
import org.fourthline.cling.support.model.container.MusicAlbum;
|
import org.fourthline.cling.support.model.container.MusicAlbum;
|
||||||
import org.libresonic.player.dao.AlbumDao;
|
import org.libresonic.player.dao.AlbumDao;
|
||||||
@@ -53,6 +55,20 @@ public class AlbumUpnpProcessor extends UpnpContentProcessor <Album, MediaFile>
|
|||||||
setRootTitle("Albums");
|
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<MusicFolder> allFolders = getDispatchingContentDirectory().getSettingsService().getAllMusicFolders();
|
||||||
|
List<Album> 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 {
|
public Container createContainer(Album album) throws Exception {
|
||||||
MusicAlbum container = new MusicAlbum();
|
MusicAlbum container = new MusicAlbum();
|
||||||
|
|
||||||
@@ -74,7 +90,7 @@ public class AlbumUpnpProcessor extends UpnpContentProcessor <Album, MediaFile>
|
|||||||
|
|
||||||
public List<Album> getAllItems() {
|
public List<Album> getAllItems() {
|
||||||
List<MusicFolder> allFolders = getDispatchingContentDirectory().getSettingsService().getAllMusicFolders();
|
List<MusicFolder> allFolders = getDispatchingContentDirectory().getSettingsService().getAllMusicFolders();
|
||||||
return getAlbumDao().getAlphabetialAlbums(0, 0, false, allFolders);
|
return getAlbumDao().getAlphabeticalAlbums(0, Integer.MAX_VALUE, false, true, allFolders);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Album getItemById(String id) throws Exception {
|
public Album getItemById(String id) throws Exception {
|
||||||
@@ -110,6 +126,13 @@ public class AlbumUpnpProcessor extends UpnpContentProcessor <Album, MediaFile>
|
|||||||
return allFiles;
|
return allFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAllItemsSize() throws Exception {
|
||||||
|
List<MusicFolder> allFolders = getDispatchingContentDirectory().getSettingsService().getAllMusicFolders();
|
||||||
|
return getAlbumDao().getAlbumCount(allFolders);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void addChild(DIDLContent didl, MediaFile child) throws Exception {
|
public void addChild(DIDLContent didl, MediaFile child) throws Exception {
|
||||||
didl.addItem(getDispatcher().getMediaFileProcessor().createItem(child));
|
didl.addItem(getDispatcher().getMediaFileProcessor().createItem(child));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user