00001
00002
00003 #include "metaio.h"
00004 #include "metadata.h"
00005
00006
00007 #include <mythcontext.h>
00008
00012 MetaIO::MetaIO()
00013 {
00014 mFilenameFormat = gCoreContext->GetSetting("NonID3FileNameFormat").toUpper();
00015 }
00016
00020 MetaIO::~MetaIO()
00021 {
00022 }
00023
00030 void MetaIO::readFromFilename(const QString &filename,
00031 QString &artist, QString &album, QString &title,
00032 QString &genre, int &tracknum)
00033 {
00034 QString lfilename = filename;
00035
00036 artist.clear();
00037 album.clear();
00038 title.clear();
00039 genre.clear();
00040 tracknum = 0;
00041
00042 int part_num = 0;
00043
00044 lfilename.replace('_', ' ');
00045 lfilename.section('.', 0, -2);
00046 QStringList fmt_list = mFilenameFormat.split("/");
00047 QStringList::iterator fmt_it = fmt_list.begin();
00048
00049
00050 for (; fmt_it != fmt_list.end(); ++fmt_it, --part_num) {}
00051
00052
00053 fmt_it = fmt_list.begin();
00054 for(; fmt_it != fmt_list.end(); ++fmt_it, ++part_num)
00055 {
00056 QString part_str = lfilename.section( "/", part_num, part_num);
00057
00058 if ( *fmt_it == "GENRE" )
00059 genre = part_str;
00060 else if ( *fmt_it == "ARTIST" )
00061 artist = part_str;
00062 else if ( *fmt_it == "ALBUM" )
00063 album = part_str;
00064 else if ( *fmt_it == "TITLE" )
00065 title = part_str;
00066 else if ( *fmt_it == "TRACK_TITLE" )
00067 {
00068 QStringList tracktitle_list = part_str.split("-");
00069 if (tracktitle_list.size() > 1)
00070 {
00071 tracknum = tracktitle_list[0].toInt();
00072 title = tracktitle_list[1].simplified();
00073 }
00074 else
00075 title = part_str;
00076 }
00077 else if ( *fmt_it == "ARTIST_TITLE" )
00078 {
00079 QStringList artisttitle_list = part_str.split("-");
00080 if (artisttitle_list.size() > 1)
00081 {
00082 artist = artisttitle_list[0].simplified();
00083 title = artisttitle_list[1].simplified();
00084 }
00085 else
00086 {
00087 if (title.isEmpty())
00088 title = part_str;
00089 if (artist.isEmpty())
00090 title = part_str;
00091 }
00092 }
00093 }
00094 }
00095
00104 Metadata* MetaIO::readFromFilename(const QString &filename, bool blnLength)
00105 {
00106 QString artist, album, title, genre;
00107 int tracknum = 0, length = 0;
00108
00109 readFromFilename(filename, artist, album, title, genre, tracknum);
00110
00111 if (blnLength)
00112 length = getTrackLength(filename);
00113
00114 Metadata *retdata = new Metadata(filename, artist, "", album,
00115 title, genre, 0, tracknum, length);
00116
00117 return retdata;
00118 }
00119
00125 void MetaIO::readFromFilename(Metadata* metadata)
00126 {
00127 QString artist, album, title, genre;
00128 int tracknum = 0;
00129
00130 const QString filename = metadata->Filename();
00131
00132 if (filename.isEmpty())
00133 return;
00134
00135 readFromFilename(filename, artist, album, title, genre, tracknum);
00136
00137 if (metadata->Artist().isEmpty())
00138 metadata->setArtist(artist);
00139
00140 if (metadata->Album().isEmpty())
00141 metadata->setAlbum(album);
00142
00143 if (metadata->Title().isEmpty())
00144 metadata->setTitle(title);
00145
00146 if (metadata->Genre().isEmpty())
00147 metadata->setGenre(genre);
00148
00149 if (metadata->Track() <= 0)
00150 metadata->setTrack(tracknum);
00151 }