Verified Commit 0d0995d7 authored by Fabio Manganiello's avatar Fabio Manganiello
Browse files

Merge branch 'master' into 191-support-for-general-entities-backend-and-plugin

parents 2898a337 cb702115
Pipeline #248 failed with stages
in 1 minute and 27 seconds
import time
from typing import Optional, List
from platypush.plugins import Plugin, action
......@@ -29,6 +30,7 @@ class LastfmPlugin(Plugin):
"""
import pylast
super().__init__()
self.api_key = api_key
......@@ -40,7 +42,8 @@ class LastfmPlugin(Plugin):
api_key=self.api_key,
api_secret=self.api_secret,
username=self.username,
password_hash=pylast.md5(self.password))
password_hash=pylast.md5(self.password),
)
@action
def scrobble(self, artist, title, album=None):
......@@ -81,4 +84,58 @@ class LastfmPlugin(Plugin):
album=album,
)
@action
def get_recent_tracks(
self,
username: Optional[str] = None,
limit: int = 10,
time_from: Optional[int] = None,
time_to: Optional[int] = None,
) -> List[dict]:
"""
Get a list of recently played tracks.
:param username: Target username (default: the one registered to this
plugin).
:param limit: Maximum number of tracks to be returned (default: 10).
:param time_from: Return tracks starting from this time
(as a UNIX timestamp).
:param time_to: Return tracks starting up to this time
(as a UNIX timestamp).
:return: Example:
.. code-block:: json
[
{
"artist": "Led Zeppelin",
"title": "Stairway to Heaven",
"album": "IV",
"timestamp": 1654196137
}
]
"""
return [
{
'title': track.track.title,
'album': track.album,
'timestamp': int(track.timestamp or 0),
**(
{'artist': track.track.artist.name}
if track.track.artist
else {'artist': None}
),
}
for track in self.lastfm.get_user(
username or self.username
).get_recent_tracks(
limit=limit,
time_from=time_from,
time_to=time_to,
)
]
# vim:sw=4:ts=4:et:
......@@ -226,6 +226,7 @@ class NtfyPlugin(RunnablePlugin):
"""
method = requests.post
click_url = url
url = server_url or self._server_url
args = {}
if username and password:
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment