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