fb2temp.hpp 2.2 KB

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