Page 1 of 4

Subsonic 6.1.beta1 released

PostPosted: Mon Mar 13, 2017 5:52 pm
by sindre_mehus
EDIT: Due to issues related to the upgrade of the internal HSQLDB I have temporarily removed the beta from the Download page.

Dear friends,

I have finally released the first beta for Subsonic 6.1

Please note that this is a one-way upgrade, see http://www.subsonic.org/pages/database-upgrade.jsp for more details.

New: Improved video streaming with HLS.
New: Added support for manually selecting video bitrate (in addition to HLS adaptive bitrate switching).
New: Bookmark support for podcasts, audio books and videos. Works across web players, SONOS and apps.
New: Improved artist radio feature. Prioritize top songs.
New: Improved search relevance.
New: Added support for using MySQL, PostgreSQL and MariaDB as database backends.
New: Upgraded default database HSQLDB to version 2.3.4.
New: Show album and artist images on search result and "starred" pages.
New: Added tag support for AIFF files.
New: Added table headers in web interface.
New: Nicer cover art images on hi-res screens.
New: Nicer top and left menus.
New: Added controls for selecting all tracks in album/podcast/play queue.
New: Moved menu above play queue.
New: Moved shuffle button next to player controls.
New: Added tooltip to player buttons.
New: Updated Dutch translation, courtesy of Toolman.
New: Updated Korean translation, courtesy of Rhetor Choi.
New: Updated Estonian translation, courtesy of Olav Mägi.
Bugfix: Fixed broken Chromecast support.
Bugfix: Avoid multiple submissions to Last.fm
Bugfix: Missing artist images.
Bugfix: "Save as playlist" broken in Firefox.
Bugfix: Left pane reloads when reloading random albums.
Bugfix: Download play queue broken if containing duplicate songs.
Bugfix: Windows uninstaller should only delete known files.
Bugfix: "Download all" sometimes causes corrupt zip file.
Bugfix: Some podcasts with https don't work.
Bugfix: Delete all pertaining files when deleting a podcast channel.
REST: Added getScanStatus and startScan methods.

Hope you like it!
Sindre

Re: Subsonic 6.1.beta1 released

PostPosted: Mon Mar 13, 2017 6:24 pm
by acroyear
New: Bookmark support for podcasts, audio books and videos. Works across web players, SONOS and apps


From an API perspective, how is this different? I can just use the 'id' of the entry no matter its source and there won't be any overlap?

Re: Subsonic 6.1.beta1 released

PostPosted: Mon Mar 13, 2017 6:32 pm
by sindre_mehus
acroyear wrote:
New: Bookmark support for podcasts, audio books and videos. Works across web players, SONOS and apps


From an API perspective, how is this different? I can just use the 'id' of the entry no matter its source and there won't be any overlap?


There is not change API-wise, it's just that the web app (and SONOS) now also uses the existing bookmark API.

Re: Subsonic 6.1.beta1 released

PostPosted: Mon Mar 13, 2017 11:50 pm
by toolman
Jusr installed the Subsonic 6.1.beta1 release on a testmachine
On the surface not much has changed.
There's one page more marked Bookmarks.
I did some tests on the searchfunction and this indeed seems to be performing a lot better.
However in the changelog it says: New: Added support for using MySQL, PostgreSQL and MariaDB as database backends.
I know you have to manually edit a file in Subsonic according to the OS on which Subsonic is running, but wouldn't it be a lot easier to create a page In Subsonic to enter the correct parameters according to the OS you are using? Preferably with a kind of check if you entered the correct data.
I think the current method to configure Subsonic to use another database is prone to mistakes and not very user friendly.
Other than that it seems to me that Sindre has done some major overhauling which makes Subsonic much better.

Re: Subsonic 6.1.beta1 released

PostPosted: Tue Mar 14, 2017 12:00 am
by FlyingPersian
Thank you very much! The upgrade worked like a charm on FreeNAS, I just copied over the files of the standalone.tar.gz into the old folder and restarted the server! Is there any chance some of the themes that are available in madsonic will be imported? I really really love their Madsonic X-MAS Red theme :o

Re: Subsonic 6.1.beta1 released

PostPosted: Tue Mar 14, 2017 3:10 am
by kayzlot1
Fixed Chromecast support and users can choose their video quality again!!! :D

Thanks Sindre

Re: Subsonic 6.1.beta1 released

PostPosted: Tue Mar 14, 2017 8:33 am
by guss77
A. Thanks for the beta release!
B. Where is a good place to discuss issues with the beta?

Re: Subsonic 6.1.beta1 released

PostPosted: Tue Mar 14, 2017 3:39 pm
by Tak-MK
The re-scanning like the first time after upgrading is killing me, it'll last an entire day :(
But meh, thanks a lot for the upgrade! ¿Is there any test to know if MySQL/PostgreSQL is better than HSQLDB for Subsonic?

