Code Monkey home page Code Monkey logo

mopidy-gmusic's Introduction

WARNING

As of December 2020, the Google Play Music service is no longer operational. Thus, the maintenance of this extension has been stopped. The mopidy-gmusic package has been removed from Debian/Ubuntu, and the Git repo is put into archive mode.


Mopidy-GMusic

Latest PyPI version CircleCI build status Test coverage

Mopidy extension for playing music from Google Play Music.

Dependencies

You must have a Google account, and either:

  • have some music uploaded to your Google Play Music library, or
  • have a paid subscription for Google Play Music.

Installation

Install by running:

sudo python3 -m pip install Mopidy-GMusic

See https://mopidy.com/ext/gmusic/ for alternative installation methods

Configuration

Run mopidy gmusic login to obtain a refresh token, and then include it in your config file:

[gmusic]
refresh_token = <your refresh token>

Google Play Music now requires all clients to provide a device ID. In the past, Mopidy-GMusic generated one automatically from your MAC address, but Google seems to have changed their API in a way that prevents this from working. Therefore you will need to configure one manually.

If no device ID is configured, Mopidy-GMusic will output a list of registered devices and their IDs. You can either use one of those IDs in your config file, or use the special value mac if you want gmusicapi to use the old method of generating an ID from your MAC address:

[gmusic]
deviceid = 0123456789abcdef
# or
deviceid = mac

By default, All Access will be enabled automatically if you subscribe. You may force enable or disable it by using the all_access option:

[gmusic]
all_access = true

By default, the bitrate is set to 160 kbps. You can change this to either 128 or 320 kbps by setting:

[gmusic]
bitrate = 320

All Access radios are available as browsable content or playlist. The following are the default config values:

[gmusic]
# Show radio stations in content browser
radio_stations_in_browse = true
# Show radio stations as playlists
radio_stations_as_playlists = false
# Limit the number of radio stations, unlimited if unset
radio_stations_count =
# Limit the number or tracks for each radio station
radio_tracks_count = 25

The library and playlists are automatically refresh at regular intervals. Refreshing can be CPU intensive on very low-powered machines, e.g. Raspberry Pi Zero. The refresh intervals can be configured:

[gmusic]
# How often to refresh the library, in minutes
refresh_library = 1440
# How often to refresh playlists, in minutes
refresh_playlists = 60

Usage

The extension is enabled by default if all dependencies are available. You can simply browse through your library and search for tracks, albums, and artists. Google Play Music playlists are imported as well. You can even add songs from your All Access subscription to your library. Mopidy will able to play them.

Project resources

Credits

mopidy-gmusic's People

Contributors

0nse avatar abarreir avatar adnidor avatar amayernc avatar belak avatar bjauy avatar excieve avatar felixb avatar golobodo avatar hansihe avatar hechtus avatar illegalprime avatar jacobobryant avatar jeh avatar jjok avatar jodal avatar kingosticks avatar shapr avatar tilley 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mopidy-gmusic's Issues

Sign-in Attempt Prevented By Google

Hi

