Commit Graph

84 Commits

Author SHA1 Message Date
Bryan Schumaker
049e27c559 Ocarina 4.1 2010-11-05 18:38:44 -04:00
Bryan Schumaker
4a1ff91b57 Plugins check version
We should check plugin versions when loading them.  If the API changes
in a future version, then old plugins shouldn't work.
2010-11-05 08:15:32 -04:00
Bryan Schumaker
99c510dd20 Development plugin path
When libsaria.__dev__ is True, we should use a different path for
plugins.
2010-11-05 08:13:21 -04:00
Bryan Schumaker
16da9fda2b web.py escape character full replacement
Replace all special symbols, not just ' ' and '&'.
2010-11-04 10:14:31 -04:00
Bryan Schumaker
2b7b38da4f Merge branch 'master' of file:///home/bjschuma/public_html/git/ocarina
Conflicts:
	ocarina/image.py
2010-11-03 23:07:18 -04:00
Bryan Schumaker
3ed0b10aab Only change play button when playing
If no song is playing and the play button is clicked we shouldn't switch
to the pause button.  This could confuse users.
2010-11-03 22:04:51 -04:00
Bryan Schumaker
4c916f2fd3 Reset playlist and library functions
These functions should be called to reset the library and playlist,
which is better than deleting the old files and making a new one.
2010-11-03 08:11:15 -04:00
Bryan Schumaker
7308ed8225 Web request error handling
Added a try / except block around placing a urllib2.urlopen().
Additionally, when there is an error I print it and return None.  This
will tell the cache to remove the opened file.
2010-11-02 21:08:37 -04:00
Bryan Schumaker
a97e82ef1c Up last played limit from 15 to 30 2010-11-02 19:20:11 -04:00
Bryan Schumaker
47f091b7ad collections should be saved as something.dl_tree, not somethingdl_tree 2010-11-01 11:56:07 -04:00
Bryan Schumaker
5a6b321ffe Rework collection saving to work with -dev appending 2010-11-01 08:24:53 -04:00
Bryan Schumaker
b408e4b727 Development and stable pickle files
When libsaria.__dev__ == True, we save data to a file with -dev appended
before the extention.
2010-11-01 08:22:38 -04:00
Bryan Schumaker
025a118290 Fix get_rand_candidate crash
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.
2010-10-31 17:21:12 -04:00
Bryan Schumaker
aa9f517959 Walk filtered IDs
We already have a function for walking all song ids.  Collections should
be able to walk the filtered IDs too.
2010-10-31 17:20:20 -04:00
Bryan Schumaker
49328c5200 choose_next() already starts the NEXT event... 2010-10-31 17:19:46 -04:00
Bryan Schumaker
76eaa3eb16 NEXT event
Rather than call choose_next() directly, we should wrap this in a NEXT
event so that things can respond to it.
2010-10-30 13:52:38 -04:00
Bryan Schumaker
3087eb9954 init_var()
I made an init_var function that matches the init_pref function, only
for runtime variables.
2010-10-30 13:40:06 -04:00
Bryan Schumaker
1136e3f4af Cache path correction
If we look for a cache item that includes the directory seperator
character, then we should replace it with a different character.
2010-10-30 12:54:45 -04:00
Bryan Schumaker
c5a606193a Cache dir setup
The cache should use path.saria_dir() to determine the correct path,
rather than setting it directly.
2010-10-30 12:47:41 -04:00
Bryan Schumaker
356244e3be Gstreamer locking
Locking for gstreamer operations may help prevent a double free error I
was getting.
2010-10-30 12:09:28 -04:00
Bryan Schumaker
b000bbf808 Basic playlist deduplication
Before adding songs to the playlist, check if the playlist already
contains the song id.
2010-10-28 08:30:46 -04:00
Bryan Schumaker
4f899c4834 Delete empty cache files
When a cache filler function returns without success, we need to delete
the empty file we create so that it doesn't trigger a false positive the
next time we access it.
2010-10-27 09:09:18 -04:00
Bryan Schumaker
3a81afdc92 last.fm for album art
Whenever a new song is loaded, we check the cache for album art.  If we
don't have art yet, then we place a request to the last.fm to find an
image.
2010-10-26 22:44:09 -04:00
Bryan Schumaker
657d016017 libsaria/web.py
This file contains a url class designed to make it easy to build up a
url and then place a python urllib2 request.
2010-10-26 22:40:00 -04:00
Bryan Schumaker
e3327093ad libsaria/xm.py
xm.py contains helpful xml parsing functions that we can use for
decoding last.fm requests.
2010-10-26 22:39:04 -04:00
Bryan Schumaker
3b92b00d87 Cache should check for success of func()
We return after checking if the fetcher function succeeds.  To do this
properly, we should store the value we get so that the cached file can
be closed before returning.
2010-10-26 22:33:28 -04:00
Bryan Schumaker
b204743e1b Print iterations
For now, print the number of iterations it takes to choose a song at
random.
2010-10-26 22:30:01 -04:00
Bryan Schumaker
5cf837aee2 Library update
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.
2010-10-25 21:58:18 -04:00
Bryan Schumaker
c35f210369 Playlist random improvements
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.
2010-10-25 20:33:22 -04:00
Bryan Schumaker
43eab40b01 Uninvite functions on error
If a function responding to an event has an unhandled exception, we
print a message telling what went wrong and that the function has been
uninvited.  However, I never actually uninvite the function from the
event.  I have now added in a call to uninvite() before printing the
message.
2010-10-25 09:48:24 -04:00
Bryan Schumaker
b69e790186 Cache attempt to close file
Attempt to close the file passed to the get callback function.  Closing
is the right thing to do, but it is possible that the user will close it
before returning..
2010-10-25 09:08:14 -04:00
Bryan Schumaker
5c842def01 Generic cache
I have created a generic cache to hold information outside of the
library.  This could include album art or an artist bio.
2010-10-24 17:26:53 -04:00
Bryan Schumaker
4f371987a0 Version strings
Libsaria and Ocarina have a __vers__ variable.  This contains a string
with the official version (eg. "Ocarina 4.1-dev" or "Libsaria 1.1").
"-dev" means that there have been changes since the last official
version.
2010-10-24 17:22:24 -04:00
Bryan Schumaker
3671b01e84 universal_open bug
After installing a plugin, universal_open() should return rather than
continue on.
2010-10-24 17:12:01 -04:00
Bryan Schumaker
b7efda1d80 Added version variables
libsaria is now known as libsaria version 1.1.
ocarina  is now known as ocarina  version 4.1.
Both are still under development (__dev__ == True)
2010-10-23 20:17:25 -04:00
Bryan Schumaker
9603e4cef0 Forward / Rewind buttons
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.
2010-10-23 15:53:52 -04:00
Bryan Schumaker
f982fab96a More attribute labels
Year, count, length, and length2 labels have been created.  The length2
label adds a "/" before displaying the length of the current song.
2010-10-23 15:35:16 -04:00
Bryan Schumaker
50f7e1203d Score system
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.
2010-10-21 17:11:33 -04:00
Bryan Schumaker
5835f55eb2 Track play count
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%
2010-10-21 12:43:59 -04:00
Bryan Schumaker
6d7b08f921 Random
- Made a random check button to toggle the random preference
- Playlists pick a random song from what is visible
2010-10-21 08:47:10 -04:00
Bryan Schumaker
f1fc5caf07 Bugfixes
data.py: Return after deciding to scan a new library

