get_attrs() will return a list of requested attributes for a given song
id. For now, I have changed get_attr() into a wrapper around get_attrs
that returns the first entry in the result list.
For some reason the loop in get_rand_candidate was exiting earlier than
I thought. For now, I am returning the last ID looked at to fix the
problem. I expect there is a better solution, but this seems to work
until I can clean up the collection system.
I no longer reset the library before scanning. This allows me to do a
basic form of updating. Unfortunately, I have to manually select the
same directory to update it. Eventually I should find a way of
automating library updates.
I now keep track of the last 15 songs played. If a song with the same
(artist, title) as one of the songs in the list attempts to play, we
skip it.
Songs with a negative score have a (20 * score) + 100 per cent chance of
playing. When score is -5, the song should never play.
I used to try to find a song 5 times before giving up and playing the
song with the current id. I have upped the threshold to 15.
The score system will help determine what users do and don't like. When
the user chooses a song or listens to > 75% of a song, we increment the
score. If the user selects a different song in the first 1/3 of
playback then we decrement the score.
Songs with a score >= 0 will always be played. Songs with a score < 0
have a 50% chance of playing.
The play count is incremented under two conditions. 1) The track
finishes playing. 2) The user skips to the next track, but the current
track has played more than 75%
I have started a system to create a right click menu on the fly and show
it. Currently, it only works for the library. This will be used to
populate the playlist and probably many other things (like plugins!)
I am using tabs in the info pane to act as buttons when the pane is
expanded. Eventually I want to move this over to an action widget, but
pygtk doesn't support action widgets for notebooks yet. Hopefully this
will be fixed by the next release.
Both top and bottom playlist borders are present, but both only have a
placeholder label for now. Double clicking on a row in the list will
play a song now.
I only need to create one bottom pane instance now. When the tabs are
changed, the object will be removed from the old tab and added to the
new one. This will preserve the state of the pane between tabs.
Collections now have a get_attr function. This function takes a song id
and a string with the requested attribute. The value of the attribute
is returned. This is used for generating a hover popup with the
playcount.