File indexing completed on 2024-06-02 05:30:37
0001 /* 0002 SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "webengineexporthtmlpagejob.h" 0008 #include <QTemporaryFile> 0009 #include <QWebEngineView> 0010 0011 using namespace WebEngineViewer; 0012 template<typename Arg, typename R, typename C> 0013 struct InvokeWrapper { 0014 R *receiver; 0015 void (C::*memberFun)(Arg); 0016 void operator()(Arg result) 0017 { 0018 (receiver->*memberFun)(result); 0019 } 0020 }; 0021 0022 template<typename Arg, typename R, typename C> 0023 InvokeWrapper<Arg, R, C> invokeWebEngineExportHtml(R *receiver, void (C::*memberFun)(Arg)) 0024 { 0025 InvokeWrapper<Arg, R, C> wrapper = {receiver, memberFun}; 0026 return wrapper; 0027 } 0028 0029 WebEngineExportHtmlPageJob::WebEngineExportHtmlPageJob(QObject *parent) 0030 : QObject(parent) 0031 { 0032 } 0033 0034 WebEngineExportHtmlPageJob::~WebEngineExportHtmlPageJob() = default; 0035 0036 void WebEngineExportHtmlPageJob::start() 0037 { 0038 if (!mEngineView) { 0039 Q_EMIT failed(); 0040 deleteLater(); 0041 return; 0042 } 0043 mEngineView->page()->toHtml(invokeWebEngineExportHtml(this, &WebEngineExportHtmlPageJob::slotSaveHtmlToPage)); 0044 } 0045 0046 void WebEngineExportHtmlPageJob::slotSaveHtmlToPage(const QString &text) 0047 { 0048 QTemporaryFile temporaryFile; 0049 temporaryFile.setAutoRemove(false); 0050 if (!temporaryFile.open()) { 0051 Q_EMIT failed(); 0052 deleteLater(); 0053 return; 0054 } 0055 QTextStream stream(&temporaryFile); 0056 QString newText = text; 0057 newText.replace(QLatin1StringView("<head>"), QLatin1StringView("<head><meta charset=\"UTF-8\">")); 0058 stream << newText; 0059 temporaryFile.close(); 0060 // We need to remove this temporary file 0061 Q_EMIT success(temporaryFile.fileName()); 0062 deleteLater(); 0063 } 0064 0065 QWebEngineView *WebEngineExportHtmlPageJob::engineView() const 0066 { 0067 return mEngineView; 0068 } 0069 0070 void WebEngineExportHtmlPageJob::setEngineView(QWebEngineView *engineView) 0071 { 0072 mEngineView = engineView; 0073 } 0074 0075 #include "moc_webengineexporthtmlpagejob.cpp"