I'm attempting to use Pi Musicbox on a Raspberry Pi B+. I've put my username and password into the config file, but I cannot get Musicbox to load data from my all access account. Upon further inspection, I noticed google was blocking login attempts ( https://security.google.com/settings/security/activity?hl=en ). This happens if I supply my username and password, but no device ID. If I DO supply the device ID, nothing happens (no data from account, and no warning of an unauthorized login attempt).

I have marked each attempt as my own activity in google's security tab.

I'm using Pi Music box .5 and .5.1beta

Thanks

"WARNING gmusic/all_access unknown config key"

Badly I'm not able to get to work the all_access function. I'm getting the warning:
"WARNING gmusic/all_access unknown config key."

My "/etc/mopidy/mopidy.conf"-file looks like this:

[gmusic]
username = daniel********
password = ********
deviceid = 315*******
all_access = true

Am I'm doing something wrong, or is it a known problem? (PS: I have a german google all access account)

Support Songza derived radio stations

I noticed that there isn't support for the Songza derived radio stations. In comparison, the artist and genre stations seem to work fine.
I'm interested in digging into this myself, but if you have any suggestions. Please let me know! :)

Make compatible with Mopidy 1.0.0

In logs I'm getting

WARNING  GMusicBackend does not implement playlists.as_list(). Please upgrade it.

And no playlists in my client software (ncmpcpp)

Mobileclient api does not require the deviceID in order to work.

As per http://unofficial-google-music-api.readthedocs.org/en/latest/reference/mobileclient.html#gmusicapi.clients.Mobileclient.login a deviceid is not required to use the mobileclient api.

In effect, enhancement #9 introduced an unnecessary dependency that locks out users without android phones.

I have stripped out the deviceid requirements and the code "works" (I have nothing to compare it to as I don't have an android phone!). I am able to play music from my Google Music account, however, I can't figure out if it is supposed to pre-populate my music and playlists. Currently, it only shows music after I search for it.

Add proxy support

Thanks for your work. I'm using this extension at home and it's great to let party guests search and play the music out of my google all access account.

I set up mopidy at work too but run into trouble. I get some Timeout/"Read zero bytes" exceptions about 2 minutes after starting mopidy. It looks like the communication with the google servers don't go via proxy. I set up environment variables and defined the proxy in the mopidy.conf but both don't change anything.

Tested against current git master versions of mopidy and mopidy-gmusic.

Is communication via proxy a missing feature or am i running into a bug here? In both cases i'm willing to help with detailed reports and/or PR.

Gapless Playback

Looking up the URL stream takes too long for gapless playback. I also tried to to act on the playbin about-to-finish callback which comes a bit earlier than the MESSAGE_EOS message. This seems to work, but the URL lookup is still too slow.

log in error

I keep getting ''fail to login as '' when starting. Mopidy.

I have tried a manner of combination of user. Name. Also change my password.

Songs don't scrobble

I'm using mopidy-gmusic from the current development branch together with mopidy-scrobbler. The scrobbler works for local files but not for tracks played through mopidy-gmusic.

As the scrobbler is correctly transmitting the "Now playing" information, I would guess this is a problem on the gmusic side. Maybe it doesn't properly tell when a song has been fully played?

trouble starting mopidy with mopidy-gmusic v0.2

here is my gmusicapi.log

I have v 1.2.0 of pykka installed

!-- begin debug log --!
version: 2.0.0-dev
logging to: /home/musicbox/.cache/gmusicapi/log/gmusicapi.log
2013-10-11 08:58:16,881 - gmusicapi.Mobileclient1 (shared:58) [INFO]: initialized
2013-10-11 08:58:16,890 - gmusicapi.Mobileclient1 (shared:78) [INFO]: logged out
2013-10-11 08:58:18,122 - gmusicapi.Mobileclient1 (shared:204) [DEBUG]: ClientLogin(<omitted>)
2013-10-11 08:58:18,657 - gmusicapi.Mobileclient1 (shared:201) [DEBUG]: Init(args=[], kwargs={})
2013-10-11 08:58:19,492 - gmusicapi.Mobileclient1 (shared:242) [DEBUG]:
2013-10-11 08:58:19,495 - gmusicapi.Mobileclient1 (mobileclient:38) [INFO]: authenticated
2013-10-11 08:58:19,521 - gmusicapi.Mobileclient1 (shared:201) [DEBUG]: ListTracks(args=[], kwargs={'max_results': 20000})
2013-10-11 08:59:09,680 - gmusicapi.Mobileclient1 (shared:242) [DEBUG]: {u'kind': u'sj#trackList', u'data': {u'items': ['<8626 tracks>']}}

and here is my output from mopidy

INFO     Starting Mopidy 0.15.0
INFO     Loading config from: builtin defaults, /home/musicbox/.config/mopidy/mopidy.conf, command line options
INFO     Disabled extension mpris: An X11 $DISPLAY is needed to use D-Bus
INFO     Enabled extensions: local, gmusic, http, mpd, stream
INFO     Disabled extensions: spotify, mpris, scrobbler, soundcloud
INFO     Starting Mopidy audio
INFO     Starting Mopidy backends: GMusicBackend, StreamBackend, LocalBackend
INFO     Mopidy uses Google Music
INFO     !-- begin debug log --!
INFO     version: 2.0.0-dev
INFO     logging to: /home/musicbox/.cache/gmusicapi/log/gmusicapi.log
INFO     initialized
INFO     Audio output set to "alsasink"
INFO     logged out
INFO     Audio mixer set to "alsamixer" using track "Speaker"
INFO     Loaded 0 local tracks from /music using /home/musicbox/.cache/mopidy/tag_cache
INFO     Loaded 0 local playlists from /home/musicbox/.local/share/mopidy/local/playlists
INFO     Starting Mopidy core
INFO     Starting new HTTPS connection (1): www.google.com
INFO     Starting new HTTPS connection (1): play.google.com
INFO     authenticated
INFO     Starting new HTTPS connection (1): www.googleapis.com
ERROR    Unhandled exception in GMusicBackend (urn:uuid:86945e31-2354-4206-9009-2af7d3a3c040):
Traceback (most recent call last):
  File "/home/musicbox/dev/pykka/pykka/actor.py", line 191, in _actor_loop
    self.on_start()
  File "/home/musicbox/dev/mopidy-gmusic/mopidy_gmusic/actor.py", line 30, in on_start
    self.library.refresh()
  File "/home/musicbox/dev/mopidy-gmusic/mopidy_gmusic/library.py", line 102, in refresh
    self._to_mopidy_track(song)
  File "/home/musicbox/dev/mopidy-gmusic/mopidy_gmusic/library.py", line 167, in _to_mopidy_track
    album=self._to_mopidy_album(song),
  File "/home/musicbox/dev/mopidy-gmusic/mopidy_gmusic/library.py", line 177, in _to_mopidy_album
    artist = song['albumArtist']
KeyError: u'albumArtist'
INFO     Stopping Mopidy frontends
INFO     Stopping Mopidy core
INFO     Stopping Mopidy backends
INFO     Stopping Mopidy audio
ERROR    GMusicBackend (urn:uuid:86945e31-2354-4206-9009-2af7d3a3c040) stopped before handling the message
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/mopidy/__main__.py", line 81, in main
    start(proxied_config, enabled_extensions)
  File "/usr/lib/pymodules/python2.7/mopidy/__main__.py", line 135, in start
    core = start_core(audio, backends)
  File "/usr/lib/pymodules/python2.7/mopidy/__main__.py", line 186, in start_core
    return Core.start(audio=audio, backends=backends).proxy()
  File "/home/musicbox/dev/pykka/pykka/actor.py", line 93, in start
    obj = cls(*args, **kwargs)
  File "/usr/lib/pymodules/python2.7/mopidy/core/actor.py", line 37, in __init__
    self.backends = Backends(backends)
  File "/usr/lib/pymodules/python2.7/mopidy/core/actor.py", line 86, in __init__
    self.with_library = [b for b in backends if b.has_library().get()]
  File "/home/musicbox/dev/pykka/pykka/future.py", line 299, in get
    exec('raise exc_info[0], exc_info[1], exc_info[2]')
  File "<string>", line 1, in <module>
ActorDeadError: GMusicBackend (urn:uuid:86945e31-2354-4206-9009-2af7d3a3c040) stopped before handling the message
Traceback (most recent call last):
  File "/usr/bin/mopidy", line 9, in <module>
    load_entry_point('Mopidy==0.15.0', 'console_scripts', 'mopidy')()
  File "/usr/lib/pymodules/python2.7/mopidy/__main__.py", line 81, in main
    start(proxied_config, enabled_extensions)  return Core.start(audio=audio, backends=backends).proxy()
  File "/home/musicbox/dev/pykka/pykka/actor.py", line 93, in start
    obj = cls(*args, **kwargs)
  File "/usr/lib/pymodules/python2.7/mopidy/core/actor.py", line 37, in __init__
    self.backends = Backends(backends)
  File "/usr/lib/pymodules/python2.7/mopidy/core/actor.py", line 86, in __init__
    self.with_library = [b for b in backends if b.has_library().get()]
  File "/home/musicbox/dev/pykka/pykka/future.py", line 299, in get
    exec('raise exc_info[0], exc_info[1], exc_info[2]')
  File "<string>", line 1, in <module>
pykka.exceptions.ActorDeadError: GMusicBackend (urn:uuid:86945e31-2354-4206-9009-2af7d3a3c040) stopped before handling the message
(END)
  File "/usr/lib/pymodules/python2.7/mopidy/__main__.py", line 135, in start
    core = start_core(audio, backends)
  File "/usr/lib/pymodules/python2.7/mopidy/__main__.py", line 186, in start_core

Non-existent album causing mopidy crash

So essentially an album in gmusic used to exist and now it doesn't. This seems to be causing mopidy-gmusic to crash. I have a song in one of my playlists (the ID is T2zl655curukztmg7zdkwtcas3a) that exists and it's album (Bhubivvfmgpqdhgecbeabivp4dy) which no longer exists https://play.google.com/music/listen#/album/Bhubivvfmgpqdhgecbeabivp4dy). I'm not sure what happened on Google's end that causes an album to long exist but it seems you possibly need to handle for the fact that this phenomenon can occur.
Below is a mopidy stacktrace and some corresponding lines from the gmusicapi.log file.

Mopidy stacktrack with some context

2014-10-24 22:16:34,536 INFO [3503:MainThread] mopidy.commands: Starting Mopidy core
2014-10-24 22:19:37,904 ERROR [3503:GMusicBackend-3] mopidy_gmusic.session: Failed to get All Access album info: GetAlbum: 400 Client Error
: Bad Request
(requests kwargs: {'url': 'https://www.googleapis.com/sj/v1.5/fetchalbum', 'headers': {'Authorization': '<omitted>'}, 'params': {'alt': 'jso
n', 'nid': u'Bhubivvfmgpqdhgecbeabivp4dy', 'include-tracks': False}, 'method': 'GET'})
(response was: '{\n "error": {\n  "errors": [\n   {\n    "domain": "global",\n    "reason": "badRequest",\n    "message": "Bad Request"\n   
}\n  ],\n  "code": 400,\n  "message": "Bad Request"\n }\n}\n')
2014-10-24 22:19:37,925 ERROR [3503:GMusicBackend-3] pykka: Unhandled exception in GMusicBackend (urn:uuid:a62c070e-93a9-446a-9fbf-04811bb2b
bf0):
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pykka/actor.py", line 191, in _actor_loop
    self.on_start()
  File "/usr/local/lib/python2.7/dist-packages/mopidy_gmusic/actor.py", line 31, in on_start
    self.playlists.refresh()
  File "/usr/local/lib/python2.7/dist-packages/mopidy_gmusic/playlists.py", line 32, in refresh
    track['trackId'])
  File "/usr/local/lib/python2.7/dist-packages/mopidy_gmusic/library.py", line 73, in lookup
    return self._lookup_track(uri)
  File "/usr/local/lib/python2.7/dist-packages/mopidy_gmusic/library.py", line 86, in _lookup_track
    return [self._aa_to_mopidy_track(song)]
  File "/usr/local/lib/python2.7/dist-packages/mopidy_gmusic/library.py", line 263, in _aa_to_mopidy_track
    date=album.date,
AttributeError: 'NoneType' object has no attribute 'date'
2014-10-24 22:19:37,941 ERROR [3503:MainThread] mopidy.commands: Uncaught exception
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/mopidy/commands.py", line 273, in run
    core = self.start_core(mixer, backends)
  File "/usr/lib/python2.7/dist-packages/mopidy/commands.py", line 355, in start_core
    return Core.start(mixer=mixer, backends=backends).proxy()
  File "/usr/lib/python2.7/dist-packages/pykka/actor.py", line 93, in start
    obj = cls(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/mopidy/core/actor.py", line 41, in __init__
    self.backends = Backends(backends)
  File "/usr/lib/python2.7/dist-packages/mopidy/core/actor.py", line 112, in __init__
    has_library = b.has_library().get()
  File "/usr/lib/python2.7/dist-packages/pykka/future.py", line 299, in get
    exec('raise exc_info[0], exc_info[1], exc_info[2]')
  File "<string>", line 1, in <module>
ActorDeadError: GMusicBackend (urn:uuid:a62c070e-93a9-446a-9fbf-04811bb2bbf0) stopped before handling the message
2014-10-24 22:19:37,958 INFO [3503:MainThread] mopidy.commands: Stopping Mopidy frontends
2014-10-24 22:19:37,965 INFO [3503:MainThread] mopidy.commands: Stopping Mopidy core
2014-10-24 22:19:37,969 INFO [3503:MainThread] mopidy.commands: Stopping Mopidy backends
2014-10-24 22:19:37,988 INFO [3503:MainThread] mopidy.commands: Stopping Mopidy audio
2014-10-24 22:19:38,003 INFO [3503:MainThread] mopidy.commands: Stopping Mopidy mixer

Some relevant information from gmusicapi.log

2014-10-24 22:19:37,373 - gmusicapi.Mobileclient1 (shared:201) [DEBUG]: GetStoreTrack(args=[u'T2zl655curukztmg7zdkwtcas3a'], kwargs={})
2014-10-24 22:19:37,581 - gmusicapi.Mobileclient1 (shared:242) [DEBUG]: {u'albumArtRef': [{u'url': u'http://lh3.ggpht.com/CBJ95dFdFYXbubKVQdNvHx2wdyP0k2W6VCTXtQqFXI8JcUqLL3sYbRmQJFrI781A4Bp3tsFmXA'}], u'artistId': [u'As2qn3wdg2smzrnlylji43jfagy'], u'composer': u'Tove Lo', u'year': 2014, u'trackAvailableForSubscription': True, u'trackType': u'7', u'album': u'Truth Serum', u'title': u'Stay High (Habits Remix)', u'albumArtist': u'Tove Lo', u'trackNumber': 6, u'discNumber': 1, u'albumAvailableForPurchase': True, u'contentType': u'2', u'trackAvailableForPurchase': False, u'storeId': u'T2zl655curukztmg7zdkwtcas3a', u'nid': u'T2zl655curukztmg7zdkwtcas3a', u'estimatedSize': u'10338247', u'albumId': u'Bhubivvfmgpqdhgecbeabivp4dy', u'genre': u'Pop', u'kind': u'sj#track', u'artist': u'Tove Lo', u'durationMillis': u'258000'}
2014-10-24 22:19:37,696 - gmusicapi.Mobileclient1 (shared:201) [DEBUG]: GetAlbum(args=[u'Bhubivvfmgpqdhgecbeabivp4dy', False], kwargs={})

All Access Playlists are empty

In the development version of mopidy-gmusic, installed using PIP, my All Access playlists are empty. I can browse albums and artists (great!). The music in the albums/artists is mostly comparable to my playlists and is playing ok.

Searching the library for exact matches does not work

Searching the library for exact matches is not implemented correctly. This may produce wrong results when browsing the library with ncmpcpp or GMPC. The library function find_exact() has to be implemented correctly.

Not all albums listed

In response to this: #47

The contents of the Google Music folder doesn't seem to match my library, nor does it seem to be consistent between folders. E.g., the folder Google Music/SomeArtist/Albums and the folder Google Music/Albums don't match up.
Example:

$ mpc ls Google\ Music/Artists/The\ Ben\ Miller\ Band
Google Music/Artists/The Ben Miller Band/All Tracks
Google Music/Artists/The Ben Miller Band/Ben Miller Band - Any Way, Shape Or Form
Google Music/Artists/The Ben Miller Band/The Ben Miller Band - Heavy Load
$ mpc ls Google\ Music/Albums
Google Music/Albums/Creedence Clearwater Revival - The Ultimate Creedence Clearwater Revival [Disc 1]
Google Music/Albums/Creedence Clearwater Revival - The Ultimate Creedence Clearwater Revival [Disc 2]
Google Music/Albums/Elvis Presley - Legendary Elvis Presley [Disc 1]
Google Music/Albums/Johnny Cash - Complete Live At San Quentin
Google Music/Albums/Michael Jackson - Bad
Google Music/Albums/Michael Jackson - Blood On The Dance Floor: HIStory In The Mix
Google Music/Albums/Michael Jackson - Dangerous
Google Music/Albums/Michael Jackson - HIStory: Greatest Hits, Vol. 1 [Disc 1]
Google Music/Albums/Michael Jackson - Off The Wall
Google Music/Albums/Muddy Waters - Take A Walk With Me
Google Music/Albums/Phil Collins - Hits
Google Music/Albums/Phil Collins - Hits [2]
Google Music/Albums/Red Hot Chili Peppers - Californication
Google Music/Albums/The Allman Brothers Band - At Fillmore East [Disc 1]
Google Music/Albums/ZZ Top - Tres Hombres
Google Music/Albums/Zucchero - All The Best

The ls of Google\ Music/Albums given above is all that I get: I get only 16 albums, none of which are of The Ben Miller Band.

Musicbox 0.4.3 and GMusic

Hey everyone,
I basically have the same problem as described in this post:

https://groups.google.com/forum/?fromgroups=#!searchin/mopidy/google$20music/mopidy/YOB7noVdenI/SujH9Ys2v0YJ

The thing is I don't use the two-step-verification and it still doesn't work.

All I did was install pi musicbox, put in my google credentials (email, password and google service framework id (without the first two letters, so 14 digits in total)), but nothing happens. Also tried with the full 16 digits, still nothing.
I did notice that the volume level in the web interface drops to 0 even though it is set to 100 in the settings.ini but putting it back on 100 over the web interface is no problem, the radio still works.
I just don't see anything in my playlist. I am a paying customer for google all access and have no problems with it on my phone.

Any ideas?

regards

"Likes" playlist?

Would it be possible to assemble a playlist of all liked tracks, much like the gmusic web interface does? Could be shown as just a regular playlist in mopidy.

mopidy-gmusic not playing tracks from All Access

I'm not able to play any tracks from my All Access subscription using mopidy-gmusic. Only tracks that I've uploaded to Google Play Music will play.

Here's the response I'm getting from the server:

(response was: '<HTML>\n<HEAD>\n<TITLE>Forbidden</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Forbi
dden</H1>\n<H2>Error 403</H2>\n</BODY>\n</HTML>\n')
WARNING  Track is not playable: gmusic:track:Tptr5igtinlz7ym5amvv7jdloti

I'm using mopidy 0.18.3 and mopidy-gmusic 0.3.0.

'totalTracks' optional key causes crash

'totalTracks' is an optional key (reference), which causes a crash that @gstrike originally reported over in simon-weber/gmusicapi#161:

ERROR    Unhandled exception in GMusicBackend (urn:uuid:bbf71cb2-2e29-46e2-b020-4bb09c5fcbe7):
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pykka/actor.py", line 191, in _actor_loop
    self.on_start()
  File "/usr/local/lib/python2.7/dist-packages/Mopidy_GMusic-0.1-py2.7.egg/mopidy_gmusic/actor.py", line 32, in on_start
    self.playlists.refresh()
  File "/usr/local/lib/python2.7/dist-packages/Mopidy_GMusic-0.1-py2.7.egg/mopidy_gmusic/playlists.py", line 33, in refresh
    self.backend.session.get_playlist_songs(i)]
  File "/usr/local/lib/python2.7/dist-packages/Mopidy_GMusic-0.1-py2.7.egg/mopidy_gmusic/translator.py", line 21, in to_mopidy_track
    album = to_mopidy_album(track),
  File "/usr/local/lib/python2.7/dist-packages/Mopidy_GMusic-0.1-py2.7.egg/mopidy_gmusic/translator.py", line 41, in to_mopidy_album
    num_tracks = track['totalTracks'],
KeyError: u'totalTracks'
ERROR    GMusicBackend (urn:uuid:[filtered]) stopped before handling the message
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/mopidy/__main__.py", line 89, in main
    core = setup_core(audio, backends)
  File "/usr/lib/pymodules/python2.7/mopidy/__main__.py", line 258, in setup_core
    return Core.start(audio=audio, backends=backends).proxy()
  File "/usr/lib/python2.7/dist-packages/pykka/actor.py", line 93, in start
    obj = cls(*args, **kwargs)
  File "/usr/lib/pymodules/python2.7/mopidy/core/actor.py", line 37, in __init__
    self.backends = Backends(backends)
  File "/usr/lib/pymodules/python2.7/mopidy/core/actor.py", line 86, in __init__
    self.with_library = [b for b in backends if b.has_library().get()]
  File "/usr/lib/python2.7/dist-packages/pykka/future.py", line 299, in get
    exec('raise exc_info[0], exc_info[1], exc_info[2]')
  File "<string>", line 1, in <module>
ActorDeadError: GMusicBackend (urn:uuid:[filtered]) stopped before handling the message

TypeError: object() takes no parameters

Traceback (most recent call last):
  File "/usr/local/bin/mopidy", line 9, in <module>
    load_entry_point('Mopidy==0.18.3', 'console_scripts', 'mopidy')()
  File "/usr/local/lib/python2.7/dist-packages/mopidy/__main__.py", line 69, in main
    args.config_files, installed_extensions, args.config_overrides)
  File "/usr/local/lib/python2.7/dist-packages/mopidy/config/__init__.py", line 73, in load
    schemas.extend(e.get_config_schema() for e in extensions)
  File "/usr/local/lib/python2.7/dist-packages/mopidy/config/__init__.py", line 73, in <genexpr>
    schemas.extend(e.get_config_schema() for e in extensions)
  File "/usr/local/lib/python2.7/dist-packages/mopidy_gmusic/__init__.py", line 26, in get_config_schema
    schema['all_access'] = config.Boolean(optional=True)

Using latest develop

Support adding Google Music's share links to tracklist

I'd like to preface this by saying I'm not very familiar with this whole thing, so please point me in the right direction if this isn't the place to ask.

I'm using the latest development build of mopidy-gmusic

I'm using a chat-based bot to control Mopidy running on a server. I do this by sending it json. For example, to start playing a YouTube video, I'd do {"jsonrpc": "2.0", "id": 1, "method": "core.tracklist.add", "params": {"tracks": null, "at_position": null, "uri": null, "uris": ["yt:https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}} where the "yt:" prefixes the youtube video URL. And to play SoundCloud, I'd prefix the URL with sc:

I've tried prefixing with gmusic: gm: googlemusic: with no luck. Also what URL do I give it for a public playlist? Because it seems like there are 2 that I could give it. The link I get when I click "get link" (eg: http://puu.sh/hsWkc/1c0013ae17.png ) on a playlist, or the link I get after I click on "Listen" from the "get link" page (eg: http://puu.sh/hsWnU/dc3fdc3953.png ) but then there's still the "Start Radio" button. I'd assume mopidy-gmusic would take care of that?

Anyway, some guidance would be greatly appreciated. Sorry again if this isn't the right place to ask.

Utilize `genre` tag?

Would it be possible to use the genre tag from Google Music for searches/library sorting/etc.? It looks like it's in the gmusic api but not checked at all in this plugin.

mpd client errors

after applying the patch for #6 I still get a monster traceback when using an mpd client. here's the end of it:

File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 46, in handle_request
return self._call_next_filter(request, response, filter_chain)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 67, in _call_next_filter
return next_filter(request, response, filter_chain)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 75, in _catch_mpd_ack_errors_filter
return self._call_next_filter(request, response, filter_chain)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 67, in _call_next_filter
return next_filter(request, response, filter_chain)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 88, in _authenticate_filter
return self._call_next_filter(request, response, filter_chain)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 67, in _call_next_filter
return next_filter(request, response, filter_chain)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 106, in _command_list_filter
response = self._call_next_filter(request, response, filter_chain)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 67, in _call_next_filter
return next_filter(request, response, filter_chain)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 135, in _idle_filter
response = self._call_next_filter(request, response, filter_chain)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 67, in _call_next_filter
return next_filter(request, response, filter_chain)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 148, in _add_ok_filter
response = self._call_next_filter(request, response, filter_chain)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 67, in _call_next_filter
return next_filter(request, response, filter_chain)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 160, in _call_handler_filter
response = self._format_response(self._call_handler(request))
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/dispatcher.py", line 168, in _call_handler
return handler(self.context, *_kwargs)
File "/usr/lib/pymodules/python2.7/mopidy/frontends/mpd/protocol/playback.py", line 129, in play
return context.core.playback.play().get()
File "/usr/lib/python2.7/dist-packages/pykka/future.py", line 299, in get
exec('raise exc_info[0], exc_info[1], exc_info[2]')
File "/usr/lib/python2.7/dist-packages/pykka/actor.py", line 200, in _actor_loop
response = self._handle_receive(message)
File "/usr/lib/python2.7/dist-packages/pykka/actor.py", line 294, in _handle_receive
return callee(_message['args'], *_message['kwargs'])
File "/usr/lib/pymodules/python2.7/mopidy/core/playback.py", line 399, in play
if not backend or not backend.playback.play(tl_track.track).get():
File "/usr/lib/python2.7/dist-packages/pykka/future.py", line 299, in get
exec('raise exc_info[0], exc_info[1], exc_info[2]')
File "/usr/lib/python2.7/dist-packages/pykka/actor.py", line 200, in _actor_loop
response = self._handle_receive(message)
File "/usr/lib/python2.7/dist-packages/pykka/actor.py", line 294, in _handle_receive
return callee(_message['args'], **message['kwargs'])
File "/home/pi/mopidy-gmusic/mopidy_gmusic/playback.py", line 9, in play
url = self.backend.session.get_stream_url(track.uri.split(':')[1])
File "/home/pi/mopidy-gmusic/mopidy_gmusic/session.py", line 41, in get_stream_url
return self.api.get_stream_url(song_id)
AttributeError: 'Webclient' object has no attribute 'get_stream_url'

Show "thumbs up" playlist

The API provides a method to fetch all "thumbs up" tracks: get_thumbs_up_songs().
It should be quite straight forward to build playlist out of theses tracks and show it in the list of playlists, like the google music (web) app is doing.

search with special characters

At least with some clients the search fails when the query contains special characters like [&öäü..].
I'm not sure which layer should fix it. Maybe it's an API thing?

Switch to the Mobileclient API

Use the Mobileclient API provided by the Google Play Music API. This will require a new setting, the mobile device ID of your Android device registered at Google Play Music. Using the Mobileclient API will be much more stable and ease the implementation of All Access support.

Error streaming some (not all) music from mpd

I have found that some songs in my library (possibly only ones I get as a part of all-access) create this traceback in my logs and play only a split second of each track affected:

** Message: pygobject_register_sinkfunc is deprecated (GstObject)
INFO     Starting Mopidy 0.15.0
INFO     Loading config from: builtin defaults, /home/isaac/.config/mopidy/mopidy.conf, command line options
INFO     Disabled extension http: Dependency ws4py>=0.2.3 not found
INFO     Disabled extension scrobbler: Dependency pylast>=0.5.7 not found
INFO     Enabled extensions: mpd, local, mpris, stream, gmusic
INFO     Disabled extensions: spotify, http, scrobbler
INFO     Starting Mopidy audio
INFO     Audio output set to "autoaudiosink"
INFO     Starting Mopidy backends: StreamBackend, LocalBackend, GMusicBackend
INFO     Loaded 0 local tracks from /home/isaac/Music using /home/isaac/.local/share/mopidy/local/tag_cache
INFO     Loaded 0 local playlists from /home/isaac/.local/share/mopidy/local/playlists
INFO     Mopidy uses Google Music
INFO     !-- begin debug log --!
INFO     version: 2.0.0
INFO     logging to: /home/isaac/.cache/gmusicapi/log/gmusicapi.log
INFO     initialized
INFO     logged out
INFO     Starting Mopidy core
INFO     Audio mixer set to "alsamixer" using track "Master"
INFO     Starting new HTTPS connection (1): www.google.com
INFO     Starting new HTTPS connection (1): play.google.com
INFO     authenticated
INFO     Starting Mopidy frontends: MpdFrontend, MprisFrontend
INFO     MPD server running at [::]:6600
INFO     MPRIS server connected to D-Bus
WARNING  MPRIS frontend setup failed (To make asynchronous calls, receive signals or export objects, D-Bus connections must be attached to a main loop by passing mainloop=... to the constructor or calling dbus.set_default_main_loop(...))
INFO     New MPD connection from [::1]:52897
ERROR    Unhandled exception in MpdSession (urn:uuid:d63ffedd-dc6e-4ca4-905d-4c98c9b37cff):
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/pykka/actor.py", line 200, in _actor_loop
    response = self._handle_receive(message)
  File "/usr/lib/python2.7/site-packages/pykka/actor.py", line 303, in _handle_receive
    return self.on_receive(message)
  File "/usr/lib/python2.7/site-packages/mopidy/utils/network.py", line 354, in on_receive
    self.on_line_received(line)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/session.py", line 33, in on_line_received
    response = self.dispatcher.handle_request(line)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 46, in handle_request
    return self._call_next_filter(request, response, filter_chain)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 75, in _catch_mpd_ack_errors_filter
    return self._call_next_filter(request, response, filter_chain)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 85, in _authenticate_filter
    return self._call_next_filter(request, response, filter_chain)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 106, in _command_list_filter
    response = self._call_next_filter(request, response, filter_chain)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 135, in _idle_filter
    response = self._call_next_filter(request, response, filter_chain)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 148, in _add_ok_filter
    response = self._call_next_filter(request, response, filter_chain)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 67, in _call_next_filter
    return next_filter(request, response, filter_chain)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 160, in _call_handler_filter
    response = self._format_response(self._call_handler(request))
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/dispatcher.py", line 168, in _call_handler
    return handler(self.context, **kwargs)
  File "/usr/lib/python2.7/site-packages/mopidy/frontends/mpd/protocol/music_db.py", line 92, in find
    results = context.core.library.find_exact(**query).get()
  File "/usr/lib/python2.7/site-packages/pykka/future.py", line 299, in get
    exec('raise exc_info[0], exc_info[1], exc_info[2]')
  File "/usr/lib/python2.7/site-packages/pykka/actor.py", line 200, in _actor_loop
    response = self._handle_receive(message)
  File "/usr/lib/python2.7/site-packages/pykka/actor.py", line 294, in _handle_receive
    return callee(*message['args'], **message['kwargs'])
  File "/usr/lib/python2.7/site-packages/mopidy/core/library.py", line 75, in find_exact
    return [result for result in pykka.get_all(futures) if result]
  File "/usr/lib/python2.7/site-packages/pykka/future.py", line 330, in get_all
    return [future.get(timeout=timeout) for future in futures]
  File "/usr/lib/python2.7/site-packages/pykka/future.py", line 299, in get
    exec('raise exc_info[0], exc_info[1], exc_info[2]')
  File "/usr/lib/python2.7/site-packages/pykka/actor.py", line 200, in _actor_loop
    response = self._handle_receive(message)
  File "/usr/lib/python2.7/site-packages/pykka/actor.py", line 294, in _handle_receive
    return callee(*message['args'], **message['kwargs'])
  File "/usr/lib/python2.7/site-packages/mopidy_gmusic/library.py", line 45, in find_exact
    result_tracks = filter(date_filter, result_tracks)
  File "/usr/lib/python2.7/site-packages/mopidy_gmusic/library.py", line 32, in <lambda>
    date_filter = lambda t: q == str(t['year'])
``

Browsing the Library?

Hello - and thanks for all your work!

I am a little confused - is it possible to browse through the Google Music Library? I am able to see all my albums in MPDroid, but HTML frontends do not provide this feature - apparently the gmusic extension has to support it first...

Thanks
Chris

Stop doesn't change Mopidy state

When using "stop" on gmusic song, Mopidy is still in "playing" state.
There is no music, as it somehow stopped playing, but the state is invalid.
I have no such issue when stopping song from local backend.
For the background how I found this issue you can see mopidy/mopidy.js#5

Upload to PyPI

The Mopidy-GMusic package is missing from PyPI, making it less available and a bit harder to install.

Can't browse tracks, not reacting to tracks

I can't browse through my google music, non-unlimited account, using pi muicbox. I also noticed that the frontend I'm working on doesn't work with the google music. It doesnt seem to be receiving the track playback started command when google music starts

Musicbox and G-Music

Hey all,

i've got a problem with connecting my pi-musicbox to my G-Music All Access.
When i'm adding my Google-Credentials (G-Mail-Account, Applicatin-PW, and Device-ID) the hole system doesn't work. I just get a "Trying to reach MusicBox. Please Wait."
Without Google-Credentials theres no problem with the Musicbox. e.g. Webradio works.
I've tried with latest stable and newest Alpha, both same problems.

Found nearly same Issue here (#25) and try to run the mobile_devices Python-Script, but it doesn't work.
Get a Error with the last line is:

request.exceptions.SSLError: (Errno 1) _ssl.c:504: error14090086:SSL routines:SSL3_GET_SERVER_Certificate:certificate verify failed

Google-Security says also, that my application-pw is never used until now.
Somebody an Idea what i could do?

Thanks

Edit:
Found mopidy.log in /var/log/mopidy/, maybe this error should say anyone something?!

root@MusicBox:~# cat /var/log/mopidy/mopidy.log
2014-04-02 16:04:34,916 - WARNING  Loading JSON local library failed: [Errno 2] No such file or directory: '/var/lib/mopidy/.local/share/mopidy/local/library.json.gz'
2014-04-02 16:09:05,922 - ERROR    Failed to get All Access track info: GetStoreTrack: 400 Client Error: Bad Request
(requests kwargs: {'url': 'https://www.googleapis.com/sj/v1.1/fetchtrack', 'headers': {'Content-Type': 'application/json', 'Authorization': '<omitted>'}, 'params': {'alt': 'json', 'nid': u'Tkbd4dagthwygnbk23f24fq3i5u'}, 'method': 'GET'})
(response was: '{\n "error": {\n  "errors": [\n   {\n    "domain": "global",\n    "reason": "badRequest",\n    "message": "Bad Request"\n   }\n  ],\n  "code": 400,\n  "message": "Bad Request"\n }\n}\n')
2014-04-02 16:13:50,054 - WARNING  Loading JSON local library failed: [Errno 2] No such file or directory: '/var/lib/mopidy/.local/share/mopidy/local/library.json.gz'
2014-04-02 16:36:37,242 - WARNING  Loading JSON local library failed: [Errno 2] No such file or directory: '/var/lib/mopidy/.local/share/mopidy/local/library.json.gz'
2014-04-02 16:36:59,503 - WARNING  Loading JSON local library failed: [Errno 2] No such file or directory: '/var/lib/mopidy/.local/share/mopidy/local/library.json.gz'

Refreshing tracks from library

Hi,

if i read the code correctly, track database is only refreshed after a successful login at startup, but never again - until mopidy gets restarted. Is there any way to force such a refresh? Problem is if you add tracks from All Access via the Web Player, they never show up in Mopidy until you restart the daemon. As i tend to leave the box on for days without a reboot (Raspberry Pi), this kinda sucks :)

Calling `get_track_info()` on thumbs up songs

I wanted to fix the fetch of metadata for thumbs up songs (simon-weber/gmusicapi#283) and realized, we could just call

for song in self.backend.session.get_thumbs_up_songs():
    if not song['deleted']:
        track = self.backend.library._aa_to_mopidy_track(song)
        tracks += [track]

This would reduce network IO a lot on startup!

Anyway, the problem is, that there may be some deleted/moved tracks in the playlist (see simon-weber/gmusicapi#283).

This code would show these deleted (by Google) tracks.
Caching the Track (#42) is not a solution. The tracks are not playable.

But calling get_track_info() just to check, if the tracks got moved is kind of an overdose.

Any thoughts on that?

Caching user playlists locally

By now loading user playlists by looking up all the tracks from GMusic is a very, extremely slow operation. In my case I have something like 20000 tracks in my playlists and this can really take up to 20 minutes for having mopidy+gmusic up & running. Wouldn't it be a good idea to cache trackIDs -> info locally, so we don't have to perform the GMusic lookup every time?

install error

python setup.py egg_info failed with error code 1 in /tmp/build/protobuf

appdirs not found

Gmusic is not started. Mopidy repors the following error:

  Validating extension: gmusic
INFO     2014-09-07 21:31:53,415 [4203:MainThread] mopidy.ext
  Disabled extension gmusic: Dependency appdirs>=1.1.0 not found

If i try to reinstall mopidy gmusic pip reports that the package is there:

Requirement already satisfied (use --upgrade to upgrade): appdirs>=1.1.0 in /usr/local/lib/python2.7/dist-packages (from gmusicapi)

On the filesystem i found the package:

 ls /usr/local/lib/python2.7/dist-packages/appdirs
appdirs-1.4.0.dist-info/ appdirs.py      

Is there a problem with my installation or is my version of appdirs to high?

Playlist support

Add support for Google Music Playlists. At least fetching and playing should work.

gmusic/all_access unknown config key

installed with pip on Arch Linux and added all_access=true. now I am getting this warnings in mopidy output:

WARNING Found gmusic configuration errors, the extension has been automatically disabled:
WARNING gmusic/all_access unknown config key.
WARNING Please fix the extension configuration errors or disable the extensions to silence these messages.

Authenticates OK but then dies.

gmusicapi.log:

logging to: /Users/xxxxx/Library/Logs/gmusicapi/gmusicapi.log
2015-03-22 20:14:23,510 - gmusicapi.Mobileclient1 (shared:70) [INFO]: initialized
2015-03-22 20:14:23,511 - gmusicapi.Mobileclient1 (shared:93) [INFO]: logged out
2015-03-22 20:14:23,563 - gmusicapi.Mobileclient1 (shared:204) [DEBUG]: ClientLogin(<omitted>)
2015-03-22 20:14:23,728 - gmusicapi.Mobileclient1 (shared:201) [DEBUG]: Init(args=[], kwargs={})
2015-03-22 20:14:24,500 - gmusicapi.Mobileclient1 (shared:242) [DEBUG]: 
2015-03-22 20:14:24,501 - gmusicapi.Mobileclient1 (mobileclient:43) [INFO]: authenticated
2015-03-22 20:14:24,503 - gmusicapi.Mobileclient1 (shared:201) [DEBUG]: ListTracks(args=[], kwargs={'start_token': None, 'max_results': 20000})
2015-03-22 20:14:33,654 - gmusicapi.Mobileclient1 (shared:242) [DEBUG]: {u'kind': u'sj#trackList', u'data': {u'items': ['<13621 tracks>']}}

logging with -vvv:

INFO     2015-03-22 20:14:24,501 [3426:GMusicBackend-4] gmusicapi.Mobileclient1
  authenticated
DEBUG    2015-03-22 20:14:24,503 [3426:GMusicBackend-4] gmusicapi.Mobileclient1
  ListTracks(args=[], kwargs={'start_token': None, 'max_results': 20000})
INFO     2015-03-22 20:14:24,505 [3426:GMusicBackend-4] requests.packages.urllib3.connectionpool
  Starting new HTTPS connection (1): www.googleapis.com
DEBUG    2015-03-22 20:14:30,312 [3426:GMusicBackend-4] requests.packages.urllib3.connectionpool
  "POST /sj/v1.5/trackfeed?alt=json&updated-min=0&include-tracks=true HTTP/1.1" 200 None
DEBUG    2015-03-22 20:14:33,654 [3426:GMusicBackend-4] gmusicapi.Mobileclient1
  {u'kind': u'sj#trackList', u'data': {u'items': ['<13621 tracks>']}}
ERROR    2015-03-22 20:14:33,846 [3426:GMusicBackend-4] pykka
  Unhandled exception in GMusicBackend (urn:uuid:fxxxx99e-6097-4625-9a15-xxxxxec61715):
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/pykka/actor.py", line 191, in _actor_loop
    self.on_start()
  File "/usr/local/lib/python2.7/site-packages/mopidy_gmusic/actor.py", line 30, in on_start
    self.library.refresh()
  File "/usr/local/lib/python2.7/site-packages/mopidy_gmusic/library.py", line 124, in refresh
    self._to_mopidy_track(song)
  File "/usr/local/lib/python2.7/site-packages/mopidy_gmusic/library.py", line 207, in _to_mopidy_track
    artists=[self._to_mopidy_artist(song)],
  File "/usr/local/lib/python2.7/site-packages/mopidy_gmusic/library.py", line 233, in _to_mopidy_artist
    name = song['artist']
KeyError: u'artist'
DEBUG    2015-03-22 20:14:33,847 [3426:GMusicBackend-4] pykka
  Unregistered GMusicBackend (urn:uuid:fxxxx99e-6097-4625-9a15-xxxxxec61715)
ERROR    2015-03-22 20:14:33,847 [3426:MainThread] mopidy.commands
  Uncaught exception
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/mopidy/commands.py", line 273, in run
    core = self.start_core(mixer, backends)
  File "/usr/local/lib/python2.7/site-packages/mopidy/commands.py", line 355, in start_core
    return Core.start(mixer=mixer, backends=backends).proxy()
  File "/usr/local/lib/python2.7/site-packages/pykka/actor.py", line 93, in start
    obj = cls(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/mopidy/core/actor.py", line 41, in __init__
    self.backends = Backends(backends)
  File "/usr/local/lib/python2.7/site-packages/mopidy/core/actor.py", line 112, in __init__
    has_library = b.has_library().get()
  File "/usr/local/lib/python2.7/site-packages/pykka/future.py", line 299, in get
    exec('raise exc_info[0], exc_info[1], exc_info[2]')
  File "<string>", line 1, in <module>
ActorDeadError: GMusicBackend (urn:uuid:fxxxx99e-6097-4625-9a15-xxxxxec61715) stopped before handling the message
INFO     2015-03-22 20:14:33,849 [3426:MainThread] mopidy.commands
  Stopping Mopidy frontends
DEBUG    2015-03-22 20:14:33,849 [3426:MainThread] mopidy.utils.process
  Stopping 0 instance(s) of MpdFrontend
DEBUG    2015-03-22 20:14:33,849 [3426:MainThread] mopidy.utils.process
  Stopping 0 instance(s) of HttpFrontend
DEBUG    2015-03-22 20:14:33,849 [3426:MainThread] mopidy.utils.process
  Stopping 0 instance(s) of NotifierFrontend
DEBUG    2015-03-22 20:14:33,849 [3426:MainThread] mopidy.utils.process
  Stopping 0 instance(s) of ScrobblerFrontend

Cannot enable mopidy-gmusic

I installed and configured this extension.
When starting mopidy, gmusic is not on the list of Enabled extensions and Disabled extensions.

How can I debug, what is wrong?

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.