Использование Python и libgpod (gtkpod) для загрузки музыки на iPod из Linux

Следующий код, который я считаю минимальной программой для загрузки музыки

db = Database('/media/[email protected] ipod')
itdb_device_set_sysinfo(db._itdb.device, "ModelNumStr", "C297")
db.import_file('/home/andrew/some-track.mp3')
db.copy_delayed_files()
db.close()

выводит следующее на stderr:

** (utrunner.py:11333): WARNING **: Itdb_Track ID '0' not found.
** (utrunner.py:11333): CRITICAL **: itdb_get_mountpoint: assertion `itdb' failed
** (utrunner.py:11333): CRITICAL **: prepare_itdb_for_write: assertion `link' failed
** (utrunner.py:11333): CRITICAL **: mk_mhla: assertion `fexp->albums' failed
** (utrunner.py:11333): CRITICAL **: mk_mhli: assertion `fexp->artists' failed
** (utrunner.py:11333): CRITICAL **: itdb_splr_validate: assertion `at != ITDB_SPLAT_UNKNOWN' failed

и не загружает музыку.

Когда я запускаю gtkpod (который использует libgpod - они оба из одного и того же проекта), он работает (и печатает только начальное предупреждение и сообщение ITDB_SPLAT_UNKNOWN). Пути верны, и я могу открывать каталоги, писать в файлы и т.д. Объект базы данных выглядит правильно (показывает, например, 2 плейлиста) и файл SysInfoExtended присутствует.

Что я делаю неправильно? Кто-нибудь получил это (оболочка Python libgpod) для работы?

Одна из возможных подсказок: gtkpod предлагает мне тип iPod (Classic 160GB). Я не устанавливаю эту информацию выше. Как я могу это установить? update. Я попробовал показанный выше вызов и упомянул в ответе ниже, но это, казалось, не имело никакого эффекта (я не включил его изначально, потому что я думал, что это, должно быть, было неправильно, но, возможно, это и проблема в другом месте). Кроме того, gtkpod называет его "xB150"?!

Я попросил список рассылки libgpod/gtkpod, но не получил ответа. Это как с последней стабильной версией, так и с соединительной магистралью git (скомпилировано с CFLAGS = -w).

update Я удалил всю музыку, а затем выполнил код выше с C297 и xB150. в любом случае файл Extras.itdb(который выглядит как sqlite db) меняет размер, а отключенный iPod не содержит песен. связанные файлы находятся по ссылкам:

Общие замечания по этой проблеме, которые будут обновляться в будущем здесь.

Ответ 1

Одна из возможных подсказок: gtkpod предлагает мне тип iPod (Classic 160GB). Я не устанавливаю эту информацию выше. Как я могу установить это?

itdb_device_set_sysinfo (db._itdb.device, "ModelNumStr", "FOOBAR");

Замените FOOBAR на вашу модель в соответствии с модельным списком.

Edit:

Мое предложение состоит в том, чтобы скомпилировать gtkpod с помощью отладочных символов и проследить его выполнение с помощью gdb. Точка останова в libgtkpod/file.c:add_track_by_filename() кажется хорошей отправной точкой.

Сравните его использование libgpod с вашим и посмотрите, есть ли дополнительные вызовы. Очевидно, что привязки Python абстрагируют вещи больше, но не должно быть проблемой, чтобы выяснить, что они в конечном итоге называют.

(например, import_file вызывает itdb_cp_track_to_ipod и itdb_playlist_add_track)

Извините, что вся помощь, которую я могу предоставить без доступа к устройству.