Roon Extension: Roon Web Controller v1.2.0

Roon Web Controller v1.2.2 is now available.

New Features:

  • OS native song notifications thanks to initial code by @jcharr1
  • Added option to use circle icons (for Play, Pause and Stop only)
  • Added feedback on various overlays to show currently selected option

Upgrade Notes
Aside from pulling down the latest Roon Web Controller, there are no changes needed if you are currently running v1.2.1.

Otherwise, the package dependencies have been updated to the latest versions. It is recommended to perform an update.

On the Node.js server:

  1. Stop the extension
  2. Run git pull
  3. Run npm install
  4. Run npm update
  5. Start the extension node .

See the CHANGELOG.md for complete list of changes

NOTE:
For whatever reason, notifications do not work with Fluid on Mac OS.

As an alternative, since you may already have Node.js installed, you may want to check out Nativefier. It is based on Chrome sources, there is much more control over initial window sizes, and notifications work correctly on Mac OS, Linux, and probably Windows with it.

EDIT Notifications on Windows 7 work with Nativefier as well.

@Tech_Whisky_Lab
You may be interested to see the return of the circle icons! :grinning:

1 Like

Roon Web Controller v1.2.3 is now available.

New Features:

  • Bug fixes, primarily in the Library view

Upgrade Notes
Aside from pulling down the latest Roon Web Controller, there are no changes needed if you are currently running v1.2.1.

Otherwise, the package dependencies have been updated to the latest versions. It is recommended to perform an update.

On the Node.js server:

  1. Stop the extension
  2. Run git pull
  3. Run npm install
  4. Run npm update
  5. Start the extension node .

See the CHANGELOG.md for complete list of changes

1 Like

YAY!!!
Looking awesome and working A+!

1 Like

I’m trying to get the app.js to load thru the service script but it will not start. I get an error “executable path is not absolute”. I’m running the latest dietpi and it runs fine when started manually.

What am I doing wrong?

Regards,
Jelle

Unfortunately, there is not enough information in your question to be able to help. And it does not help that I am not super familiar with DietPi. I just now started playing with it in a VM. I am not sure what you are referring to when you say “service script”. Hopefully someone more familiar with DietPi will be able to help…

Though, the first questions that comes to mind are:
Is Node.js is installed?
It is found under: Software Additional -> Node.js
Are you using the full path in the script for the node executable?
It should be:
/usr/local/bin/node

So the executable path for the extension should be:
/usr/local/bin/node PATH/app.js
Where you replace “PATH” with the location that you installed the extension.

Well, that was exactly what I needed!!
/usr/local/bin/node was what I was looking for.

The “service script” is the *.service script that I liked to load as per instruction on github.
The location of node is in a different place on dietpi.

Thank you!

Regards,
Jelle

Glad you are working. I will add a note to the README file about this to help others in the future.

Hint: you can use the which command to find the full path of a command in your path. Example:
which node
Returned /usr/local/bin/node

Ah, a very useful command.

Thx again!

I had tried Nativefier a while back, but it had some issues for what I wanted. In particular (1) the code as-is doesn’t create the tray/menubar icon correctly for macOS. (2) Instead of hiding/showing the window when you click on the tray icon like with Fluid, it shows a context menu to show/hide the window or to quit. It has a commandline switch to disable the context menu but it doesn’t seem to be implemented or it doesn’t do what I think it’s supposed to. (3) The window doesn’t autohide when you click off of it like it does with Fluid. (4) There’s no option to hide the app icon in the Dock.

Fortunately, with some help from the interwebs I was able to solve all these things mostly with some kind of brute force changes to Natifier’s code. And since it supports notifications, I don’t have to leave Chrome running in the background all the time. :+1: I don’t plan to submit a pull request to Nativefier (yet) since my changes are kind of brute forcey and very much customized to the web controller and how I wanted it to act, but if anyone’s interested in having a tray icon like mine, you can find my fork here: https://github.com/jcharr1/nativefier

Though to fix #4 you need to add an entry in the app’s Info.plist file (LSUIElement set to YES). https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/uid/20001431-108256

For #1, apparently you need Xcode (for iconconv) and imagemagick to be installed and in your path for icons to work correctly. I would image that imagemagick being installed is pretty rare on Macs, though… https://github.com/jiahaog/nativefier#icon-conversion-for-macos

