1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
Amarok (1.4.8) устроен примерно следующим образом. Если мы имеем дело с
локальными файлами, то все тэги получаются через Taglib (в функции
MetaBundle::readTags из metabundle.cpp).
Однако, taglib (1.5 и раньше) не умеет за тагами по сети лазить. По-этому
smb, nfs и т.п. обрабатываются по другому.
1. Во-первых в томже metabundle.cpp есть:
MetaBundle::init( const KFileMetaInfo& info )
который может принимать тэги в некой KDEшной структуру. Подозреваю, что
это связано с KIO. Впрочем, неважно для SMB файлов эта функция не запускается.
2. Реально для smb файлов тэги ловятся функцией slotEngineMetaData (из
enginecontroller.cpp). Вызывается данная функция по приходу сигнала
"metaData".
Насколько я понял, данный сигнал посылают всякие enginы, которые проигрывают
музыку для амарок. Типа engine/yauap, engine/xine и т.п. Вот видать они
читают тэги (криво, поскольку не с линкованы с taglib или еще чем с RusXMMS
патчем).
3. Может еще чего есть ;)
Вообщем, резюме. Патчить надо либо эти движки, либо, что мне (на первый взгляд)
кажется проще, надо подцепится к slotEngineMetaData. Трабла там только в том,
что приходит туда тэги уже в UTF-8, некоректно перекодированном. Поэтому,
сначала надо конвертуть UTF-8 обратно в Latin1, а уже потом натравливать
librcc. Впрочем, перекодировку UTF->Latin тоже можно сделать через librcc.
|