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.
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.
Libsaria events now support starting specific callback functions in a
background thread. This replaces starting a specific event in the
background.
I have a library tab that is added to the main window through use of the
ocarina.add_tab function.
I have new tests for walking the tree and running multiple threads with
locks.
The web radio plugin can load pandora and grooveshark. This happens
when a web radio tab is selected. After the web document is loaded,
playing music will be paused.
I have begun creating the Ocarina 4.1 gui. So far, I can create and
resize a window. After a resize, the new size is saved and used again
when Ocarina is next started. I am also investigating drag and drop for
use with plugin loading.
I've begun work on a generic collection class for the library, playlist,
and queue. Tagpy functions have been merged into the
libsaria.collections.__init__.py file to make things easier.
I have reworked the gstreamer functions from Ocarina 4.0 and combined
everything into one file. I have also created an audio test that plays
a song from my library.
This function should be called to initialize the preferences and
variables dictionary when libsaria is started. This function triggers
the POSTSTARTUP event.
I combined various parts of the Ocarina 4.0 event system into one file.
The new event file has threading abilities built in, so I no longer need
an external file for that
I revised the Ocarina 4.0 map class so it will hopefully have better
performance. I also began working on a new testing system so testing
specific changes should be easier than with Ocarina 4.0