# 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 "clear-token": self._client.set_auth_token(None, check_validity=False) self.set_result("clear-token") case "set-token": self.__set_user_token(task.token) def clear_user_token(self) -> None: """Schedule clearing the user token.""" self.__print("clearing user token") self.set_task(op="clear-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)