summaryrefslogtreecommitdiffstats
path: root/docs/patches/amarok.txt
blob: e2f6b5d88fd0f05f351cbe1d3439ba954b665cd9 (plain)
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.