qspwebengineurlschemehandler.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #include "qspwebengineurlschemehandler.h"
  2. #include <QBuffer>
  3. #include <QUrl>
  4. #include <QMimeDatabase>
  5. #include <QMimeType>
  6. #include <QFile>
  7. #include "comtools.h"
  8. QspWebEngineUrlSchemeHandler::QspWebEngineUrlSchemeHandler(QObject *parent) : QWebEngineUrlSchemeHandler(parent)
  9. {
  10. }
  11. void QspWebEngineUrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob *request)
  12. {
  13. const QUrl url = request->requestUrl();
  14. QString url_str = url.toString();
  15. QBuffer *buffer = new QBuffer;
  16. connect(request, SIGNAL(destroyed()), buffer, SLOT(deleteLater()));
  17. buffer->open(QIODevice::WriteOnly);
  18. if(url_str.compare("qsp:" , Qt::CaseInsensitive) == 0 || url_str.compare("qsp:/" , Qt::CaseInsensitive) == 0)
  19. {
  20. if(m_isUseHtml)
  21. {
  22. QString replystr;
  23. replystr.append("<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<style>\nbody {\n");
  24. if(m_backColor.isValid())
  25. replystr.append(QString("background-color: %1;\n").arg(m_backColor.name()));
  26. if(m_fontColor.isValid())
  27. replystr.append(QString("color: %1;\n").arg(m_fontColor.name()));
  28. if(m_fontType == 1) //set in qsp
  29. replystr.append(QString("font-family: %1;\n").arg(m_font.family()));
  30. if(m_fontType == 2) //set by user
  31. replystr.append(QString("font-family: %1 !important;\n").arg(m_font.family()));
  32. if(m_sizeType == 1) //set in qsp
  33. replystr.append(QString("font-size: %1pt;\n").arg(m_font.pointSize()));
  34. if(m_sizeType == 2) //set by user
  35. replystr.append(QString("font-size: %1pt !important;\n").arg(m_font.pointSize()));
  36. if(!m_bmpBg.isEmpty())
  37. replystr.append(QString("background: url(%1) no-repeat center center fixed;\nbackground-size: cover;\n").arg(m_bmpBg));
  38. if(m_linkColor.isValid())
  39. replystr.append(QString("}\na:link {\ncolor: %1;\n").arg(m_linkColor.name()));
  40. replystr.append("}\n</style>\n");
  41. if(m_isCustomCSS)
  42. replystr.append("<link rel=\"stylesheet\" type=\"text/css\" href=\"custom.css\">\n");
  43. replystr.append("<script src=\"qrc:///qtwebchannel/qwebchannel.js\"></script>\n");
  44. replystr.append("<script type=\"text/javascript\"> \nvar qsp; \ndocument.addEventListener(\"DOMContentLoaded\", function () { \nnew QWebChannel(qt.webChannelTransport, function(channel) { \nqsp = channel.objects.qsp; \n}); \n});\n</script>\n");
  45. replystr.append(m_head);
  46. replystr.append("</head>\n<body>\n");
  47. replystr.append(m_text);
  48. replystr.append("</body>\n</html>");
  49. buffer->write(replystr.toUtf8());
  50. buffer->close();
  51. request->reply("text/html", buffer);
  52. }
  53. else
  54. {
  55. buffer->write(m_text.toUtf8());
  56. buffer->close();
  57. request->reply("text/plain; charset=utf-8", buffer);
  58. }
  59. }
  60. else
  61. {
  62. QString tmpurl = url_str.mid(5);
  63. if(tmpurl.contains('#') && !tmpurl.isEmpty())
  64. {
  65. tmpurl = tmpurl.split('#').at(0);
  66. }
  67. tmpurl = QByteArray::fromPercentEncoding(tmpurl.toUtf8());
  68. QString path = QSPTools::GetCaseInsensitiveFilePath(m_path, tmpurl);
  69. QMimeDatabase db;
  70. QMimeType type = db.mimeTypeForFile(m_path + path);
  71. QFile file( m_path + path );
  72. if(file.open(QIODevice::ReadOnly))
  73. {
  74. buffer->write(file.readAll());
  75. }
  76. buffer->close();
  77. file.close();
  78. request->reply(type.name().toUtf8(), buffer);
  79. }
  80. }
  81. void QspWebEngineUrlSchemeHandler::SetPlainText(const QString &text)
  82. {
  83. m_isUseHtml = false;
  84. m_text= text;
  85. }
  86. void QspWebEngineUrlSchemeHandler::SetHtml(const QString &text)
  87. {
  88. m_isUseHtml = true;
  89. m_text =text;
  90. }
  91. void QspWebEngineUrlSchemeHandler::SetGamePath(const QString &path)
  92. {
  93. m_path = path;
  94. }
  95. void QspWebEngineUrlSchemeHandler::SetLinkColor(const QColor &color)
  96. {
  97. m_linkColor = color;
  98. }
  99. void QspWebEngineUrlSchemeHandler::SetBackgroundColor(const QColor &color)
  100. {
  101. m_backColor = color;
  102. }
  103. void QspWebEngineUrlSchemeHandler::SetForegroundColor(const QColor &color)
  104. {
  105. m_fontColor = color;
  106. }
  107. void QspWebEngineUrlSchemeHandler::SetBackgroundImage(const QString &path)
  108. {
  109. m_bmpBg = path;
  110. }
  111. void QspWebEngineUrlSchemeHandler::SetTextFont(const QFont &new_font)
  112. {
  113. m_font = new_font;
  114. }
  115. void QspWebEngineUrlSchemeHandler::SetHead(const QString &head)
  116. {
  117. m_head = head;
  118. }
  119. void QspWebEngineUrlSchemeHandler::SetFontType(const int fontType)
  120. {
  121. m_fontType = fontType;
  122. }
  123. void QspWebEngineUrlSchemeHandler::SetSizeType(const int sizeType)
  124. {
  125. m_sizeType = sizeType;
  126. }
  127. void QspWebEngineUrlSchemeHandler::SetCustomCSS(bool customCSS)
  128. {
  129. m_isCustomCSS = customCSS;
  130. }