2019-02-20 20:22:45 +03:00
from htmlgenerators import *
import database
from utilities import getArtistsInfo , getTracksInfo
2019-03-03 00:55:22 +03:00
from malojatime import *
2019-02-20 23:10:58 +03:00
import urllib
2019-02-20 20:22:45 +03:00
def getpictures ( ls , result , tracks = False ) :
from utilities import getArtistsInfo , getTracksInfo
if tracks :
for element in getTracksInfo ( ls ) :
result . append ( element . get ( " image " ) )
else :
for element in getArtistsInfo ( ls ) :
result . append ( element . get ( " image " ) )
# artist=None,track=None,since=None,to=None,within=None,associated=False,max_=None,pictures=False
def module_scrobblelist ( max_ = None , pictures = False , shortTimeDesc = False , * * kwargs ) :
kwargs_filter = pickKeys ( kwargs , " artist " , " track " , " associated " )
kwargs_time = pickKeys ( kwargs , " since " , " to " , " within " )
scrobbles = database . get_scrobbles ( * * kwargs_time , * * kwargs_filter ) #we're getting all scrobbles for the number and only filtering them on site
if pictures :
scrobbleswithpictures = scrobbles if max_ is None else scrobbles [ : max_ ]
2019-02-20 23:10:58 +03:00
#scrobbleimages = [e.get("image") for e in getTracksInfo(scrobbleswithpictures)] #will still work with scrobble objects as they are a technically a subset of track objects
scrobbleimages = [ " /image?title= " + urllib . parse . quote ( t [ " title " ] ) + " & " + " & " . join ( [ " artist= " + urllib . parse . quote ( a ) for a in t [ " artists " ] ] ) for t in scrobbleswithpictures ]
2019-02-20 20:22:45 +03:00
2019-03-03 00:55:22 +03:00
representative = scrobbles [ 0 ] if len ( scrobbles ) is not 0 else None
2019-02-20 20:22:45 +03:00
# build list
i = 0
html = " <table class= ' list ' > "
for s in scrobbles :
html + = " <tr> "
2019-03-03 00:55:22 +03:00
html + = " <td class= ' time ' > " + time_desc ( s [ " time " ] , short = shortTimeDesc ) + " </td> "
2019-02-20 20:22:45 +03:00
if pictures :
html + = """ <td class= ' icon ' ><div style= " background-image:url( ' """ + scrobbleimages [ i ] + """ ' ) " ></div></td> """
html + = " <td class= ' artists ' > " + artistLinks ( s [ " artists " ] ) + " </td> "
html + = " <td class= ' title ' > " + trackLink ( { " artists " : s [ " artists " ] , " title " : s [ " title " ] } ) + " </td> "
html + = " </tr> "
2019-02-21 02:13:18 +03:00
i + = 1
if max_ is not None and i > = max_ :
break
2019-02-20 20:22:45 +03:00
html + = " </table> "
return ( html , len ( scrobbles ) , representative )
def module_pulse ( max_ = None , * * kwargs ) :
kwargs_filter = pickKeys ( kwargs , " artist " , " track " , " associated " )
kwargs_time = pickKeys ( kwargs , " since " , " to " , " within " , " step " , " stepn " , " trail " )
ranges = database . get_pulse ( * * kwargs_time , * * kwargs_filter )
2019-03-03 00:55:22 +03:00
if max_ is not None : ranges = ranges [ : max_ ]
# if time range not explicitly specified, only show from first appearance
# if "since" not in kwargs:
# while ranges[0]["scrobbles"] == 0:
# del ranges[0]
2019-02-20 20:22:45 +03:00
maxbar = max ( [ t [ " scrobbles " ] for t in ranges ] )
maxbar = max ( maxbar , 1 )
#build list
html = " <table class= ' list ' > "
for t in ranges :
fromstr = " / " . join ( [ str ( e ) for e in t [ " from " ] ] )
tostr = " / " . join ( [ str ( e ) for e in t [ " to " ] ] )
html + = " <tr> "
2019-03-03 00:55:22 +03:00
html + = " <td> " + range_desc ( t [ " from " ] , t [ " to " ] , short = True ) + " </td> "
2019-02-20 20:22:45 +03:00
html + = " <td class= ' amount ' > " + scrobblesLink ( { " since " : fromstr , " to " : tostr } , amount = t [ " scrobbles " ] , * * kwargs_filter ) + " </td> "
html + = " <td class= ' bar ' > " + scrobblesLink ( { " since " : fromstr , " to " : tostr } , percent = t [ " scrobbles " ] * 100 / maxbar , * * kwargs_filter ) + " </td> "
html + = " </tr> "
html + = " </table> "
return html
def module_trackcharts ( max_ = None , * * kwargs ) :
kwargs_filter = pickKeys ( kwargs , " artist " , " associated " )
kwargs_time = pickKeys ( kwargs , " since " , " to " , " within " )
tracks = database . get_charts_tracks ( * * kwargs_filter , * * kwargs_time )
if tracks != [ ] :
maxbar = tracks [ 0 ] [ " scrobbles " ]
representative = tracks [ 0 ] [ " track " ]
else :
representative = None
i = 0
html = " <table class= ' list ' > "
for e in tracks :
i + = 1
if max_ is not None and i > max_ :
break
html + = " <tr> "
html + = " <td class= ' rank ' ># " + str ( i ) + " </td> "
html + = " <td class= ' artists ' > " + artistLinks ( e [ " track " ] [ " artists " ] ) + " </td> "
html + = " <td class= ' title ' > " + trackLink ( e [ " track " ] ) + " </td> "
html + = " <td class= ' amount ' > " + scrobblesTrackLink ( e [ " track " ] , kwargs_time , amount = e [ " scrobbles " ] ) + " </td> "
html + = " <td class= ' bar ' > " + scrobblesTrackLink ( e [ " track " ] , kwargs_time , percent = e [ " scrobbles " ] * 100 / maxbar ) + " </td> "
html + = " </tr> "
html + = " </table> "
return ( html , representative )
def module_artistcharts ( max_ = None , * * kwargs ) :
kwargs_filter = pickKeys ( kwargs , " associated " ) #not used right now
kwargs_time = pickKeys ( kwargs , " since " , " to " , " within " )
artists = database . get_charts_artists ( * * kwargs_filter , * * kwargs_time )
if artists != [ ] :
maxbar = artists [ 0 ] [ " scrobbles " ]
representative = artists [ 0 ] [ " artist " ]
else :
representative = None
i = 0
html = " <table class= ' list ' > "
for e in artists :
i + = 1
if max_ is not None and i > max_ :
break
html + = " <tr> "
html + = " <td class= ' rank ' ># " + str ( i ) + " </td> "
html + = " <td class= ' artist ' > " + artistLink ( e [ " artist " ] )
if ( e [ " counting " ] != [ ] ) :
html + = " <span class= ' extra ' >incl. " + " , " . join ( [ artistLink ( a ) for a in e [ " counting " ] ] ) + " </span> "
html + = " </td> "
html + = " <td class= ' amount ' > " + scrobblesArtistLink ( e [ " artist " ] , kwargs_time , amount = e [ " scrobbles " ] , associated = True ) + " </td> "
html + = " <td class= ' bar ' > " + scrobblesArtistLink ( e [ " artist " ] , kwargs_time , percent = e [ " scrobbles " ] * 100 / maxbar , associated = True ) + " </td> "
html + = " </tr> "
html + = " </table> "
return ( html , representative )