{"action":"created","issue":{"url":"https://api.github.com/repos/UniversalMediaServer/UniversalMediaServer/issues/461","labels_url":"https://api.github.com/repos/UniversalMediaServer/UniversalMediaServer/issues/461/labels{/name}","comments_url":"https://api.github.com/repos/UniversalMediaServer/UniversalMediaServer/issues/461/comments","events_url":"https://api.github.com/repos/UniversalMediaServer/UniversalMediaServer/issues/461/events","html_url":"https://github.com/UniversalMediaServer/UniversalMediaServer/pull/461","id":55291513,"number":461,"title":"New plugin type FileProvider","user":{"login":"taconaut","id":275379,"avatar_url":"https://avatars.githubusercontent.com/u/275379?v=3","gravatar_id":"","url":"https://api.github.com/users/taconaut","html_url":"https://github.com/taconaut","followers_url":"https://api.github.com/users/taconaut/followers","following_url":"https://api.github.com/users/taconaut/following{/other_user}","gists_url":"https://api.github.com/users/taconaut/gists{/gist_id}","starred_url":"https://api.github.com/users/taconaut/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/taconaut/subscriptions","organizations_url":"https://api.github.com/users/taconaut/orgs","repos_url":"https://api.github.com/users/taconaut/repos","events_url":"https://api.github.com/users/taconaut/events{/privacy}","received_events_url":"https://api.github.com/users/taconaut/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":13,"created_at":"2015-01-23T15:08:00Z","updated_at":"2015-01-26T14:45:24Z","closed_at":"2015-01-26T08:46:39Z","pull_request":{"url":"https://api.github.com/repos/UniversalMediaServer/UniversalMediaServer/pulls/461","html_url":"https://github.com/UniversalMediaServer/UniversalMediaServer/pull/461","diff_url":"https://github.com/UniversalMediaServer/UniversalMediaServer/pull/461.diff","patch_url":"https://github.com/UniversalMediaServer/UniversalMediaServer/pull/461.patch"},"body":"I've been maintaining a separate build for the media library extension (mlx) for the last years for pms and have plugged it on top of ums lately.\r\nTo avoid the hassle of merging new code all the time I got the idea of creating a new plugin type, which would allow to choose the way files and folders are being presented on the renderer. By default, the current one, where the files and folders would represent the file system would be available. If the user wants to change, a plugin could be dropped into the plugins folder and selected in the 'Navigation/Share settings' tab.\r\nBefore starting I wanted to have your opinion to see if you'd be willing to merge it, if I get everything working. Architecture-wise I think it would be nice to decouple how files and folders are being presented from how files are being streamed.\r\n\r\nFor now, only the interface for FileProvider exists and has been chaecked in.\r\n\r\nHow it would work in the GUI:\r\nIn the 'Navigation/Share settings' tab, an additional combo-box would be displayed if there is more than one FileProvider available, allowing to choose which one to use. Underneath, a panel to configure the properties would be shown.\r\nThe plugins for AdditionalFoldersAtRoot won't be part of the global plugins anymore, as they are dependent on the current implementation. They would still be available though.\r\n\r\nFor the end-user nothing would change after a fresh install. AdditionalFoldersAtRoot would be shown somewhere else, I haven't figured out where to put them for now though.\r\n\r\nI hope you like the idea :)\r\n\r\nTasks:\r\n- [ ] Create FileSystemFileProvider in ums code. It will contain the current GUI from 'Navigation/Share settings' tab as well as implementation specific parts of DLNAResource (e.g. resume option). Use RootFolder code to create final DLNAResource\r\n- [ ] Remove RootFolder from ums and do required code changes\r\n- [ ] Move AdditionalFolder(s)AtRoot interfaces to FileSystemFileProvider \r\n- [ ] Show instanciated AdditionalFolder(s)AtRoot in FileSystemFileProvider GUI\r\n- [ ] Add loading mechanism for FileProvider plugins\r\n- [ ] Add GUI to select FileProvider plugins\r\n- [ ] Persist selected FileProvider plugin\r\n- [ ] Add code to properly activate/deactivate FileProvider plugins upon change"},"comment":{"url":"https://api.github.com/repos/UniversalMediaServer/UniversalMediaServer/issues/comments/71470760","html_url":"https://github.com/UniversalMediaServer/UniversalMediaServer/pull/461#issuecomment-71470760","issue_url":"https://api.github.com/repos/UniversalMediaServer/UniversalMediaServer/issues/461","id":71470760,"user":{"login":"skeptical","id":1594203,"avatar_url":"https://avatars.githubusercontent.com/u/1594203?v=3","gravatar_id":"","url":"https://api.github.com/users/skeptical","html_url":"https://github.com/skeptical","followers_url":"https://api.github.com/users/skeptical/followers","following_url":"https://api.github.com/users/skeptical/following{/other_user}","gists_url":"https://api.github.com/users/skeptical/gists{/gist_id}","starred_url":"https://api.github.com/users/skeptical/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/skeptical/subscriptions","organizations_url":"https://api.github.com/users/skeptical/orgs","repos_url":"https://api.github.com/users/skeptical/repos","events_url":"https://api.github.com/users/skeptical/events{/privacy}","received_events_url":"https://api.github.com/users/skeptical/received_events","type":"User","site_admin":false},"created_at":"2015-01-26T14:45:24Z","updated_at":"2015-01-26T14:45:24Z","body":"@taconaut MLX is very slick, glad I finally looked into it :). The thing is that at this point UMS is targeting 2 basic types of users\r\n- traditional, i.e. people who maintain a media collection, for whom MLX would be a big plus obviously.\r\n- ad-hoc, i.e. people who just want a fast easy way to put random stuff from wherever (web, hdd) on their tvs, who are better suited to a passive organization model. A lot of their media has no accessible mediainfo anyway.\r\n\r\nExtending rootfolder as you suggest, e.g. LibraryFolder, and letting both types coexist is doable, and I'm sure any compatibility wrinkles can all be worked out to everyone's satisfaction. Fwiw I don't think the UI(s) would be necessarily inconsistent if framed as dealing with different areas of the xmb (e.g. a top-level 'Library' folder or something).\r\n"}}