Merge Pull Request #124 into develop
	
		
	
				
					
				
			
						commit
						9d3d6ce52d
					
				| @ -0,0 +1,123 @@ | ||||
| package org.libresonic.player; | ||||
| 
 | ||||
| import org.apache.commons.io.FileUtils; | ||||
| import org.libresonic.player.dao.DaoHelper; | ||||
| import org.libresonic.player.service.MediaScannerService; | ||||
| import org.springframework.context.ApplicationContext; | ||||
| import org.springframework.context.support.ClassPathXmlApplicationContext; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.nio.file.Files; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.stream.Collectors; | ||||
| 
 | ||||
| public class TestCaseUtils { | ||||
| 
 | ||||
|   private static final String LIBRESONIC_HOME_FOR_TEST = "/tmp/libresonic"; | ||||
| 
 | ||||
|   private static File libresonicHomeDirForTest = null; | ||||
| 
 | ||||
|   /** | ||||
|    * Returns the path of the LIBRESONIC_HOME directory to use for tests. | ||||
|    * This will create a temporary directory. | ||||
|    * | ||||
|    * @return LIBRESONIC_HOME directory path. | ||||
|    * @throws RuntimeException if it fails to create the temp directory. | ||||
|    */ | ||||
|   public static String libresonicHomePathForTest() { | ||||
| 
 | ||||
|     if (libresonicHomeDirForTest == null) { | ||||
|       try { | ||||
|         libresonicHomeDirForTest = Files.createTempDirectory("libresonic_test_").toFile(); | ||||
|       } catch (IOException e) { | ||||
|         throw new RuntimeException("Error while creating temporary LIBRESONIC_HOME directory for tests"); | ||||
|       } | ||||
|       System.out.println("LIBRESONIC_HOME directory will be "+libresonicHomeDirForTest.getAbsolutePath()); | ||||
|     } | ||||
|     return libresonicHomeDirForTest.getAbsolutePath(); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   /** | ||||
|    * Cleans the LIBRESONIC_HOME directory used for tests. | ||||
|    * | ||||
|    * @throws IOException | ||||
|      */ | ||||
|   public static void cleanLibresonicHomeForTest() throws IOException { | ||||
| 
 | ||||
|     File libresonicHomeDir = new File(libresonicHomePathForTest()); | ||||
|     if (libresonicHomeDir.exists() && libresonicHomeDir.isDirectory()) { | ||||
|       System.out.println("Delete libresonic home (ie. "+libresonicHomeDir.getAbsolutePath()+")."); | ||||
|       try { | ||||
|         FileUtils.deleteDirectory(libresonicHomeDir); | ||||
|       } catch (IOException e) { | ||||
|         System.out.println("Error while deleting libresonic home."); | ||||
|         e.printStackTrace(); | ||||
|         throw e; | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Constructs a map of records count per table. | ||||
|    * | ||||
|    * @param daoHelper DaoHelper object | ||||
|    * @return Map table name -> records count | ||||
|      */ | ||||
|   public static Map<String, Integer> recordsInAllTables(DaoHelper daoHelper) { | ||||
|     List<String> tableNames = daoHelper.getJdbcTemplate().queryForList("" + | ||||
|                     "select table_name " + | ||||
|                     "from information_schema.system_tables " + | ||||
|                     "where table_name not like 'SYSTEM%'" | ||||
|             , String.class); | ||||
|     Map<String, Integer> nbRecords = | ||||
|             tableNames.stream() | ||||
|                     .collect(Collectors.toMap(table -> table, table -> recordsInTable(table,daoHelper))); | ||||
| 
 | ||||
|     return nbRecords; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Counts records in a table. | ||||
|    * | ||||
|    * @param tableName | ||||
|    * @param daoHelper | ||||
|    * @return | ||||
|      */ | ||||
|   public static Integer recordsInTable(String tableName, DaoHelper daoHelper) { | ||||
|     return daoHelper.getJdbcTemplate().queryForInt("select count(1) from " + tableName); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   public static ApplicationContext loadSpringApplicationContext(String baseResources) { | ||||
|     String applicationContextService = baseResources + "applicationContext-service.xml"; | ||||
|     String applicationContextCache = baseResources + "applicationContext-cache.xml"; | ||||
| 
 | ||||
|     String[] configLocations = new String[]{ | ||||
|             TestCaseUtils.class.getClass().getResource(applicationContextCache).toString(), | ||||
|             TestCaseUtils.class.getClass().getResource(applicationContextService).toString() | ||||
|     }; | ||||
|     return new ClassPathXmlApplicationContext(configLocations); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   /** | ||||
|    * Scans the music library   * @param mediaScannerService | ||||
|    */ | ||||
|   public static void execScan(MediaScannerService mediaScannerService) { | ||||
|     mediaScannerService.scanLibrary(); | ||||
| 
 | ||||
|     while (mediaScannerService.isScanning()) { | ||||
|       try { | ||||
|         Thread.sleep(1000); | ||||
|       } catch (InterruptedException e) { | ||||
|         e.printStackTrace(); | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,39 @@ | ||||
| package org.libresonic.player.dao; | ||||
| 
 | ||||
| import org.libresonic.player.domain.MusicFolder; | ||||
| 
 | ||||
| import java.io.File; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
| 
 | ||||
| public class MusicFolderDaoMock extends MusicFolderDao { | ||||
| 
 | ||||
|   private static String baseResources = "/MEDIAS/"; | ||||
| 
 | ||||
|   public static String resolveBaseMediaPath() { | ||||
|     String baseDir = MusicFolderDaoMock.class.getResource(baseResources).toString().replace("file:",""); | ||||
|     return baseDir; | ||||
|   } | ||||
| 
 | ||||
|   public static String resolveMusicFolderPath() { | ||||
|     return (MusicFolderDaoMock.resolveBaseMediaPath() + "Music"); | ||||
|   } | ||||
| 
 | ||||
|   public static String resolveMusic2FolderPath() { | ||||
|     return (MusicFolderDaoMock.resolveBaseMediaPath() + "Music2"); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public List<MusicFolder> getAllMusicFolders() { | ||||
|     List<MusicFolder> liste = new ArrayList<>(); | ||||
|     File musicDir = new File(MusicFolderDaoMock.resolveMusicFolderPath()); | ||||
|     MusicFolder musicFolder = new MusicFolder(1,musicDir,"Music",true,new Date()); | ||||
|     liste.add(musicFolder); | ||||
| 
 | ||||
|     File music2Dir = new File(MusicFolderDaoMock.resolveMusic2FolderPath()); | ||||
|     MusicFolder musicFolder2 = new MusicFolder(2,music2Dir,"Music2",true,new Date()); | ||||
|     liste.add(musicFolder2); | ||||
|     return liste; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,120 @@ | ||||
| package org.libresonic.player.service; | ||||
| 
 | ||||
| import com.codahale.metrics.ConsoleReporter; | ||||
| import com.codahale.metrics.JmxReporter; | ||||
| import com.codahale.metrics.MetricRegistry; | ||||
| import com.codahale.metrics.Timer; | ||||
| import junit.framework.Assert; | ||||
| import junit.framework.TestCase; | ||||
| import org.libresonic.player.TestCaseUtils; | ||||
| import org.libresonic.player.dao.*; | ||||
| import org.libresonic.player.domain.Album; | ||||
| import org.libresonic.player.domain.Artist; | ||||
| import org.libresonic.player.domain.MediaFile; | ||||
| import org.springframework.context.ApplicationContext; | ||||
| 
 | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| 
 | ||||
| /** | ||||
|  * A unit test class to test the MediaScannerService. | ||||
|  * | ||||
|  * This class uses the Spring application context configuration present in the | ||||
|  * /org/libresonic/player/service/mediaScannerServiceTestCase/ directory. | ||||
|  * | ||||
|  * The media library is found in the /MEDIAS directory. | ||||
|  * It is composed of 2 musicFolders (Music and Music2) and several little weight audio files. | ||||
|  * | ||||
|  * At runtime, the subsonic_home dir is set to target/test-classes/org/libresonic/player/service/mediaScannerServiceTestCase. | ||||
|  * An empty database is created on the fly. | ||||
|  * | ||||
|  */ | ||||
| public class MediaScannerServiceTestCase extends TestCase { | ||||
| 
 | ||||
|   private static String baseResources = "/org/libresonic/player/service/mediaScannerServiceTestCase/"; | ||||
| 
 | ||||
|   private final MetricRegistry metrics = new MetricRegistry(); | ||||
| 
 | ||||
| 
 | ||||
|   private MediaScannerService mediaScannerService = null; | ||||
|   private MediaFileDao mediaFileDao = null; | ||||
|   private MusicFolderDao musicFolderDao = null; | ||||
|   private DaoHelper daoHelper = null; | ||||
|   private MediaFileService mediaFileService = null; | ||||
|   private ArtistDao artistDao = null; | ||||
|   private AlbumDao albumDao = null; | ||||
| 
 | ||||
| 
 | ||||
|   @Override | ||||
|   protected void setUp() throws Exception { | ||||
|     super.setUp(); | ||||
| 
 | ||||
|     System.setProperty("libresonic.home", TestCaseUtils.libresonicHomePathForTest()); | ||||
| 
 | ||||
|     TestCaseUtils.cleanLibresonicHomeForTest(); | ||||
| 
 | ||||
|     // load spring context
 | ||||
|     ApplicationContext context = TestCaseUtils.loadSpringApplicationContext(baseResources); | ||||
| 
 | ||||
|     mediaScannerService = (MediaScannerService)context.getBean("mediaScannerService"); | ||||
|     mediaFileDao = (MediaFileDao)context.getBean("mediaFileDao"); | ||||
|     musicFolderDao = (MusicFolderDao) context.getBean("musicFolderDao"); | ||||
|     daoHelper = (DaoHelper) context.getBean("daoHelper"); | ||||
|     mediaFileService = (MediaFileService) context.getBean("mediaFileService"); | ||||
|     artistDao = (ArtistDao) context.getBean("artistDao"); | ||||
|     albumDao = (AlbumDao) context.getBean("albumDao"); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   /** | ||||
|    * Tests the MediaScannerService by scanning the test media library into an empty database. | ||||
|    */ | ||||
|   public void testScanLibrary() { | ||||
| 
 | ||||
|     Timer globalTimer = metrics.timer(MetricRegistry.name(MediaScannerServiceTestCase.class, "Timer.global")); | ||||
| 
 | ||||
|     Timer.Context globalTimerContext =  globalTimer.time(); | ||||
|     TestCaseUtils.execScan(mediaScannerService); | ||||
|     globalTimerContext.stop(); | ||||
| 
 | ||||
|     System.out.println("--- Report of records count per table ---"); | ||||
|     Map<String,Integer> records = TestCaseUtils.recordsInAllTables(daoHelper); | ||||
|     records.keySet().forEach(tableName -> System.out.println(tableName+" : "+records.get(tableName).toString() )); | ||||
|     System.out.println("--- *********************** ---"); | ||||
| 
 | ||||
| 
 | ||||
|     // Music Folder Music must have 3 children
 | ||||
|     List<MediaFile> listeMusicChildren = mediaFileDao.getChildrenOf(MusicFolderDaoMock.resolveMusicFolderPath()); | ||||
|     Assert.assertEquals(3,listeMusicChildren.size()); | ||||
|     // Music Folder Music2 must have 1 children
 | ||||
|     List<MediaFile> listeMusic2Children = mediaFileDao.getChildrenOf(MusicFolderDaoMock.resolveMusic2FolderPath()); | ||||
|     Assert.assertEquals(1,listeMusic2Children.size()); | ||||
| 
 | ||||
|     System.out.println("--- List of all artists ---"); | ||||
|     System.out.println("artistName#albumCount"); | ||||
|     List<Artist> allArtists = artistDao.getAlphabetialArtists(0,0,musicFolderDao.getAllMusicFolders()); | ||||
|     allArtists.forEach(artist -> System.out.println(artist.getName()+"#"+artist.getAlbumCount())); | ||||
|     System.out.println("--- *********************** ---"); | ||||
| 
 | ||||
|     System.out.println("--- List of all albums ---"); | ||||
|     System.out.println("name#artist"); | ||||
|     List<Album> allAlbums = albumDao.getAlphabetialAlbums(0,0,true,musicFolderDao.getAllMusicFolders()); | ||||
|     allAlbums.forEach(album -> System.out.println(album.getName()+"#"+album.getArtist())); | ||||
|     Assert.assertEquals(5,allAlbums.size()); | ||||
|     System.out.println("--- *********************** ---"); | ||||
| 
 | ||||
|     List<MediaFile> listeSongs = mediaFileDao.getSongsByGenre("Baroque Instrumental",0,0,musicFolderDao.getAllMusicFolders()); | ||||
|     Assert.assertEquals(2,listeSongs.size()); | ||||
| 
 | ||||
|     // display out metrics report
 | ||||
|     ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics) | ||||
|             .convertRatesTo(TimeUnit.SECONDS.SECONDS) | ||||
|             .convertDurationsTo(TimeUnit.MILLISECONDS) | ||||
|             .build(); | ||||
|     reporter.report(); | ||||
| 
 | ||||
|     System.out.print("End"); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
									
										Binary file not shown.
									
								
							
						
									
										Binary file not shown.
									
								
							
						| After Width: | Height: | Size: 39 KiB | 
									
										Binary file not shown.
									
								
							
						
									
										Binary file not shown.
									
								
							
						| After Width: | Height: | Size: 47 KiB | 
									
										Binary file not shown.
									
								
							
						
									
										Binary file not shown.
									
								
							
						| After Width: | Height: | Size: 70 KiB | 
									
										Binary file not shown.
									
								
							
						
									
										Binary file not shown.
									
								
							
						
									
										Binary file not shown.
									
								
							
						| After Width: | Height: | Size: 51 KiB | 
									
										Binary file not shown.
									
								
							
						
									
										Binary file not shown.
									
								
							
						| After Width: | Height: | Size: 32 KiB | 
| @ -0,0 +1,17 @@ | ||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | ||||
| 
 | ||||
| <beans xmlns="http://www.springframework.org/schema/beans" | ||||
|        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> | ||||
| 
 | ||||
|     <bean id="cacheFactory" class="org.libresonic.player.cache.CacheFactory"/> | ||||
| 
 | ||||
|     <bean id="userCache" factory-bean="cacheFactory" factory-method="getCache"> | ||||
|         <constructor-arg value="userCache"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="mediaFileMemoryCache" factory-bean="cacheFactory" factory-method="getCache"> | ||||
|         <constructor-arg value="mediaFileMemoryCache"/> | ||||
|     </bean> | ||||
| 
 | ||||
| </beans> | ||||
| @ -0,0 +1,186 @@ | ||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | ||||
| 
 | ||||
| <beans xmlns="http://www.springframework.org/schema/beans" | ||||
|        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> | ||||
| 
 | ||||
| 
 | ||||
|     <!-- DAO's --> | ||||
| 
 | ||||
|     <bean id="playerDao" class="org.libresonic.player.dao.PlayerDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="mediaFileDao" class="org.libresonic.player.dao.MediaFileDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="artistDao" class="org.libresonic.player.dao.ArtistDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="albumDao" class="org.libresonic.player.dao.AlbumDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="playlistDao" class="org.libresonic.player.dao.PlaylistDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="playQueueDao" class="org.libresonic.player.dao.PlayQueueDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="internetRadioDao" class="org.libresonic.player.dao.InternetRadioDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="musicFileInfoDao" class="org.libresonic.player.dao.RatingDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="musicFolderDao" class="org.libresonic.player.dao.MusicFolderDaoMock"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="userDao" class="org.libresonic.player.dao.UserDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="transcodingDao" class="org.libresonic.player.dao.TranscodingDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="podcastDao" class="org.libresonic.player.dao.PodcastDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="avatarDao" class="org.libresonic.player.dao.AvatarDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="shareDao" class="org.libresonic.player.dao.ShareDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="bookmarkDao" class="org.libresonic.player.dao.BookmarkDao"> | ||||
|         <property name="daoHelper" ref="daoHelper"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="daoHelper" class="org.libresonic.player.dao.DaoHelperFactory" factory-method="create"/> | ||||
| 
 | ||||
| 
 | ||||
|     <!-- Services --> | ||||
| 
 | ||||
|     <bean id="mediaFileService" class="org.libresonic.player.service.MediaFileService"> | ||||
|         <property name="securityService" ref="securityService"/> | ||||
|         <property name="settingsService" ref="settingsService"/> | ||||
|         <property name="mediaFileMemoryCache" ref="mediaFileMemoryCache"/> | ||||
|         <property name="mediaFileDao" ref="mediaFileDao"/> | ||||
|         <property name="albumDao" ref="albumDao"/> | ||||
|         <property name="metaDataParserFactory" ref="metaDataParserFactory"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="securityService" class="org.libresonic.player.service.SecurityService"> | ||||
|         <property name="settingsService" ref="settingsService"/> | ||||
|         <property name="userDao" ref="userDao"/> | ||||
|         <property name="userCache" ref="userCache"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="settingsService" class="org.libresonic.player.service.SettingsService" init-method="init"> | ||||
|         <property name="internetRadioDao" ref="internetRadioDao"/> | ||||
|         <property name="musicFolderDao" ref="musicFolderDao"/> | ||||
|         <property name="userDao" ref="userDao"/> | ||||
|         <property name="avatarDao" ref="avatarDao"/> | ||||
|         <property name="versionService" ref="versionService"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="mediaScannerService" class="org.libresonic.player.service.MediaScannerService" init-method="initNoSchedule" depends-on="metaDataParserFactory"> | ||||
|         <property name="settingsService" ref="settingsService"/> | ||||
|         <property name="mediaFileService" ref="mediaFileService"/> | ||||
|         <property name="mediaFileDao" ref="mediaFileDao"/> | ||||
|         <property name="playlistService" ref="playlistService"/> | ||||
|         <property name="artistDao" ref="artistDao"/> | ||||
|         <property name="albumDao" ref="albumDao"/> | ||||
|         <property name="searchService" ref="searchService"/> | ||||
|         <!-- <property name="queueSender" ref="queueSender"/> --> | ||||
|     </bean> | ||||
| 
 | ||||
| 
 | ||||
|     <bean id="searchService" class="org.libresonic.player.service.SearchService"> | ||||
|         <property name="mediaFileService" ref="mediaFileService"/> | ||||
|         <property name="artistDao" ref="artistDao"/> | ||||
|         <property name="albumDao" ref="albumDao"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="networkService" class="org.libresonic.player.service.NetworkService" init-method="init"> | ||||
|         <property name="settingsService" ref="settingsService"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="playerService" class="org.libresonic.player.service.PlayerService" init-method="init"> | ||||
|         <property name="playerDao" ref="playerDao"/> | ||||
|         <property name="statusService" ref="statusService"/> | ||||
|         <property name="securityService" ref="securityService"/> | ||||
|         <property name="transcodingService" ref="transcodingService"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="playlistService" class="org.libresonic.player.service.PlaylistService"> | ||||
|         <property name="mediaFileService" ref="mediaFileService"/> | ||||
|         <property name="securityService" ref="securityService"/> | ||||
|         <property name="settingsService" ref="settingsService"/> | ||||
|         <property name="mediaFileDao" ref="mediaFileDao"/> | ||||
|         <property name="playlistDao" ref="playlistDao"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="versionService" class="org.libresonic.player.service.VersionService" init-method="init"/> | ||||
| 
 | ||||
|     <bean id="statusService" class="org.libresonic.player.service.StatusService"> | ||||
|         <property name="mediaFileService" ref="mediaFileService"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="ratingService" class="org.libresonic.player.service.RatingService"> | ||||
|         <property name="ratingDao" ref="musicFileInfoDao"/> | ||||
|         <property name="mediaFileService" ref="mediaFileService"/> | ||||
|         <property name="securityService" ref="securityService"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="musicIndexService" class="org.libresonic.player.service.MusicIndexService"> | ||||
|         <property name="settingsService" ref="settingsService"/> | ||||
|         <property name="mediaFileService" ref="mediaFileService"/> | ||||
|     </bean> | ||||
| 
 | ||||
|     <bean id="transcodingService" class="org.libresonic.player.service.TranscodingService"> | ||||
|         <property name="transcodingDao" ref="transcodingDao"/> | ||||
|         <property name="settingsService" ref="settingsService"/> | ||||
|     </bean> | ||||
| 
 | ||||
| 
 | ||||
|     <bean id="podcastService" class="org.libresonic.player.service.PodcastService" init-method="init"> | ||||
|         <property name="podcastDao" ref="podcastDao"/> | ||||
|         <property name="settingsService" ref="settingsService"/> | ||||
|         <property name="securityService" ref="securityService"/> | ||||
|         <property name="mediaFileService" ref="mediaFileService"/> | ||||
|         <property name="metaDataParserFactory" ref="metaDataParserFactory"/> | ||||
|     </bean> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     <bean id="metaDataParserFactory" class="org.libresonic.player.service.metadata.MetaDataParserFactory"> | ||||
|         <property name="parsers"> | ||||
|             <list> | ||||
|                 <bean class="org.libresonic.player.service.metadata.JaudiotaggerParser"/> | ||||
|                 <bean class="org.libresonic.player.service.metadata.FFmpegParser"> | ||||
|                     <property name="transcodingService" ref="transcodingService"/> | ||||
|                 </bean> | ||||
|                 <bean class="org.libresonic.player.service.metadata.DefaultMetaDataParser"/> | ||||
|             </list> | ||||
|         </property> | ||||
|     </bean> | ||||
| 
 | ||||
| 
 | ||||
|     <bean id="localeResolver" class="org.libresonic.player.i18n.LibresonicLocaleResolver"> | ||||
|         <property name="securityService" ref="securityService"/> | ||||
|         <property name="settingsService" ref="settingsService"/> | ||||
|     </bean> | ||||
| 
 | ||||
| </beans> | ||||
					Loading…
					
					
				
		Reference in new issue