А вот давайте я вам расскажу как задроты-линуксоиды живут. Заметил я, что мой любимый Amarok 1.4 не отображает текст одной песни, для которой я не мог в своё время не заморочиться добавлением текста, причём в дампе коллекции для носимого плеера текст есть. Challenge accepted!
MariaDB [amarok]> SELECT deviceid,uniqueid,url FROM lyrics WHERE url LIKE '%The Dark Side of the Moon%' ORDER By url; +----------+----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | deviceid | uniqueid | url | +----------+----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | 3 | 4907a0f4031a1d7f5fd3bde68ebf0dd2 | ./Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/01 - Speak to MeBreathe (Breathe in the Air).flac | | 3 | b34775fbfb5005080ea4efcd77ba0f9b | ./Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/02 - On the Run.flac | | 3 | aef73e46876c0359009822ecf71e76e6 | ./Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/03 - Time.flac | | 3 | 9f906a830ff164a17cb446f5ed939951 | ./Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/04 - The Great Gig in the Sky.flac | | 3 | 3dfc12b0f82f9bf9fea45efdd89f7ad3 | ./Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/05 - Money.flac | | 3 | 286030c685438d18c2865cb3b1561d26 | ./Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/06 - Us and Them.flac | | 3 | 872eb634a3e6cc899b6adb6ebce14101 | ./Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/07 - Any Colour You Like.flac | | 3 | cc518956388544ba03c46cd40acae9a0 | ./Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/08 - Brain Damage.flac | | 3 | 26d47bd8757756a527fe600eafe40304 | ./Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/09 - Eclipse.flac | | -1 | b34775fbfb5005080ea4efcd77ba0f9b | ./media/storage/Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/02 - On the Run.flac | | -1 | aef73e46876c0359009822ecf71e76e6 | ./media/storage/Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/03 - Time.flac | | -1 | 9f906a830ff164a17cb446f5ed939951 | ./media/storage/Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/04 - The Great Gig in the Sky.flac | | -1 | 3dfc12b0f82f9bf9fea45efdd89f7ad3 | ./media/storage/Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/05 - Money.flac | | -1 | 286030c685438d18c2865cb3b1561d26 | ./media/storage/Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/06 - Us and Them.flac | | -1 | 872eb634a3e6cc899b6adb6ebce14101 | ./media/storage/Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/07 - Any Colour You Like.flac | | -1 | cc518956388544ba03c46cd40acae9a0 | ./media/storage/Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/08 - Brain Damage.flac | | -1 | 26d47bd8757756a527fe600eafe40304 | ./media/storage/Music/Pink Floyd/1973 - The Dark Side of the Moon (Black Triangle)/09 - Eclipse.flac | +----------+----------------------------------+------------------------------------------------------------------------------------------------------------------------+
Видим странное. Почему-то для всех треков кроме первого текст хранится дважды. uniqueid, как видно из исходников
QString MetaBundle::readUniqueId( TagLib::FileRef* fileref ) { //This is used in case we don't get given a fileref TagLib::FileRef tmpfileref;
if( !fileref && isFile() ) { const QString path = url().path(); //Make it get cleaned up at the end of the function automagically tmpfileref = TagLib::FileRef( QFile::encodeName( path ), true, TagLib::AudioProperties::Fast ); fileref = &tmpfileref; }
Это объясняет в чём дело даже без курения исходников. HAL у меня долго время выключен, как deprecated. Приходилось недавно включать, чтобы потестировать просмотр киношек с ivi.ru, т.к. без HAL используемый там DRM не работает, но на постоянной основе у меня его больше не будет. Видимо в отсутствие HAL Amarok 1.4 не может определить устройство, на котором лежит файл. Теперь посмотрим, сколько у меня дублей текстов и текстов для старого варианта определения урлов
MariaDB [amarok]> select count(*) from (select REPLACE(url,'/media/storage','') as normalized_url from lyrics group by normalized_url having count(*)>1) sq; +----------+ | count(*) | +----------+ | 1727 | +----------+
MariaDB [amarok]> SELECT count(*) FROM lyrics WHERE url like './Music%'; +----------+ | count(*) | +----------+ | 1831 | +----------+
Ну и наконец фикс
MariaDB [amarok]> UPDATE IGNORE lyrics SET deviceid=-1, url=REPLACE(url,'./Music/','./media/storage/Music/') WHERE url like './Music/%'; Query OK, 108 rows affected (0.08 sec) Rows matched: 1831 Changed: 108 Warnings: 0
MariaDB [amarok]> DELETE FROM lyrics WHERE deviceid=3; Query OK, 1735 rows affected (0.05 sec)
И текст для песни в Амароке стал виден. Лан-ца-дри-ца-лан-ца-ца!