Время жизни треков в libspotify

При использовании libspotify я отвечаю на обратные вызовы об изменении списков воспроизведения, просматривая списки воспроизведения и получая информацию о треках.

Когда я получаю дескриптор дорожки, когда этот дескриптор становится недействительным? Могу ли я предположить, что в сеансе заданное значение дескриптора дорожки всегда будет относиться к одной и той же дорожке? Нужно ли мне увеличивать и уменьшать количество ссылок треков вручную, чтобы быть уверенным?

Спасибо, Том.


person Tom Davies    schedule 21.01.2013    source источник


Ответы (1)


Согласно документации:

Подсчет ссылок используется для всех объектов домена в libspotify. Функции, включая строку create, будут возвращать объект с предварительно увеличенным счетчиком ссылок. Таким образом, каждое создание должно иметь соответствующий выпуск, когда значение больше не требуется.

Другие функции доступа (включая sp_link_as_artist и др.), с другой стороны, возвращают ссылку, заимствованную из объекта, из которого она была извлечена. Извлечение sp_album из sp_link приведет к тому, что объект альбома сохранится до тех пор, пока объект ссылки не будет освобожден, если его счетчик ссылок не будет явно увеличен.

Поэтому, если вы получаете дескриптор дорожки, вызывая sp_playlist_track, который не содержит строки create, ссылка на дорожку принадлежит плейлисту. Вы можете быть уверены, что он по-прежнему действителен, только если вы уверены, что дескриптор списка воспроизведения действителен, и вы уверены, что список воспроизведения все еще содержит дорожку, если только вы не увеличите счетчик ссылок вручную.

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

На практике я думаю, что вы должны добавить ссылку на дорожку, прежде чем вернуться из обратного вызова или снова вызвать sp_session_process_events. Можно полагаться на то, что родительский объект поддерживает его жизнь до этого момента, но после этого момента гораздо труднее рассуждать, поэтому просто добавьте ссылку и позже отпустите ее, когда закончите.

person Weeble    schedule 21.01.2013
comment
Итак, я полагаю, тогда возникает вопрос: как узнать, когда дескриптор списка воспроизведения становится недействительным? Из того, что я могу сказать, как только я получаю список воспроизведения из контейнера списка воспроизведения (который всегда действителен), он должен оставаться действительным в течение всего времени входа в систему, если только я не получу обратный вызов playlist_removed? - person Tom Davies; 21.01.2013
comment
@TomDavies Я обновил ответ, чтобы он был более точным в свете вашего комментария. Я не думаю, что разумно полагаться на точную механику, когда родительский объект освобождает свою ссылку. Если вы хотите использовать его снова после того, как передали управление libspotify, лучше всего увеличить счетчик ссылок. - person Weeble; 21.01.2013