playlist: refresh during the PREPLISTREFRESH event, not the
POSTPLISTREFRESH event
2010-10-21 07:55:21 -04:00
Bryan Schumaker
bb86a70ae4 Playlist next
The playlist will play the next visible song when the current song ends.
If we have reached the end of the list, we loop back around to the
beginning.
2010-10-20 22:18:41 -04:00
Bryan Schumaker
dc1b6dd4a6 Playlists
I can add songs to a playlist and populate the playlist afterwards (and
on startup).
2010-10-20 21:53:47 -04:00
Bryan Schumaker
02fe6dc8ba Right click menus
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!)
2010-10-20 21:11:12 -04:00
Bryan Schumaker
48d0af571c Collection filtering
I moved filtering from the Library lens to the collection base class
2010-10-20 20:21:11 -04:00
Bryan Schumaker
8f370aa3bd Change all volume buttons
All existing volume buttons must be changed when the volume changes, not
just the one receiving the value-changed signal.
2010-10-20 20:08:21 -04:00
Bryan Schumaker
7b8d2288cd Player volume
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.
2010-10-20 20:04:23 -04:00
Bryan Schumaker
9caa247d04 Collection.find_id(): Check if the result is false. If it is, return
None.  Otherwise, return result[0]
2010-10-20 07:59:08 -04:00
Bryan Schumaker
b45117e761 Don't return list[0] when having the library look up an id 2010-10-19 22:30:57 -04:00
Bryan Schumaker
d56f3b2d0a Multiple changes
- Remove google from the web radio plugin
- Change ocarina.py to use python2
- Seek in song using slider
2010-10-18 21:04:39 -04:00