From 012034fe67dc3312e78a5f67d552e4da9199161b Mon Sep 17 00:00:00 2001 From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> Date: Tue, 4 Apr 2023 11:12:10 -0400 Subject: [PATCH] misc: migrate the webengine resources from libclient to the client Adds a `--with-engine` option for the resource generator script which will prevent packaging unused resources when building without webengine support. Change-Id: If2f31284ef59166615221235427a53d0df8da2ce --- CMakeLists.txt | 10 ++-- extras/scripts/gen_resources_qrc.py | 46 ++++++++++++++----- .../webengine}/linkify-string.js | 0 .../webengine}/linkify.js | 0 .../webengine}/previewInfo.js | 0 .../{misc => webengine}/previewInterop.js | 0 .../webengine}/qwebchannel.js | 0 src/app/previewengine.cpp | 14 ++++-- src/libclient/web-chatview/.eslintrc.json | 31 ------------- src/libclient/web-chatview/README | 33 ------------- src/libclient/webresource.qrc | 8 ---- 11 files changed, 47 insertions(+), 95 deletions(-) rename {src/libclient/web-chatview => resources/webengine}/linkify-string.js (100%) rename {src/libclient/web-chatview => resources/webengine}/linkify.js (100%) rename {src/libclient/web-chatview => resources/webengine}/previewInfo.js (100%) rename resources/{misc => webengine}/previewInterop.js (100%) rename {src/libclient/web-chatview => resources/webengine}/qwebchannel.js (100%) delete mode 100644 src/libclient/web-chatview/.eslintrc.json delete mode 100644 src/libclient/web-chatview/README delete mode 100644 src/libclient/webresource.qrc diff --git a/CMakeLists.txt b/CMakeLists.txt index dceb45a02..f7fd193ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -115,8 +115,7 @@ if(WITH_WEBENGINE) WebEngineCore WebEngineQuick WebChannel - WebEngineWidgets - ) + WebEngineWidgets) endif() set(CMAKE_CXX_FLAGS @@ -159,14 +158,14 @@ set(PYTHON_EXEC ${Python3_EXECUTABLE}) # changes. # Only include webengine resources if specified. if(WITH_WEBENGINE) - set(GEN_QML_QRC_ARGS "--with-webengine") + set(GEN_QRC_ARGS "--with-webengine") endif() file(GLOB_RECURSE QML_FILES CONFIGURE_DEPENDS ${APP_SRC_DIR}/*) execute_process( COMMAND - ${PYTHON_EXEC} ${SCRIPTS_DIR}/gen_qml_qrc.py ${GEN_QML_QRC_ARGS} + ${PYTHON_EXEC} ${SCRIPTS_DIR}/gen_qml_qrc.py ${GEN_QRC_ARGS} WORKING_DIRECTORY ${APP_SRC_DIR}) set(QML_RESOURCES_QML ${APP_SRC_DIR}/qml.qrc) # Image and misc. resources @@ -176,7 +175,7 @@ file(GLOB_RECURSE RES_FILES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/resources/*) execute_process( - COMMAND ${PYTHON_EXEC} ${SCRIPTS_DIR}/gen_resources_qrc.py + COMMAND ${PYTHON_EXEC} ${SCRIPTS_DIR}/gen_resources_qrc.py ${GEN_QRC_ARGS} WORKING_DIRECTORY ${APP_SRC_DIR}) set(QML_RESOURCES ${APP_SRC_DIR}/resources.qrc) @@ -508,7 +507,6 @@ qt_add_executable( ${COMMON_SOURCES} ${QML_RESOURCES} ${QML_RESOURCES_QML} - ${LIBCLIENT_SRC_DIR}/webresource.qrc ${SFPM_OBJECTS}) foreach(MODULE ${QT_MODULES}) diff --git a/extras/scripts/gen_resources_qrc.py b/extras/scripts/gen_resources_qrc.py index e71478486..279040b77 100644 --- a/extras/scripts/gen_resources_qrc.py +++ b/extras/scripts/gen_resources_qrc.py @@ -49,21 +49,33 @@ def format_qml_prop(prop): ).lower() -# Generate the the resources.qrc file and the JamiResources.qml file -# that will be used to access the resources. -with open(resfile, 'w', encoding='utf-8') as qrc, \ - open(qmlfile, 'w', encoding='utf-8') as qml: - qrc.write('<RCC>\n') - qml.write('pragma Singleton\nimport QtQuick\nQtObject {\n') - for root, _, files in os.walk(resdir): - if len(files): +def path_contains_dir(filepath, dir_str): + """ Return True if the given filepath contains the given directory. """ + # Split the filepath into its components + path_components = os.path.normpath(filepath).split(os.sep) + # Return True if the given directory is in the path + return dir_str in path_components + + +def gen_resources_qrc(with_webengine): + """ Generate the resources.qrc file. """ + with open(resfile, 'w', encoding='utf-8') as qrc, \ + open(qmlfile, 'w', encoding='utf-8') as qml: + qrc.write('<RCC>\n') + qml.write('pragma Singleton\nimport QtQuick\nQtObject {\n') + for root, _, files in os.walk(resdir): + # Skip the webengine directory if we can't use webengine + if not with_webengine and path_contains_dir(root, 'webengine'): + continue prefix = root.rsplit(os.sep, 1)[-1] # add a prefix to the resource file qrc.write(f'\t<qresource prefix="/{prefix}">\n') for filename in files: # use posix separators in the resource path - filepath = os.path.join(root, filename).replace(os.sep, '/') - qrc.write(f'\t\t<file alias="{filename}">{filepath}</file>\n') + filepath = os.path.join( + root, filename).replace(os.sep, '/') + qrc.write( + f'\t\t<file alias="{filename}">{filepath}</file>\n') # only record images/icons as properties if re.match("icons|images", prefix): resource = f'qrc:/{prefix}/{filename}' @@ -73,5 +85,15 @@ with open(resfile, 'w', encoding='utf-8') as qrc, \ f' "{resource}"\n' ) qrc.write('\t</qresource>\n') - qml.write('}') - qrc.write('</RCC>') + qml.write('}') + qrc.write('</RCC>') + + +if __name__ == '__main__': + # We can't use webengine if we're building for macOS app store + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--with-webengine', action='store_true', + default=False, help='Include webengine resources') + args = parser.parse_args() + gen_resources_qrc(args.with_webengine) diff --git a/src/libclient/web-chatview/linkify-string.js b/resources/webengine/linkify-string.js similarity index 100% rename from src/libclient/web-chatview/linkify-string.js rename to resources/webengine/linkify-string.js diff --git a/src/libclient/web-chatview/linkify.js b/resources/webengine/linkify.js similarity index 100% rename from src/libclient/web-chatview/linkify.js rename to resources/webengine/linkify.js diff --git a/src/libclient/web-chatview/previewInfo.js b/resources/webengine/previewInfo.js similarity index 100% rename from src/libclient/web-chatview/previewInfo.js rename to resources/webengine/previewInfo.js diff --git a/resources/misc/previewInterop.js b/resources/webengine/previewInterop.js similarity index 100% rename from resources/misc/previewInterop.js rename to resources/webengine/previewInterop.js diff --git a/src/libclient/web-chatview/qwebchannel.js b/resources/webengine/qwebchannel.js similarity index 100% rename from src/libclient/web-chatview/qwebchannel.js rename to resources/webengine/qwebchannel.js diff --git a/src/app/previewengine.cpp b/src/app/previewengine.cpp index ab91116d9..2b8609be3 100644 --- a/src/app/previewengine.cpp +++ b/src/app/previewengine.cpp @@ -64,11 +64,15 @@ public: channel_->registerObject(QStringLiteral("jsbridge"), &parent_); setWebChannel(channel_); - runJavaScript(Utils::QByteArrayFromFile(":/linkify.js"), QWebEngineScript::MainWorld); - runJavaScript(Utils::QByteArrayFromFile(":/linkify-string.js"), QWebEngineScript::MainWorld); - runJavaScript(Utils::QByteArrayFromFile(":/qwebchannel.js"), QWebEngineScript::MainWorld); - runJavaScript(Utils::QByteArrayFromFile(":/previewInfo.js"), QWebEngineScript::MainWorld); - runJavaScript(Utils::QByteArrayFromFile(":/misc/previewInterop.js"), + runJavaScript(Utils::QByteArrayFromFile(":webengine/linkify.js"), + QWebEngineScript::MainWorld); + runJavaScript(Utils::QByteArrayFromFile(":webengine/linkify-string.js"), + QWebEngineScript::MainWorld); + runJavaScript(Utils::QByteArrayFromFile(":webengine/qwebchannel.js"), + QWebEngineScript::MainWorld); + runJavaScript(Utils::QByteArrayFromFile(":webengine/previewInfo.js"), + QWebEngineScript::MainWorld); + runJavaScript(Utils::QByteArrayFromFile(":webengine/previewInterop.js"), QWebEngineScript::MainWorld); } diff --git a/src/libclient/web-chatview/.eslintrc.json b/src/libclient/web-chatview/.eslintrc.json deleted file mode 100644 index 746c54a40..000000000 --- a/src/libclient/web-chatview/.eslintrc.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "env": { - "browser": true - }, - "plugins": ["html"], - "extends": "eslint:recommended", - "parserOptions": { - "ecmaVersion": 6 - }, - "rules": { - "indent": [ - "error", - 4 - ], - "linebreak-style": [ - "error", - "unix" - ], - "quotes": [ - "error", - "double" - ], - "semi": [ - "error", - "never" - ], - "no-inner-declarations": [ - 0 - ] - } -} diff --git a/src/libclient/web-chatview/README b/src/libclient/web-chatview/README deleted file mode 100644 index 75b6bf9fe..000000000 --- a/src/libclient/web-chatview/README +++ /dev/null @@ -1,33 +0,0 @@ -# README - chatview - -The chatview runs under a WebKit GTK view. It is written using web technologies -(HTML5/CSS3/JS) and is responsible for displaying everything that deals with the -navbar, the messages, and the message bar. - -## Contributing - syntax - -We have a set of ESLint rules that define clear syntax rules (web/.eslintrc.json). - -You will need the following tools: - -- ESLint (The pluggable linting utility for JavaScript and JSX) - https://eslint.org/ -- ESLint HTML plugin (eslint-plugin-html) - https://www.npmjs.com/package/eslint-plugin-html - -Before pushing a patch, make sure that it passes ESLint: -$ eslint chatview.html - -Most trivial issues can be fixed using -$ eslint chatview.js --fix - -We will not accept patches introducing non-ESLint-compliant code. - -## WebKit GTK - -Everything runs under WebKit GTK, that is if you need to write browser specific -code, you will only need to support WebKit (CSS -webkit- prefix). - -Do not use querySelector if getElementById or getElementByClassName can be used -instead. querySelector doesn't always make the code easier and has very bad -performances. diff --git a/src/libclient/webresource.qrc b/src/libclient/webresource.qrc deleted file mode 100644 index 33f1b7be1..000000000 --- a/src/libclient/webresource.qrc +++ /dev/null @@ -1,8 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file alias="linkify.js">web-chatview/linkify.js</file> - <file alias="linkify-string.js">web-chatview/linkify-string.js</file> - <file alias="previewInfo.js">web-chatview/previewInfo.js</file> - <file alias="qwebchannel.js">web-chatview/qwebchannel.js</file> - </qresource> -</RCC> -- GitLab