|  |  | @ -19,6 +19,7 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  |  */ |  |  |  |  */ | 
			
		
	
		
		
			
				
					
					|  |  |  | package org.libresonic.player.controller; |  |  |  | package org.libresonic.player.controller; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import org.apache.commons.lang3.BooleanUtils; | 
			
		
	
		
		
			
				
					
					|  |  |  | import org.libresonic.player.domain.*; |  |  |  | import org.libresonic.player.domain.*; | 
			
		
	
		
		
			
				
					
					|  |  |  | import org.libresonic.player.service.*; |  |  |  | import org.libresonic.player.service.*; | 
			
		
	
		
		
			
				
					
					|  |  |  | import org.springframework.beans.factory.annotation.Autowired; |  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
			
		
	
	
		
		
			
				
					|  |  | @ -26,6 +27,7 @@ import org.springframework.stereotype.Controller; | 
			
		
	
		
		
			
				
					
					|  |  |  | import org.springframework.web.bind.ServletRequestUtils; |  |  |  | import org.springframework.web.bind.ServletRequestUtils; | 
			
		
	
		
		
			
				
					
					|  |  |  | import org.springframework.web.bind.annotation.RequestMapping; |  |  |  | import org.springframework.web.bind.annotation.RequestMapping; | 
			
		
	
		
		
			
				
					
					|  |  |  | import org.springframework.web.bind.annotation.RequestMethod; |  |  |  | import org.springframework.web.bind.annotation.RequestMethod; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import org.springframework.web.bind.annotation.RequestParam; | 
			
		
	
		
		
			
				
					
					|  |  |  | import org.springframework.web.servlet.ModelAndView; |  |  |  | import org.springframework.web.servlet.ModelAndView; | 
			
		
	
		
		
			
				
					
					|  |  |  | import org.springframework.web.servlet.view.RedirectView; |  |  |  | import org.springframework.web.servlet.view.RedirectView; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -59,7 +61,9 @@ public class MainController  { | 
			
		
	
		
		
			
				
					
					|  |  |  |     private AdService adService; |  |  |  |     private AdService adService; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     @RequestMapping(method = RequestMethod.GET) |  |  |  |     @RequestMapping(method = RequestMethod.GET) | 
			
		
	
		
		
			
				
					
					|  |  |  |     protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { |  |  |  |     protected ModelAndView handleRequestInternal(@RequestParam(name = "showAll", required = false) Boolean showAll, | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                                                  HttpServletRequest request, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                                                  HttpServletResponse response) throws Exception { | 
			
		
	
		
		
			
				
					
					|  |  |  |         Map<String, Object> map = new HashMap<>(); |  |  |  |         Map<String, Object> map = new HashMap<>(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         Player player = playerService.getPlayer(request, response); |  |  |  |         Player player = playerService.getPlayer(request, response); | 
			
		
	
	
		
		
			
				
					|  |  | @ -84,7 +88,12 @@ public class MainController  { | 
			
		
	
		
		
			
				
					
					|  |  |  |             return new ModelAndView(new RedirectView("accessDenied.view")); |  |  |  |             return new ModelAndView(new RedirectView("accessDenied.view")); | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         List<MediaFile> children = mediaFiles.size() == 1 ? mediaFileService.getChildrenOf(dir, true, true, true) : getMultiFolderChildren(mediaFiles); |  |  |  |         UserSettings userSettings = settingsService.getUserSettings(username); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         List<MediaFile> children = mediaFiles.size() == 1 ? mediaFileService.getChildrenOf(dir, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 true, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 true, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 true) : getMultiFolderChildren(mediaFiles); | 
			
		
	
		
		
			
				
					
					|  |  |  |         List<MediaFile> files = new ArrayList<>(); |  |  |  |         List<MediaFile> files = new ArrayList<>(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         List<MediaFile> subDirs = new ArrayList<>(); |  |  |  |         List<MediaFile> subDirs = new ArrayList<>(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         for (MediaFile child : children) { |  |  |  |         for (MediaFile child : children) { | 
			
		
	
	
		
		
			
				
					|  |  | @ -95,7 +104,14 @@ public class MainController  { | 
			
		
	
		
		
			
				
					
					|  |  |  |             } |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         UserSettings userSettings = settingsService.getUserSettings(username); |  |  |  |         int userPaginationPreference = userSettings.getPaginationSize(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(userPaginationPreference <= 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             showAll = true; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         boolean thereIsMoreSubDirs = trimToSize(showAll, subDirs, userPaginationPreference); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         boolean thereIsMoreSAlbums = false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         mediaFileService.populateStarredDate(dir, username); |  |  |  |         mediaFileService.populateStarredDate(dir, username); | 
			
		
	
		
		
			
				
					
					|  |  |  |         mediaFileService.populateStarredDate(children, username); |  |  |  |         mediaFileService.populateStarredDate(children, username); | 
			
		
	
	
		
		
			
				
					|  |  | @ -115,7 +131,9 @@ public class MainController  { | 
			
		
	
		
		
			
				
					
					|  |  |  |         map.put("brand", settingsService.getBrand()); |  |  |  |         map.put("brand", settingsService.getBrand()); | 
			
		
	
		
		
			
				
					
					|  |  |  |         map.put("viewAsList", isViewAsList(request, userSettings)); |  |  |  |         map.put("viewAsList", isViewAsList(request, userSettings)); | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (dir.isAlbum()) { |  |  |  |         if (dir.isAlbum()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             map.put("sieblingAlbums", getSieblingAlbums(dir)); |  |  |  |             List<MediaFile> sieblingAlbums = getSieblingAlbums(dir); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             thereIsMoreSAlbums = trimToSize(showAll, sieblingAlbums, userPaginationPreference); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             map.put("sieblingAlbums", sieblingAlbums); | 
			
		
	
		
		
			
				
					
					|  |  |  |             map.put("artist", guessArtist(children)); |  |  |  |             map.put("artist", guessArtist(children)); | 
			
		
	
		
		
			
				
					
					|  |  |  |             map.put("album", guessAlbum(children)); |  |  |  |             map.put("album", guessAlbum(children)); | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
	
		
		
			
				
					|  |  | @ -127,6 +145,7 @@ public class MainController  { | 
			
		
	
		
		
			
				
					
					|  |  |  |         } catch (SecurityException x) { |  |  |  |         } catch (SecurityException x) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             // Happens if Podcast directory is outside music folder.
 |  |  |  |             // Happens if Podcast directory is outside music folder.
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         map.put("thereIsMore", (thereIsMoreSubDirs || thereIsMoreSAlbums) && !BooleanUtils.isTrue(showAll)); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         Integer userRating = ratingService.getRatingForUser(username, dir); |  |  |  |         Integer userRating = ratingService.getRatingForUser(username, dir); | 
			
		
	
		
		
			
				
					
					|  |  |  |         Double averageRating = ratingService.getAverageRating(dir); |  |  |  |         Double averageRating = ratingService.getAverageRating(dir); | 
			
		
	
	
		
		
			
				
					|  |  | @ -152,7 +171,18 @@ public class MainController  { | 
			
		
	
		
		
			
				
					
					|  |  |  |             view = "artistMain"; |  |  |  |             view = "artistMain"; | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         return new ModelAndView(view,"model",map); |  |  |  |         return new ModelAndView(view, "model", map); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     private <T> boolean trimToSize(Boolean showAll, List<T> list, int userPaginationPreference) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         boolean trimmed = false; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if(!BooleanUtils.isTrue(showAll)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if(list.size() > userPaginationPreference) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 trimmed = true; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 list.subList(userPaginationPreference, list.size()).clear(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return trimmed; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     private boolean isViewAsList(HttpServletRequest request, UserSettings userSettings) { |  |  |  |     private boolean isViewAsList(HttpServletRequest request, UserSettings userSettings) { | 
			
		
	
	
		
		
			
				
					|  |  | 
 |