问题
I'm using ubuntu 12.04 and I'm trying to write a python plugin to query the Rhythmbox database. The Rhythmbox version is v2.96 but this issue also occurs with v2.97 as well. When I do a python query, Ubuntu crashes with a segmentation fault.
I need to confirm the following is correct and if I've found a bug specific to Ubuntu or if I've misunderstood how to correctly query. If anyone else using another distro can confirm - this would be most welcome.
I've filed a bug report on bugzilla with regards to the segmentation fault. However, my question is not strictly about this - its specifically trying to confirm the correct python code to query for data.
Thus my question: is the code snippet below correct to query the Rhythmbox database or do I need to install an additional package to enable querying.
Steps:
- Enable the python console plugin
- type (or copy and paste line by line the following)
from gi.repository import RB, GLib db = shell.props.db query_model = RB.RhythmDBQueryModel.new_empty(db) query = GLib.PtrArray() db.query_append_params( query, RB.RhythmDBQueryType.EQUALS, RB.RhythmDBPropType.ARTIST, 'some artist name' ) db.query_append_params( query, RB.RhythmDBQueryType.EQUALS, RB.RhythmDBPropType.TITLE, 'some song name' ) db.do_full_query_parsed(query_model, query) for row in query_model: print row[0].get_string( RB.RhythmDBPropType.ARTIST ) print row[0].get_string( RB.RhythmDBPropType.TITLE )
If ubuntu 12.04 when I type this line, Ubuntu crashes with a segmentation fault
db.query_append_params( query, RB.RhythmDBQueryType.EQUALS, RB.RhythmDBPropType.ARTIST, 'some artist name' )
Thus, have I actually used the first parameter in the call correctly - the Query Pointer Array (PtrArray) - or is my query function parameters incorrect?
回答1:
and the answer is...
Well, this issue is indeed a bug - but to answer my own question,
yes the syntax to query for data in Rhythmbox is as correctly stated in the question.
and there is a however...
Querying for data only works for 64bit linux.
Yes really - I have been testing 32bit live-cd's of Fedora 17 as well as LMDE. Both exhibit the same segmentation fault issue as Ubuntu 12.04.
The common factor is that I was testing Ubuntu 12.04/Fedora 17 and LMDE in their 32bit incarnations.
Testing all three in their 64bit variants works as expected.
The 32bit issue is a bug - and has been reported on bugzilla - but the question as posed has been answered.
Thanks.
回答2:
I ran into this too. I managed to work around it by iterating through the library manually:
for row in self.shell.props.library_source.props.base_query_model:
entry = row[0]
artist = entry.get_string(RB.RhythmDBPropType.ARTIST)
if self.sanitize(artist) in similar_artists_map:
self.qm.add_entry(entry, -1)
来源:https://stackoverflow.com/questions/12133250/how-do-i-query-for-data-in-rhythmbox