[Rhythmbox-devel] How to get a list of all the artists in the database



Hello,

I am writing a telnet interface plugin to rhythmbox in python. It's small and called rhythmcurse, http://github.com/sameltvom/rhythmcurse

One of the thing I want to do is to list all artists in the database. The code I use now for sending a list of artists to the client connected looks like this:

---------------------------------------------------------------------------------
try:
    # reset to all artists
    for p in self.shell.props.library_source.get_property_views():
        if p.props.prop == rhythmdb.PROP_ARTIST:
            artistNow = p.get_selection()
            p.set_selection([""])
            break

    # make the changes take effect
    gtk.gdk.threads_leave()
    # python doesn't have Thread.yield as in Java
    time.sleep(0.01)
    gtk.gdk.threads_enter()

    # find all artists
    artists = set()
    for row in self.shell.props.selected_source.props.query_model:
        entry = row[0]
        artist = self.shell.props.db.entry_get(entry, rhythmdb.PROP_ARTIST)
        artists.add(artist)
    id = 0

    # sorted list
    artists_sorted = sorted(artists)
    for artist in artists_sorted:
        reply = "%d - %s\r\n" % (id, artist)
        self.clientSocket.send(reply)
        id+=1

    # reset the artist
    for p in self.shell.props.library_source.get_property_views():
        if p.props.prop == rhythmdb.PROP_ARTIST:
            p.set_selection(artistNow)
            break
    reply = ""

except:
    reply = "couldn't list artists\r\n"
---------------------------------------------------------------------------------

First of all, this just seems like a very bad way to do this and second, it will be buggy if there are many artists in the database.

I have really tried to find out how to do this in a good manner by using the set_query method in RhythmDBQueryResults. But I can't figure out how to create the query.

I would appreciate some help on this.

Kind regards,
Samuel Skånberg



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]