Coder Social home page Coder Social logo

and3rson / clay Goto Github PK

View Code? Open in Web Editor NEW
157.0 9.0 11.0 663 KB

Awesome standalone command line player for Google Play Music.

License: GNU General Public License v3.0

Makefile 0.18% Shell 0.03% Python 99.56% Dockerfile 0.23%
python python2 python3 gmusicapi vlc songs urwid player clay alpha

clay's Introduction

Andrew Dunai

Architect, drummer, retrowave fan, freerider and simply a chill (?) guy. GMT+2. Btw, I use Arch.

  • I love terminals & motorcycles.
  • I love neovim, tmux, Python, & Golang.
  • I love libre software. I believe majority of people underestimate its importance and are going in for some serious problems in near future.
  • I love Wayland and tiling WMs (riverwm).
  • I love retro computers, especially based on 6502 & Z80 CPUs. I code in 6502 assembly for fun.
  • I love ESP8266.
  • I love Hexagonal Architecture and Domain-Driven Design.
  • I hate modern internet.
  • I try not to get vendor-locked.
  • I love shaders & 3D graphics.
  • I used to do a lot of modding for HL, CS & Dota.
  • I love trebuchets because they are the superior siege weapon.
  • I've spent over 9000 hours in Unreal Tournament 1999, Hitman 1-3, Half-Life (& mods), CS:GO, Hotline Miami, Dota & C&C.
  • I used to be Steam & Dota 2 translator and co-organizer & broadcaster of West-Ukrainian Dota 2 tournaments.
  • I used to develop cheats for CS:GO (own wallhack, modified esp hack, own flashbang hack), although I've never used them in ranked games.
  • I had to deal with COBOL & DB/2 in the past. (shout-out IBM System z!)

clay's People

Contributors

and3rson avatar fluctuz avatar sjkingo avatar sudormrfbin avatar true-world avatar valentijnvdbeek 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

clay's Issues

Possible Device IDs not showing

The readme suggests the following:

You will also need to know your Device ID. Thanks to gmusicapi, the app should display possible IDs once you enter a wrong one.

Where will they display? Debug and Settings tab show no signs, besides 'Is authenticated: False'. Is there a log somewhere? I've entered a 'wrong' id twice, once using one found randomly online, and once using the string reported by adb devices.

Running Ubuntu 18.04, installed via pip.

Of possible note: I am on gpm family plan as a family member, not the main account. Not sure if this matters.

Thank you!

Lee

Podcast support

In furthering the support of Google Music inside of Clay, it would be nice if podcast support was introduced, much in the style of the artists/albums page.

In addition to simply playing podcasts, previously "completed" podcasts should have some visible indication to mark them as played, and podcast progress should be synced with Google every few minutes, so one can start a podcast on one machine, stop it, and resume from the same spot on another.

mutagen

@and3rson awesome project, but currently I'm getting this error:

pkg_resources.DistributionNotFound: The 'mutagen>=1.34' distribution was not found and is required by gmusicapi

I have mutagen 1.39-1 installed through AUR (manjaro). Any thoughts on what might be going wrong?

Traceback on Arch

when running clay i get this error..

$ clay
Traceback (most recent call last): File "/home/mkr/.local/bin//clay", line 6, in <module> from pkg_resources import load_entry_point File "/usr/lib/python3.7/site-packages/pkg_resources/__init__.py", line 3241, in <module> @_call_aside File "/usr/lib/python3.7/site-packages/pkg_resources/__init__.py", line 3225, in _call_aside f(*args, **kwargs) File "/usr/lib/python3.7/site-packages/pkg_resources/__init__.py", line 3254, in _initialize_master_working_set working_set = WorkingSet._build_master() File "/usr/lib/python3.7/site-packages/pkg_resources/__init__.py", line 583, in _build_master ws.require(__requires__) File "/usr/lib/python3.7/site-packages/pkg_resources/__init__.py", line 900, in require needed = self.resolve(parse_requirements(requirements)) File "/usr/lib/python3.7/site-packages/pkg_resources/__init__.py", line 786, in resolve raise DistributionNotFound(req, requirers) pkg_resources.DistributionNotFound: The 'clay-player==1.1.0' distribution was not found and is required by the application

Rating Icon KeyError

When converting tracks to a songlist, a KeyError occurs as 3 is not in RATING_ICONS. This is the line where the error occurs:

self.rating = self.RATING_ICONS[track.rating]  # track.rating = 3

# reference
RATING_ICONS = {
    0: ' ',
    1: u'\U0001F593' if _unicode else '-',
    4: u'\U0001F593' if _unicode else '-',
    5: u'\U0001F592' if _unicode else '+'
}

Looking at my account, the song that causes this issue has no thumb so adding 3: ' ', seems to fix the issue.

VLC 3.x sends error messages to stdout when starting a song

Clay version: 0.7.2
VLC version: 3.0.0

After updating VLC it will send an "[00007f15000b78e0] prefetch stream error: unimplemented query (264) in control" every time you start playing a song. This interrupts the output of Clay making the program uncontrollable and, hence, unusable.

The existence of python-dbus does not imply the existence of notifications

From osd.py:

try:
    from dbus import SessionBus, Interface
    IS_INIT = True
except ImportError:
    ERROR_MESSAGE = 'Could not import dbus. OSD notifications will be disabled.'

This resulted in a crash on a barebones environment that does not have a notification system set up, but happened to have the dbus package installed.

Option for search shortcut

Currently the interface essentially forces one to use modifier keys to access most of its functionality, whether that is playing/pausing, adding to the queue, or switching tabs. Interestingly enough, if you bind those functions to single keys, the operations still work, but you can no longer type in a search box.

