Git Product home page Git Product logo

google-music-electron's Introduction

google-music-electron Build status

Desktop app for Google Music on top of Electron

Features:

  • Google Music as a standalone application
  • Tray for quick play/pause/quit and tooltip with information
  • Media key shortcuts
  • MPRIS integration (for GNU/Linux desktop environments)

Screenshot

This was written as a successsor to google-music-webkit. When upgrading between versions of nw.js, there were regressions with taskbar and shortcut bindings. We wrote this as an alternative.

Requirements

Getting Started

google-music-electron can be installed globally via npm:

# Install google-music-electron via npm
npm install -g google-music-electron

# Run google-music-electron
google-music-electron

When the application has launched, it will appear in your taskbar and via a tray icon, tray icon.

Screenshot

Newsletter

Interested in hearing about updates and new releases of google-music-electron?

Subscribe to our newsletter!

MPRIS integration

If you are on GNU/Linux and your desktop environment supports MPRIS, you can install our MPRIS integration via:

google-music-electron install-mpris
# Once this succeeds, MRPIS will be integrated on `google-music-electron` restart

MPRIS screenshot

Updating

google-music-electron can be updated via npm:

# Update google-music-electron to a newer version via npm
npm update -g google-music-electron
# Alternatively, the following can be used as well to specify a version
# npm install -g google-music-electron@latest

Documentation

CLI

We have a few CLI options available for you:

  Usage: google-music-electron [options] [command]


  Commands:

    install-mpris   Install integration with MPRIS (Linux only)

  Options:

    -h, --help                  output usage information
    -V, --version               output the version number
    -S, --skip-taskbar          Skip showing the application in the taskbar
    --minimize-to-tray          Hide window to tray instead of minimizing
    --hide-via-tray             Hide window to tray instead of minimizing (only for tray icon)
    --allow-multiple-instances  Allow multiple instances of `google-music-electron` to run
    --verbose                   Display verbose log output in stdout
    --debug-repl                Starts a `replify` server as `google-music-electron` for debugging

Development

Running locally

To get a local development copy running, you will need:

  • npm, usually installed with node. Same npm that is used during installation
  • git, version control tool

Follow the steps below to get a development copy set up:

# Clone our repository
git clone https://github.com/twolfson/google-music-electron.git
cd google-music-electron/

# Install our dependencies and dev dependencies
npm install

# Start up `google-music-electron`
npm start

After running the above steps, a copy of google-music-electron should begin running.

Screenshot

Adding local setup as a global installation

After getting our local development set up, we can go one step further and get google-music-electron working on our CLI as if it were installed via npm install -g.

# Link local copy as a global copy
# WARNING: Make sure that `npm install` has been run before this point
#   or your local copy's permissions may get messed up
npm link

# Run `google-music-electron` for local copy
google-music-electron

More information on npm link can be found in npm's documentation:

https://docs.npmjs.com/cli/link

Icons

Source images are kept in the resources/ folder. Icons are maintained via Inkscape and the play/pause buttons are isolated in layers.

To generate icons:

  1. Export each of the play/pause/clean variants as a .svg file
  2. Load the icons via GIMP as a 32x32 SVG
  3. Export via GIMP as a .png

At the time of writing, Inkscape and Image Magick seemed to be generating non-transparent backgrounds upon converting SVG to PNG.

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint via npm run lint and test via npm test.

Donating

Support this project and others by twolfson via donations.

http://twolfson.com/support-me

Attribution

Headphones designed by Jake Dunham from the Noun Project

Unlicense

As of May 16 2015, Todd Wolfson has released this repository and its contents to the public domain.

It has been released under the UNLICENSE.

google-music-electron's People

Contributors

arboleya avatar execat avatar jacobped avatar jck avatar jordanrobinson avatar kempniu avatar rickyromero avatar twolfson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

google-music-electron's Issues

How the media shorctus work? (Ubuntu 14.04)

Hi. I'm wondering how the media shortcuts works. Currently I've set the play/pause shortcut to Ctrl+Alt+c, at the system keyboard shortcuts, and it works for every music player that I've experimented. How it's the first time I'm using a web app I don't know if it should work as the other off-line players.

