fleshed out uri types, can now count all uris
This commit is contained in:
parent
2528af06b1
commit
28c76bbd83
@ -1,6 +1,8 @@
|
||||
from spotframework.net.network import Network as SpotifyNetwork
|
||||
from spotframework.model.playlist import SpotifyPlaylist
|
||||
from spotframework.model.track import SpotifyTrack
|
||||
from spotframework.model.album import SpotifyAlbum
|
||||
from spotframework.model.artist import SpotifyArtist
|
||||
from spotframework.model.uri import Uri
|
||||
|
||||
from fmframework.net.network import Network as FMNetwork
|
||||
@ -20,10 +22,16 @@ class Counter:
|
||||
def count(self, uri: Uri):
|
||||
if uri.object_type == Uri.ObjectType.playlist:
|
||||
return self.count_playlist(uri=uri)
|
||||
elif uri.object_type == Uri.ObjectType.track:
|
||||
return self.count_track(uri=uri)
|
||||
elif uri.object_type == Uri.ObjectType.album:
|
||||
return self.count_album(uri=uri)
|
||||
elif uri.object_type == Uri.ObjectType.artist:
|
||||
return self.count_artist(uri=uri)
|
||||
else:
|
||||
logger.error('cannot process uri')
|
||||
|
||||
def count_playlist(self, username: str = None, uri: Uri = None, playlist: SpotifyPlaylist = None):
|
||||
def count_playlist(self, username: str = None, uri: Uri = None, playlist: SpotifyPlaylist = None) -> int:
|
||||
|
||||
if uri is None and playlist is None:
|
||||
raise ValueError('no input playlist to count')
|
||||
@ -33,6 +41,8 @@ class Counter:
|
||||
playlist.tracks = self.spotnet.get_playlist_tracks(uri=playlist.uri)
|
||||
|
||||
if uri is not None:
|
||||
if uri.object_type != Uri.ObjectType.playlist:
|
||||
raise ValueError('uri not a playlist')
|
||||
playlist = self.spotnet.get_playlist(uri=uri)
|
||||
|
||||
scrobble_count = 0
|
||||
@ -59,3 +69,63 @@ class Counter:
|
||||
logger.error(f'no last.fm track returned for {song}')
|
||||
|
||||
return scrobble_count
|
||||
|
||||
def count_track(self, username: str = None, uri: Uri = None, track: SpotifyTrack = None) -> int:
|
||||
|
||||
if uri is None and track is None:
|
||||
raise ValueError('no track to count')
|
||||
|
||||
if uri is not None:
|
||||
if uri.object_type != Uri.ObjectType.track:
|
||||
raise ValueError('uri not a track')
|
||||
track = self.spotnet.get_track(uri=uri)
|
||||
|
||||
if username is not None:
|
||||
fmtrack = self.fmnet.get_track(name=track.name, artist=track.artists[0].name, username=username)
|
||||
else:
|
||||
fmtrack = self.fmnet.get_track(name=track.name, artist=track.artists[0].name, username=self.fmnet.username)
|
||||
|
||||
if fmtrack is not None:
|
||||
return fmtrack.user_scrobbles
|
||||
else:
|
||||
return 0
|
||||
|
||||
def count_album(self, username: str = None, uri: Uri = None, album: SpotifyAlbum = None) -> int:
|
||||
|
||||
if uri is None and album is None:
|
||||
raise ValueError('no album to count')
|
||||
|
||||
if uri is not None:
|
||||
if uri.object_type != Uri.ObjectType.album:
|
||||
raise ValueError('uri not an album')
|
||||
album = self.spotnet.get_album(uri=uri)
|
||||
|
||||
if username is not None:
|
||||
fmalbum = self.fmnet.get_album(name=album.name, artist=album.artists[0].name, username=username)
|
||||
else:
|
||||
fmalbum = self.fmnet.get_album(name=album.name, artist=album.artists[0].name, username=self.fmnet.username)
|
||||
|
||||
if fmalbum is not None:
|
||||
return fmalbum.user_scrobbles
|
||||
else:
|
||||
return 0
|
||||
|
||||
def count_artist(self, username: str = None, uri: Uri = None, artist: SpotifyArtist = None) -> int:
|
||||
|
||||
if uri is None and artist is None:
|
||||
raise ValueError('no artist to count')
|
||||
|
||||
if uri is not None:
|
||||
if uri.object_type != Uri.ObjectType.artist:
|
||||
raise ValueError('uri not an artist')
|
||||
artist = self.spotnet.get_artist(uri=uri)
|
||||
|
||||
if username is not None:
|
||||
fmartist = self.fmnet.get_artist(name=artist.name, username=username)
|
||||
else:
|
||||
fmartist = self.fmnet.get_artist(name=artist.name, username=self.fmnet.username)
|
||||
|
||||
if fmartist is not None:
|
||||
return fmartist.user_scrobbles
|
||||
else:
|
||||
return 0
|
||||
|
Loading…
Reference in New Issue
Block a user