Ideally this would be toggleable functionality, so if someone binds search to a shortcut (say "s"), then they can use any combination of keys to access other systems, and still be able to type in the search field when "s" is pressed.

Windows Can't Launch Clay

Error message:

Traceback (most recent call last):
  File "C:\Users\sreinag\AppData\Roaming\Python\Python36\Scripts\clay-script.py", line 11, in <module>
    load_entry_point('clay-player==1.1.0', 'console_scripts', 'clay')()
  File "c:\program files\python36\lib\site-packages\pkg_resources\__init__.py", line 565, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "c:\program files\python36\lib\site-packages\pkg_resources\__init__.py", line 2631, in load_entry_point
    return ep.load()
  File "c:\program files\python36\lib\site-packages\pkg_resources\__init__.py", line 2291, in load
    return self.resolve()
  File "c:\program files\python36\lib\site-packages\pkg_resources\__init__.py", line 2297, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "C:\Users\sreinag\AppData\Roaming\Python\Python36\site-packages\clay\app.py", line 16, in <module>
    from clay.player import player
  File "C:\Users\sreinag\AppData\Roaming\Python\Python36\site-packages\clay\player.py", line 16, in <module>
    from clay import vlc, meta
  File "C:\Users\sreinag\AppData\Roaming\Python\Python36\site-packages\clay\vlc.py", line 199, in <module>
    dll, plugin_path  = find_lib()
  File "C:\Users\sreinag\AppData\Roaming\Python\Python36\site-packages\clay\vlc.py", line 174, in find_lib
    dll = ctypes.CDLL(libname)
  File "c:\program files\python36\lib\ctypes\__init__.py", line 348, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found

Crash when hitting down

I was typing in the search bar, and then hit the down button of my keyboard. The CLI crashed and this stacktrace appear:

Traceback (most recent call last):
  File "/home/metaheavens/.local/bin/clay", line 11, in <module>
    load_entry_point('clay-player==1.0.0', 'console_scripts', 'clay')()
  File "/home/metaheavens/.local/lib/python3.6/site-packages/clay/app.py", line 371, in main
    loop.run()
  File "/usr/lib/python3.6/site-packages/urwid/main_loop.py", line 286, in run
    self._run()
  File "/usr/lib/python3.6/site-packages/urwid/main_loop.py", line 384, in _run
    self.event_loop.run()
  File "/usr/lib/python3.6/site-packages/urwid/main_loop.py", line 788, in run
    self._loop()
  File "/usr/lib/python3.6/site-packages/urwid/main_loop.py", line 825, in _loop
    self._watch_files[fd]()
  File "/usr/lib/python3.6/site-packages/urwid/raw_display.py", line 404, in <lambda>
    event_loop, callback, self.get_available_raw_input())
  File "/usr/lib/python3.6/site-packages/urwid/raw_display.py", line 502, in parse_input
    callback(processed, processed_codes)
  File "/usr/lib/python3.6/site-packages/urwid/main_loop.py", line 411, in _update
    self.process_input(keys)
  File "/usr/lib/python3.6/site-packages/urwid/main_loop.py", line 511, in process_input
    k = self._topmost_widget.keypress(self.screen_size, k)
  File "/home/metaheavens/.local/lib/python3.6/site-packages/clay/app.py", line 232, in keypress
    hotkey_manager.keypress("global", self, super(AppWidget, self), size, key)
  File "/home/metaheavens/.local/lib/python3.6/site-packages/clay/hotkeys.py", line 139, in keypress
    ret = super_.keypress(size, key)
  File "/usr/lib/python3.6/site-packages/urwid/container.py", line 1131, in keypress
    return self.body.keypress( (maxcol, remaining), key )
  File "/usr/lib/python3.6/site-packages/urwid/container.py", line 2271, in keypress
    key = w.keypress((mc,) + size[1:], key)
  File "/home/metaheavens/.local/lib/python3.6/site-packages/clay/songlist.py", line 614, in keypress
    size, key)
  File "/home/metaheavens/.local/lib/python3.6/site-packages/clay/hotkeys.py", line 137, in keypress
    ret = getattr(caller, method_name)()
  File "/home/metaheavens/.local/lib/python3.6/site-packages/clay/songlist.py", line 645, in move_up
    matches, index = self._get_filtered()
TypeError: 'bool' object is not iterable

macOS support?

Hi,

I tried to install clay via pipy:

$ pip install --user clay-player
Collecting clay-player
  Downloading https://files.pythonhosted.org/packages/50/52/b9300f4c27db1d8446e3031c3d5680e35a32b5faca8363fb5740e0c228fa/clay-player-1.0.2.tar.gz (220kB)
    100% |████████████████████████████████| 225kB 1.5MB/s
Collecting gmusicapi (from clay-player)
  Downloading https://files.pythonhosted.org/packages/7e/61/0197710459390dd6470e536438a111f57e811725b66e7c162c50ec5acda8/gmusicapi-11.0.1.tar.gz (170kB)
    100% |████████████████████████████████| 174kB 1.4MB/s
Collecting PyYAML (from clay-player)
  Downloading https://files.pythonhosted.org/packages/4a/85/db5a2df477072b2902b0eb892feb37d88ac635d36245a72a6a69b23b383a/PyYAML-3.12.tar.gz (253kB)
    100% |████████████████████████████████| 256kB 3.6MB/s
Collecting urwid (from clay-player)
  Downloading https://files.pythonhosted.org/packages/c7/90/415728875c230fafd13d118512bde3184d810d7bf798a631abc05fac09d0/urwid-2.0.1.tar.gz (604kB)
    100% |████████████████████████████████| 614kB 3.2MB/s