Anyone could explain me this ?

BR

Media key shortcuts are inconsistent for some reason

Under gnome-shell, only the first time any of those shortcuts are used actually works. And by that, I mean that regardless of the shortcut, only the first press actually works. Meaning if I pause, or go to the next/prev track for the first time, I can't unpause, or go to the next or previous track afterwards with the shortcut. And I only get one action per app lifecycle, not one per type.

Write tests for config integration

We recently implemented some complex behavior with our config integration. As a result, we should write tests to prevent breaking it in the future. Unfortunately, we are out of time for today (and need to catch up on sleep) so we are documenting the test skeletons for later:

  • A config for GME
    • can load all items via getAll
    • has no setAll (as desired due to override confusion)
    • can load an item via get
    • can write an item via set
    • can remove an item via del
    • can remove all items via clear
  • A config for GME with overrides
    • getAll dumps all items and overloaded with overrides (unless undefined)
    • get loads the overridden property
    • running getAll after clear resolves the overrides
  • An unconfigured config window
    • has default values for playback shortcuts
  • A config window when there are no CLI overrides present
    • has all options enabled
    • when an option is ticked
      • it updates the corresponding config setting
  • A config window when a CLI override is present
    • disables the corresponding config setting
  • A mutually exclusive checkbox when checked
    • checks the checkbox
    • when clicking its mutually exclusive counterpart
      • checks the new checkbox
      • unchecks the old checkbox
      • updates the settings for both old and new checkbox
      • TODO: Need to build out when one of these is disabled (then both must be disabled)

Can't install mpris after 1.20.0

I admit to not knowing what I'm doing in node.

% google-music-electron install-mpris    
npm WARN package.json [email protected] No license field.
[email protected] node_modules/mpris-service
└── [email protected] ([email protected])

[email protected] node_modules/electron-rebuild
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected]
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
├── [email protected]
└── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])

> [email protected] postinstall /home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/electron-prebuilt
> node install.js

Downloading electron-v0.34.1-linux-x64.zip
[============================================>] 100.0% of 36.67 MB (5.24 MB/s)

> [email protected] install /home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/mpris-service/node_modules/dbus
> node-gyp configure build

make: Entering directory '/home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/mpris-service/node_modules/dbus/build'
  CXX(target) Release/obj.target/dbus/src/dbus.o
dbus.target.mk:104: recipe for target 'Release/obj.target/dbus/src/dbus.o' failed
make: Leaving directory '/home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/mpris-service/node_modules/dbus/build'

