defuze.me  Client
audiotrack.hpp
00001 /**************************************************************************
00002 ** defuze.me Epitech Innovative Project
00003 **
00004 ** Copyright 2010-2011
00005 **   Athena Calmettes - Jocelyn De La Rosa - Francois Gaillard
00006 **   Adrien Jarthon - Alexandre Moore - Luc Peres - Arnaud Sellier
00007 **
00008 ** All rights reserved.
00009 **************************************************************************/
00010 
00011 namespace Library {
00012     class AudioTrack;
00013 }
00014 
00015 #ifndef AUDIOTRACK_HPP
00016 #define AUDIOTRACK_HPP
00017 
00018 #include "source.hpp"
00019 #include <QVariantMap>
00020 #include <QMap>
00021 #include <QHash>
00022 #include <QObject>
00023 #include <QImage>
00024 #include <QMutex>
00025 #include <QPixmap>
00026 #include "audiotrackloader.hpp"
00027 
00028 namespace Library
00029 {
00034     class AudioTrack : public QObject
00035     {
00036         Q_OBJECT
00037     public:
00038         AudioTrack(const QString &path, Source *source);
00039         static AudioTrack*  getTrack(int id);           
00040         static bool         isLoaded(int id);           
00041         static void         loadAndCall(int id, QObject* obj, const char* slot);  
00042         const QString&      getTitle() const;
00043         const QString&      getArtist() const;
00044         const QString&      getAlbumArtist() const;
00045         const QString&      getAlbum() const;
00046         const QString&      getGenre() const;
00047         const QString&      getPath() const;
00048         const QString       getAbsolutePath() const;        
00049         int                 getUid() const;                 
00050         int                 getYear() const;
00051         int                 getTrack() const;               
00052         int                 getDuration() const;            
00053         const QVariant      getAttribute(const QString& name) const;    
00054         Source*             getSource() const;
00055         void                setSource(Source *source);
00056         void                setTitle(const QString& title);
00057         void                setArtist(const QString& artist);
00058         void                setAlbumArtist(const QString& albumArtist);
00059         void                setAlbum(const QString& album);
00060         void                setGenre(const QString& genre);
00061         void                setPath(const QString &path);
00062         void                setUid(int uid);
00063         void                setYear(int year);
00064         void                setTrack(int track);
00065         void                setDuration(int duration);
00066         void                setAttribute(const QString& name, const QVariant& value);
00067         bool                newRecord() const;          
00068         bool                valid() const;              
00069         void                save();                     
00070         void                remove();                   
00071         static const QMap<int, AudioTrack*>&    getTracksMap();
00072         const QImage&       getAlbumArt() const;        
00073         const QPixmap&      getAlbumArtAtSize(int size);    
00074         const QImage&       getArtistArt() const;       
00075         const QPixmap&      getArtistArtAtSize(int size);   
00076 
00077     signals:
00078         void                removed(Library::AudioTrack*);
00079 
00080     private:
00081         AudioTrack(int id);
00082         void                extractTags();
00083         void                extractCover();
00084 
00085         Source              *source;
00086         int                 uid, year, track, duration;
00087         QString             title, artist, albumArtist, album, genre, path;
00088         QVariantMap         attributes;
00089         QImage              image;
00090         QHash<int, QPixmap> resizedImages;
00091 
00092         static QMap<int, AudioTrack*>   tracksMap;
00093         static QMap<int, AudioTrackLoader*> trackLoaders;
00094         static QImage                   defaultImage, artistImage;
00095         static QHash<int, QPixmap>      resizedArtist;
00096         static QMutex                   taglibMutex;
00097         static QMutex                   trackMapMutex;
00098     };
00099 }
00100 
00101 #endif // AUDIOTRACK_HPP