Collecting codename (from clay-player)
  Downloading https://files.pythonhosted.org/packages/c8/44/682d39480678b0d3a07c7c7c08e5c102e4807938ed9d126a77e21be00afd/codename-1.1.tar.gz
Collecting validictory!=0.9.2,>=0.8.0 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/4f/ca/80c04ee324233dacca3258153e7c71fc667fe032e0b21bae788f83fe4103/validictory-1.1.2-py2.py3-none-any.whl
Collecting decorator>=3.3.1 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/bc/bb/a24838832ba35baf52f32ab1a49b906b5f82fb7c76b2f6a7e35e140bac30/decorator-4.3.0-py2.py3-none-any.whl
Collecting mutagen>=1.34 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/2c/6a/0b2caf9364db074b616b1b8c26ce7166a883c21b0e40bd50f6db02307afe/mutagen-1.40.0.tar.gz (917kB)
    100% |████████████████████████████████| 921kB 12.8MB/s
Collecting requests!=1.2.0,!=2.12.0,!=2.12.1,!=2.12.2,!=2.18.2,!=2.2.1,!=2.8.0,!=2.8.1,>=1.1.0 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/49/df/50aa1999ab9bde74656c2919d9c0c085fd2b3775fd3eca826012bef76d8c/requests-2.18.4-py2.py3-none-any.whl (88kB)
    100% |████████████████████████████████| 92kB 519kB/s
Collecting python-dateutil!=2.0,>=1.3 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/cf/f5/af2b09c957ace60dcfac112b669c45c8c97e32f94aa8b56da4c6d1682825/python_dateutil-2.7.3-py2.py3-none-any.whl (211kB)
    100% |████████████████████████████████| 215kB 1.8MB/s
Collecting proboscis>=1.2.5.1 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/3c/c8/c187818ab8d0faecdc3c16c1e0b2e522f3b38570f0fb91dcae21662019d0/proboscis-1.2.6.0.tar.gz
Collecting protobuf>=3.0.0 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/eb/a7/042722bc48082f6b02498ebdf4e64a6d1b4543271d4f2f495641f429c56d/protobuf-3.5.2.post1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (1.2MB)
    100% |████████████████████████████████| 1.2MB 978kB/s
Collecting oauth2client>=1.1 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/82/d8/3eab58811282ac7271a081ba5c0d4b875ce786ca68ce43e2a62ade32e9a8/oauth2client-4.1.2-py2.py3-none-any.whl (99kB)
    100% |████████████████████████████████| 102kB 865kB/s
Collecting mock>=0.7.0 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/e6/35/f187bdf23be87092bd0f1200d43d23076cee4d0dec109f195173fd3ebc79/mock-2.0.0-py2.py3-none-any.whl (56kB)
    100% |████████████████████████████████| 61kB 844kB/s
