00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef INPUTSOURCE_H
00022 #define INPUTSOURCE_H
00023
00024 #include <QObject>
00025 #include <QString>
00026 #include <QStringList>
00027 #include <QIODevice>
00028 #include <QMap>
00029 #include <QHash>
00030 #include "qmmp.h"
00031 #include "inputsourcefactory.h"
00032
00036 class InputSource : public QObject
00037 {
00038 Q_OBJECT
00039 public:
00045 InputSource(const QString &url, QObject *parent = 0);
00050 virtual QIODevice *ioDevice() = 0;
00055 virtual bool initialize() = 0;
00059 virtual bool isReady() = 0;
00063 virtual QString contentType() const;
00067 const QString url() const;
00071 qint64 offset() const;
00075 void setOffset(qint64 offset);
00081 void addMetaData(const QMap<Qmmp::MetaData, QString> &metaData);
00085 bool hasMetaData() const;
00090 QMap<Qmmp::MetaData, QString> takeMetaData();
00097 static InputSource *create(const QString &url, QObject *parent = 0);
00101 static QList<InputSourceFactory *> *factories();
00106 static QString file(InputSourceFactory *factory);
00110 static QStringList protocols();
00111
00112 signals:
00116 void ready();
00120 void error();
00121
00122 private:
00123 QString m_url;
00124 qint64 m_offset;
00125 QMap<Qmmp::MetaData, QString> m_metaData;
00126 bool m_hasMetaData;
00127 static void checkFactories();
00128 static QList<InputSourceFactory*> *m_factories;
00129 static QHash <InputSourceFactory*, QString> *m_files;
00130 };
00131
00132 #endif // INPUTSOURCE_H