1#include "AudioTagAnalyser.h"
2
3#include <new>
4
5#include <MediaFile.h>
6#include <Path.h>
7
8#include <audioproperties.h>
9#include <tag.h>
10#include <fileref.h>
11
12
13AudioTagAnalyser::AudioTagAnalyser(BString name, const BVolume& volume)
14	:
15	FileAnalyser(name, volume)
16{
17
18}
19
20
21status_t
22AudioTagAnalyser::InitCheck()
23{
24	return B_OK;
25}
26
27
28
29void
30AudioTagAnalyser::AnalyseEntry(const entry_ref& ref)
31{
32	BPath path(&ref);
33
34	TagLib::FileRef tagFile(path.Path());
35	TagLib::Tag* tag = tagFile.tag();
36	if (!tag)
37		return;
38
39	TagLib::String artist = tag->artist();
40	TagLib::String title = tag->title();
41	TagLib::String album = tag->album();
42	printf("artist: %s, title: %s, album: %s\n", artist.toCString(),
43		   title.toCString(), album.toCString());
44
45	BFile file(&ref, B_READ_ONLY);
46	if (file.InitCheck() != B_OK)
47		return;
48
49	const char* cArtist = artist.toCString(true);
50	file.WriteAttr("Audio:Artist", B_STRING_TYPE, 0, cArtist, strlen(cArtist));
51	const char* cTitle = title.toCString(true);
52	file.WriteAttr("Media:Title", B_STRING_TYPE, 0, cTitle, strlen(cTitle));
53	const char* cAlbum = album.toCString(true);
54	file.WriteAttr("Audio:Album", B_STRING_TYPE, 0, cAlbum, strlen(cAlbum));
55/*
56	BMediaFile mediaFile(&ref);
57	if (mediaFile.InitCheck() != B_OK)
58		return;
59
60	BMessage metaData;
61	if (mediaFile.GetMetaData(&metaData) != B_OK)
62		return;
63
64	BFile file(&ref, B_READ_ONLY);
65	if (file.InitCheck() != B_OK)
66		return;
67
68	BString dataString;
69	if (metaData.FindString("artist", &dataString) == B_OK)
70		file.WriteAttr("Audio:Artist", B_STRING_TYPE, 0, dataString.String(),
71			dataString.Length());
72	if (metaData.FindString("title", &dataString) == B_OK)
73		file.WriteAttr("Media:Title", B_STRING_TYPE, 0, dataString.String(),
74			dataString.Length());
75	if (metaData.FindString("album", &dataString) == B_OK)
76		file.WriteAttr("Audio:Album", B_STRING_TYPE, 0, dataString.String(),
77			dataString.Length());
78	if (metaData.FindString("track", &dataString) == B_OK)
79		file.WriteAttr("Audio:Track", B_STRING_TYPE, 0, dataString.String(),
80			dataString.Length());*/
81
82}
83
84
85AudioTagAddOn::AudioTagAddOn(image_id id, const char* name)
86	:
87	IndexServerAddOn(id, name)
88{
89
90}
91
92
93FileAnalyser*
94AudioTagAddOn::CreateFileAnalyser(const BVolume& volume)
95{
96	return new (std::nothrow)AudioTagAnalyser(Name(), volume);
97}
98
99
100extern "C" IndexServerAddOn* (instantiate_index_server_addon)(image_id id,
101	const char* name)
102{
103	return new (std::nothrow)AudioTagAddOn(id, name);
104}
105