46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
# Copyright 2024 (c) Anna Schumaker.
|
|
"""Our ListenBrainz client thread."""
|
|
import liblistenbrainz
|
|
from .. import thread
|
|
|
|
|
|
class Thread(thread.Thread):
|
|
"""Thread for submitting listens to ListenBrainz."""
|
|
|
|
def __init__(self):
|
|
"""Initialize the ListenBrainz Thread object."""
|
|
super().__init__()
|
|
self._client = liblistenbrainz.client.ListenBrainz()
|
|
|
|
def __print(self, text: str) -> None:
|
|
print(f"listenbrainz: {text}")
|
|
|
|
def __set_user_token(self, token: str) -> None:
|
|
try:
|
|
self._client.set_auth_token(token)
|
|
self.set_result("set-token", token=token)
|
|
except liblistenbrainz.errors.InvalidAuthTokenException:
|
|
self.set_result("set-token", token=token, valid=False)
|
|
|
|
def do_run_task(self, task: thread.Data) -> None:
|
|
"""Call a specific listenbrainz operation."""
|
|
match task.op:
|
|
case "set-token":
|
|
self.__set_user_token(task.token)
|
|
|
|
def get_result(self, **kwargs) -> thread.Data:
|
|
"""Get the result of a listenbrainz task."""
|
|
if (res := super().get_result(**kwargs)) is not None:
|
|
if not res.valid:
|
|
self.__print("user token is invalid")
|
|
return res
|
|
|
|
def set_result(self, op: str, *, valid: bool = True, **kwargs) -> None:
|
|
"""Set the Thread result with a standard format for all ops."""
|
|
super().set_result(op=op, valid=valid, **kwargs)
|
|
|
|
def set_user_token(self, token: str) -> None:
|
|
"""Schedule setting the user token."""
|
|
self.__print("setting user token")
|
|
self.set_task(op="set-token", token=token)
|