MythTV  0.26-pre
metaio.cpp
Go to the documentation of this file.
00001 
00002 // Mythmusic
00003 #include "metaio.h"
00004 #include "metadata.h"
00005 
00006 // Libmyth
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     // Clear
00036     artist.clear();
00037     album.clear();
00038     title.clear();
00039     genre.clear();
00040     tracknum = 0;
00041     
00042     int part_num = 0;
00043     // Replace 
00044     lfilename.replace('_', ' ');
00045     lfilename.section('.', 0, -2);
00046     QStringList fmt_list = mFilenameFormat.split("/");
00047     QStringList::iterator fmt_it = fmt_list.begin();
00048 
00049     // go through loop once to get minimum part number
00050     for (; fmt_it != fmt_list.end(); ++fmt_it, --part_num) {}
00051 
00052     // reset to go through loop for real
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 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends