Page 1 of 1

Sharing iTunes Playlists with Subsonic

PostPosted: Thu Sep 16, 2010 5:17 am
by un_dave
The back-story:
I have a pretty large library, and my girlfriend uses iTunes to create awesome playlists, and sync with her iPod. Not having the musical prowess, or the time and patience to create my own playlists within subsonic, I wanted those playlists in subsonic.

So, the other day, I worked our I could right click a playlist in iTunes, and save it to a m3u file. Then when it was dropped in the appropriate folder, I could access from within subsonic.

However, we have 50+ playlists, and they get updated and edited on a semi-frequent basis. So how to get them into subsonic, and sync'd on a regular basis?

The solution:
I found the aptly named "iTunes Export" tool, and download the command line version:
http://www.ericdaugherty.com/dev/itunesexport/

I then setup a scheduled task that calls a batch file, with the following content:
Code: Select all
"c:\Program Files (x86)\Java\jre6\bin\java.exe" -mx1024m -jar itunesexport.jar -outputDir="C:\subsonic\playlists"


Essentially this will auto-find your iTunes library, and dump out all the playlists to the specified folder. Default action is to overwrite existing playlists, so any updated playlists will overwrite the existing.

I've only had it running for a few days, but so far it seems to be working perfectly.

EDIT: Due to a number of PMs requesting more information, please see the screenshots below for more information!

The setup:

Windows left to right, top to bottom...
1. The task is scheduled.
2. The task is calling the batch file.
3. The c:\subsonic\getplaylists folder contains the batch file, and the itunesexport.jar file from the Console Application zip file.
4. The batch file contains the command.

Image

Setting the playlist path in subsonic:
Image

Accessing the list of playlists in subsonic:
Image

If you have any questions, let me know!

Error when adding playlist

PostPosted: Thu Oct 14, 2010 9:58 pm
by erik
Hi!
I followed your tutorial, and I'm getting the m3u-playlists OK. They play without problems in any local media player, so there seems to be nothing wrong with the lists as such. However, when I try to play them in subsonic, I encounter some difficulties. First, I must admit I was having difficulties finding out how to find them in subsonic in the first place, even though they were in the folder specified in the settings. Then, I found the "Add playlist"-function next to the playlist, and tried to add it there. For the first few attempts, nothing happened, except subsonic bringing me back to the "home"-screen. Then, I encountered an error message. The message reads as follows:

Error

Subsonic encountered an internal error. You can report this error in the Subsonic Forum. Please include the information below.
Exception java.lang.NullPointerException
Message null
Java version Sun Microsystems Inc. 1.6.0_18
Operating system Windows 7 6.1
Server jetty-6.1.x
Memory Used 51 of 96 MB
Stack trace java.lang.NullPointerException at net.sourceforge.subsonic.service.SecurityService.isInMusicFolder(SecurityService.java:213) at net.sourceforge.subsonic.service.SecurityService.isReadAllowed(SecurityService.java:179) at net.sourceforge.subsonic.service.MusicFileService.getMusicFile(MusicFileService.java:67) at net.sourceforge.subsonic.controller.NowPlayingController.handleRequestInternal(NowPlayingController.java:56) at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107) at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:166) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:173) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at net.sourceforge.subsonic.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:43) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at net.sourceforge.subsonic.filter.ParameterDecodingFilter.doFilter(ParameterDecodingFilter.java:54) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at net.sourceforge.subsonic.filter.BootstrapVerificationFilter.doFilter(BootstrapVerificationFilter.java:54) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) at org.mortbay.jetty.Server.handle(Server.java:313) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)

Is there a way to fix this? Am I doing anything wrong? I'd love to be able to use my playlists from iTunes on work etc.

Thanks!

PostPosted: Thu Oct 14, 2010 11:40 pm
by un_dave
I'm not sure how you're attempting to load a playlist, but I go to the player window on the bottom of the page, select the combo box to the left of "Settings" that says "More actions..."

Then select Playlist, Load.

It should then show a listing of all playlists in your nominated directory.

I admit, it took me a while to find it too. Does that help?

PostPosted: Fri Oct 15, 2010 5:55 am
by erik
Ah, sorry, my post wasn't very clear on that process, and also my subsonic player is in norwegian, so I had to guess on a few of the names of the menu options.

Yes, I
go to the player window on the bottom of the page, select the combo box to the left of "Settings" that says "More actions..."

Then select Playlist, Load.
And it does then show a listing of all playlists in my nominated directory, as you say. But when I choose one of them and press the "Add"-link (or something like that, again, norwegian...), I only return to the "Now playing" or "Home" window. Yesterday, I got those errors I posted, today I'm back to nothing else happening than seeing the "Now playing" window (which looks more like a "Last played" window to me).

Any ideas?

PostPosted: Fri Oct 15, 2010 6:25 am
by un_dave
When I click Load, as shown on this screenshot,
Image

I get page refresh, then my playlist at the bottom populates with the contents of the m3u playlist...

I think if that process is failing, you may want to make a post in the Help forum. I don't know much about the technical side of subsonic.

Sorry I can't help more!

Problem ... solved?

PostPosted: Fri Oct 15, 2010 3:54 pm
by erik
When I pressed "Load playlist", I got he same window as you, exept I didn't have the option to delete or download the playlists, and when I pressed "Load" I got a page refresh - that took me back to the "Home" page. :(

Then today I wasn't able to play music at all. Albums would add to may playlist, then refuse to play. The playlists were as ineffective as always. Nothing I did helped. Then I decided to test if this was only happening for the Admin account, so I created a new account for myself, and Voila, I was able to use the playlists as described. I still don't know what's wrong with the Admin account, but at least I found a workaround.

Thanks a bunch for all help!

Mem

PostPosted: Mon Nov 08, 2010 3:25 pm
by columbiabbs
I found most of my stuff would not work when I was using the Admin Account
untill I added more MEM. U show using 50 from 90.

under Windows xp
I have bumped this BBS up to 512 from 768 total.

under OS X i am using 1024 out of 2048

the system likes mem. It works so much better..

WT.