This commit is contained in:
Andrew Dunai 2018-01-09 20:49:50 +02:00
parent 423b85afb4
commit ac2a1b2171
18 changed files with 115 additions and 88 deletions

View file

@ -13,11 +13,12 @@ import urwid
from clay.player import Player
from clay.playbar import PlayBar
from clay.mylibrary import MyLibraryPage
from clay.myplaylists import MyPlaylistsPage
from clay.playerqueue import QueuePage
from clay.search import SearchPage
from clay.settings import SettingsPage
from clay.pages.mylibrary import MyLibraryPage
from clay.pages.myplaylists import MyPlaylistsPage
from clay.pages.playerqueue import QueuePage
from clay.pages.search import SearchPage
from clay.pages.settings import SettingsPage
from clay.settings import Settings
from clay.notifications import NotificationArea
from clay.gp import GP
@ -179,8 +180,8 @@ class AppWidget(urwid.Frame):
Request user authorization.
"""
if SettingsPage.is_config_valid():
config = SettingsPage.get_config()
if Settings.is_config_valid():
config = Settings.get_config()
self._login_notification = NotificationArea.notify('Logging in...')
GP.get().login_async(
config['username'],

View file

@ -21,7 +21,7 @@ except Exception as error:
else:
IS_INIT = True
from clay.settings import SettingsPage
from clay.settings import Settings
from clay.eventhook import EventHook
from clay.notifications import NotificationArea
@ -74,7 +74,7 @@ class HotkeyManager(object):
"""
Load hotkey config from settings.
"""
config = SettingsPage.get_config()
config = Settings.get_config()
hotkeys = config.get('hotkeys', {})
for operation, default_key in HotkeyManager.DEFAULT_HOTKEYS.items():
if operation not in hotkeys or not hotkeys[operation]:

0
clay/pages/__init__.py Normal file
View file

View file

@ -6,10 +6,10 @@ import urwid
from clay.gp import GP
from clay.songlist import SongListBox
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.

View file

@ -6,7 +6,7 @@ import urwid
from clay.gp import GP
from clay.songlist import SongListBox
from clay.notifications import NotificationArea
from clay.page import Page
from clay.pages.page import AbstractPage
class MyPlaylistListItem(urwid.Columns):
@ -107,7 +107,7 @@ class MyPlaylistListBox(urwid.ListBox):
urwid.emit_signal(self, 'activate', myplaylistlistitem)
class MyPlaylistsPage(urwid.Columns, Page):
class MyPlaylistsPage(urwid.Columns, AbstractPage):
"""
Playlists page.

View file

@ -4,7 +4,7 @@ Generic page classes.
# pylint: disable=too-few-public-methods
class Page(object):
class AbstractPage(object):
"""
Represents app page.
"""

View file

@ -5,10 +5,10 @@ import urwid
from clay.songlist import SongListBox
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.
"""

View file

@ -6,7 +6,7 @@ import urwid
from clay.gp import GP
from clay.songlist import SongListBox
from clay.notifications import NotificationArea
from clay.page import Page
from clay.pages.page import AbstractPage
class ArtistListBox(urwid.ListBox):
@ -41,7 +41,7 @@ class SearchBox(urwid.Columns):
return super(SearchBox, self).keypress(size, key)
class SearchPage(urwid.Columns, Page):
class SearchPage(urwid.Columns, AbstractPage):
"""
Search page.

64
clay/pages/settings.py Normal file
View 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

View file

@ -1,69 +1,17 @@
"""
Components for "Settings" page.
Application settings manager.
"""
import os
import errno
import yaml
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
def get_config_filename(cls):
"""
@ -88,7 +36,7 @@ class SettingsPage(urwid.Columns, Page):
"""
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())
@classmethod
@ -96,9 +44,9 @@ class SettingsPage(urwid.Columns, Page):
"""
Write config dictionary.
"""
config = cls.get_config()
config = Settings.get_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))
@classmethod
@ -106,12 +54,9 @@ class SettingsPage(urwid.Columns, Page):
"""
Return True if existing config is enough to log in, False otherwise.
"""
config = cls.get_config()
config = Settings.get_config()
return all([
config.get(x, None)
for x
in ('username', 'password', 'device_id')
])
def activate(self):
pass

View file

@ -11,14 +11,15 @@ Welcome to Clay's documentation!
:caption: Contents:
ref/app
ref/appsettings
ref/gp
ref/player
ref/songlist
ref/playbar
ref/startup
ref/mylibrary
ref/myplaylists
ref/playerqueue
ref/search
ref/settings
ref/page
ref/notifications

View file

@ -0,0 +1,8 @@
appsettings.py
##############
.. automodule:: clay.settings
:members:
:private-members:
:special-members:

View file

@ -1,7 +1,7 @@
mylibrary.py
############
.. automodule:: clay.mylibrary
.. automodule:: clay.pages.mylibrary
:members:
:private-members:
:special-members:

View file

@ -1,7 +1,7 @@
myplaylists.py
##############
.. automodule:: clay.myplaylists
.. automodule:: clay.pages.myplaylists
:members:
:private-members:
:special-members:

View file

@ -1,7 +1,7 @@
pages.py
########
page
####
.. automodule:: clay.page
.. automodule:: clay.pages.page
:members:
:private-members:
:special-members:

View file

@ -1,7 +1,7 @@
playerqueue.py
##############
.. automodule:: clay.playerqueue
.. automodule:: clay.pages.playerqueue
:members:
:private-members:
:special-members:

View file

@ -0,0 +1,8 @@
settings.py
###########
.. automodule:: clay.pages.search
:members:
:private-members:
:special-members:

View file

@ -1,7 +1,7 @@
settings.py
###########
.. automodule:: clay.settings
.. automodule:: clay.pages.settings
:members:
:private-members:
:special-members: