#Sonos Controller for Chrome
Tinkering with chrome apps and sonos. The project is written in ES6 and utilizes react and flux to manage the UI
You can install it via the chrome store.
##Why?
I have recently started to use Ubuntu as my main OS, and there's no decent controller app. So I am aiming to at some point provide a usable sonos controller that can run on Linux also, installed via chrome store. Maybe it won't have all the functions of the real sonos player, but if I can browse the library and manage the queue, I'll be pretty damn happy.
##Install and Run locally
You will need node.js for this.
First, initialize the project:
npm install
Second, build the compiled files into the js folder:
npm run-script compile
Third, add the app in the extensions tab of chrome, via "Load unpacked extension". Select the project folder. You will need to check the developer mode check box in order to be able to do that. Now you should be able to run the app, and inspect console messages coming through via the window inspector.
For development, you can run the watch task, which will re-compile on change:
npm run-script watch
##Thanks to other projects
-
I ported nearly all of https://github.com/bencevans/node-sonos/ so that it works in chrome. Also made it into an ES6 code base where it was easy to do.
-
The web interface markup and css is poached from https://github.com/jishi/node-sonos-web-controller/
-
Dealing with the UPNP notifications needs a webserver, and https://github.com/kzahel/web-server-chrome provided a good insight and many snippets
##Done
- Create app shell and manifest
- Make all ES6 compile into a JS via npm script
- Single output JS
- Port node-sonos discovery message via
- Port node-sonos UPNP message
- ES6ify the Sonos class
- Port node-sonos UPNP Event Listener UPNP subscribe messages
- Port node-sonos UPNP Event Listener UPNP incoming message handling
- Make sense of topology messages
- ES6ify Event Listener class
- UPNP subscriptions for selected zone
- Remember last selected room
- Display and interact with rooms/zones UI
- Display and interact with volume controls for single player zones
- Display and interact with volume controls for multi player zones
- Display and interact with mute button
- Display and interact with queue
- Display and interact with current play time UI
- Display and interact with UI to start / stop / back / next
- UI to browse artists / tracks / albums
- Drill down from artists / tracks / albums
- Load and display images
- Search for artists / tracks / albums
- Play, add to/replace queue from library browser
- Highlight currently playing track
- Fix image ghosting issues
- Display Loading message if there's no players
- Play and remove from to the queue
- Select and group remove from to the queue
- Label for clear queue button
- Faster topology lookup
- BUG: Sometimes menu click adds track twice to queue
- BUG: Volume slider snapping back after dragging on single player groups
- BUG: Expanded player volumes sometimes hiding prematurely
- BUG: Same track in queue multiple times and selecting one selects all
- BUG: Changing group topology doesn't reflect in volume controls
- Group management
- BUG: App gets stuck during startup ("...can only be added after listen() is called")
- Drag and drop to reorder the queue
- BUG: group mute button sometimes flickers with wrong state
- Get some basic device logging to debug network interface bug
- BUG: drag and drop locking up on older apple mac core duo
- Support Line In
- BUG: bridge shows up in player list
- BUG: stereo pairs show as separate
- BUG: BOOST shows as group
- Show what's playing in zone list for all zones
- BUG: Position info out of bounds
- BUG: Radio stream playing now seems to skip between values
- BUG: Radio station can be played from favourites
- BUG: Volume control glitchy
- Browsing music via file structure
- BUG: Drag and drop in queue stopped working
- Crossfade and play mode controls
##TODO:
- Add track to favourites
- Save Queues
- Infinite scroll for search results
- Reduce amount of DOM nodes when scrolling long list with placeholder/margin
- Fix broken image issues (data url too long?)
- Find out how to query for next track
- Jump to places in the alphabet in media library
- Browse music on phones (is that possible)?
- Integrate services???