mirror of
https://github.com/vale981/clay
synced 2025-03-04 17:11:41 -05:00
Docs
This commit is contained in:
parent
423b85afb4
commit
ac2a1b2171
18 changed files with 115 additions and 88 deletions
15
clay/app.py
15
clay/app.py
|
@ -13,11 +13,12 @@ import urwid
|
||||||
|
|
||||||
from clay.player import Player
|
from clay.player import Player
|
||||||
from clay.playbar import PlayBar
|
from clay.playbar import PlayBar
|
||||||
from clay.mylibrary import MyLibraryPage
|
from clay.pages.mylibrary import MyLibraryPage
|
||||||
from clay.myplaylists import MyPlaylistsPage
|
from clay.pages.myplaylists import MyPlaylistsPage
|
||||||
from clay.playerqueue import QueuePage
|
from clay.pages.playerqueue import QueuePage
|
||||||
from clay.search import SearchPage
|
from clay.pages.search import SearchPage
|
||||||
from clay.settings import SettingsPage
|
from clay.pages.settings import SettingsPage
|
||||||
|
from clay.settings import Settings
|
||||||
from clay.notifications import NotificationArea
|
from clay.notifications import NotificationArea
|
||||||
from clay.gp import GP
|
from clay.gp import GP
|
||||||
|
|
||||||
|
@ -179,8 +180,8 @@ class AppWidget(urwid.Frame):
|
||||||
|
|
||||||
Request user authorization.
|
Request user authorization.
|
||||||
"""
|
"""
|
||||||
if SettingsPage.is_config_valid():
|
if Settings.is_config_valid():
|
||||||
config = SettingsPage.get_config()
|
config = Settings.get_config()
|
||||||
self._login_notification = NotificationArea.notify('Logging in...')
|
self._login_notification = NotificationArea.notify('Logging in...')
|
||||||
GP.get().login_async(
|
GP.get().login_async(
|
||||||
config['username'],
|
config['username'],
|
||||||
|
|
|
@ -21,7 +21,7 @@ except Exception as error:
|
||||||
else:
|
else:
|
||||||
IS_INIT = True
|
IS_INIT = True
|
||||||
|
|
||||||
from clay.settings import SettingsPage
|
from clay.settings import Settings
|
||||||
from clay.eventhook import EventHook
|
from clay.eventhook import EventHook
|
||||||
from clay.notifications import NotificationArea
|
from clay.notifications import NotificationArea
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ class HotkeyManager(object):
|
||||||
"""
|
"""
|
||||||
Load hotkey config from settings.
|
Load hotkey config from settings.
|
||||||
"""
|
"""
|
||||||
config = SettingsPage.get_config()
|
config = Settings.get_config()
|
||||||
hotkeys = config.get('hotkeys', {})
|
hotkeys = config.get('hotkeys', {})
|
||||||
for operation, default_key in HotkeyManager.DEFAULT_HOTKEYS.items():
|
for operation, default_key in HotkeyManager.DEFAULT_HOTKEYS.items():
|
||||||
if operation not in hotkeys or not hotkeys[operation]:
|
if operation not in hotkeys or not hotkeys[operation]:
|
||||||
|
|
0
clay/pages/__init__.py
Normal file
0
clay/pages/__init__.py
Normal file
|
@ -6,10 +6,10 @@ import urwid
|
||||||
from clay.gp import GP
|
from clay.gp import GP
|
||||||
from clay.songlist import SongListBox
|
from clay.songlist import SongListBox
|
||||||
from clay.notifications import NotificationArea
|
from clay.notifications import NotificationArea
|
||||||
from clay.page import Page
|
from clay.pages.page import AbstractPage
|
||||||
|
|
||||||
|
|
||||||
class MyLibraryPage(urwid.Columns, Page):
|
class MyLibraryPage(urwid.Columns, AbstractPage):
|
||||||
"""
|
"""
|
||||||
My library page.
|
My library page.
|
||||||
|
|
|
@ -6,7 +6,7 @@ import urwid
|
||||||
from clay.gp import GP
|
from clay.gp import GP
|
||||||
from clay.songlist import SongListBox
|
from clay.songlist import SongListBox
|
||||||
from clay.notifications import NotificationArea
|
from clay.notifications import NotificationArea
|
||||||
from clay.page import Page
|
from clay.pages.page import AbstractPage
|
||||||
|
|
||||||
|
|
||||||
class MyPlaylistListItem(urwid.Columns):
|
class MyPlaylistListItem(urwid.Columns):
|
||||||
|
@ -107,7 +107,7 @@ class MyPlaylistListBox(urwid.ListBox):
|
||||||
urwid.emit_signal(self, 'activate', myplaylistlistitem)
|
urwid.emit_signal(self, 'activate', myplaylistlistitem)
|
||||||
|
|
||||||
|
|
||||||
class MyPlaylistsPage(urwid.Columns, Page):
|
class MyPlaylistsPage(urwid.Columns, AbstractPage):
|
||||||
"""
|
"""
|
||||||
Playlists page.
|
Playlists page.
|
||||||
|
|
|
@ -4,7 +4,7 @@ Generic page classes.
|
||||||
# pylint: disable=too-few-public-methods
|
# pylint: disable=too-few-public-methods
|
||||||
|
|
||||||
|
|
||||||
class Page(object):
|
class AbstractPage(object):
|
||||||
"""
|
"""
|
||||||
Represents app page.
|
Represents app page.
|
||||||
"""
|
"""
|
|
@ -5,10 +5,10 @@ import urwid
|
||||||
|
|
||||||
from clay.songlist import SongListBox
|
from clay.songlist import SongListBox
|
||||||
from clay.player import Player
|
from clay.player import Player
|
||||||
from clay.page import Page
|
from clay.pages.page import AbstractPage
|
||||||
|
|
||||||
|
|
||||||
class QueuePage(urwid.Columns, Page):
|
class QueuePage(urwid.Columns, AbstractPage):
|
||||||
"""
|
"""
|
||||||
Queue page.
|
Queue page.
|
||||||
"""
|
"""
|
|
@ -6,7 +6,7 @@ import urwid
|
||||||
from clay.gp import GP
|
from clay.gp import GP
|
||||||
from clay.songlist import SongListBox
|
from clay.songlist import SongListBox
|
||||||
from clay.notifications import NotificationArea
|
from clay.notifications import NotificationArea
|
||||||
from clay.page import Page
|
from clay.pages.page import AbstractPage
|
||||||
|
|
||||||
|
|
||||||
class ArtistListBox(urwid.ListBox):
|
class ArtistListBox(urwid.ListBox):
|
||||||
|
@ -41,7 +41,7 @@ class SearchBox(urwid.Columns):
|
||||||
return super(SearchBox, self).keypress(size, key)
|
return super(SearchBox, self).keypress(size, key)
|
||||||
|
|
||||||
|
|
||||||
class SearchPage(urwid.Columns, Page):
|
class SearchPage(urwid.Columns, AbstractPage):
|
||||||
"""
|
"""
|
||||||
Search page.
|
Search page.
|
||||||
|
|
64
clay/pages/settings.py
Normal file
64
clay/pages/settings.py
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
"""
|
||||||
|
Components for "Settings" page.
|
||||||
|
"""
|
||||||
|
import urwid
|
||||||
|
|
||||||
|
from clay.pages.page import AbstractPage
|
||||||
|
from clay.settings import Settings
|
||||||
|
|
||||||
|
|
||||||
|
class SettingsPage(urwid.Columns, AbstractPage):
|
||||||
|
"""
|
||||||
|
Settings page.
|
||||||
|
"""
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return 'Settings'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def key(self):
|
||||||
|
return 9
|
||||||
|
|
||||||
|
def __init__(self, app):
|
||||||
|
self.app = app
|
||||||
|
config = Settings.get_config()
|
||||||
|
self.username = urwid.Edit(
|
||||||
|
edit_text=config.get('username', '')
|
||||||
|
)
|
||||||
|
self.password = urwid.Edit(
|
||||||
|
mask='*', edit_text=config.get('password', '')
|
||||||
|
)
|
||||||
|
self.device_id = urwid.Edit(
|
||||||
|
edit_text=config.get('device_id', '')
|
||||||
|
)
|
||||||
|
super(SettingsPage, self).__init__([urwid.ListBox(urwid.SimpleListWalker([
|
||||||
|
urwid.Text('Settings'),
|
||||||
|
urwid.Divider(' '),
|
||||||
|
urwid.Text('Username'),
|
||||||
|
urwid.AttrWrap(self.username, 'input', 'input_focus'),
|
||||||
|
urwid.Divider(' '),
|
||||||
|
urwid.Text('Password'),
|
||||||
|
urwid.AttrWrap(self.password, 'input', 'input_focus'),
|
||||||
|
urwid.Divider(' '),
|
||||||
|
urwid.Text('Device ID'),
|
||||||
|
urwid.AttrWrap(self.device_id, 'input', 'input_focus'),
|
||||||
|
urwid.Divider(' '),
|
||||||
|
urwid.AttrWrap(urwid.Button(
|
||||||
|
'Save', on_press=self.on_save
|
||||||
|
), 'input', 'input_focus')
|
||||||
|
]))])
|
||||||
|
|
||||||
|
def on_save(self, *_):
|
||||||
|
"""
|
||||||
|
Called when "Save" button is pressed.
|
||||||
|
"""
|
||||||
|
Settings.set_config(dict(
|
||||||
|
username=self.username.edit_text,
|
||||||
|
password=self.password.edit_text,
|
||||||
|
device_id=self.device_id.edit_text
|
||||||
|
))
|
||||||
|
self.app.set_page('MyLibrary')
|
||||||
|
self.app.log_in()
|
||||||
|
|
||||||
|
def activate(self):
|
||||||
|
pass
|
|
@ -1,69 +1,17 @@
|
||||||
"""
|
"""
|
||||||
Components for "Settings" page.
|
Application settings manager.
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
import errno
|
import errno
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
import appdirs
|
import appdirs
|
||||||
import urwid
|
|
||||||
|
|
||||||
from clay.page import Page
|
|
||||||
|
|
||||||
|
|
||||||
class SettingsPage(urwid.Columns, Page):
|
class Settings(object):
|
||||||
"""
|
"""
|
||||||
Settings page.
|
Settings management class.
|
||||||
"""
|
"""
|
||||||
@property
|
|
||||||
def name(self):
|
|
||||||
return 'Settings'
|
|
||||||
|
|
||||||
@property
|
|
||||||
def key(self):
|
|
||||||
return 9
|
|
||||||
|
|
||||||
def __init__(self, app):
|
|
||||||
self.app = app
|
|
||||||
config = self.__class__.get_config()
|
|
||||||
self.username = urwid.Edit(
|
|
||||||
edit_text=config.get('username', '')
|
|
||||||
)
|
|
||||||
self.password = urwid.Edit(
|
|
||||||
mask='*', edit_text=config.get('password', '')
|
|
||||||
)
|
|
||||||
self.device_id = urwid.Edit(
|
|
||||||
edit_text=config.get('device_id', '')
|
|
||||||
)
|
|
||||||
super(SettingsPage, self).__init__([urwid.ListBox(urwid.SimpleListWalker([
|
|
||||||
urwid.Text('Settings'),
|
|
||||||
urwid.Divider(' '),
|
|
||||||
urwid.Text('Username'),
|
|
||||||
urwid.AttrWrap(self.username, 'input', 'input_focus'),
|
|
||||||
urwid.Divider(' '),
|
|
||||||
urwid.Text('Password'),
|
|
||||||
urwid.AttrWrap(self.password, 'input', 'input_focus'),
|
|
||||||
urwid.Divider(' '),
|
|
||||||
urwid.Text('Device ID'),
|
|
||||||
urwid.AttrWrap(self.device_id, 'input', 'input_focus'),
|
|
||||||
urwid.Divider(' '),
|
|
||||||
urwid.AttrWrap(urwid.Button(
|
|
||||||
'Save', on_press=self.on_save
|
|
||||||
), 'input', 'input_focus')
|
|
||||||
]))])
|
|
||||||
|
|
||||||
def on_save(self, *_):
|
|
||||||
"""
|
|
||||||
Called when "Save" button is pressed.
|
|
||||||
"""
|
|
||||||
self.__class__.set_config(dict(
|
|
||||||
username=self.username.edit_text,
|
|
||||||
password=self.password.edit_text,
|
|
||||||
device_id=self.device_id.edit_text
|
|
||||||
))
|
|
||||||
self.app.set_page('StartUp')
|
|
||||||
# self.app.set_page('MyLibrary')
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_config_filename(cls):
|
def get_config_filename(cls):
|
||||||
"""
|
"""
|
||||||
|
@ -88,7 +36,7 @@ class SettingsPage(urwid.Columns, Page):
|
||||||
"""
|
"""
|
||||||
Read config dictionary.
|
Read config dictionary.
|
||||||
"""
|
"""
|
||||||
with open(cls.get_config_filename(), 'r') as settings:
|
with open(Settings.get_config_filename(), 'r') as settings:
|
||||||
return yaml.load(settings.read())
|
return yaml.load(settings.read())
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -96,9 +44,9 @@ class SettingsPage(urwid.Columns, Page):
|
||||||
"""
|
"""
|
||||||
Write config dictionary.
|
Write config dictionary.
|
||||||
"""
|
"""
|
||||||
config = cls.get_config()
|
config = Settings.get_config()
|
||||||
config.update(new_config)
|
config.update(new_config)
|
||||||
with open(cls.get_config_filename(), 'w') as settings:
|
with open(Settings.get_config_filename(), 'w') as settings:
|
||||||
settings.write(yaml.dump(config, default_flow_style=False))
|
settings.write(yaml.dump(config, default_flow_style=False))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -106,12 +54,9 @@ class SettingsPage(urwid.Columns, Page):
|
||||||
"""
|
"""
|
||||||
Return True if existing config is enough to log in, False otherwise.
|
Return True if existing config is enough to log in, False otherwise.
|
||||||
"""
|
"""
|
||||||
config = cls.get_config()
|
config = Settings.get_config()
|
||||||
return all([
|
return all([
|
||||||
config.get(x, None)
|
config.get(x, None)
|
||||||
for x
|
for x
|
||||||
in ('username', 'password', 'device_id')
|
in ('username', 'password', 'device_id')
|
||||||
])
|
])
|
||||||
|
|
||||||
def activate(self):
|
|
||||||
pass
|
|
||||||
|
|
|
@ -11,14 +11,15 @@ Welcome to Clay's documentation!
|
||||||
:caption: Contents:
|
:caption: Contents:
|
||||||
|
|
||||||
ref/app
|
ref/app
|
||||||
|
ref/appsettings
|
||||||
ref/gp
|
ref/gp
|
||||||
ref/player
|
ref/player
|
||||||
ref/songlist
|
ref/songlist
|
||||||
ref/playbar
|
ref/playbar
|
||||||
ref/startup
|
|
||||||
ref/mylibrary
|
ref/mylibrary
|
||||||
ref/myplaylists
|
ref/myplaylists
|
||||||
ref/playerqueue
|
ref/playerqueue
|
||||||
|
ref/search
|
||||||
ref/settings
|
ref/settings
|
||||||
ref/page
|
ref/page
|
||||||
ref/notifications
|
ref/notifications
|
||||||
|
|
8
docs/source/ref/appsettings.rst
Normal file
8
docs/source/ref/appsettings.rst
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
appsettings.py
|
||||||
|
##############
|
||||||
|
|
||||||
|
.. automodule:: clay.settings
|
||||||
|
:members:
|
||||||
|
:private-members:
|
||||||
|
:special-members:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
mylibrary.py
|
mylibrary.py
|
||||||
############
|
############
|
||||||
|
|
||||||
.. automodule:: clay.mylibrary
|
.. automodule:: clay.pages.mylibrary
|
||||||
:members:
|
:members:
|
||||||
:private-members:
|
:private-members:
|
||||||
:special-members:
|
:special-members:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
myplaylists.py
|
myplaylists.py
|
||||||
##############
|
##############
|
||||||
|
|
||||||
.. automodule:: clay.myplaylists
|
.. automodule:: clay.pages.myplaylists
|
||||||
:members:
|
:members:
|
||||||
:private-members:
|
:private-members:
|
||||||
:special-members:
|
:special-members:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
pages.py
|
page
|
||||||
########
|
####
|
||||||
|
|
||||||
.. automodule:: clay.page
|
.. automodule:: clay.pages.page
|
||||||
:members:
|
:members:
|
||||||
:private-members:
|
:private-members:
|
||||||
:special-members:
|
:special-members:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
playerqueue.py
|
playerqueue.py
|
||||||
##############
|
##############
|
||||||
|
|
||||||
.. automodule:: clay.playerqueue
|
.. automodule:: clay.pages.playerqueue
|
||||||
:members:
|
:members:
|
||||||
:private-members:
|
:private-members:
|
||||||
:special-members:
|
:special-members:
|
||||||
|
|
8
docs/source/ref/search.rst
Normal file
8
docs/source/ref/search.rst
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
settings.py
|
||||||
|
###########
|
||||||
|
|
||||||
|
.. automodule:: clay.pages.search
|
||||||
|
:members:
|
||||||
|
:private-members:
|
||||||
|
:special-members:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
settings.py
|
settings.py
|
||||||
###########
|
###########
|
||||||
|
|
||||||
.. automodule:: clay.settings
|
.. automodule:: clay.pages.settings
|
||||||
:members:
|
:members:
|
||||||
:private-members:
|
:private-members:
|
||||||
:special-members:
|
:special-members:
|
||||||
|
|
Loading…
Add table
Reference in a new issue