I have created forward and rewind buttons to draw on the info bar. In
addition, I have created seek_sec() to seek the song by X seconds.
Right now, the seek buttons add +/- 5 seconds to the current position.
I created labels that automatically update whenever a song is changed.
These labels are used for displaying the artist, album, and title of the
currently playing song. They can also be used in the future fir
displaying any attribute of a song.
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 can now change the volume using a button in the gui. Additionally,
the volume is stored between sessions, and the correct value is loaded
when libsaria is initialized.
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.
We should only ever have one instance of the main window, so there is no
reason for it to be a class. I have turned it into a set of functions
that do the same thing.
We only have one instance of the main tabs, so there is no reason for it
to be a class. I have changed this into a set of functions that do
everything the old class did.
The main tabs now have a generic TabPage class that contains the content
added to the tab. This TabPage will control visibility of the content
and make it easier to find a page with specific content (no looping
through gtk boxes!)
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.