Как мне запросить данные в Rhythmbox
Я использую Ubuntu 12.04 и пытаюсь написать плагин Python для запроса к базе данных Rhythmbox. Версия Rhythmbox v2.96, но эта проблема также возникает с v2.97. Когда я делаю запрос Python, Ubuntu падает с ошибкой сегментации.
Я должен подтвердить, что следующее правильно, и если я нашел ошибку, специфичную для Ubuntu, или если я неправильно понял, как правильно запрашивать. Если кто-то другой, пользующийся другим дистрибутивом, может это подтвердить - это будет приветствоваться
Я подал отчет об ошибке на bugzilla относительно ошибки сегментации. Тем не менее, мой вопрос не строго об этом - он специально пытается подтвердить правильный код Python для запроса данных.
Таким образом, мой вопрос: является ли приведенный ниже фрагмент кода правильным для запроса к базе данных Rhythmbox или мне нужно установить дополнительный пакет для включения запросов.
шаги:
- Включить плагин консоли Python
- введите (или скопируйте и вставьте построчно следующее)
из gi.repository import РБ, Глиб db = shell.props.db query_model = RB.RhythmDBQueryModel.new_empty(дБ) query = GLib.PtrArray() db.query_append_params(запрос, RB.RhythmDBQueryType.EQUALS, RB.RhythmDBPropType.ARTIST, "имя какого-то исполнителя") db.query_append_params (запрос, RB.RhythmDBQueryType.EQUALS, RB.RhythmDBPropType.TITLE, "название некоторой песни") db.do_full_query_parsed(query_model, query) для строки в query_model: строка печати [0].get_string( RB.RhythmDBPropType.ARTIST) строка печати [0].get_string( RB.RhythmDBPropType.TITLE)
Если Ubuntu 12.04, когда я набираю эту строку, Ubuntu падает с ошибкой сегментации
db.query_append_params( query, RB.RhythmDBQueryType.EQUALS, RB.RhythmDBPropType.ARTIST, 'some artist name' )
Таким образом, правильно ли я использовал первый параметр в вызове - массив указателей запросов (PtrArray) - или параметры моей функции запроса неверны?
2 ответа
и ответ...
Ну, эта проблема действительно является ошибкой - но, чтобы ответить на мой собственный вопрос,
да, синтаксис для запроса данных в Rhythmbox так же правильно указан в вопросе.
и есть однако...
Запрос данных работает только для 64-битной Linux.
Да, действительно - я тестировал 32-битные live-cd Fedora 17, а также LMDE. Оба демонстрируют ту же проблему с ошибками сегментации, что и Ubuntu 12.04.
Общим фактором является то, что я тестировал Ubuntu 12.04/Fedora 17 и LMDE в их 32-битных воплощениях.
Тестирование всех трех в их 64-битных вариантах работает как ожидалось.
32-битная проблема - это ошибка - о ней сообщалось на bugzilla - но на поставленный вопрос ответили.
Благодарю.
Я столкнулся с этим тоже. Мне удалось обойти это, вручную перебирая библиотеку:
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)