In file included from ../src/dbus.cc:7:0:
../node_modules/nan/nan.h:324:27: error: redefinition of ‘template<class T> v8::Local<T> Nan::imp::NanEnsureHandleOrPersistent(const v8::Local<T>&)’
   NAN_INLINE v8::Local<T> NanEnsureHandleOrPersistent(const v8::Local<T> &val) {
                           ^
../node_modules/nan/nan.h:319:17: note: ‘template<class T> v8::Handle<T> Nan::imp::NanEnsureHandleOrPersistent(v8::Handle<T>&)’ previously declared here
   v8::Handle<T> NanEnsureHandleOrPersistent(const v8::Handle<T> &val) {
                 ^
../node_modules/nan/nan.h:344:27: error: redefinition of ‘template<class T> v8::Local<T> Nan::imp::NanEnsureLocal(v8::Handle<T>&)’
   NAN_INLINE v8::Local<T> NanEnsureLocal(const v8::Handle<T> &val) {
                           ^
../node_modules/nan/nan.h:334:27: note: ‘template<class T> v8::Local<T> Nan::imp::NanEnsureLocal(const v8::Local<T>&)’ previously declared here
   NAN_INLINE v8::Local<T> NanEnsureLocal(const v8::Local<T> &val) {
                           ^
../node_modules/nan/nan.h:757:13: error: ‘node::smalloc’ has not been declared
     , node::smalloc::FreeCallback callback
             ^
../node_modules/nan/nan.h:757:35: error: expected ‘,’ or ‘...’ before ‘callback’
     , node::smalloc::FreeCallback callback
                                   ^
../node_modules/nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(char*, size_t, int)’:
../node_modules/nan/nan.h:761:50: error: ‘callback’ was not declared in this scope
         v8::Isolate::GetCurrent(), data, length, callback, hint);
                                                  ^
../node_modules/nan/nan.h:761:60: error: ‘hint’ was not declared in this scope
         v8::Isolate::GetCurrent(), data, length, callback, hint);
                                                            ^
../node_modules/nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(const char*, uint32_t)’:
../node_modules/nan/nan.h:768:67: error: no matching function for call to ‘New(v8::Isolate*, const char*&, uint32_t&)’
     return node::Buffer::New(v8::Isolate::GetCurrent(), data, size);
                                                                   ^
In file included from ../node_modules/nan/nan.h:25:0,
                 from ../src/dbus.cc:7:
/home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/electron-rebuild/lib/headers/.node-gyp/0.34.1/src/node_buffer.h:41:40: note: candidate: v8::MaybeLocal<v8::Object> node::Buffer::New(v8::Isolate*, v8::Local<v8::String>, node::encoding) <near match>
 NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate,
                                        ^
/home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/electron-rebuild/lib/headers/.node-gyp/0.34.1/src/node_buffer.h:41:40: note:   conversion of argument 3 would be ill-formed:
In file included from ../src/dbus.cc:7:0:
../node_modules/nan/nan.h:768:67: error: invalid conversion from ‘uint32_t {aka unsigned int}’ to ‘node::encoding’ [-fpermissive]
     return node::Buffer::New(v8::Isolate::GetCurrent(), data, size);
                                                                   ^
In file included from ../node_modules/nan/nan.h:25:0,
                 from ../src/dbus.cc:7:
/home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/electron-rebuild/lib/headers/.node-gyp/0.34.1/src/node_buffer.h:53:40: note: candidate: v8::MaybeLocal<v8::Object> node::Buffer::New(v8::Isolate*, char*, size_t) <near match>
 NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate,
                                        ^
/home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/electron-rebuild/lib/headers/.node-gyp/0.34.1/src/node_buffer.h:53:40: note:   conversion of argument 2 would be ill-formed:
In file included from ../src/dbus.cc:7:0:
../node_modules/nan/nan.h:768:67: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
     return node::Buffer::New(v8::Isolate::GetCurrent(), data, size);
                                                                   ^
../node_modules/nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(uint32_t)’:
../node_modules/nan/nan.h:772:29: error: could not convert ‘node::Buffer::New(v8::Isolate::GetCurrent(), ((size_t)size))’ from ‘v8::MaybeLocal<v8::Object>’ to ‘v8::Local<v8::Object>’
     return node::Buffer::New(v8::Isolate::GetCurrent(), size);
                             ^
../node_modules/nan/nan.h: In function ‘v8::Local<v8::Object> NanBufferUse(char*, uint32_t)’:
../node_modules/nan/nan.h:779:12: error: ‘Use’ is not a member of ‘node::Buffer’
     return node::Buffer::Use(v8::Isolate::GetCurrent(), data, size);
            ^
make: *** [Release/obj.target/dbus/src/dbus.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/electron-rebuild/node_modules/npm/node_modules/node-gyp/lib/build.js:270:23)
gyp ERR! stack     at ChildProcess.emit (events.js:110:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:1074:12)
gyp ERR! System Linux 4.2.0-16-generic
gyp ERR! command "node" "/home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/electron-rebuild/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "configure" "build"
gyp ERR! cwd /home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/mpris-service/node_modules/dbus
gyp ERR! node -v v0.12.7
gyp ERR! node-gyp -v v3.0.3
gyp ERR! not ok 

npm ERR! Linux 4.2.0-16-generic
npm ERR! argv "node" "/home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/electron-rebuild/node_modules/npm/bin/npm-cli.js" "rebuild" "--target=0.34.1" "--arch=x64"
npm ERR! node v0.12.7
npm ERR! npm  v2.14.8
npm ERR! code ELIFECYCLE
npm ERR! [email protected] install: `node-gyp configure build`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script 'node-gyp configure build'.
npm ERR! This is most likely a problem with the dbus package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp configure build
npm ERR! You can get their info via:
npm ERR!     npm owner ls dbus
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/npm-debug.log

Process exited with code: 1
Error: Process exited with code: 1
    at ChildProcess.<anonymous> (/home/ross/.nvm/versions/node/v0.12.7/lib/node_modules/google-music-electron/node_modules/electron-rebuild/lib/spawn.js:53:26)
    at ChildProcess.emit (events.js:110:17)
    at maybeClose (child_process.js:1015:16)
    at Process.ChildProcess._handle.onexit (child_process.js:1087:5)
MPRIS integration successfully installed! Please start `google-music-electron` to see it in action!

0.20.0 installs fine...

% google-music-electron install-mpris        
[14879:1024/013057:ERROR:browser_main_loop.cc(171)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
npm WARN package.json [email protected] No license field.
[email protected] node_modules/mpris-service
└── [email protected] ([email protected])

[email protected] node_modules/electron-rebuild
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
└── [email protected]
MPRIS integration successfully installed! Please start `google-music-electron` to see it in action!

... however it doesn't seem to work:

dbus-send --print-reply --dest=org.mpris.MediaPlayer2.google-music-electron /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata'  
method return time=1445664798.895287 sender=:1.89 -> destination=:1.143 serial=16 reply_serial=2
   variant       array [
      ]

Apologies for not being able to dig myself. I had this working at one point, and it was a better Linux experience than the native Spotify. Thank you for the great work.

2 Step Authentification = Blank Page

Hi

I just tried to run your app on my Ubuntu. It launches fine and I can enter email and password but when comes the time to enter the code I receive by SMS, the page is completely white, even though the DOM is present (using the developer tool I can see it's present).

Any advice on what I could do (beside using a different kind of auth) ?

Failed to bind shortcut

When loading the app from console, I get the errors:

2017-07-30T23:22:47.772Z - warn: Failed to bind mediaplaypause shortcut
2017-07-30T23:22:47.775Z - warn: Failed to bind medianexttrack shortcut
2017-07-30T23:22:47.776Z - warn: Failed to bind mediaprevioustrack shortcut

And because of this, I can't use my media keys to control the app. I don't have MPRIS and I don't want to install it and/or use it.
I'm running the app on Ubuntu 16.04, node v6.11.1, npm v3.10.10

Navigation arrows are too small

Google has released a new UI for Google Music which places our arrow buttons in a small container so they are scaled down. Please revisit the container so we no longer have the issue. See screenshot:

selection_078

MPRIS won't install

I get this

npm ERR! Linux 4.4.1-2-ARCH
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "install" "--ignore-scripts" "--save" "false" "electron-rebuild@~1.0.2" "mpris-service@~1.0.1"
npm ERR! node v5.5.0
npm ERR! npm  v3.7.1

npm ERR! Cannot read property 'target' of null
npm ERR! 
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     /usr/lib/node_modules/google-music-electron/npm-debug.log

assert.js:89
  throw new assert.AssertionError({
  ^
AssertionError: Expected "npm install" exit code to be "0" but it was "1"
    at ChildProcess.handleExit (/usr/lib/node_modules/google-music-electron/lib/install-mpris.js:33:12)
    at emitTwo (events.js:100:13)
    at ChildProcess.emit (events.js:185:7)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)

when I run sudo google-music -electron install-mpris after installing with sudo npm install -g google-music-electron

npm-debug.txt

Trying to install the mpris service globally throws a "permission denied" error

Hi,

Running sudo google-music-electron install-mrpis results in the following error:

Error: EACCES: permission denied, mkdir '/usr/lib/node_modules/google-music-electron/node_modules/electron-prebuilt/electron-tmp-download-15791-1451892115478'
    at Error (native)

npm ERR! Linux 4.2.5-1-ARCH
npm ERR! argv "/usr/bin/node" "/usr/lib/node_modules/google-music-electron/node_modules/electron-rebuild/node_modules/npm/bin/npm-cli.js" "rebuild" "--runtime=electron" "--target=0.34.5" "--arch=x64"
npm ERR! node v5.2.0
npm ERR! npm  v2.14.15
npm ERR! code ELIFECYCLE
npm ERR! [email protected] postinstall: `node install.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] postinstall script 'node install.js'.
npm ERR! This is most likely a problem with the electron-prebuilt package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node install.js
npm ERR! You can get their info via:
npm ERR!     npm owner ls electron-prebuilt
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /usr/lib/node_modules/google-music-electron/node_modules/npm-debug.log

This really shouldn't be happening, since the parent command has been started with sudo.
As a workaround, the following command may be run prior to installing mpris:

sudo chmod g+w -R /usr/lib/node_modules/google-music-electron

Windows 10: Instant crash when playing certain tracks

First off, I've tested and verified that the following bug happens for me on two separate computers.

The Problem
When I play certain music tracks the application will instantly crash.
The same tracks play perfectly fine using Google Chrome and have done so previously using an older version of the application, before I updated it to the newest release today.
I haven't updated the application for at least a few weeks and have no idea what the previous version was, where it didn't instantly crash when playing these tracks.
And in case it matters, I have an All Access subscription with Google Play Music.

System
Both computers is running Windows 10 x64 Pro. And both were a fresh win10 install back when I set them up.

Version list from the above tab:
Version: 2.2.1
Electron version: 0.34.2
Node.js version: 4.1.1
Chromium version: 45.0.2454.85

Tendency
So far I've concluded that it seems to be a tendency with tracks including the following characters in their name:

"()

But It won't always crash when playing tracks using those characters.
An example is Pharrell William's:

Happy (From "Despicable Me 2")

Which plays just fine.

But Ellie Goulding's:

Love Me Like You Do (From "Fifty Shades of Grey")

Will make the application crash instantly when you try to play it.

A Playlist
I've made a public playlist with some of the tracks that I've found to make the application crash instantly when you try to play them: Crash playlist

And last but not least.
The log.
I've played 3 of the tracks on the playlist, that makes the application crash and one which didn't. I've also separated the text for each start of the application in the log. To make it easier to read.
You can find it here on pastebin: http://pastebin.com/p81AkvtY

Startup Error

When I start up the app, I get an error regarding the menu initialization:

Could not find function for menu command "undefined" under label "undefined"

It fails and thus the tray icon and mediakeys doesn't work as well.

startup-error

Hide the taskbar icon on Windows when minimized

It would be nice if it was possible to configure Google Music Electron to hide its taskbar icon when the program is minimized. You could still use the trayicon to show the program window (and its taskbar icon) when needed. This would let you keep google music electron open, playing music, without ocupying precious space on the Windows taskbar.

Finish up TODOs or promote to issues

During the initial writing of google-music-electron, we had a few personal TODO's left over. However, they did not need to block the release. As a result, we wrote them down to determine their fate:

  • Move to inversion of control (e.g. function (app, browserWindow)) for application menu, tray, and shortcuts
    • Our app is getting too bulky and this is a good way to abstract them
    • Alternatively, these could be prototypical methods run on init (meaning we move to a class and use internal state)
    • Prob should make this an object since we can delete browserWindow at some point =/
  • Add tray menu icon to minimize/restore window
  • Handle minimize/restore as tray menu action
  • Add on Amarok interaction with --close-to-tray option which closes the window but keeps everything running in the tray
    • Upon thinking further, we might need to make the option more --hide-in-taskbar or not since Google Music can't really play in the background =/
  • Add --version and --help support to google-music-electron CLI (as well as argument passing to electron)
  • Figure out forward/back (and maybe address bar)
    • Formalized to issue in #6

Upgrade to latest Electron

It's been a while since we last upgraded Electron so let's get to it. We started to do this in:

#39 (comment)

but ran into an issue. This issue to keep tabs on the reason/progress

Back/Forward support

I might be missing something, but I can't seem to get keyboard or mouse back/forward browser history shortcuts to work (g-m-e version 1.12.0, Arch x64).

Everything else is working nicely. Great work!

Custom CSS style

I'm a dark-theme junky, and would love to be able to customize away Google's stark-white background. Is there somewhere in the folder structure I could drop a stylesheet that would get picked up automatically? If not, would you consider adding support for custom styles? Thx

Bring window to the front by clicking the system tray icon when the window is not hidden

It would nice if clicking on the system tray icon would bring the Google Music Electron window to the front, rather than minimizing it, when the window does not have the focus.

I am running Google Music Electron with the --skip-taskbar flag. This works great. However, if I do not click the tray icon to minimize the window, and instead I just bring some other window to the front, hiding the Google Music Electron window behind it, then bringing Google Music Electron back to the front is a two click process: First I must click on the tray icon to hide the window, and then I click on it again to show it. Instead it would be much nicer if I could just click on the window once to bring it to the front. clicking it again (now that it is on the foreground) would hide it.

Allow app to continue running after all windows have been closed on OS X

I noticed an inconsistency with how google-music-electron handles closing application windows compared to other OS X audio apps. You should be able to close all application windows and have the music continue to play. Then clicking on the dock icon should spawn a new application window. It would also be nice to have cmd + w keybinding to close the window, like other OS X apps.

Toolbar Icon Improvements

On OSX with the dark toolbar, the toolbar icon looks like this: toolbar.

I think the answer is to use Template Images. I tried just appending template to the pngs in /lib/assets/* as well as within app-tray.js. It worked but the icon is probably too large with a HiDPI monitor and the inverted play and paused were weird.

I'm getting ready to move to a different country but I can try to mess with it a bit this weekend if I get a couple of hours.

Error while starting

When I start the app, I get an empty window is opened and an error is thrown :

$ google-music-electron
[5570:0519/081421:ERROR:browser_main_loop.cc(171)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
2015-05-19T06:14:21.498Z - info: Logger initialized. Writing info/warnings/errors to stdout. Writing all logs to "/home/openhoat/.config/google-music-electron/verbose.log"
[5570:0519/081421:ERROR:gconf_listener.cc(116)] Error with gconf key '/apps/metacity/general': Le serveur de configuration ne peut être contacté: Erreur D-BUS : Le service GConf est en cours d'arrêt.
2015-05-19T06:14:21.545Z - info: App ready. Opening Google Music window height=920, preload=/usr/local/lib/node_modules/google-music-electron/lib/browser.js, skip-taskbar=undefined, use-content-size=true, width=1024, http_parser=2.3.0, node=1.6.3, v8=4.2.77.15, uv=1.4.2, zlib=1.2.8, ares=1.10.0-DEV, modules=43, openssl=1.0.1m, electron=0.26.0, atom-shell=0.26.0, chrome=42.0.2311.107, version=1.6.0
[5624:0519/081421:INFO:renderer_main.cc(200)] Renderer process started
2015-05-19T06:14:21.603Z - warn: Failed to bind mediaplaypause shortcut
2015-05-19T06:14:21.604Z - warn: Failed to bind medianexttrack shortcut
2015-05-19T06:14:21.604Z - warn: Failed to bind mediaprevioustrack shortcut
[5570:0519/081421:ERROR:cert_verify_proc_openssl.cc(231)] X509 Verification error unable to get local issuer certificate : 20 : 2 : 4

Any idea ?

Blank Window on Start

Using v2.5.0 I'm getting a blank window on start. Nothing seems to be wrong with the window itself, menus work and I can move/resize/minimize/etc the window, it's almost like it just isn't loading the Google Music page. Happy to provide log files or anything else that might be useful, just not sure where any of that would be.

I'm running Funtoo Linux with Node v5.0.0 (this did just update from something else...curious if this could be a factor?). Not sure of any other dependencies that would be useful to know.

Authentication after each start.

I have to sign in after each start of the app.

I checked the cookies are stored in the .config/google-music-electron/ directory but I still have to sign-in.

I tried the npm version and the master branch direct from github same result.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.