Re: Subsonic 6.1.beta1 released

PostPosted: Tue Mar 14, 2017 4:35 pm
by oa72
I'm having issues with the artist images (thumbnail and search images) loaded from last.fm while accessing the upgraded Subsonic via a Apache proxy, everything else seems to be rendering fine. When testing locally without the Apache proxy artist images are fine.

Ex.
1) Local access, image link rendering ok
http://192.168.2.198:4040/artistImage.view?id=40388 redirects to
https://lastfm-img2.akamaized.net/i/u/1 ... f0b6d9.png

2) Apache proxy access, image link rendered with error 404
https://mydomain.net/artistImage.view?id=40388 redirects to
https://mydomain.net/i/u/174s/f1cdf1e31 ... f0b6d9.png


Artist images within biography section is rendering fine together with text fetched from last.fm

Is this due to a bug in the beta release (or am I having a proxy issues)?

Re: Subsonic 6.1.beta1 released

PostPosted: Tue Mar 14, 2017 5:28 pm
by Tak-MK
oa72 wrote:I'm having issues with the artist images (thumbnail and search images) loaded from last.fm while accessing the upgraded Subsonic via a Apache proxy, everything else seems to be rendering fine. When testing locally without the Apache proxy artist images are fine.

Ex.
1) Local access, image link rendering ok
http://192.168.2.198:4040/artistImage.view?id=40388 redirects to
https://lastfm-img2.akamaized.net/i/u/1 ... f0b6d9.png

2) Apache proxy access, image link rendered with error 404
https://mydomain.net/artistImage.view?id=40388 redirects to
https://mydomain.net/i/u/174s/f1cdf1e31 ... f0b6d9.png


Artist images within biography section is rendering fine together with text fetched from last.fm

Is this due to a bug in the beta release (or am I having a proxy issues)?

It's working for me using apache too.

Re: Subsonic 6.1.beta1 released

PostPosted: Tue Mar 14, 2017 6:21 pm
by oa72
Tak-MK wrote:
oa72 wrote:I'm having issues with the artist images (thumbnail and search images) loaded from last.fm while accessing the upgraded Subsonic via a Apache proxy, everything else seems to be rendering fine. When testing locally without the Apache proxy artist images are fine.

Ex.
1) Local access, image link rendering ok
http://192.168.2.198:4040/artistImage.view?id=40388 redirects to
https://lastfm-img2.akamaized.net/i/u/1 ... f0b6d9.png

2) Apache proxy access, image link rendered with error 404
https://mydomain.net/artistImage.view?id=40388 redirects to
https://mydomain.net/i/u/174s/f1cdf1e31 ... f0b6d9.png


Artist images within biography section is rendering fine together with text fetched from last.fm

Is this due to a bug in the beta release (or am I having a proxy issues)?

It's working for me using apache too.


Solved it, it was a incorrect ProxyPassReverse statement.

Then I'm happy, and can just say thanks for the updated release. Looking good so far :D

Re: Subsonic 6.1.beta1 released

PostPosted: Tue Mar 14, 2017 7:31 pm
by eareye
After upgrading from a working Subsonic 6.0 to 6.1b, I get a constraint violation in the ALBUM table (due to the ARTIST and NAME not being unique in a record as far as I can tell from the schema). I guess that means I must have two instances of the same album or something like that. I don't know if this is a new restriction enforced in 6.1b (or why 6.0 didn't seem to mind).

I plan on trying to access the database to see if I can find an easy way to determine if any records in the table do, in fact, have the same artist and album name values so I can remove them so I can start Subsonic again.

Code: Select all
[2017-03-14 12:48:23,931] ERROR HsqlDaoHelper - Failed to initialize database.
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: unique constraint or index violation; SYS_CT_134 table: ALBUM
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:382)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:429)
        at net.sourceforge.subsonic.dao.schema.hsql.Schema25.execute(Schema25.java:24)
        at net.sourceforge.subsonic.dao.DaoHelper.init(DaoHelper.java:27)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
        at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
        at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:530)
        at org.mortbay.jetty.servlet.Context.startContext(Context.java:135)
        at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218)
        at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:500)
        at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
        at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
        at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:117)
        at org.mortbay.jetty.Server.doStart(Server.java:217)
        at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
        at net.sourceforge.subsonic.booter.deployer.SubsonicDeployer.deployWebApp(SubsonicDeployer.java:135)
        at net.sourceforge.subsonic.booter.deployer.SubsonicDeployer.<init>(SubsonicDeployer.java:65)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
        at net.sourceforge.subsonic.booter.Main.<init>(Main.java:24)
        at net.sourceforge.subsonic.booter.Main.main(Main.java:63)
