fb2temp.hpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #ifndef FB2TEMP_H
  2. #define FB2TEMP_H
  3. #include <QByteArray>
  4. #include <QList>
  5. #include <QString>
  6. #include <QTemporaryFile>
  7. #include <QNetworkDiskCache>
  8. class Fb2TemporaryFile : public QTemporaryFile
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit Fb2TemporaryFile(const QString &name, const QString &hash = QString());
  13. inline qint64 write(const QByteArray &data);
  14. const QString & hash() const { return m_hash; }
  15. const QString & name() const { return m_name; }
  16. static QString md5(const QByteArray &data);
  17. private:
  18. const QString m_name;
  19. QString m_hash;
  20. };
  21. class Fb2TemporaryList : public QList<Fb2TemporaryFile*>
  22. {
  23. public:
  24. explicit Fb2TemporaryList();
  25. virtual ~Fb2TemporaryList();
  26. bool exists(const QString &name) const;
  27. Fb2TemporaryFile & get(const QString &name, const QString &hash = QString());
  28. QString set(const QString &name, const QByteArray &data, const QString &hash = QString());
  29. QString hash(const QString &path) const;
  30. QString name(const QString &hash) const;
  31. QString data(const QString &name) const;
  32. };
  33. typedef QListIterator<Fb2TemporaryFile*> Fb2TemporaryIterator;
  34. class Fb2NetworkDiskCache : public QNetworkDiskCache
  35. {
  36. public:
  37. explicit Fb2NetworkDiskCache(QObject *parent = 0) : QNetworkDiskCache(parent) {}
  38. QNetworkCacheMetaData metaData(const QUrl &url);
  39. QIODevice *data(const QUrl &url);
  40. };
  41. #if 0
  42. class Fb2ImageReply : public QNetworkReply
  43. {
  44. Q_OBJECT
  45. public:
  46. explicit Fb2ImageReply(QNetworkAccessManager::Operation op, const QNetworkRequest &request, const QByteArray &data);
  47. void abort();
  48. qint64 bytesAvailable() const;
  49. bool isSequential() const;
  50. protected:
  51. qint64 readData(char *data, qint64 maxSize);
  52. private:
  53. QByteArray content;
  54. qint64 offset;
  55. };
  56. class Fb2NetworkAccessManager : public QNetworkAccessManager
  57. {
  58. Q_OBJECT
  59. public:
  60. explicit Fb2NetworkAccessManager(QObject *parent = 0);
  61. void insert(const QString &file, const QByteArray &data);
  62. protected:
  63. virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData = 0);
  64. private:
  65. QNetworkReply *imageRequest(Operation op, const QNetworkRequest &request);
  66. private:
  67. typedef QMap<QString, QByteArray> ImageMap;
  68. ImageMap m_images;
  69. };
  70. #endif
  71. #endif // FB2TEMP_H