Collecting appdirs>=1.1.0 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/56/eb/810e700ed1349edde4cbdc1b2a21e28cdf115f9faf263f6bbf8447c1abf3/appdirs-1.4.3-py2.py3-none-any.whl
Collecting gpsoauth>=0.2.0 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/96/a1/2b366c602ee081def4dd80624581dfa8eb23d20c5a51f8a2591c40fa8d41/gpsoauth-0.4.1.tar.gz
Collecting MechanicalSoup>=0.4.0 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/85/82/f9bfaedadc0abd8c1800cdc70fb4f35f28387a6a596fc9ae464fc4ebdcad/MechanicalSoup-0.10.0.tar.gz
Collecting six>=1.9.0 (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
Collecting future (from gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/00/2b/8d082ddfed935f3608cc61140df6dcbf0edea1bc3ab52fb6c29ae3e81e85/future-0.16.0.tar.gz (824kB)
    100% |████████████████████████████████| 829kB 12.3MB/s
Collecting certifi>=2017.4.17 (from requests!=1.2.0,!=2.12.0,!=2.12.1,!=2.12.2,!=2.18.2,!=2.2.1,!=2.8.0,!=2.8.1,>=1.1.0->gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/7c/e6/92ad559b7192d846975fc916b65f667c7b8c3a32bea7372340bfe9a15fa5/certifi-2018.4.16-py2.py3-none-any.whl (150kB)
    100% |████████████████████████████████| 153kB 1.4MB/s
Collecting idna<2.7,>=2.5 (from requests!=1.2.0,!=2.12.0,!=2.12.1,!=2.12.2,!=2.18.2,!=2.2.1,!=2.8.0,!=2.8.1,>=1.1.0->gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/27/cc/6dd9a3869f15c2edfab863b992838277279ce92663d334df9ecf5106f5c6/idna-2.6-py2.py3-none-any.whl (56kB)
    100% |████████████████████████████████| 61kB 820kB/s
Collecting urllib3<1.23,>=1.21.1 (from requests!=1.2.0,!=2.12.0,!=2.12.1,!=2.12.2,!=2.18.2,!=2.2.1,!=2.8.0,!=2.8.1,>=1.1.0->gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/63/cb/6965947c13a94236f6d4b8223e21beb4d576dc72e8130bd7880f600839b8/urllib3-1.22-py2.py3-none-any.whl (132kB)
    100% |████████████████████████████████| 133kB 920kB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests!=1.2.0,!=2.12.0,!=2.12.1,!=2.12.2,!=2.18.2,!=2.2.1,!=2.8.0,!=2.8.1,>=1.1.0->gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
    100% |████████████████████████████████| 143kB 3.3MB/s
Requirement already satisfied: setuptools in /usr/local/lib/python3.6/site-packages (from protobuf>=3.0.0->gmusicapi->clay-player) (39.2.0)
Collecting pyasn1-modules>=0.0.5 (from oauth2client>=1.1->gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/e9/51/bcd96bf6231d4b2cc5e023c511bee86637ba375c44a6f9d1b4b7ad1ce4b9/pyasn1_modules-0.2.1-py2.py3-none-any.whl (60kB)
    100% |████████████████████████████████| 61kB 1.2MB/s
Collecting rsa>=3.1.4 (from oauth2client>=1.1->gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/e1/ae/baedc9cb175552e95f3395c43055a6a5e125ae4d48a1d7a924baca83e92e/rsa-3.4.2-py2.py3-none-any.whl (46kB)
    100% |████████████████████████████████| 51kB 810kB/s
Collecting httplib2>=0.9.1 (from oauth2client>=1.1->gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/fd/ce/aa4a385e3e9fd351737fd2b07edaa56e7a730448465aceda6b35086a0d9b/httplib2-0.11.3.tar.gz (215kB)
    100% |████████████████████████████████| 225kB 3.2MB/s
Collecting pyasn1>=0.1.7 (from oauth2client>=1.1->gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/a0/70/2c27740f08e477499ce19eefe05dbcae6f19fdc49e9e82ce4768be0643b9/pyasn1-0.4.3-py2.py3-none-any.whl (72kB)
    100% |████████████████████████████████| 81kB 1.0MB/s
Collecting pbr>=0.11 (from mock>=0.7.0->gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/2d/9d/7bfab757977067556c7ca5fe437f28e8b8843c95564fca504de79df63b25/pbr-4.0.3-py2.py3-none-any.whl (98kB)
    100% |████████████████████████████████| 102kB 1.3MB/s
Collecting pycryptodomex>=3.0 (from gpsoauth>=0.2.0->gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/11/8d/05bcf8e039e989c0dd4a645a66e5fcda873718b2ff8350c7d77c3b1f2a20/pycryptodomex-3.6.1-cp36-cp36m-macosx_10_6_intel.whl (7.2MB)
    100% |████████████████████████████████| 7.2MB 1.2MB/s
Collecting beautifulsoup4 (from MechanicalSoup>=0.4.0->gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/9e/d4/10f46e5cfac773e22707237bfcd51bbffeaf0a576b0a847ec7ab15bd7ace/beautifulsoup4-4.6.0-py3-none-any.whl (86kB)
    100% |████████████████████████████████| 92kB 509kB/s
Collecting lxml (from MechanicalSoup>=0.4.0->gmusicapi->clay-player)
  Downloading https://files.pythonhosted.org/packages/a4/7c/0c333ccdaa04628b4df46d36b8a700d7810ffecd1371de796e2403fe9380/lxml-4.2.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (8.7MB)
    100% |████████████████████████████████| 8.7MB 2.7MB/s
Building wheels for collected packages: clay-player, gmusicapi, PyYAML, urwid, codename, mutagen, proboscis, gpsoauth, MechanicalSoup, future, httplib2
  Running setup.py bdist_wheel for clay-player ... done
  Stored in directory: /Users/yee/Library/Caches/pip/wheels/ff/00/83/46771d16a1479f37df8d8c0f3bf21763bc7717757884cef418
  Running setup.py bdist_wheel for gmusicapi ... done
  Stored in directory: /Users/yee/Library/Caches/pip/wheels/55/7f/d7/b52f089e6ba2338b310c69bece8fc2ef69d8fc256fe5473b9e
  Running setup.py bdist_wheel for PyYAML ... done
  Stored in directory: /Users/yee/Library/Caches/pip/wheels/03/05/65/bdc14f2c6e09e82ae3e0f13d021e1b6b2481437ea2f207df3f
  Running setup.py bdist_wheel for urwid ... done
  Stored in directory: /Users/yee/Library/Caches/pip/wheels/34/06/50/24011714e101b5ad8518c69175d117a257413e3c15a92983f0
  Running setup.py bdist_wheel for codename ... done
  Stored in directory: /Users/yee/Library/Caches/pip/wheels/e4/9a/3d/a5f9cd89a5f5d27c0de1871d8103ede68a5219347e04d6ecca
  Running setup.py bdist_wheel for mutagen ... done
  Stored in directory: /Users/yee/Library/Caches/pip/wheels/2f/1e/3a/dec0a88f9acba1652136c423069c44cb7a70a450836e8ee775
  Running setup.py bdist_wheel for proboscis ... done
  Stored in directory: /Users/yee/Library/Caches/pip/wheels/8c/c9/82/8aa441245194f414659baab25a4f6b3b0d604822c0aff8fb7c
  Running setup.py bdist_wheel for gpsoauth ... done
  Stored in directory: /Users/yee/Library/Caches/pip/wheels/a2/14/fc/0754368beb9f2fc1515b7974c23261eac42bd305ff94c6ea4e
  Running setup.py bdist_wheel for MechanicalSoup ... done
  Stored in directory: /Users/yee/Library/Caches/pip/wheels/c1/a9/bf/39517dddf45f347a7ec6ab44c72c9d18cf2b15cdb365380a35
  Running setup.py bdist_wheel for future ... done
  Stored in directory: /Users/yee/Library/Caches/pip/wheels/bf/c9/a3/c538d90ef17cf7823fa51fc701a7a7a910a80f6a405bf15b1a
  Running setup.py bdist_wheel for httplib2 ... done
  Stored in directory: /Users/yee/Library/Caches/pip/wheels/1b/9c/9e/1f6fdb21dbb1fe6a99101d697f12cb8c1fa96c1587df69adba
Successfully built clay-player gmusicapi PyYAML urwid codename mutagen proboscis gpsoauth MechanicalSoup future httplib2
Installing collected packages: validictory, decorator, mutagen, certifi, idna, urllib3, chardet, requests, six, python-dateutil, proboscis, protobuf, pyasn1, pyasn1-modules, rsa, httplib2, oauth2client, pbr, mock, appdirs, pycryptodomex, gpsoauth, beautifulsoup4, lxml, MechanicalSoup, future, gmusicapi, PyYAML, urwid, codename, clay-player
Successfully installed MechanicalSoup-0.10.0 PyYAML-3.12 appdirs-1.4.3 beautifulsoup4-4.6.0 certifi-2018.4.16 chardet-3.0.4 clay-player-1.0.2 codename-1.1 decorator-4.3.0 future-0.16.0 gmusicapi-11.0.1 gpsoauth-0.4.1 httplib2-0.11.3 idna-2.6 lxml-4.2.1 mock-2.0.0 mutagen-1.40.0 oauth2client-4.1.2 pbr-4.0.3 proboscis-1.2.6.0 protobuf-3.5.2.post1 pyasn1-0.4.3 pyasn1-modules-0.2.1 pycryptodomex-3.6.1 python-dateutil-2.7.3 requests-2.18.4 rsa-3.4.2 six-1.11.0 urllib3-1.22 urwid-2.0.1 validictory-1.1.2

but can't start it:

$ clay
Traceback (most recent call last):
  File "/Users/yee/Library/Python/3.6/bin/clay", line 7, in <module>
    from clay.app import main
  File "/Users/yee/Library/Python/3.6/lib/python/site-packages/clay/app.py", line 16, in <module>
    from clay.player import player
  File "/Users/yee/Library/Python/3.6/lib/python/site-packages/clay/player.py", line 16, in <module>
    from clay import vlc, meta
  File "/Users/yee/Library/Python/3.6/lib/python/site-packages/clay/vlc.py", line 199, in <module>
    dll, plugin_path  = find_lib()
  File "/Users/yee/Library/Python/3.6/lib/python/site-packages/clay/vlc.py", line 191, in find_lib
    dll = ctypes.CDLL('libvlc.dylib')
  File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ctypes/__init__.py", line 348, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: dlopen(libvlc.dylib, 6): image not found

how can I resolve this problem? there was a (maybe) related issue: oaubert/python-vlc#37

Support playback of on-demand tracks / playlists

Currently it seems i'm not able to play anything than my own uploaded tracks.
It would be nice to play playlists, stations and just any song provided by the on-demand subscription thingy.

If there is anything i can do to help out here, fell free to ask.

Dockerfile Build Issue

When I run something like:
docker build -t clay:latest .
(inside the git project directory)
seemingly most things cary across yet it errors out on:

Step 12/21 : RUN useradd -D ${HOST_USER} -m -G audio -u ${HOST_UID}                                                  
 ---> Running in 6b6454761d31       
useradd: option requires an argument -- 'u'

Clay requires X and GTK despite being a console application

As discussed in issue #7 Clay relies on the Keybinder module to define global X keybinds using a shim GTK program. This means that you need to install both to be able to run Clay without getting any warning messages. Which is a bit silly seeing that Clay is a console program without any graphical elements and it would be entirely reasonable to run it headless (ex. on a raspberry pi connected to a speaker).

The Keybinder should probably become an optional dependency depending on whether X is running or not.

Google Play music login failed (API returned false) - 2FA / MFA

I enabled 2/multi factor authentication for google and I assume thats the reason it can't log in.

This is the error that shows up when I hit save on the settings page and clay crashes:

<decorator-gen-76>:2: GmusicapiWarning: login is deprecated and may break unexpectedly; prefer Mobileclient.oauth_login
Traceback (most recent call last):
  File "/home/fred/.local/bin/clay", line 33, in <module>
    sys.exit(load_entry_point('clay-player==1.1.0', 'console_scripts', 'clay')())
  File "/home/fred/.local/lib/python3.9/site-packages/clay/app.py", line 407, in main
    loop.run()
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/main_loop.py", line 287, in run
    self._run()
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/main_loop.py", line 385, in _run
    self.event_loop.run()
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/main_loop.py", line 790, in run
    self._loop()
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/main_loop.py", line 827, in _loop
    self._watch_files[fd]()
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/raw_display.py", line 416, in <lambda>
    wrapper = lambda: self.parse_input(
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/raw_display.py", line 515, in parse_input
    callback(processed, processed_codes)
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/main_loop.py", line 412, in _update
    self.process_input(keys)
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/main_loop.py", line 513, in process_input
    k = self._topmost_widget.keypress(self.screen_size, k)
  File "/home/fred/.local/lib/python3.9/site-packages/clay/app.py", line 233, in keypress
    hotkey_manager.keypress("global", self, super(AppWidget, self), size, key)
  File "/home/fred/.local/lib/python3.9/site-packages/clay/hotkeys.py", line 140, in keypress
    ret = super_.keypress(size, key)
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/container.py", line 1135, in keypress
    return self.body.keypress( (maxcol, remaining), key )
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/container.py", line 2316, in keypress
    key = w.keypress((mc,) + size[1:], key)
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/listbox.py", line 968, in keypress
    key = focus_widget.keypress((maxcol,),key)
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/wimp.py", line 543, in keypress
    self._emit('click')
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/widget.py", line 461, in _emit
    signals.emit_signal(self, name, self, *args)
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/signals.py", line 265, in emit
    result |= self._call_callback(callback, user_arg, user_args, args)
  File "/home/fred/.local/lib/python3.9/site-packages/urwid/signals.py", line 295, in _call_callback
    return bool(callback(*args_to_pass))
  File "/home/fred/.local/lib/python3.9/site-packages/clay/pages/settings.py", line 197, in on_save
    self.app.set_page('MyLibraryPage')
  File "/home/fred/.local/lib/python3.9/site-packages/clay/app.py", line 188, in set_page
    page = [page for page in self.pages if page.slug == slug][0]
IndexError: list index out of range

Keybinder Error

Hello

Every Time I start Clay I get the following Error.

Could not import Keybinder and GTK.
Error was: "Namespace Keybinder not available"
Global Shortcuts will not work.

How can I make this error Disappear?
I am using Kubuntu 16.04 LTS (32Bit)

Thanks,

List index error

I am getting an index error when I am saving my settings.

Traceback (most recent call last):
  File "./clay/app.py", line 411, in <module>
    main()
  File "./clay/app.py", line 407, in main
    loop.run()
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/main_loop.py", line 286, in run
    self._run()
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/main_loop.py", line 384, in _run
    self.event_loop.run()
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/main_loop.py", line 788, in run
    self._loop()
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/main_loop.py", line 825, in _loop
    self._watch_files[fd]()
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/raw_display.py", line 404, in <lambda>
    event_loop, callback, self.get_available_raw_input())
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/raw_display.py", line 502, in parse_input
    callback(processed, processed_codes)
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/main_loop.py", line 411, in _update
    self.process_input(keys)
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/main_loop.py", line 511, in process_input
    k = self._topmost_widget.keypress(self.screen_size, k)
  File "./clay/app.py", line 233, in keypress
    hotkey_manager.keypress("global", self, super(AppWidget, self), size, key)
  File "./clay/hotkeys.py", line 140, in keypress
    ret = super_.keypress(size, key)
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/container.py", line 1131, in keypress
    return self.body.keypress( (maxcol, remaining), key )
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/container.py", line 2271, in keypress
    key = w.keypress((mc,) + size[1:], key)
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/listbox.py", line 999, in keypress
    key = focus_widget.keypress((maxcol,),key)
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/wimp.py", line 540, in keypress
    self._emit('click')
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/widget.py", line 460, in _emit
    signals.emit_signal(self, name, self, *args)
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/signals.py", line 265, in emit
    result |= self._call_callback(callback, user_arg, user_args, args)
  File "/home/jflabonte/Development/Open_Source/clay/.env/lib/python3.7/site-packages/urwid/signals.py", line 295, in _call_callback
    return bool(callback(*args_to_pass))
  File "./clay/pages/settings.py", line 193, in on_save
    self.app.set_page('MyLibraryPage')
  File "./clay/app.py", line 188, in set_page
    page = [page for page in self.pages if page.slug == slug][0]
IndexError: list index out of range

2FA not working

I know it's documented as properly non-working.
with an 2FA account clay will not work.
I'm going to try generating an app-specific-password later today to se if we can work around for now.

Regarding 2FA

For people with 2FA, just create an app password in Google accounts page and proceed normally. Everything else works as advertised :)

change keybinds

I use i3 with alt as main modifier, this makes it impossible to change tabs in clay. Is there a possibility to change keybinds to own preference?

Improve the documentation

Clay currently misses a few vital pieces of documentation that need to be added in the future. Preferably before the next version is released however, in my opinion, this is not a blocking issue.

The documentation that should written or modified:

  • an usage man page
  • a configuration man page
  • sphinx documentation
  • an rst version of the README for PyPy
  • improved docstrings using an unified format

Application non-functional over SSH

Using JuiceSSH on my phone for example, there's no way to get to the Settings tab. Alt modifier locks, but when I press 9 it just inputs "9"

EDIT: This may be related solely to JuiceSSH. Works fine when trying from a regular SSH client on computer.

Support for playing uploaded music

I noticed my library/playlists were smaller on clay, and after looking through the song lists I noticed it was because it isn't displaying the music I uploaded myself to google servers, any way to adjust this?

Besides that it's an amazing app!

getting this error OSError: dlopen(/Applications/VLC.app/Contents/MacOS/lib/libvlc.dylib, 6): Library not loaded: @rpath/libvlccore.dylib Referenced from: /Applications/VLC.app/Contents/MacOS/lib/libvlc.dylib Reason: image not found

Traceback (most recent call last):
File "/usr/local/bin/clay", line 9, in
load_entry_point('clay-player==1.1.0', 'console_scripts', 'clay')()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/init.py", line 565, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/init.py", line 2697, in load_entry_point
return ep.load()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/init.py", line 2370, in load
return self.resolve()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/init.py", line 2376, in resolve
module = import(self.module_name, fromlist=['name'], level=0)
File "/Users/ckakdsa/Library/Python/2.7/lib/python/site-packages/clay/app.py", line 16, in
from clay.player import player
File "/Users/ckakdsa/Library/Python/2.7/lib/python/site-packages/clay/player.py", line 16, in
from clay import vlc, meta
File "/Users/ckakdsa/Library/Python/2.7/lib/python/site-packages/clay/vlc.py", line 199, in
dll, plugin_path = find_lib()
File "/Users/ckakdsa/Library/Python/2.7/lib/python/site-packages/clay/vlc.py", line 184, in find_lib
dll = ctypes.CDLL(p)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/init.py", line 365, in init
self._handle = _dlopen(self._name, mode)
OSError: dlopen(/Applications/VLC.app/Contents/MacOS/lib/libvlc.dylib, 6): Library not loaded: @rpath/libvlccore.dylib
Referenced from: /Applications/VLC.app/Contents/MacOS/lib/libvlc.dylib
Reason: image not found

Unsafe load() call disabled by Gentoo. See bug #659348

I have installed clay just now in my Gentoo system and upon the first run I got the error message. Full error:

λ ~/ clay
Traceback (most recent call last):
  File "/home/guitmz/.local/bin/clay", line 11, in <module>
    load_entry_point('clay-player==1.1.0', 'console_scripts', 'clay')()
  File "/usr/lib64/python3.6/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib64/python3.6/site-packages/pkg_resources/__init__.py", line 2843, in load_entry_point
    return ep.load()
  File "/usr/lib64/python3.6/site-packages/pkg_resources/__init__.py", line 2434, in load
    return self.resolve()
  File "/usr/lib64/python3.6/site-packages/pkg_resources/__init__.py", line 2440, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/home/guitmz/.local/lib64/python3.6/site-packages/clay/app.py", line 16, in <module>
    from clay.player import player
  File "/home/guitmz/.local/lib64/python3.6/site-packages/clay/player.py", line 20, in <module>
    from clay.settings import settings
  File "/home/guitmz/.local/lib64/python3.6/site-packages/clay/settings.py", line 198, in <module>
    settings = _Settings()  # pylint: disable=invalid-name
  File "/home/guitmz/.local/lib64/python3.6/site-packages/clay/settings.py", line 53, in __init__
    self._load_config()
  File "/home/guitmz/.local/lib64/python3.6/site-packages/clay/settings.py", line 86, in _load_config
    self._config = yaml.load(settings_file.read())
  File "/usr/lib64/python3.6/site-packages/yaml/__init__.py", line 109, in load
    raise RuntimeError("Unsafe load() call disabled by Gentoo. See bug #659348")
RuntimeError: Unsafe load() call disabled by Gentoo. See bug #659348

Relevant Gentoo bug report https://bugs.gentoo.org/659348

It looks trivial to fix this issue (but I haven't really tried yet). Replacing yaml.load() calls with yaml.safe_load() should do it. Let me know your thoughts on this one.

I also recommend replacing yaml.dump() with yaml.safe_dump()

Thanks

Lengthen the release cycle?

Heya,

I have been following this project for the past two weeks or so and I noticed that the release cycle for Clay is incredibly short. Clay is currently on release number 0.7.2 after just two to three weeks of work and doesn't really seem like each release offers enough differences on its own to warrant it.

For instance, the difference between release 0.7.0 and 0.7.2 is a single command line flag that might even be deprecated soon. Both 0.6.1 and 0.6.2 both tried to fix the same issue since the first patch either didn't work or only partially solved the problem. This is a problem since that it looks a bit silly to make people upgrade to fix an issue just to release a new version the next day for the exact same problem.

Because of the lack of differences we also give people very little reason to link to Clay or upgrade their version since there are rarely big features. For example, you can take the program Neofetch which has extensive changelogs every time they decide to release a new version. Because a version changes so many things it gives the owner reason to link his new version on various social media like Reddit which helped him signal boost his repo.

It also offers a problem to any potential packagers that might want to package Clay for their distro. Since there is a release so often it might be rather difficult to follow along and update their packages. And this just harms Clay adoption since most people download from their package repos and because Pip doesn't offer convenient ways of updating packages.

It might be wise considering making the release cycle a few weeks to one or two months so there is adequate time to add and test new features.

I hope you will at least take this into consideration.

No tracks displaying

After managing to sign into Google Music (Clay seems to ignore the set hotkey, and I had i3 mod set to alt), no tracks are loading. The debug menu is filled with many entries like the following:

Failed to parse track data: KeyError('explicitType'), failing data: {'kind': 'sj#track', 'id': 'b3a2725c-56fe-3b5b-b14d-5a0e64f96abb', 'clientId': 'HMxkLKV0VR7ettZgy7pieA', 'creationTimestamp': '1537111120057013', 'lastModifiedTimestamp': '1537232949799320', 'recentTimestamp': '1537232949658000', 'deleted': False, 'title': 'Get Used to It', 'artist': 'Darren Korb', 'composer': '', 'album': 'Bastion Original Soundtrack', 'albumArtist': '', 'year': 2011, 'comment': '', 'trackNumber': 1, 'genre': '', 'durationMillis': '54465', 'beatsPerMinute': 0, 'albumArtRef': [{'kind': 'sj#imageRef', 'url': 'http://lh3.googleusercontent.com/TiczCmkKXbv0dNQKxHV8MZauQfQjE_WFF8V14mpz54pejkzC1GHubDnQYp2K'}], 'artistArtRef': [{'kind': 'sj#imageRef', 'url': 'http://lh3.googleusercontent.com/wC_jF4cj8SCL7Ha9_om05kezk8bINLtFPdV1oelyoLDZc_LhE21Fby9SIY5fb8ZrrufSxD80DA', 'aspectRatio': '2', 'autogen': True}], 'playCount': 2, 'totalTrackCount': 0, 'discNumber': 0, 'totalDiscCount': 0, 'rating': '0', 'estimatedSize': '9798140', 'albumId': 'Bsy3mz5wpbhkepnbrkuhz3m2ecm', 'artistId': ['Aouneqxmi6qgp77xtuoimojqrwe'], 'nid': 'Takpccvnk6f2vtlni3f46zkhhbe'}

Queue does not move to the next track

Under standard operation the queue does not begin playing the next track. This occurs (or rather, doesn't occur) at the end of a track and by manual advancement of tracks.

Unable to autolaunch a dbus-daemon

Hey, I'm trying to run clay on Ubuntu server 18.04
I'm getting error:

Traceback (most recent call last):
  File "/home/wojtek/.local/bin/clay", line 7, in <module>
    from clay.app import main
  File "/home/wojtek/.local/lib/python2.7/site-packages/clay/app.py", line 16, in <module>
    from clay.player import player
  File "/home/wojtek/.local/lib/python2.7/site-packages/clay/player.py", line 19, in <module>
    from clay.osd import osd_manager
  File "/home/wojtek/.local/lib/python2.7/site-packages/clay/osd.py", line 61, in <module>
    osd_manager = _OSDManager()  # pylint: disable=invalid-name
  File "/home/wojtek/.local/lib/python2.7/site-packages/clay/osd.py", line 31, in __init__
    self.bus = SessionBus()
  File "/usr/lib/python2.7/dist-packages/dbus/_dbus.py", line 211, in __new__
    mainloop=mainloop)
  File "/usr/lib/python2.7/dist-packages/dbus/_dbus.py", line 100, in __new__
    bus = BusConnection.__new__(subclass, bus_type, mainloop=mainloop)
  File "/usr/lib/python2.7/dist-packages/dbus/bus.py", line 122, in __new__
    bus = cls._new_for_bus(address_or_type, mainloop=mainloop)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

so I tried to export DISPLAY=:0, but know I'm getting:

Traceback (most recent call last):
  File "/home/wojtek/.local/bin/clay", line 7, in <module>
    from clay.app import main
  File "/home/wojtek/.local/lib/python2.7/site-packages/clay/app.py", line 16, in <module>
    from clay.player import player
  File "/home/wojtek/.local/lib/python2.7/site-packages/clay/player.py", line 19, in <module>
    from clay.osd import osd_manager
  File "/home/wojtek/.local/lib/python2.7/site-packages/clay/osd.py", line 61, in <module>
    osd_manager = _OSDManager()  # pylint: disable=invalid-name
  File "/home/wojtek/.local/lib/python2.7/site-packages/clay/osd.py", line 31, in __init__
    self.bus = SessionBus()
  File "/usr/lib/python2.7/dist-packages/dbus/_dbus.py", line 211, in __new__
    mainloop=mainloop)
  File "/usr/lib/python2.7/dist-packages/dbus/_dbus.py", line 100, in __new__
    bus = BusConnection.__new__(subclass, bus_type, mainloop=mainloop)
  File "/usr/lib/python2.7/dist-packages/dbus/bus.py", line 122, in __new__
    bus = cls._new_for_bus(address_or_type, mainloop=mainloop)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ExecFailed: /usr/bin/dbus-launch terminated abnormally without any error message

Do you know what can be wrong?

Album & Artist View

A long standing missing vital feature was an artist/album view.

  • All songs by an artist
  • Artist list
  • Top songs
  • Albums
  • Uploaded artists
  • Album view
  • Album append
  • Search in all screens

MPRIS2 support

Support the Media Player Remote Interfacing Specification D-Bus protocol.

Rationale:

Supporting MPRIS2 would allow one to control Clay with generic tools like playerctl and replace the current global keybindings system. This would allow us to fully drop Gtk as a dependency, simply our parsing logic and empowers headless users to globally bind keys [1].

It wouldn't add any dependencies to Clay since it uses D-Bus (already necessary for OSD) and the GLib loop (already used for GTK).

Tasks:

  • Support the MPRIS2 Player protocol
  • Support the MRRIS2 Mediaplayer Protocol
  • Improving the ID system that Clay uses (based on #49)
  • Support some extensions to the MPRIS2 protocol
  • Support the MPRIS2 Playlists protocol
  • Support the MPRIS2 TrackList protocol
  • A separate Clay tool to allow deeper control?

[1] Using some TTY window manager like tmux, screen or some other method.

IRC channel

Hey @ValentijnvdBeek, I've created an IRC channel #clay on irc.oftc.net, you can hop on there if you want to discuss something, it's more convenient.

[BACKLOG] Player testing

It would be great to have actual app testing with a mocked Google Play client. Currently we have only code style checks.

Putting this issue here to remember about it someday.

Library fails to load when uploaded songs are present

After entering my credentials I get the following exceptions. I'm using an App password to login since I have 2FA setup, not sure if that matters.

I installed with pip and then tried the manual method as well with virtualenv and got the same error.

Traceback (most recent call last):
  File "./clay/gp.py", line 40, in process
    result = func(*args, **kwargs)
  File "./clay/gp.py", line 65, in wrapper
    return func(*args, **kwargs)
  File "./clay/gp.py", line 496, in get_all_user_playlist_contents
    self.get_all_tracks()
  File "./clay/gp.py", line 65, in wrapper
    return func(*args, **kwargs)
  File "./clay/gp.py", line 476, in get_all_tracks
    self.cached_tracks = Track.from_data(data, Track.SOURCE_LIBRARY, True)
  File "./clay/gp.py", line 127, in from_data
    return [cls.from_data(one, source) for one in data]
  File "./clay/gp.py", line 127, in <listcomp>
    return [cls.from_data(one, source) for one in data]
  File "./clay/gp.py", line 160, in from_data
    store_id=data['storeId'],
KeyError: 'storeId'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/usr/lib64/python3.5/threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
  File "./clay/gp.py", line 42, in process
    callback(None, error, **extra)
  File "./clay/pages/myplaylists.py", line 89, in on_get_playlists
    for playlist in playlists:
TypeError: 'NoneType' object is not iterable

I honestly didn't do much troubleshooting, sorry. But the project looks pretty cool,

Settings page UI is unclear

On my setup once you enter a user name, password, etc., you cannot change this from the clay interface. Changes will revert to what was stored in the config file.

Ubuntu 18.04, installed from pip.

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.