diff --git a/mafic/node.py b/mafic/node.py index bea9718..c9678c6 100644 --- a/mafic/node.py +++ b/mafic/node.py @@ -14,6 +14,7 @@ from .__libraries import ExponentialBackoff, dumps, loads from .errors import TrackLoadException from .playlist import Playlist +from .plugin import Plugin from .track import Track if TYPE_CHECKING: @@ -32,6 +33,7 @@ IncomingMessage, OutgoingMessage, PlayPayload, + PluginData, TrackInfo, ) @@ -479,7 +481,11 @@ async def decode_tracks(self, tracks: list[str]) -> list[Track]: return [Track.from_data(**track) for track in track_data] - # TODO: plugins + async def fetch_plugins(self) -> list[Plugin]: + plugins: list[PluginData] = await self.__request("GET", "/plugins") + + return [Plugin(**plugins) for plugins in plugins] + # TODO: route planner status # TODO: unmark failed address # TODO: unmark all failed addresses diff --git a/mafic/plugin.py b/mafic/plugin.py new file mode 100644 index 0000000..9eacb86 --- /dev/null +++ b/mafic/plugin.py @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: MIT + +from __future__ import annotations + +from dataclasses import dataclass + + +@dataclass(repr=True) +class Plugin: + name: str + version: str diff --git a/mafic/typings/http.py b/mafic/typings/http.py index 80679e8..fb6d9db 100644 --- a/mafic/typings/http.py +++ b/mafic/typings/http.py @@ -12,6 +12,7 @@ __all__ = ( "GetTracks", "PlaylistInfo", + "PluginData", "Tracks", "TrackInfo", "TrackWithInfo", @@ -55,3 +56,8 @@ class TracksFailed(TypedDict): GetTracks = Union[Tracks, TracksFailed] + + +class PluginData(TypedDict): + name: str + version: str