Page 1 of 1

Top Bar File Tree View Cleanup

PostPosted: Sat Oct 27, 2012 5:20 pm
by Nikonerik
How do I reset the resulting file tree that I see when I select the File Tree Button on the Top Bar? It seems that I have an old Folder Location that is hanging around.

Re: Top Bar File Tree View Cleanup

PostPosted: Sat Oct 27, 2012 8:47 pm
by Nikonerik
For example when I click on the file tree link that should not be there I get this error:

Subsonic encountered an internal error. You can report this error in the Subsonic Forum. Please include the information below.
Exception java.lang.SecurityException
Message Access denied to file F:\My Media\Big Bang Theory _ Comic-Con 2012 full panel UNEDITED.mp4
Java version Oracle Corporation 1.7.0_05
Operating system Windows 7 6.1
Server jetty/8.y.z-SNAPSHOT
Memory Used 48 of 82 MB
Stack trace java.lang.SecurityException: Access denied to file F:\My Media\Big Bang Theory _ Comic-Con 2012 full panel UNEDITED.mp4 at net.sourceforge.subsonic.service.MediaFileService.getNonIndexedMediaFile(MediaFileService.java:194) at net.sourceforge.subsonic.service.MediaFileService.getNonIndexedMediaFile(MediaFileService.java:171) at net.sourceforge.subsonic.controller.FileTreeController.getMediaFiles(FileTreeController.java:136) at net.sourceforge.subsonic.controller.FileTreeController.addDirectories(FileTreeController.java:125) at net.sourceforge.subsonic.controller.FileTreeController.handleRequestInternal(FileTreeController.java:72) 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:900) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) at javax.servlet.http.HttpServlet.service(HttpServlet.java:735) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:648) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1336) at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:82) at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:242) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307) at net.sourceforge.subsonic.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:43) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307) at net.sourceforge.subsonic.filter.ParameterDecodingFilter.doFilter(ParameterDecodingFilter.java:54) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307) at net.sourceforge.subsonic.filter.BootstrapVerificationFilter.doFilter(BootstrapVerificationFilter.java:54) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:559) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:365) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:627) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:51) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) at java.lang.Thread.run(Unknown Source)

Re: Top Bar File Tree View Cleanup

PostPosted: Sat Oct 27, 2012 9:54 pm
by hakko
What does your media folders look like? Is F: or F:\My Media one of them?

How are access rights set up? What user is running Subsonic, and does that user have access to that file?

Normally, a scan initiated from Settings -> Media folders should make sure that the file tree view is up to date with what's in your folders.

Re: Top Bar File Tree View Cleanup

PostPosted: Sun Oct 28, 2012 12:59 am
by Nikonerik
This is what I have and this is what I get:
(I should not have the "My Media" links)

Re: Top Bar File Tree View Cleanup

PostPosted: Sun Oct 28, 2012 10:02 am
by hakko
I'll look into this, looks like a bug. Does it get solved if you add F:\My Media as a Media Folder, and then remove it?

Re: Top Bar File Tree View Cleanup

PostPosted: Sun Oct 28, 2012 7:44 pm
by Nikonerik
I actually tried that . . . no effect.

Re: Top Bar File Tree View Cleanup

PostPosted: Sun Oct 28, 2012 8:54 pm
by hakko
I guess you've restarted your server since you removed F:\My Media? It would be interesting to read the log files referenced from About -> Bug report otherwise, to see if they give a clue on what went wrong (that's the best way to troubleshoot).

To delete directories from the PostgreSQL database, you need to use a tool called PgAdmin that came with the PostgreSQL install. It's graphical and not very complicated. See this screenshot: http://pgadmin.org/images/screenshots/p ... _win32.png

You navigate in the left side view, by right-clicking and connecting to your own PostgreSQL server. Then, mark the database "musiccabinet" and press the SQL button (next to the Recycle bin button). This brings up a new window where you can execute arbitrary SQL commands.

To look for top directories, type this and then press the green forward arrow to execute the command:
Code: Select all
select path, deleted from library.directory where parent_id is null order by 1;


It should display G:\Movies, H:\TV etc. I'd be interested to hear what is prints, actually, if you don't mind pasting it here.

To delete directories from the database, copy a path you want to remove (they're case sensitive, so you can't just type h:\tv), and type something like this and press the green forward arrow again:
Code: Select all
insert into library.directory_delete (path) values ('F:\My Media');
select library.delete_from_library();


This will take a little while to complete (maybe 10sec, but it totally depends on your library size), just let it run until it finishes.

This should remove F:\My Media from your file tree view.

If you remember anything about how this situation happened (to help me reproduce it), I'd be interested to hear that, too.

Thanks.

Re: Top Bar File Tree View Cleanup

PostPosted: Sun Oct 28, 2012 9:41 pm
by Nikonerik
I attached the log file from the C:\subsonic directory.

When I try to Connect to the dbase server PgAdmin is asking me for a password??

Re: Top Bar File Tree View Cleanup

PostPosted: Mon Oct 29, 2012 4:30 am
by Nikonerik
I managed to follow your instructions with a little help from Google:

In pgAdmin III under the server right click and go to properties, then the advanced tab and in the host address type 127.0.0.1.

Furthermore I was lucky to remember the password I used when I installed PostgreSQL! I had NO expectation that I'd be connecting to this dbase and manipulating the data therein.

Any-hoo . . . .
Here's what came back when I entered the first query:

"F:\My Documents\My Digital Editions\Audiobooks"
"F:\My Documents\My Media"
"F:\My Media"
"F:\My Music"
"G:\Movies"
"H:\TV"
"J:\Euterpe"
"J:\Music Video"

(For those of you playing at home: "Euterpe" -Is from Greek mythology - the name of one of Zeus's daughters, who was regarded to be the Muse of Music

. . . I applied your second query and deleted the two "My Media" entries, refreshed my Subsonic page in the browser and it looks great now!

Thanks! That was fun.

IIRCC . . . in Windows Explorer I promoted the "My Media" folder from within "My Documents" and then added the new location in MC'net. I don't remember what efforts I made, if any, to delete the old location; except to say that I was frustrated that I couldn't get rid of it using obvious means.

Re: Top Bar File Tree View Cleanup

PostPosted: Mon Oct 29, 2012 6:21 am
by hakko
Sorry about the bug, good to hear it's working. I guess there must be some scenario with adding/deleting multiple media folders (possible scanning your library meanwhile) that causes this, I'll see how to make it more robust.

As a side-note: it does take a little bit of effort to learn SQL, but it's a very, very powerful tool. I use the database all the time for answering questions like "which albums in my library don't have embedded cover art", "which new artists should I look into that are most related to the music I listen to the most" etc. It's very handy actually.

Re: Top Bar File Tree View Cleanup

PostPosted: Mon Oct 29, 2012 8:52 pm
by Nikonerik
Looks like I have some reading to do! . . . . Now where is my copy of SQL For Dummies?