tag.cpp 3.27 KB
Newer Older
1 2 3 4 5
/***************************************************************************
                          tag.cpp  -  description
                             -------------------
    begin                : Sun Feb 17 2002
    copyright            : (C) 2002 by Scott Wheeler
6
    email                : wheeler@kde.org
7
***************************************************************************/
8 9 10 11 12 13 14 15 16 17

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

18
#include <qregexp.h>
19 20

#include "tag.h"
21 22 23
#include "id3tag.h"
#include "oggtag.h"
#include "cachedtag.h"
24

25 26 27 28
////////////////////////////////////////////////////////////////////////////////
// public members
////////////////////////////////////////////////////////////////////////////////

29
Tag *Tag::createTag(const QString &file)
30
{
31 32 33 34
    QFileInfo f(file);
    QString extension = f.extension(false).lower();
    
    // insert a check for a cache hit here
35

36 37 38 39 40 41
    if(extension == "mp3")
	return new ID3Tag(file);
    if(extension == "ogg")
	return new OggTag(file);
    else
	return(0);
42 43
}

44
Tag::~Tag()
45
{
46

47 48
}

49 50 51 52 53 54 55 56 57 58
QString Tag::absFilePath() const
{
    return(fileInfo.absFilePath());
}

QDateTime Tag::lastModified() const
{
    return(fileInfo.lastModified());
}

59 60 61
////////////////////////////////////////////////////////////////////////////////
// protected methods
////////////////////////////////////////////////////////////////////////////////
62

63
Tag::Tag(const QString &file)
64
{
65 66 67 68 69 70 71 72 73 74 75 76 77 78
    fileInfo.setFile(file);
}

QString Tag::readBitrate(const KFileMetaInfo &metaInfo)
{
    if(metaInfo.isValid() && !metaInfo.isEmpty())
	return(metaInfo.item("Bitrate").string().stripWhiteSpace().section(' ', 0, 0));
    else
	return(QString::null);
}

QString Tag::readLength(const KFileMetaInfo &metaInfo)
{
    if(metaInfo.isValid() && !metaInfo.isEmpty())
79
	return(metaInfo.item("Length").string().stripWhiteSpace().replace(QRegExp("^0+"), QString::null));
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
    else
	return(QString::null);
}

int Tag::readSeconds(const KFileMetaInfo &metaInfo)
{
    QStringList l = QStringList::split(':', readLength(metaInfo));

    int total = 0;

    for(QStringList::Iterator it = l.begin(); it != l.end(); ++it)
	total = 60 * total + (*it).toInt();
    
    return(total);
}

////////////////////////////////////////////////////////////////////////////////
// related functions
////////////////////////////////////////////////////////////////////////////////

QDataStream &operator<<(QDataStream &s, const Tag &t)
{
    s << t.hasTag()

      << t.track()
      << t.artist()
      << t.album()
      << t.genre()
      << t.trackNumber()
      << t.trackNumberString()
      << t.year()
      << t.yearString()
      << t.comment()

      << t.bitrateString()
      << t.lengthString()
      << t.seconds()

      << t.absFilePath()
      << t.lastModified();
120

121
    return(s);
122
}