00001 #include <math.h>
00002
00003 #include "metaiowavpack.h"
00004 #include "metadata.h"
00005
00006 #include <apetag.h>
00007 #include <apeitem.h>
00008
00009 #include <mythcontext.h>
00010 #include "musicutils.h"
00011
00012 MetaIOWavPack::MetaIOWavPack(void)
00013 : MetaIOTagLib()
00014 {
00015 }
00016
00017 MetaIOWavPack::~MetaIOWavPack(void)
00018 {
00019 }
00020
00027 TagLib::WavPack::File *MetaIOWavPack::OpenFile(const QString &filename)
00028 {
00029 QByteArray fname = filename.toLocal8Bit();
00030 TagLib::WavPack::File *wpfile = new TagLib::WavPack::File(fname.constData());
00031
00032 if (!wpfile->isOpen())
00033 {
00034 delete wpfile;
00035 wpfile = NULL;
00036 }
00037
00038 return wpfile;
00039 }
00040
00041
00045 bool MetaIOWavPack::write(const Metadata* mdata)
00046 {
00047 if (!mdata)
00048 return false;
00049
00050 TagLib::WavPack::File *wpfile = OpenFile(mdata->Filename());
00051
00052 if (!wpfile)
00053 return false;
00054
00055 TagLib::APE::Tag *tag = wpfile->APETag();
00056
00057 if (!tag)
00058 {
00059 delete wpfile;
00060 return false;
00061 }
00062
00063 WriteGenericMetadata(tag, mdata);
00064
00065
00066 if (mdata->Compilation())
00067 {
00068 TagLib::String key = "Album artist";
00069 TagLib::APE::Item item = TagLib::APE::Item(key,
00070 QStringToTString(mdata->CompilationArtist()));
00071 tag->setItem(key, item);
00072 }
00073 else
00074 tag->removeItem("Album artist");
00075
00076 bool result = wpfile->save();
00077
00078 if (wpfile)
00079 delete wpfile;
00080
00081 return (result);
00082 }
00083
00087 Metadata* MetaIOWavPack::read(const QString &filename)
00088 {
00089 TagLib::WavPack::File *wpfile = OpenFile(filename);
00090
00091 if (!wpfile)
00092 return NULL;
00093
00094 TagLib::APE::Tag *tag = wpfile->APETag();
00095
00096 if (!tag)
00097 {
00098 delete wpfile;
00099 return NULL;
00100 }
00101
00102 Metadata *metadata = new Metadata(filename);
00103
00104 ReadGenericMetadata(tag, metadata);
00105
00106 bool compilation = false;
00107
00108
00109 if(tag->itemListMap().contains("Album artist"))
00110 {
00111 compilation = true;
00112 QString compilation_artist = TStringToQString(
00113 tag->itemListMap()["Album artist"].toString()).trimmed();
00114 metadata->setCompilationArtist(compilation_artist);
00115 }
00116
00117 metadata->setCompilation(compilation);
00118
00119 if (metadata->Length() <= 0)
00120 metadata->setLength(getTrackLength(wpfile));
00121 else
00122 delete wpfile;
00123
00124 return metadata;
00125 }