Caused by: java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: unique constraint or index violation; SYS_CT_134 table: ALBUM
        at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
        at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
        at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source)
        at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source)
        at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source)
        at java.sql.DriverManager.getConnection(DriverManager.java:664)
        at java.sql.DriverManager.getConnection(DriverManager.java:208)
        at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:174)
        at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:165)
        at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:149)
        at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:119)
        at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
        ... 74 more
Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation; SYS_CT_134 table: ALBUM
        at org.hsqldb.error.Error.error(Unknown Source)
        at org.hsqldb.Constraint.getException(Unknown Source)
        at org.hsqldb.index.IndexAVL.insert(Unknown Source)
        at org.hsqldb.persist.RowStoreAVL.indexRow(Unknown Source)
        at org.hsqldb.persist.RowStoreAVLDisk.indexRow(Unknown Source)
        at org.hsqldb.persist.RowStoreAVLDisk.rollbackRow(Unknown Source)
        at org.hsqldb.TransactionManager2PL.rollbackPartial(Unknown Source)
        at org.hsqldb.TransactionManager2PL.rollback(Unknown Source)
        at org.hsqldb.Session.rollbackNoCheck(Unknown Source)
        at org.hsqldb.Session.rollback(Unknown Source)
        at org.hsqldb.Session.close(Unknown Source)
        at org.hsqldb.SessionManager.closeAllSessions(Unknown Source)
        at org.hsqldb.persist.ScriptRunner.runScript(Unknown Source)
        at org.hsqldb.persist.ScriptRunner.runScript(Unknown Source)
        at org.hsqldb.persist.Log.processLog(Unknown Source)
        at org.hsqldb.persist.Log.open(Unknown Source)
        at org.hsqldb.persist.Logger.open(Unknown Source)
        at org.hsqldb.Database.reopen(Unknown Source)
        at org.hsqldb.Database.open(Unknown Source)
        at org.hsqldb.DatabaseManager.getDatabase(Unknown Source)
        at org.hsqldb.DatabaseManager.newSession(Unknown Source)
        ... 85 more
[2017-03-14 12:48:24,223] INFO SettingsService - Java: 1.8.0_111, OS: Linux
[2017-03-14 12:48:24,231] INFO VersionService - Resolved local Subsonic version to: 6.1.beta1

Re: Subsonic 6.1.beta1 released

PostPosted: Tue Mar 14, 2017 7:45 pm
by jmoonen
Tak-MK wrote:The re-scanning like the first time after upgrading is killing me, it'll last an entire day :(


Same over here. I scan every morning at 8 hour clock and this takes normally about 20 a 25 minutes ( 250.000 songs ). The first scan after the update took almost all day, a daily rescan went from 20 a 25 minutes to 4 hours ????

Re: Subsonic 6.1.beta1 released

PostPosted: Tue Mar 14, 2017 7:59 pm
by sindre_mehus
jmoonen wrote:
Tak-MK wrote:The re-scanning like the first time after upgrading is killing me, it'll last an entire day :(


Same over here. I scan every morning at 8 hour clock and this takes normally about 20 a 25 minutes ( 250.000 songs ). The first scan after the update took almost all day, a daily rescan went from 20 a 25 minutes to 4 hours ????


The first scan after upgrading is a "deep" scan where all ID3 tags are read again. But I'm surprise that the subsequent scans are slower than before. Could be related to the new database version. I assume you're using the default HSQLDB database? Is there anything of interest in subsonic.log? (All database operations taking more than 2 seconds should be logged). Are your files on a network disk?

Thanks
Sindre

Re: Subsonic 6.1.beta1 released

PostPosted: Tue Mar 14, 2017 8:58 pm
by Tak-MK
sindre_mehus wrote:
jmoonen wrote:
Tak-MK wrote:The re-scanning like the first time after upgrading is killing me, it'll last an entire day :(


Same over here. I scan every morning at 8 hour clock and this takes normally about 20 a 25 minutes ( 250.000 songs ). The first scan after the update took almost all day, a daily rescan went from 20 a 25 minutes to 4 hours ????


The first scan after upgrading is a "deep" scan where all ID3 tags are read again. But I'm surprise that the subsequent scans are slower than before. Could be related to the new database version. I assume you're using the default HSQLDB database? Is there anything of interest in subsonic.log? (All database operations taking more than 2 seconds should be logged). Are your files on a network disk?

Thanks
Sindre

Yup, I'm using HSQLDB, and with 1.5TB music disk... (local disk, no network), and it's taking hours and hours to scan after the first long scan. :(
And nope, I can't see anything relevant in the log:
http://pastebin.com/raw/XLp9xFFx