adding cleanup of stale track entries
This commit is contained in:
+14
-2
@@ -14,6 +14,11 @@ class BasePrompt(Completer):
|
||||
self._values = []
|
||||
self._parent = parent
|
||||
self._manager = manager
|
||||
self._commands = {'help': self.help}
|
||||
|
||||
@property
|
||||
def commands(self):
|
||||
return self._commands
|
||||
|
||||
@property
|
||||
def usage(self):
|
||||
@@ -40,7 +45,7 @@ class BasePrompt(Completer):
|
||||
|
||||
@property
|
||||
def values(self):
|
||||
return self._values
|
||||
return [k for k in self.commands.keys() if not k.startswith('_')]
|
||||
|
||||
def get_completions(self, document, complete_event):
|
||||
word = document.get_word_before_cursor()
|
||||
@@ -59,7 +64,7 @@ class BasePrompt(Completer):
|
||||
def start(self, cmd=''):
|
||||
while True:
|
||||
if not cmd:
|
||||
cmd = prompt(f'{self.prompt} ', completer=self)
|
||||
cmd = prompt(f'{self.prompt} ', completer=self, complete_while_typing=True)
|
||||
if not cmd:
|
||||
return
|
||||
cmd, *parts = cmd.split()
|
||||
@@ -67,6 +72,13 @@ class BasePrompt(Completer):
|
||||
return
|
||||
cmd = ''
|
||||
|
||||
def help(self, parts):
|
||||
if not parts:
|
||||
print(self.__doc__)
|
||||
else:
|
||||
print(getattr(self, parts[0]).__doc__)
|
||||
return True
|
||||
|
||||
def default_completer(self, document, complete_event):
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
@@ -54,8 +54,8 @@ class CommandPrompt(BasePrompt):
|
||||
session=self.manager.session,
|
||||
create_ok=True
|
||||
)
|
||||
res = self.commands['_playlist'].start()
|
||||
return True and res
|
||||
self.commands['_playlist'].start()
|
||||
return True
|
||||
|
||||
|
||||
def start(): # pragma: no cover
|
||||
|
||||
+14
-20
@@ -8,21 +8,14 @@ from groove import db
|
||||
|
||||
|
||||
class _playlist(BasePrompt):
|
||||
|
||||
def __init__(self, parent, manager=None):
|
||||
super().__init__(manager=manager, parent=parent)
|
||||
self._parent = parent
|
||||
self._prompt = ''
|
||||
self._commands = None
|
||||
"""
|
||||
PLAYLIST
|
||||
"""
|
||||
|
||||
@property
|
||||
def prompt(self):
|
||||
return f"{self.parent.playlist}\n{self.parent.playlist.slug}> "
|
||||
|
||||
@property
|
||||
def values(self):
|
||||
return self.commands.keys()
|
||||
|
||||
@property
|
||||
def commands(self):
|
||||
if not self._commands:
|
||||
@@ -31,9 +24,20 @@ class _playlist(BasePrompt):
|
||||
'delete': self.delete,
|
||||
'add': self.add,
|
||||
'edit': self.edit,
|
||||
'help': self.help
|
||||
}
|
||||
return self._commands
|
||||
|
||||
def _add_track(self, text):
|
||||
sess = self.parent.manager.session
|
||||
try:
|
||||
track = sess.query(db.track).filter(db.track.c.relpath == text).one()
|
||||
self.parent.playlist.create_entries([track])
|
||||
except NoResultFound:
|
||||
print("No match for '{text}'")
|
||||
return
|
||||
return text
|
||||
|
||||
def process(self, cmd, *parts):
|
||||
res = True
|
||||
if cmd in self.commands:
|
||||
@@ -66,16 +70,6 @@ class _playlist(BasePrompt):
|
||||
return True
|
||||
self._add_track(text)
|
||||
|
||||
def _add_track(self, text):
|
||||
sess = self.parent.manager.session
|
||||
try:
|
||||
track = sess.query(db.track).filter(db.track.c.relpath == text).one()
|
||||
self.parent.playlist.create_entries([track])
|
||||
except NoResultFound:
|
||||
print("No match for '{text}'")
|
||||
return
|
||||
return text
|
||||
|
||||
def delete(self, parts):
|
||||
res = prompt(
|
||||
'Type DELETE to permanently delete the playlist '
|
||||
|
||||
Reference in New Issue
Block a user