fb2temp.hpp 2.3 KB

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