But yeah, I agree, it is not as Mac centric as Fluid is…

This is true :slight_smile:

Well, the thing is that their icon info only applies to the main app icon. I already had Xcode and homebrew makes installing imagemagick really easy, so the main app icon wasn’t the problem for me. It worked fine out of the box. The thing they didn’t address and the code as-is can’t handle for you is that the menubar icon for macOS has to be 16x16 (and 32x32 if you want a 2x size too). When I tried hardcoding the path to the full sized icon and rebuilding, the icon in the menubar was a huge mess that took up like 1/2 the menubar. The other problem is that the code that creates the trayicon looks in the wrong place for the icon anyway. It doesn’t look for it the main app icon that Nativefier embeds into the app package (Contents/Resources/electron.icns). It’s looking for an image named “icon.png” or “icon.ico” in the folder, Contents/Resources/app. This all took quite a while to track down what was going on. So what I ended up doing as to not change the code too much, I copied my properly sized icon.png and icon@2x.png files into the app folder in Nativefier’s source directory so that when I ran it to create my RoonWebController app it automatically copied my icons into the right folder in the app package. Maybe it works fine on other platforms, but it didn’t on macOS.

Ahh gotcha. Now I see why you were looking at code changes then.

It works on Linux because you just point the launcher shortcut at a .png file and the window manager does the rest. I vaguely remember it working on Windows 7 for the 5 minutes I was using it there, too.

Hi Mike,

Unfortunately, the newer versions after 1.2.0 do not work anymore with older iPhones/iPads, at least with me. The iPad 2 works well with version 1.2.0., but with the changes in version 1.2.3 there is an error in displaying the zoneList (see image). The great advantage of Roon Web Controller for me is that I can control Roon with an old iPad that cannot run the 64bit RoonRemote App. Since Apple did/does not allow installation the of alternative browser engines old iPhones/iPads are stuck with WebKit of the iOS version that Apple allows to update. For the iPad2 it is iOS version 9.3.5. Same for the iPhone 4s. Independent of the used browser app (Safari, Chrome, Opera, Firefox).
The ‘Library’ part works well (of both 1.2.0 and 1.2.3), only the ‘Now Playing’ screen does not work.
It would be great when this problem could be resolved. For now I stay with the Roon Web Controller 1.2.0.

That is definitely a bug. The intent is that older devices should work, so if one doesn’t it is a problem.

I have some older iPads that I can test with. I will check them…

Does 1.2.1 or 1.2.2 work? I am reviewing a diff between 1.2.0 and 1.2.3 and I am not seeing anything that would cause this error.

Edit: I checked my iPad 4 (IOS 10) and it is working. I am waiting for my iPhone 5s to charge up enough to turn on and I am looking for my iPhone 4 (but I may have gotten rid of it…)

That looks like a Javascript error. Do you have a Mac? If so you can turn on “Developer mode” with Safari on both the Mac and the iPad 2. When you connect the iPad to the Mac, you can open Safari and see the console log from the iPad on the Mac. That should show the Javascript error - including which line of code the error is on.

Are you using git or are you using .zip files?

1.2.1 works on IOS 9.3.5
I do not have 1.2.2. I’m using zip files from your page as I have no git installed (I’m less than a hobby programmer). I’m using Macs and iPad and have installed node.js on the Mac and have followed your instructions and am able to make the Room Web Controller working. At this place many thanks for such a great extension and easy to follow instructions! I followed your advise to turn ‘Developer mode’ on and could identify the error in 1.2.3 that occurs when using IOS 9.3.5. It is the command ‘let’ on line 96 that might not be available in IOS 9. See screenshot:

Yup - that looks like the problem. Looks like “let” support was not added to IOS Safari until version 10.

Can you change the word “let” to “var”? You would have to change it on line 96 and 105

If that fixes it, I will update the code so that you are working again with the official copy.

Sorry about that!

Yes, this does the job. With var instead of let ver. 1.2.3 works on my IPad2 with IOS 9.3.5.
Thanks! I hope this does not impede other, future functionality. I would be greatful when I could stay on the official copy.

Okay I will fix the official copy. I am planning a release this weekend so I will include this in the release.

Thanks for reporting and testing this out!