Merge pull request #3002 from thetarkus/gmusic-additions-1

Add uploader_id, uploader_name, and device_id for gmusicapi auth in gmusic plugin
This commit is contained in:
Adrian Sampson 2018-08-14 09:17:45 -04:00 committed by GitHub
commit 86d353717a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 22 deletions

View file

@ -30,17 +30,23 @@ import gmusicapi.clients
class Gmusic(BeetsPlugin):
def __init__(self):
super(Gmusic, self).__init__()
self.config.add({
u'auto': False,
u'uploader_id': '',
u'uploader_name': '',
u'device_id': '',
})
# Checks for OAuth2 credentials,
# if they don't exist - performs authorization
self.m = Musicmanager()
if os.path.isfile(gmusicapi.clients.OAUTH_FILEPATH):
self.m.login()
uploader_id = self.config['uploader_id']
uploader_name = self.config['uploader_name']
self.m.login(uploader_id=uploader_id.as_str().upper() or None,
uploader_name=uploader_name.as_str() or None)
else:
self.m.perform_oauth()
self.config.add({
u'auto': False,
})
if self.config['auto']:
self.import_stages = [self.autoupload]
@ -82,6 +88,7 @@ class Gmusic(BeetsPlugin):
def search(self, lib, opts, args):
password = config['gmusic']['password']
email = config['gmusic']['email']
device_id = config['gmusic']['device_id']
password.redact = True
email.redact = True
# Since Musicmanager doesn't support library management
@ -89,7 +96,7 @@ class Gmusic(BeetsPlugin):
mobile = Mobileclient()
try:
mobile.login(email.as_str(), password.as_str(),
Mobileclient.FROM_MAC_ADDRESS)
device_id.as_str() or Mobileclient.FROM_MAC_ADDRESS)
files = mobile.get_all_songs()
except NotLoggedIn:
ui.print_(

View file

@ -18,6 +18,8 @@ New features:
:user:`jams2`
* Automatically upload to Google Play Music library on track import.
:user:`shuaiscott`
* New options for Google Play Music authentication in gmusic plugin.
:user:`thetarkus`
Fixes:

View file

@ -20,14 +20,15 @@ Then, you can enable the ``gmusic`` plugin in your configuration (see
Usage
-----
To automatically upload all tracks to Google Play Music, add the ``auto: yes``
parameter to your configuration file like the example below::
Configuration is required before use. Below is an example configuration::
gmusic:
auto: yes
email: user@example.com
password: seekrit
auto: yes
uploader_id: 00:11:22:33:AA:BB
device_id: F96AE4C643A5
To upload tracks to Google Play Music, use the ``gmusic-upload`` command::
@ -35,19 +36,7 @@ To upload tracks to Google Play Music, use the ``gmusic-upload`` command::
If you don't include a query, the plugin will upload your entire collection.
To query the songs in your collection, you will need to add your Google
credentials to your beets configuration file. Put your Google username and
password under a section called ``gmusic``, like so::
gmusic:
email: user@example.com
password: seekrit
If you have enabled two-factor authentication in your Google account, you will
need to set up and use an *application-specific password*. You can obtain one
from your Google security settings page.
Then, use the ``gmusic-songs`` command to list music::
To list your music collection, use the ``gmusic-songs`` command::
beet gmusic-songs [-at] [ARGS]
@ -59,3 +48,36 @@ example::
For a list of all songs in your library, run ``beet gmusic-songs`` without any
arguments.
Configuration
-------------
To configure the plugin, make a ``gmusic:`` section in your configuration file.
The available options are:
- **email**: Your Google account email address.
Default: none.
- **password**: Password to your Google account. Required to query songs in
your collection.
For accounts with 2-step-verification, an
`app password <https://support.google.com/accounts/answer/185833?hl=en>`__
will need to be generated. An app password for an account without
2-step-verification is not required but is recommended.
Default: none.
- **auto**: Set to ``yes`` to automatically upload new imports to Google Play
Music.
Default: ``no``
- **uploader_id**: Unique id as a MAC address, eg ``'00:11:22:33:AA:BB'``.
This option should be set before the maximum number of authorized devices is
reached.
If provided, use the same id for all future runs on this, and other, beets
installations as to not reach the maximum number of authorized devices.
Default: device's MAC address.
- **device_id**: Unique device ID for authorized devices.
This option only needs to be set if you receive an `InvalidDeviceId`
exception. Below the exception will be a list of valid device IDs.
Default: none.
Refer to the `Google Play Music Help
<https://support.google.com/googleplaymusic/answer/3139562?hl=en>`__
page for more details on authorized devices.