From 2fc8661d08656adc03f1ce803ad172fc96a54681 Mon Sep 17 00:00:00 2001
From: Amin Bandali <amin.bandali@savoirfairelinux.com>
Date: Mon, 19 Sep 2022 11:19:49 -0400
Subject: [PATCH] misc: Clean up repository root.

This is the first in a series for cleaning up the top directory (root)
of the repository and move various files/folders into nicely organized
directory structures.

GitLab: #749
Change-Id: If59b74fff981df242bc26e62a070bdb81d7baded
---
 .cqfdrc                                       |   2 +-
 .gitignore                                    |   6 +-
 .gitmodules                                   |   4 +-
 CMakeLists.txt                                |  73 +++--
 docker/Dockerfile                             |   1 -
 .../build/cmake}/cmake_uninstall.cmake.in     |   0
 .../build/cmake}/macos_qt_deploy.cmake        |   0
 .../build/cmake/modules}/FindLibJami.cmake    |   0
 .../build/cmake}/time_stamp_check.cmake       |   0
 .../build/cmake}/time_stamp_create.cmake      |   0
 .../build/cmake}/windows_daemon_deploy.cmake  |   4 +-
 .../build/cmake}/windows_qt_deploy.cmake      |   0
 .../docker/Dockerfile.client-qt-gnulinux      |   0
 .../data/jami-qt.appdata.xml                  |   0
 .../data/jami-qt.desktop                      |   0
 .../packaging/update/sparkle}/Sparkle         |   0
 .../packaging/update/sparkle}/dsa_pub.pem     |   0
 .../packaging/update/sparkle}/sign_update.sh  |   0
 .../update/sparkle}/sparkle-xml-updater.sh    |   0
 .../packaging/wix/License.rtf                 |   0
 ico.rc => extras/packaging/wix/ico.rc         |   0
 qt.conf => extras/packaging/wix/qt.conf       |   0
 .../scripts/gen-dmg.json                      |   0
 .../scripts}/gen-qrc-without-webengine.py     |   5 +-
 extras/scripts/gen-resources.py               |  58 ++++
 {scripts => extras/scripts}/notarize.sh       |   0
 .../scripts/run-tests.sh                      |   0
 .../scripts/sign-deploy-appstore.sh           |   0
 .../scripts/update-translations.ps1           |   0
 .../scripts/update-translations.py            |   0
 gen-resources.py                              |  35 ---
 jami-qt.desktop.autostart                     |  12 -
 jami-qt.sln                                   | 280 ------------------
 qml.qrc                                       | 211 -------------
 .clang-format => src/.clang-format            |   0
 .../DataTransferMessageDelegate.qml           |   2 +-
 .../emojipicker/EmojiPicker.qml               |   6 +-
 src/app/constant/JamiQmlUtils.qml             |   6 +-
 src/app/mainapplication.cpp                   |   4 +-
 .../mainview/components/ChatViewFooter.qml    |   2 +-
 src/app/qml.qrc                               | 211 +++++++++++++
 src/app/qmlregister.cpp                       |  10 +-
 .../app/qtquickcontrols2.conf                 |   0
 src/app/utils.cpp                             |   2 +-
 src/libclient/CMakeLists.txt                  |   5 +-
 45 files changed, 343 insertions(+), 596 deletions(-)
 delete mode 120000 docker/Dockerfile
 rename {cmake => extras/build/cmake}/cmake_uninstall.cmake.in (100%)
 rename {cmake => extras/build/cmake}/macos_qt_deploy.cmake (100%)
 rename {cmake => extras/build/cmake/modules}/FindLibJami.cmake (100%)
 rename {cmake => extras/build/cmake}/time_stamp_check.cmake (100%)
 rename {cmake => extras/build/cmake}/time_stamp_create.cmake (100%)
 rename {cmake => extras/build/cmake}/windows_daemon_deploy.cmake (91%)
 rename {cmake => extras/build/cmake}/windows_qt_deploy.cmake (100%)
 rename docker/Dockerfile_ubuntu_20.04 => extras/build/docker/Dockerfile.client-qt-gnulinux (100%)
 rename jami-qt.appdata.xml => extras/data/jami-qt.appdata.xml (100%)
 rename jami-qt.desktop => extras/data/jami-qt.desktop (100%)
 rename {sparkle => extras/packaging/update/sparkle}/Sparkle (100%)
 rename {sparkle => extras/packaging/update/sparkle}/dsa_pub.pem (100%)
 rename {sparkle => extras/packaging/update/sparkle}/sign_update.sh (100%)
 rename {sparkle => extras/packaging/update/sparkle}/sparkle-xml-updater.sh (100%)
 rename License.rtf => extras/packaging/wix/License.rtf (100%)
 rename ico.rc => extras/packaging/wix/ico.rc (100%)
 rename qt.conf => extras/packaging/wix/qt.conf (100%)
 rename scripts/generateDMG.json => extras/scripts/gen-dmg.json (100%)
 rename {scripts => extras/scripts}/gen-qrc-without-webengine.py (84%)
 create mode 100644 extras/scripts/gen-resources.py
 rename {scripts => extras/scripts}/notarize.sh (100%)
 rename compile_tests.sh => extras/scripts/run-tests.sh (100%)
 rename scripts/signDeployAppStore.sh => extras/scripts/sign-deploy-appstore.sh (100%)
 rename update-translations.ps1 => extras/scripts/update-translations.ps1 (100%)
 rename update-translations.py => extras/scripts/update-translations.py (100%)
 delete mode 100644 gen-resources.py
 delete mode 100644 jami-qt.desktop.autostart
 delete mode 100644 jami-qt.sln
 delete mode 100644 qml.qrc
 rename .clang-format => src/.clang-format (100%)
 create mode 100644 src/app/qml.qrc
 rename qtquickcontrols2.conf => src/app/qtquickcontrols2.conf (100%)

diff --git a/.cqfdrc b/.cqfdrc
index bc7f2ab0d..8f5d3a8f9 100644
--- a/.cqfdrc
+++ b/.cqfdrc
@@ -4,4 +4,4 @@ name='jami'
 
 [build]
 ; default behaviour
-command='cd client-qt && ./compile_tests.sh'
\ No newline at end of file
+command='cd client-qt && ./extras/scripts/run-tests.sh'
diff --git a/.gitignore b/.gitignore
index 38dba2bf7..36d779993 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,21 +13,21 @@ release/
 beta/
 *.dll
 *.qm
-build/
 nuget.exe
 *.autosave
 changelog.html
 obj/
 build/
 build-local/
+install-local/
 *.vcxproj
 *.vcxproj.filters
 *qmlcache.qrc
-qml_without_webengine.qrc
 .deploy.stamp
 
 # auto-gen files
-resources.qrc
+src/app/qml_without_webengine.qrc
+src/app/resources.qrc
 src/app/constant/JamiResources.qml
 
 # macOS
diff --git a/.gitmodules b/.gitmodules
index 28b78a77b..ddfbe1ddd 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -2,8 +2,8 @@
 	path = 3rdparty/qrencode-win32
 	url = https://github.com/BlueDragon747/qrencode-win32.git
 	ignore = dirty
-[submodule "sparkle/Sparkle"]
-	path = sparkle/Sparkle
+[submodule "extras/packaging/update/sparkle/Sparkle"]
+	path = extras/packaging/update/sparkle/Sparkle
 	url = https://github.com/sparkle-project/Sparkle.git
 	ignore = dirty
 [submodule "3rdparty/SortFilterProxyModel"]
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f105bb5fa..4241022b6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,6 +38,20 @@ set(CMAKE_AUTORCC ON)
 set(CMAKE_AUTOUIC ON)
 set(CMAKE_INCLUDE_CURRENT_DIR ON)
 
+# Main project directories:
+# src
+set(LIBCLIENT_SRC_DIR ${PROJECT_SOURCE_DIR}/src/libclient)
+set(APP_SRC_DIR ${PROJECT_SOURCE_DIR}/src/app)
+# doc
+set(DOC_DIR ${PROJECT_SOURCE_DIR}/doc)
+# extras
+set(EXTRAS_DIR ${PROJECT_SOURCE_DIR}/extras)
+set(DATA_DIR ${EXTRAS_DIR}/data)
+set(PACKAGING_DIR ${EXTRAS_DIR}/packaging)
+set(SCRIPTS_DIR ${EXTRAS_DIR}/scripts)
+# tests
+set(TESTS_DIR ${PROJECT_SOURCE_DIR}/tests)
+
 # Here we let find_package(<PackageName>...) try to find Qt 6,
 # If it is found, find_package will succeed, and the CMake variable
 # QT_VERSION_MAJOR will be defined 6.
@@ -54,7 +68,6 @@ if (${QT_VERSION_MAJOR} STRLESS 6)
 endif()
 
 # libjamiclient
-set(LIBCLIENT_SRC_DIR ${PROJECT_SOURCE_DIR}/src/libclient)
 add_subdirectory(${LIBCLIENT_SRC_DIR})
 
 set(QT_MODULES
@@ -84,14 +97,13 @@ if(WITH_WEBENGINE)
     WebEngineWidgets)
 endif()
 
-set(APP_SRC_DIR ${PROJECT_SOURCE_DIR}/src/app)
 set(CMAKE_CXX_FLAGS
   ${CMAKE_CXX_FLAGS} ${Qt6Widgets_EXECUTABLE_COMPILE_FLAGS})
 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH true)
 
 # jami-daemon
 set(CMAKE_MODULE_PATH
-  ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+  ${CMAKE_MODULE_PATH} "${EXTRAS_DIR}/build/cmake/modules")
 find_package(LibJami REQUIRED)
 if(LIBJAMI_FOUND)
   include_directories(${LIBJAMI_INCLUDE_DIRS})
@@ -101,16 +113,16 @@ include(FindPython3)
 find_package(Python3 COMPONENTS Interpreter)
 set(PYTHON_EXEC ${Python3_EXECUTABLE})
 
-set(QML_RESOURCES ${PROJECT_SOURCE_DIR}/resources.qrc)
+set(QML_RESOURCES ${APP_SRC_DIR}/resources.qrc)
 if(WITH_WEBENGINE)
-  set(QML_RESOURCES_QML ${PROJECT_SOURCE_DIR}/qml.qrc)
+  set(QML_RESOURCES_QML ${APP_SRC_DIR}/qml.qrc)
 else()
   execute_process(
     COMMAND
-    ${PYTHON_EXEC} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/gen-qrc-without-webengine.py
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+    ${PYTHON_EXEC} ${SCRIPTS_DIR}/gen-qrc-without-webengine.py
+    WORKING_DIRECTORY ${APP_SRC_DIR})
   set(QML_RESOURCES_QML
-    ${PROJECT_SOURCE_DIR}/qml_without_webengine.qrc)
+    ${APP_SRC_DIR}/qml_without_webengine.qrc)
 endif()
 
 if (APPLE)
@@ -131,8 +143,8 @@ file(GLOB_RECURSE
   RES_FILES CONFIGURE_DEPENDS
   ${PROJECT_SOURCE_DIR}/resources/*)
 execute_process(
-  COMMAND ${PYTHON_EXEC} ${PROJECT_SOURCE_DIR}/gen-resources.py
-  WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
+  COMMAND ${PYTHON_EXEC} ${SCRIPTS_DIR}/gen-resources.py
+  WORKING_DIRECTORY ${APP_SRC_DIR})
 
 # library compatibility (boost, libnotify, etc.)
 add_definitions(-DQT_NO_KEYWORDS)
@@ -402,13 +414,13 @@ else() # APPLE
     MACOSX_PACKAGE_LOCATION Resources)
   if(ENABLE_SPARKLE)
     message("Sparkle auto-update enabled")
+    set(sparkle_dir "${PACKAGING_DIR}/update/sparkle")
     find_library(SPARKLE_FRAMEWORK
       NAMES Sparkle
-      HINTS ${CMAKE_CURRENT_SOURCE_DIR}/sparkle)
+      HINTS ${sparkle_dir})
     add_definitions(-DENABLE_SPARKLE)
     message("Sparkle is here:" ${SPARKLE_FRAMEWORK})
-    set(PUBLIC_KEY_PATH
-      "${CMAKE_CURRENT_SOURCE_DIR}/sparkle/dsa_pub.pem")
+    set(PUBLIC_KEY_PATH "${sparkle_dir}/dsa_pub.pem")
     set_source_files_properties(
       ${PUBLIC_KEY_PATH}
       PROPERTIES
@@ -489,7 +501,7 @@ if(MSVC)
     "${JAMI_OUTPUT_DIRECTORY_RELEASE}")
 
   # executable icon
-  target_sources(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/ico.rc)
+  target_sources(${PROJECT_NAME} PRIVATE ${PACKAGING_DIR}/wix/ico.rc)
 
   # translations
   if(Qt${QT_VERSION_MAJOR}LinguistTools_FOUND)
@@ -516,7 +528,7 @@ if(MSVC)
     POST_BUILD
     WORKING_DIRECTORY "$<TARGET_FILE_DIR:${PROJECT_NAME}>"
     COMMAND ${CMAKE_COMMAND} -DTIME_STAMP_FILE=${TIME_STAMP_FILE}
-    -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/time_stamp_check.cmake)
+    -P ${EXTRAS_DIR}/build/cmake/time_stamp_check.cmake)
 
   # copy runtime files and run windeployqt on target and deploy Qt libs
   add_custom_command(
@@ -527,7 +539,8 @@ if(MSVC)
     -DCOPY_TO_PATH=$<TARGET_FILE_DIR:${PROJECT_NAME}>
     -DDRING_PATH=${DRING}
     -DPROJECT_ROOT_DIR=${PROJECT_SOURCE_DIR}
-    -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/windows_daemon_deploy.cmake)
+    -DPACKAGING_DIR=${PACKAGING_DIR}
+    -P ${EXTRAS_DIR}/build/cmake/windows_daemon_deploy.cmake)
 
   add_custom_command(
     TARGET ${PROJECT_NAME}
@@ -537,7 +550,7 @@ if(MSVC)
     -DWIN_DEPLOY_QT_PATH=${CMAKE_PREFIX_PATH}/bin
     -DQML_SRC_DIR=${APP_SRC_DIR}
     -DEXE_NAME=$<TARGET_FILE:${PROJECT_NAME}>
-    -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/windows_qt_deploy.cmake)
+    -P ${EXTRAS_DIR}/build/cmake/windows_qt_deploy.cmake)
 
   # create time stamp
   add_custom_command(
@@ -545,7 +558,7 @@ if(MSVC)
     POST_BUILD
     WORKING_DIRECTORY "$<TARGET_FILE_DIR:${PROJECT_NAME}>"
     COMMAND ${CMAKE_COMMAND} -DTIME_STAMP_FILE=${TIME_STAMP_FILE}
-    -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/time_stamp_create.cmake)
+    -P ${EXTRAS_DIR}/build/cmake/time_stamp_create.cmake)
 
   # executable name
   set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "Jami")
@@ -572,13 +585,13 @@ elseif (NOT APPLE)
   # Install .desktop in XDG desktop direcory so that it is recognized
   # by the system.
   install(
-    FILES ${PROJECT_SOURCE_DIR}/jami-qt.desktop
+    FILES ${DATA_DIR}/jami-qt.desktop
     DESTINATION ${JAMI_DATA_PREFIX}/applications)
 
   # Install .desktop in the jami-qt data directory, so that it can be
   # copied to the autostart directory by the client.
   install(
-    FILES ${PROJECT_SOURCE_DIR}/jami-qt.desktop
+    FILES ${DATA_DIR}/jami-qt.desktop
     DESTINATION "${JAMI_DATA_PREFIX}/${PROJECT_NAME}"
     PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) # 644
 
@@ -614,7 +627,7 @@ elseif (NOT APPLE)
     RENAME jami.xpm)
 
   install(
-    FILES jami-qt.appdata.xml
+    FILES ${DATA_DIR}/jami-qt.appdata.xml
     DESTINATION ${CMAKE_INSTALL_PREFIX}/share/metainfo)
 
   # Install 'jami' launcher that automatically chooses between clients
@@ -633,14 +646,14 @@ elseif (NOT APPLE)
   find_program(dot "dot")
   if(Doxygen_FOUND AND dot)
     configure_file(
-      ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in
-      ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile
+      ${DOC_DIR}/Doxyfile.in
+      ${DOC_DIR}/Doxyfile
       @ONLY)
     add_custom_target(
       doc
       COMMAND
-      ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile
-      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc
+      ${DOXYGEN_EXECUTABLE} ${DOC_DIR}/Doxyfile
+      WORKING_DIRECTORY ${DOC_DIR}
       COMMENT "Generating API documentation with Doxygen"
       VERBATIM)
 
@@ -650,7 +663,7 @@ elseif (NOT APPLE)
       TARGET doc
       PRE_BUILD
       COMMAND
-      ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/README ${CMAKE_CURRENT_SOURCE_DIR}/doc/README.md)
+      ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/README ${DOC_DIR}/README.md)
   endif()
 
   # translations
@@ -672,7 +685,7 @@ elseif (NOT APPLE)
 
   # uninstall rule
   configure_file(
-    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
+    "${EXTRAS_DIR}/build/cmake/cmake_uninstall.cmake.in"
     "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
     IMMEDIATE
     @ONLY)
@@ -740,15 +753,15 @@ else()
                              -DEXE_NAME="${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app"
                              -DSPARKLE_PATH=${SPARKLE_FRAMEWORK}
                              -DENABLE_SPARKLE=${ENABLE_SPARKLE}
-                             -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/macos_qt_deploy.cmake)
+                             -P ${EXTRAS_DIR}/build/cmake/macos_qt_deploy.cmake)
       endif()
 endif()
 
 qt_import_qml_plugins(${PROJECT_NAME})
 qt_finalize_executable(${PROJECT_NAME})
 
-# test
+# tests
 if(ENABLE_TESTS)
   message("Add Jami tests")
-  add_subdirectory(tests)
+  add_subdirectory(${TESTS_DIR})
 endif()
diff --git a/docker/Dockerfile b/docker/Dockerfile
deleted file mode 120000
index 88804abf1..000000000
--- a/docker/Dockerfile
+++ /dev/null
@@ -1 +0,0 @@
-Dockerfile_ubuntu_20.04
\ No newline at end of file
diff --git a/cmake/cmake_uninstall.cmake.in b/extras/build/cmake/cmake_uninstall.cmake.in
similarity index 100%
rename from cmake/cmake_uninstall.cmake.in
rename to extras/build/cmake/cmake_uninstall.cmake.in
diff --git a/cmake/macos_qt_deploy.cmake b/extras/build/cmake/macos_qt_deploy.cmake
similarity index 100%
rename from cmake/macos_qt_deploy.cmake
rename to extras/build/cmake/macos_qt_deploy.cmake
diff --git a/cmake/FindLibJami.cmake b/extras/build/cmake/modules/FindLibJami.cmake
similarity index 100%
rename from cmake/FindLibJami.cmake
rename to extras/build/cmake/modules/FindLibJami.cmake
diff --git a/cmake/time_stamp_check.cmake b/extras/build/cmake/time_stamp_check.cmake
similarity index 100%
rename from cmake/time_stamp_check.cmake
rename to extras/build/cmake/time_stamp_check.cmake
diff --git a/cmake/time_stamp_create.cmake b/extras/build/cmake/time_stamp_create.cmake
similarity index 100%
rename from cmake/time_stamp_create.cmake
rename to extras/build/cmake/time_stamp_create.cmake
diff --git a/cmake/windows_daemon_deploy.cmake b/extras/build/cmake/windows_daemon_deploy.cmake
similarity index 91%
rename from cmake/windows_daemon_deploy.cmake
rename to extras/build/cmake/windows_daemon_deploy.cmake
index 9ee8e932a..25ff6a3c0 100644
--- a/cmake/windows_daemon_deploy.cmake
+++ b/extras/build/cmake/windows_daemon_deploy.cmake
@@ -4,9 +4,9 @@ else()
     message("Daemon deploying ...")
     file(COPY "${DRING_PATH}/contrib/build/openssl/libcrypto-1_1-x64.dll"
               "${DRING_PATH}/contrib/build/openssl/libssl-1_1-x64.dll"
-              "${PROJECT_ROOT_DIR}/qt.conf"
+              "${PACKAGING_DIR}/wix/qt.conf"
               "${PROJECT_ROOT_DIR}/resources/images/jami.ico"
-              "${PROJECT_ROOT_DIR}/License.rtf"
+              "${PACKAGING_DIR}/wix/License.rtf"
          DESTINATION ${COPY_TO_PATH})
     # Cannot copy symbolic link using file COPY, create insread.
     file(GLOB_RECURSE RingTones "${DRING_PATH}/ringtones/*.ul"
diff --git a/cmake/windows_qt_deploy.cmake b/extras/build/cmake/windows_qt_deploy.cmake
similarity index 100%
rename from cmake/windows_qt_deploy.cmake
rename to extras/build/cmake/windows_qt_deploy.cmake
diff --git a/docker/Dockerfile_ubuntu_20.04 b/extras/build/docker/Dockerfile.client-qt-gnulinux
similarity index 100%
rename from docker/Dockerfile_ubuntu_20.04
rename to extras/build/docker/Dockerfile.client-qt-gnulinux
diff --git a/jami-qt.appdata.xml b/extras/data/jami-qt.appdata.xml
similarity index 100%
rename from jami-qt.appdata.xml
rename to extras/data/jami-qt.appdata.xml
diff --git a/jami-qt.desktop b/extras/data/jami-qt.desktop
similarity index 100%
rename from jami-qt.desktop
rename to extras/data/jami-qt.desktop
diff --git a/sparkle/Sparkle b/extras/packaging/update/sparkle/Sparkle
similarity index 100%
rename from sparkle/Sparkle
rename to extras/packaging/update/sparkle/Sparkle
diff --git a/sparkle/dsa_pub.pem b/extras/packaging/update/sparkle/dsa_pub.pem
similarity index 100%
rename from sparkle/dsa_pub.pem
rename to extras/packaging/update/sparkle/dsa_pub.pem
diff --git a/sparkle/sign_update.sh b/extras/packaging/update/sparkle/sign_update.sh
similarity index 100%
rename from sparkle/sign_update.sh
rename to extras/packaging/update/sparkle/sign_update.sh
diff --git a/sparkle/sparkle-xml-updater.sh b/extras/packaging/update/sparkle/sparkle-xml-updater.sh
similarity index 100%
rename from sparkle/sparkle-xml-updater.sh
rename to extras/packaging/update/sparkle/sparkle-xml-updater.sh
diff --git a/License.rtf b/extras/packaging/wix/License.rtf
similarity index 100%
rename from License.rtf
rename to extras/packaging/wix/License.rtf
diff --git a/ico.rc b/extras/packaging/wix/ico.rc
similarity index 100%
rename from ico.rc
rename to extras/packaging/wix/ico.rc
diff --git a/qt.conf b/extras/packaging/wix/qt.conf
similarity index 100%
rename from qt.conf
rename to extras/packaging/wix/qt.conf
diff --git a/scripts/generateDMG.json b/extras/scripts/gen-dmg.json
similarity index 100%
rename from scripts/generateDMG.json
rename to extras/scripts/gen-dmg.json
diff --git a/scripts/gen-qrc-without-webengine.py b/extras/scripts/gen-qrc-without-webengine.py
similarity index 84%
rename from scripts/gen-qrc-without-webengine.py
rename to extras/scripts/gen-qrc-without-webengine.py
index f043da766..329b3911e 100755
--- a/scripts/gen-qrc-without-webengine.py
+++ b/extras/scripts/gen-qrc-without-webengine.py
@@ -3,6 +3,7 @@
 # Copyright (C) 2022 Savoir-faire Linux Inc.
 #
 # Author: Kateryna Kostiuk <kateryna.kostiuk@savoirfairelinux.com>
+# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -23,9 +24,9 @@ with open('qml_without_webengine.qrc', 'w') as outfile:
     line = infile.readline()
     while line:
       if 'EmojiPicker.qml' in line:
-        outfile.write('\t<file>src/app/nowebengine/EmojiPicker.qml</file>\n')
+        outfile.write('\t<file>nowebengine/EmojiPicker.qml</file>\n')
       elif 'MediaPreviewBase.qml' in line:
-        outfile.write('\t<file>src/app/nowebengine/MediaPreviewBase.qml</file>\n')
+        outfile.write('\t<file>nowebengine/MediaPreviewBase.qml</file>\n')
       else:
         outfile.write(line)
       line = infile.readline()
diff --git a/extras/scripts/gen-resources.py b/extras/scripts/gen-resources.py
new file mode 100644
index 000000000..c5b73361f
--- /dev/null
+++ b/extras/scripts/gen-resources.py
@@ -0,0 +1,58 @@
+# Copyright (C) 2021-2022 Savoir-faire Linux Inc.
+#
+# Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
+# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
+
+import os
+import sys
+import re
+
+# These paths should be relative to the working directory of the
+# script as set in the project CMakeLists, which should in turn be
+# where the resources.qrc will be located (currently 'src/app').
+resdir = os.path.join('..', '..', 'resources')
+qmlfile = os.path.join('constant', 'JamiResources.qml')
+resfile = os.path.join('resources.qrc')
+sep = '_'
+
+print("Generating resource files ...")
+
+# replace characters that aren't valid within QML property names
+formatProp = lambda str: (
+    "".join([{".": sep, "-": sep, " ": sep}
+        .get(c, c) for c in str]
+    ).lower())
+
+with open(resfile, 'w') as qrc, open(qmlfile, 'w') as qml:
+    qrc.write('<RCC>\n')
+    qml.write('pragma Singleton\nimport QtQuick 2.14\nQtObject {\n')
+    for root, _, files in os.walk(resdir):
+        if len(files):
+            prefix = root.rsplit(os.sep, 1)[-1]
+            qrc.write('\t<qresource prefix="/%s">\n' % prefix)
+            for filename in files:
+                # use posix separators in the resource path
+                filepath = os.path.join(root, filename).replace(os.sep, '/')
+                qrc.write('\t\t<file alias="%s">%s</file>\n'
+                    % (filename, filepath))
+                # only record images/icons as properties
+                if (re.match("icons|images", prefix)):
+                    qml.write('    readonly property string %s: "qrc:/%s"\n'
+                        % (formatProp(filename), filepath.split('/', 3)[-1]))
+            qrc.write('\t</qresource>\n')
+    qml.write('}')
+    qrc.write('</RCC>')
diff --git a/scripts/notarize.sh b/extras/scripts/notarize.sh
similarity index 100%
rename from scripts/notarize.sh
rename to extras/scripts/notarize.sh
diff --git a/compile_tests.sh b/extras/scripts/run-tests.sh
similarity index 100%
rename from compile_tests.sh
rename to extras/scripts/run-tests.sh
diff --git a/scripts/signDeployAppStore.sh b/extras/scripts/sign-deploy-appstore.sh
similarity index 100%
rename from scripts/signDeployAppStore.sh
rename to extras/scripts/sign-deploy-appstore.sh
diff --git a/update-translations.ps1 b/extras/scripts/update-translations.ps1
similarity index 100%
rename from update-translations.ps1
rename to extras/scripts/update-translations.ps1
diff --git a/update-translations.py b/extras/scripts/update-translations.py
similarity index 100%
rename from update-translations.py
rename to extras/scripts/update-translations.py
diff --git a/gen-resources.py b/gen-resources.py
deleted file mode 100644
index 9bf912e3a..000000000
--- a/gen-resources.py
+++ /dev/null
@@ -1,35 +0,0 @@
-import os
-import sys
-import re
-
-resdir = 'resources'
-qmlfile = os.path.join('src', 'app', 'constant', 'JamiResources.qml')
-sep = '_'
-
-print("Generating resource files ...")
-
-# replace characters that aren't valid within QML property names
-formatProp = lambda str: (
-    "".join([{".": sep, "-": sep, " ": sep}
-        .get(c, c) for c in str]
-    ).lower())
-
-with open('resources.qrc', 'w') as qrc, open(qmlfile, 'w') as qml:
-    qrc.write('<RCC>\n')
-    qml.write('pragma Singleton\nimport QtQuick 2.14\nQtObject {\n')
-    for root, _, files in os.walk(resdir):
-        if len(files):
-            prefix = root.rsplit(os.sep, 1)[-1]
-            qrc.write('\t<qresource prefix="/%s">\n' % prefix)
-            for filename in files:
-                # use posix separators in the resource path
-                filepath = os.path.join(root, filename).replace(os.sep, '/')
-                qrc.write('\t\t<file alias="%s">%s</file>\n'
-                    % (filename, filepath))
-                # only record images/icons as properties
-                if (re.match("icons|images", prefix)):
-                    qml.write('    readonly property string %s: "qrc:/%s"\n'
-                        % (formatProp(filename), filepath.split('/', 1)[1]))
-            qrc.write('\t</qresource>\n')
-    qml.write('}')
-    qrc.write('</RCC>')
diff --git a/jami-qt.desktop.autostart b/jami-qt.desktop.autostart
deleted file mode 100644
index ec2268fcc..000000000
--- a/jami-qt.desktop.autostart
+++ /dev/null
@@ -1,12 +0,0 @@
-[Desktop Entry]
-Name=Jami
-GenericName=Jami
-Comment=Privacy-oriented voice, video, chat, and conference platform
-Comment[hu]=Adatvédelem-orientált hang-, video-, csevegés- és konferenciaplatform
-Comment[ru]=Jami — приложение для защищённой связи с распределённой архитектурой
-Exec=jami-qt
-Icon=jami
-StartupNotify=true
-Terminal=false
-Type=Application
-Categories=Qt;Network;Telephony;
diff --git a/jami-qt.sln b/jami-qt.sln
deleted file mode 100644
index 9c0f6c9f2..000000000
--- a/jami-qt.sln
+++ /dev/null
@@ -1,280 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29613.14
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ring-daemon", "..\daemon\build\ring-daemon.vcxproj", "{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}"
-EndProject
-Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "JamiInstaller", "JamiInstaller\JamiInstaller.wixproj", "{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}"
-	ProjectSection(ProjectDependencies) = postProject
-		{78446125-FFDC-3CD8-BCBA-52E191038A34} = {78446125-FFDC-3CD8-BCBA-52E191038A34}
-	EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "daemon", "daemon", "{B6752729-7398-46FA-9CF0-DC854C6AB8CA}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "client", "client", "{1ECB5BD6-B3A0-4135-BA3F-48FC367B61C9}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jami-qt", "build\jami-qt.vcxproj", "{78446125-FFDC-3CD8-BCBA-52E191038A34}"
-	ProjectSection(ProjectDependencies) = postProject
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08} = {3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjamiclient", "build\src\libclient\libjamiclient.vcxproj", "{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qtwrapper", "build\src\libclient\qtwrapper\qtwrapper.vcxproj", "{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}"
-	ProjectSection(ProjectDependencies) = postProject
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD} = {DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}
-	EndProjectSection
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Beta|Any CPU = Beta|Any CPU
-		Beta|x64 = Beta|x64
-		Beta|x86 = Beta|x86
-		Debug|Any CPU = Debug|Any CPU
-		Debug|x64 = Debug|x64
-		Debug|x86 = Debug|x86
-		MinSizeRel|Any CPU = MinSizeRel|Any CPU
-		MinSizeRel|x64 = MinSizeRel|x64
-		MinSizeRel|x86 = MinSizeRel|x86
-		Release|Any CPU = Release|Any CPU
-		Release|x64 = Release|x64
-		Release|x86 = Release|x86
-		ReleaseCompile|Any CPU = ReleaseCompile|Any CPU
-		ReleaseCompile|x64 = ReleaseCompile|x64
-		ReleaseCompile|x86 = ReleaseCompile|x86
-		ReleaseLib_win32|Any CPU = ReleaseLib_win32|Any CPU
-		ReleaseLib_win32|x64 = ReleaseLib_win32|x64
-		ReleaseLib_win32|x86 = ReleaseLib_win32|x86
-		ReleaseLib|Any CPU = ReleaseLib|Any CPU
-		ReleaseLib|x64 = ReleaseLib|x64
-		ReleaseLib|x86 = ReleaseLib|x86
-		RelWithDebInfo|Any CPU = RelWithDebInfo|Any CPU
-		RelWithDebInfo|x64 = RelWithDebInfo|x64
-		RelWithDebInfo|x86 = RelWithDebInfo|x86
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Beta|Any CPU.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Beta|Any CPU.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Beta|x64.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Beta|x64.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Beta|x86.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Beta|x86.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Debug|Any CPU.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Debug|Any CPU.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Debug|x64.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Debug|x64.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Debug|x86.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Debug|x86.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.MinSizeRel|Any CPU.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.MinSizeRel|Any CPU.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.MinSizeRel|x64.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.MinSizeRel|x64.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.MinSizeRel|x86.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.MinSizeRel|x86.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Release|Any CPU.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Release|Any CPU.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Release|x64.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Release|x64.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Release|x86.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.Release|x86.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseCompile|Any CPU.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseCompile|Any CPU.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseCompile|x64.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseCompile|x64.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseCompile|x86.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseCompile|x86.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseLib_win32|Any CPU.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseLib_win32|x64.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseLib_win32|x64.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseLib_win32|x86.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseLib|Any CPU.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseLib|Any CPU.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseLib|x64.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseLib|x64.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseLib|x86.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.ReleaseLib|x86.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.RelWithDebInfo|Any CPU.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.RelWithDebInfo|Any CPU.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.RelWithDebInfo|x64.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.RelWithDebInfo|x64.Build.0 = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.RelWithDebInfo|x86.ActiveCfg = ReleaseLib_win32|x64
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD}.RelWithDebInfo|x86.Build.0 = ReleaseLib_win32|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Beta|Any CPU.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Beta|x64.ActiveCfg = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Beta|x64.Build.0 = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Beta|x86.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Debug|Any CPU.ActiveCfg = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Debug|Any CPU.Build.0 = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Debug|x64.ActiveCfg = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Debug|x64.Build.0 = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Debug|x86.ActiveCfg = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Debug|x86.Build.0 = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.MinSizeRel|Any CPU.ActiveCfg = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.MinSizeRel|Any CPU.Build.0 = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.MinSizeRel|x64.ActiveCfg = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.MinSizeRel|x64.Build.0 = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.MinSizeRel|x86.ActiveCfg = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.MinSizeRel|x86.Build.0 = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Release|Any CPU.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Release|x64.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Release|x64.Build.0 = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.Release|x86.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseCompile|Any CPU.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseCompile|Any CPU.Build.0 = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseCompile|x64.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseCompile|x64.Build.0 = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseCompile|x86.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseCompile|x86.Build.0 = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseLib_win32|Any CPU.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseLib_win32|Any CPU.Build.0 = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseLib_win32|x64.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseLib_win32|x64.Build.0 = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseLib_win32|x86.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseLib_win32|x86.Build.0 = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseLib|Any CPU.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseLib|Any CPU.Build.0 = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseLib|x64.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseLib|x64.Build.0 = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseLib|x86.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.ReleaseLib|x86.Build.0 = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.RelWithDebInfo|Any CPU.ActiveCfg = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.RelWithDebInfo|Any CPU.Build.0 = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.RelWithDebInfo|x64.ActiveCfg = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.RelWithDebInfo|x64.Build.0 = Release|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.RelWithDebInfo|x86.ActiveCfg = Beta|x64
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48}.RelWithDebInfo|x86.Build.0 = Beta|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Beta|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Beta|Any CPU.Build.0 = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Beta|x64.ActiveCfg = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Beta|x64.Build.0 = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Beta|x86.ActiveCfg = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Beta|x86.Build.0 = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Debug|Any CPU.ActiveCfg = Debug|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Debug|x64.ActiveCfg = Debug|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Debug|x64.Build.0 = Debug|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Debug|x86.ActiveCfg = Debug|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Release|Any CPU.ActiveCfg = Release|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Release|x64.ActiveCfg = Release|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Release|x64.Build.0 = Release|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.Release|x86.ActiveCfg = Release|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseCompile|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseCompile|Any CPU.Build.0 = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseCompile|x64.ActiveCfg = Release|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseCompile|x64.Build.0 = Release|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseCompile|x86.ActiveCfg = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseCompile|x86.Build.0 = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseLib_win32|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseLib_win32|Any CPU.Build.0 = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseLib_win32|x64.ActiveCfg = Release|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseLib_win32|x64.Build.0 = Release|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseLib_win32|x86.ActiveCfg = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseLib_win32|x86.Build.0 = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseLib|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseLib|Any CPU.Build.0 = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseLib|x64.ActiveCfg = Release|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseLib|x64.Build.0 = Release|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseLib|x86.ActiveCfg = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.ReleaseLib|x86.Build.0 = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
-		{78446125-FFDC-3CD8-BCBA-52E191038A34}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Beta|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Beta|Any CPU.Build.0 = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Beta|x64.ActiveCfg = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Beta|x64.Build.0 = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Beta|x86.ActiveCfg = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Beta|x86.Build.0 = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Debug|Any CPU.ActiveCfg = Debug|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Debug|x64.ActiveCfg = Debug|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Debug|x64.Build.0 = Debug|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Debug|x86.ActiveCfg = Debug|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Release|Any CPU.ActiveCfg = Release|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Release|x64.ActiveCfg = Release|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Release|x64.Build.0 = Release|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.Release|x86.ActiveCfg = Release|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseCompile|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseCompile|Any CPU.Build.0 = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseCompile|x64.ActiveCfg = Release|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseCompile|x64.Build.0 = Release|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseCompile|x86.ActiveCfg = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseCompile|x86.Build.0 = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseLib_win32|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseLib_win32|Any CPU.Build.0 = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseLib_win32|x64.ActiveCfg = Release|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseLib_win32|x64.Build.0 = Release|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseLib_win32|x86.ActiveCfg = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseLib_win32|x86.Build.0 = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseLib|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseLib|Any CPU.Build.0 = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseLib|x64.ActiveCfg = Release|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseLib|x64.Build.0 = Release|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseLib|x86.ActiveCfg = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.ReleaseLib|x86.Build.0 = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Beta|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Beta|Any CPU.Build.0 = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Beta|x64.ActiveCfg = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Beta|x64.Build.0 = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Beta|x86.ActiveCfg = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Beta|x86.Build.0 = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Debug|Any CPU.ActiveCfg = Debug|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Debug|x64.ActiveCfg = Debug|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Debug|x64.Build.0 = Debug|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Debug|x86.ActiveCfg = Debug|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Release|Any CPU.ActiveCfg = Release|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Release|x64.ActiveCfg = Release|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Release|x64.Build.0 = Release|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.Release|x86.ActiveCfg = Release|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseCompile|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseCompile|Any CPU.Build.0 = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseCompile|x64.ActiveCfg = Release|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseCompile|x64.Build.0 = Release|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseCompile|x86.ActiveCfg = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseCompile|x86.Build.0 = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseLib_win32|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseLib_win32|Any CPU.Build.0 = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseLib_win32|x64.ActiveCfg = Release|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseLib_win32|x64.Build.0 = Release|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseLib_win32|x86.ActiveCfg = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseLib_win32|x86.Build.0 = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseLib|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseLib|Any CPU.Build.0 = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseLib|x64.ActiveCfg = Release|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseLib|x64.Build.0 = Release|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseLib|x86.ActiveCfg = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.ReleaseLib|x86.Build.0 = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-	GlobalSection(NestedProjects) = preSolution
-		{DFA5D1FE-60B6-3D10-87F8-1D5E45C8C5FD} = {B6752729-7398-46FA-9CF0-DC854C6AB8CA}
-		{DBBFBC55-1C20-4D21-AE3B-6E8B14C4FE48} = {1ECB5BD6-B3A0-4135-BA3F-48FC367B61C9}
-		{78446125-FFDC-3CD8-BCBA-52E191038A34} = {1ECB5BD6-B3A0-4135-BA3F-48FC367B61C9}
-		{3EF5E2A0-3D11-3500-9E55-D31AE9FCDB08} = {1ECB5BD6-B3A0-4135-BA3F-48FC367B61C9}
-		{763BAFFB-47C2-3800-B47A-C5FAC57B0B10} = {1ECB5BD6-B3A0-4135-BA3F-48FC367B61C9}
-	EndGlobalSection
-	GlobalSection(ExtensibilityGlobals) = postSolution
-		SolutionGuid = {5C2901E8-26FE-444A-A80E-02AF8147CD34}
-	EndGlobalSection
-EndGlobal
diff --git a/qml.qrc b/qml.qrc
deleted file mode 100644
index 65a2d1c11..000000000
--- a/qml.qrc
+++ /dev/null
@@ -1,211 +0,0 @@
-<RCC>
-    <qresource prefix="/">
-        <file>src/app/MainApplicationWindow.qml</file>
-        <file>src/app/DaemonReconnectWindow.qml</file>
-        <file>src/app/constant/JamiQmlUtils.qml</file>
-        <file>src/app/constant/JamiStrings.qml</file>
-        <file>src/app/constant/JamiTheme.qml</file>
-        <file>src/app/commoncomponents/VideoView.qml</file>
-        <file>src/app/commoncomponents/LocalVideo.qml</file>
-        <file>src/app/commoncomponents/SettingParaCombobox.qml</file>
-        <file>src/app/commoncomponents/PreferenceItemDelegate.qml</file>
-        <file>src/app/commoncomponents/PasswordDialog.qml</file>
-        <file>src/app/commoncomponents/EditableLineEdit.qml</file>
-        <file>src/app/commoncomponents/MaterialLineEdit.qml</file>
-        <file>src/app/commoncomponents/PhotoboothView.qml</file>
-        <file>src/app/commoncomponents/JamiListView.qml</file>
-        <file>src/app/commoncomponents/DeleteAccountDialog.qml</file>
-        <file>src/app/commoncomponents/ConfirmDialog.qml</file>
-        <file>src/app/commoncomponents/CustomBorder.qml</file>
-        <file>src/app/commoncomponents/PushButton.qml</file>
-        <file>src/app/commoncomponents/JamiFileDialog.qml</file>
-        <file>src/app/commoncomponents/MaterialButton.qml</file>
-        <file>src/app/commoncomponents/ElidedTextLabel.qml</file>
-        <file>src/app/commoncomponents/SpinnerButton.qml</file>
-        <file>src/app/commoncomponents/UsernameLineEdit.qml</file>
-        <file>src/app/commoncomponents/Scaffold.qml</file>
-        <file>src/app/commoncomponents/LineEditContextMenu.qml</file>
-        <file>src/app/commoncomponents/BaseModalDialog.qml</file>
-        <file>src/app/commoncomponents/SimpleMessageDialog.qml</file>
-        <file>src/app/commoncomponents/ResponsiveImage.qml</file>
-        <file>src/app/commoncomponents/PresenceIndicator.qml</file>
-        <file>src/app/commoncomponents/DaemonReconnectPopup.qml</file>
-        <file>src/app/commoncomponents/SpinningAnimation.qml</file>
-        <file>src/app/commoncomponents/MediaPreviewBase.qml</file>
-        <file>src/app/settingsview/SettingsView.qml</file>
-        <file>src/app/settingsview/components/ChatviewSettings.qml</file>
-        <file>src/app/settingsview/components/FileTransferSettings.qml</file>
-        <file>src/app/settingsview/components/SettingsMenu.qml</file>
-        <file>src/app/settingsview/components/SettingsMenuButton.qml</file>
-        <file>src/app/settingsview/components/SettingsHeader.qml</file>
-        <file>src/app/settingsview/components/SystemSettings.qml</file>
-        <file>src/app/settingsview/components/RecordingSettings.qml</file>
-        <file>src/app/settingsview/components/UpdateSettings.qml</file>
-        <file>src/app/settingsview/components/AvSettingPage.qml</file>
-        <file>src/app/settingsview/components/AudioSettings.qml</file>
-        <file>src/app/settingsview/components/VideoSettings.qml</file>
-        <file>src/app/settingsview/components/GeneralSettingsPage.qml</file>
-        <file>src/app/settingsview/components/PluginSettingsPage.qml</file>
-        <file>src/app/settingsview/components/PluginListView.qml</file>
-        <file>src/app/settingsview/components/PluginPreferencesView.qml</file>
-        <file>src/app/settingsview/components/PluginPreferencesListView.qml</file>
-        <file>src/app/settingsview/components/CurrentAccountSettings.qml</file>
-        <file>src/app/settingsview/components/UserIdentity.qml</file>
-        <file>src/app/settingsview/components/JamiUserIdentity.qml</file>
-        <file>src/app/settingsview/components/SIPUserIdentity.qml</file>
-        <file>src/app/settingsview/components/AccountProfile.qml</file>
-        <file>src/app/settingsview/components/LinkedDevices.qml</file>
-        <file>src/app/settingsview/components/BannedContacts.qml</file>
-        <file>src/app/settingsview/components/AdvancedSettings.qml</file>
-        <file>src/app/settingsview/components/AdvancedJamiSecuritySettings.qml</file>
-        <file>src/app/settingsview/components/AdvancedSIPSecuritySettings.qml</file>
-        <file>src/app/settingsview/components/AdvancedMediaSettings.qml</file>
-        <file>src/app/settingsview/components/MediaSettings.qml</file>
-        <file>src/app/settingsview/components/AdvancedSDPSettings.qml</file>
-        <file>src/app/settingsview/components/AdvancedNameServerSettings.qml</file>
-        <file>src/app/settingsview/components/AdvancedVoiceMailSettings.qml</file>
-        <file>src/app/settingsview/components/AdvancedOpenDHTSettings.qml</file>
-        <file>src/app/settingsview/components/AdvancedPublicAddressSettings.qml</file>
-        <file>src/app/settingsview/components/AdvancedConnectivitySettings.qml</file>
-        <file>src/app/settingsview/components/AdvancedCallSettings.qml</file>
-        <file>src/app/settingsview/components/AdvancedChatSettings.qml</file>
-        <file>src/app/settingsview/components/SettingMaterialButton.qml</file>
-        <file>src/app/settingsview/components/ToggleSwitch.qml</file>
-        <file>src/app/settingsview/components/SettingSpinBox.qml</file>
-        <file>src/app/settingsview/components/SettingsComboBox.qml</file>
-        <file>src/app/settingsview/components/SettingsMaterialLineEdit.qml</file>
-        <file>src/app/settingsview/components/LevelMeter.qml</file>
-        <file>src/app/settingsview/components/DeviceItemDelegate.qml</file>
-        <file>src/app/settingsview/components/PluginItemDelegate.qml</file>
-        <file>src/app/settingsview/components/ContactItemDelegate.qml</file>
-        <file>src/app/settingsview/components/MediaCodecDelegate.qml</file>
-        <file>src/app/settingsview/components/NameRegistrationDialog.qml</file>
-        <file>src/app/settingsview/components/LinkDeviceDialog.qml</file>
-        <file>src/app/settingsview/components/RevokeDevicePasswordDialog.qml</file>
-        <file>src/app/wizardview/WizardView.qml</file>
-        <file>src/app/wizardview/components/WelcomePage.qml</file>
-        <file>src/app/wizardview/components/CreateAccountPage.qml</file>
-        <file>src/app/wizardview/components/CreateSIPAccountPage.qml</file>
-        <file>src/app/wizardview/components/ImportFromBackupPage.qml</file>
-        <file>src/app/wizardview/components/ImportFromDevicePage.qml</file>
-        <file>src/app/wizardview/components/ConnectToAccountManagerPage.qml</file>
-        <file>src/app/wizardview/components/ProfilePage.qml</file>
-        <file>src/app/wizardview/components/AccountCreationStepIndicator.qml</file>
-        <file>src/app/mainview/MainView.qml</file>
-        <file>src/app/mainview/components/PluginHandlerItemDelegate.qml</file>
-        <file>src/app/mainview/components/AboutPopUp.qml</file>
-        <file>src/app/mainview/components/SidePanel.qml</file>
-        <file>src/app/mainview/components/WelcomePage.qml</file>
-        <file>src/app/mainview/components/ChatView.qml</file>
-        <file>src/app/mainview/components/ConversationErrorsRow.qml</file>
-        <file>src/app/mainview/components/NewSwarmPage.qml</file>
-        <file>src/app/mainview/components/ChatViewHeader.qml</file>
-        <file>src/app/mainview/components/AccountComboBox.qml</file>
-        <file>src/app/mainview/components/CallStackView.qml</file>
-        <file>src/app/mainview/components/InitialCallPage.qml</file>
-        <file>src/app/mainview/components/CallOverlay.qml</file>
-        <file>src/app/mainview/components/ContactSearchBar.qml</file>
-        <file>src/app/mainview/components/OngoingCallPage.qml</file>
-        <file>src/app/mainview/components/ParticipantOverlay.qml</file>
-        <file>src/app/mainview/components/ProjectCreditsScrollView.qml</file>
-        <file>src/app/mainview/components/AccountComboBoxPopup.qml</file>
-        <file>src/app/mainview/components/SidePanelTabBar.qml</file>
-        <file>src/app/mainview/components/WelcomePageQrDialog.qml</file>
-        <file>src/app/mainview/components/ConversationSmartListContextMenu.qml</file>
-        <file>src/app/mainview/components/SwarmParticipantContextMenu.qml</file>
-        <file>src/app/mainview/components/CallViewContextMenu.qml</file>
-        <file>src/app/mainview/components/UserProfile.qml</file>
-        <file>src/app/mainview/components/SwarmDetailsPanel.qml</file>
-        <file>src/app/mainview/components/SwarmDetailsItem.qml</file>
-        <file>src/app/mainview/components/AddMemberPanel.qml</file>
-        <file>src/app/mainview/components/SelectScreen.qml</file>
-        <file>src/app/mainview/components/ScreenRubberBand.qml</file>
-        <file>src/app/mainview/components/ContactPicker.qml</file>
-        <file>src/app/mainview/components/PluginHandlerPicker.qml</file>
-        <file>src/app/mainview/components/ContactPickerItemDelegate.qml</file>
-        <file>src/app/mainview/components/RecordBox.qml</file>
-        <file>src/app/mainview/components/SipInputPanel.qml</file>
-        <file>src/app/mainview/components/ParticipantOverlayMenu.qml</file>
-        <file>src/app/mainview/js/selectscreenwindowcreation.js</file>
-        <file>src/app/mainview/js/screenrubberbandcreation.js</file>
-        <file>src/app/mainview/js/contactpickercreation.js</file>
-        <file>src/app/mainview/js/pluginhandlerpickercreation.js</file>
-        <file>src/app/mainview/components/FilterTabButton.qml</file>
-        <file>src/app/mainview/components/AccountItemDelegate.qml</file>
-        <file>src/app/mainview/components/ConversationListView.qml</file>
-        <file>src/app/mainview/components/SmartListItemDelegate.qml</file>
-        <file>src/app/mainview/components/BadgeNotifier.qml</file>
-        <file>src/app/mainview/components/ParticipantsLayer.qml</file>
-        <file>src/app/mainview/components/ParticipantsLayoutVertical.qml</file>
-        <file>src/app/mainview/components/ParticipantsLayoutHorizontal.qml</file>
-        <file>src/app/mainview/components/MainOverlay.qml</file>
-        <file>src/app/mainview/components/CallButtonDelegate.qml</file>
-        <file>src/app/mainview/components/CallActionBar.qml</file>
-        <file>src/app/commoncomponents/HalfPill.qml</file>
-        <file>src/app/commoncomponents/MaterialToolTip.qml</file>
-        <file>src/app/mainview/components/ParticipantCallInStatusDelegate.qml</file>
-        <file>src/app/mainview/components/ParticipantCallInStatusView.qml</file>
-        <file>src/app/settingsview/components/TroubleshootSettings.qml</file>
-        <file>src/app/settingsview/components/LogsView.qml</file>
-        <file>src/app/commoncomponents/contextmenu/ContextMenuAutoLoader.qml</file>
-        <file>src/app/commoncomponents/contextmenu/BaseContextMenu.qml</file>
-        <file>src/app/commoncomponents/contextmenu/GeneralMenuItem.qml</file>
-        <file>src/app/commoncomponents/contextmenu/GeneralMenuSeparator.qml</file>
-        <file>src/app/mainview/components/ParticipantOverlayButton.qml</file>
-        <file>src/app/mainview/components/ParticipantControlLayout.qml</file>
-        <file>src/app/mainview/components/ChatViewFooter.qml</file>
-        <file>src/app/commoncomponents/emojipicker/EmojiPicker.qml</file>
-        <file>src/app/commoncomponents/emojipicker/emojiPickerLoader.js</file>
-        <file>src/app/commoncomponents/emojipicker/emojiPickerLoader.html</file>
-        <file>src/app/commoncomponents/emojipicker/emoji.js</file>
-        <file>src/app/mainview/components/MessageBarTextArea.qml</file>
-        <file>src/app/mainview/components/FilesToSendDelegate.qml</file>
-        <file>src/app/mainview/components/MessageBar.qml</file>
-        <file>src/app/mainview/components/FilesToSendContainer.qml</file>
-        <file>src/app/mainview/components/ReplyingContainer.qml</file>
-        <file>src/app/commoncomponents/Avatar.qml</file>
-        <file>src/app/mainview/components/ConversationAvatar.qml</file>
-        <file>src/app/mainview/components/InvitationView.qml</file>
-        <file>src/app/commoncomponents/GeneralWebEngineView.qml</file>
-        <file>src/app/constant/JamiResources.qml</file>
-        <file>src/app/commoncomponents/BubbleLabel.qml</file>
-        <file>src/app/commoncomponents/BackButton.qml</file>
-        <file>src/app/commoncomponents/JamiSwitch.qml</file>
-        <file>src/app/mainview/components/UpdateToSwarm.qml</file>
-        <file>src/app/commoncomponents/TextMessageDelegate.qml</file>
-        <file>src/app/mainview/components/MessageListView.qml</file>
-        <file>src/app/commoncomponents/MessageBubble.qml</file>
-        <file>src/app/constant/MsgSeq.qml</file>
-        <file>src/app/commoncomponents/SBSContextMenu.qml</file>
-        <file>src/app/commoncomponents/SBSMessageBase.qml</file>
-        <file>src/app/commoncomponents/ReplyToRow.qml</file>
-        <file>src/app/commoncomponents/ReadStatus.qml</file>
-        <file>src/app/commoncomponents/GeneratedMessageDelegate.qml</file>
-        <file>src/app/commoncomponents/DataTransferMessageDelegate.qml</file>
-        <file>src/app/commoncomponents/ContactMessageDelegate.qml</file>
-        <file>src/app/mainview/components/ScrollToBottomButton.qml</file>
-        <file>src/app/commoncomponents/TypingDots.qml</file>
-        <file>src/app/commoncomponents/JamiScrollBar.qml</file>
-        <file>qtquickcontrols2.conf</file>
-        <file>src/app/commoncomponents/JamiFlickable.qml</file>
-        <file>src/app/AccountMigrationView.qml</file>
-        <file>src/app/settingsview/js/logviewwindowcreation.js</file>
-        <file>src/app/mainview/js/keyboardshortcuttablecreation.js</file>
-        <file>src/app/mainview/components/KeyboardShortcutTable.qml</file>
-        <file>src/app/mainview/components/KeyboardShortcutKeyDelegate.qml</file>
-        <file>src/app/mainview/components/KeyboardShortcutTabButton.qml</file>
-        <file>src/app/LayoutManager.qml</file>
-        <file>src/app/mainview/components/JamiIdentifier.qml</file>
-        <file>src/app/wizardview/components/NoUsernamePopup.qml</file>
-        <file>src/app/wizardview/components/AdvancedAccountSettings.qml</file>
-        <file>src/app/commoncomponents/InfoBox.qml</file>
-        <file>src/app/mainview/components/TipBox.qml</file>
-        <file>src/app/mainview/components/CustomizeTipBox.qml</file>
-        <file>src/app/mainview/components/BackupTipBox.qml</file>
-        <file>src/app/mainview/components/InformativeTipBox.qml</file>
-        <file>src/app/commoncomponents/TimestampInfo.qml</file>
-        <file>src/app/commoncomponents/MaterialTextField.qml</file>
-        <file>src/app/commoncomponents/ModalTextEdit.qml</file>
-        <file>src/app/commoncomponents/UsernameTextEdit.qml</file>
-    </qresource>
-</RCC>
diff --git a/.clang-format b/src/.clang-format
similarity index 100%
rename from .clang-format
rename to src/.clang-format
diff --git a/src/app/commoncomponents/DataTransferMessageDelegate.qml b/src/app/commoncomponents/DataTransferMessageDelegate.qml
index 6c0926274..23a295680 100644
--- a/src/app/commoncomponents/DataTransferMessageDelegate.qml
+++ b/src/app/commoncomponents/DataTransferMessageDelegate.qml
@@ -274,7 +274,7 @@ Loader {
                         id: avComp
                         Loader {
                             Component.onCompleted: {
-                                var qml = WITH_WEBENGINE ? "qrc:/src/app/commoncomponents/MediaPreviewBase.qml" : "qrc:/src/app/nowebengine/MediaPreviewBase.qml"
+                                var qml = WITH_WEBENGINE ? "qrc:/commoncomponents/MediaPreviewBase.qml" : "qrc:/nowebengine/MediaPreviewBase.qml"
                                 setSource( qml, { isVideo: mediaInfo.isVideo, html:mediaInfo.html } )
                             }
                         }
diff --git a/src/app/commoncomponents/emojipicker/EmojiPicker.qml b/src/app/commoncomponents/emojipicker/EmojiPicker.qml
index 10fb6a4b1..a9dda179f 100644
--- a/src/app/commoncomponents/emojipicker/EmojiPicker.qml
+++ b/src/app/commoncomponents/emojipicker/EmojiPicker.qml
@@ -74,7 +74,7 @@ Rectangle {
 
         webChannel.registeredObjects: [jsBridgeObject]
 
-        onCompletedLoadHtml: ":/src/app/commoncomponents/emojipicker/emojiPickerLoader.html"
+        onCompletedLoadHtml: ":/commoncomponents/emojipicker/emojiPickerLoader.html"
 
         onActiveFocusChanged: {
             if (visible) {
@@ -88,10 +88,10 @@ Rectangle {
                                                      ":qwebchannel.js"))
                 emojiPickerWebView.runJavaScript(
                             UtilsAdapter.qStringFromFile(
-                                ":/src/app/commoncomponents/emojipicker/emoji.js"))
+                                ":/commoncomponents/emojipicker/emoji.js"))
                 emojiPickerWebView.runJavaScript(
                             UtilsAdapter.qStringFromFile(
-                                ":/src/app/commoncomponents/emojipicker/emojiPickerLoader.js"))
+                                ":/commoncomponents/emojipicker/emojiPickerLoader.js"))
                 emojiPickerWebView.runJavaScript(
                             "init_emoji_picker(" + JamiTheme.darkTheme + ");")
             }
diff --git a/src/app/constant/JamiQmlUtils.qml b/src/app/constant/JamiQmlUtils.qml
index 949284437..2eaa6b8c6 100644
--- a/src/app/constant/JamiQmlUtils.qml
+++ b/src/app/constant/JamiQmlUtils.qml
@@ -26,9 +26,9 @@ import net.jami.Adapters 1.1
 Item {
     property string qmlFilePrefix: "file:/"
 
-    readonly property string mainViewLoadPath: "qrc:/src/app/mainview/MainView.qml"
-    readonly property string wizardViewLoadPath: "qrc:/src/app/wizardview/WizardView.qml"
-    readonly property string accountMigrationViewLoadPath: "qrc:/src/app/AccountMigrationView.qml"
+    readonly property string mainViewLoadPath: "qrc:/mainview/MainView.qml"
+    readonly property string wizardViewLoadPath: "qrc:/wizardview/WizardView.qml"
+    readonly property string accountMigrationViewLoadPath: "qrc:/AccountMigrationView.qml"
     readonly property string base64StringTitle: "data:image/png;base64,"
 
     property var accountCreationInputParaObject: ({})
diff --git a/src/app/mainapplication.cpp b/src/app/mainapplication.cpp
index 9c95d9fe8..829f17fa6 100644
--- a/src/app/mainapplication.cpp
+++ b/src/app/mainapplication.cpp
@@ -154,7 +154,7 @@ MainApplication::init()
     auto dBusErrorHandlerQObject = dynamic_cast<QObject*>(&GlobalInstances::dBusErrorHandler());
     QML_REGISTERSINGLETONTYPE_CUSTOM(NS_MODELS, DBusErrorHandler, dBusErrorHandlerQObject);
     if ((!lrc::api::Lrc::isConnected()) || (!lrc::api::Lrc::dbusIsValid())) {
-        engine_->load(QUrl(QStringLiteral("qrc:/src/app/DaemonReconnectWindow.qml")));
+        engine_->load(QUrl(QStringLiteral("qrc:/DaemonReconnectWindow.qml")));
         exec();
 
         if ((!lrc::api::Lrc::isConnected()) || (!lrc::api::Lrc::dbusIsValid())) {
@@ -350,7 +350,7 @@ MainApplication::initQmlLayer()
     auto videoProvider = new VideoProvider(lrcInstance_->avModel(), this);
     engine_->rootContext()->setContextProperty("videoProvider", videoProvider);
 
-    engine_->load(QUrl(QStringLiteral("qrc:/src/app/MainApplicationWindow.qml")));
+    engine_->load(QUrl(QStringLiteral("qrc:/MainApplicationWindow.qml")));
     qWarning().noquote() << "Main window loaded using" << getRenderInterfaceString();
 }
 
diff --git a/src/app/mainview/components/ChatViewFooter.qml b/src/app/mainview/components/ChatViewFooter.qml
index 25d7a71cf..c51070764 100644
--- a/src/app/mainview/components/ChatViewFooter.qml
+++ b/src/app/mainview/components/ChatViewFooter.qml
@@ -91,7 +91,7 @@ Rectangle {
 
     Loader {
         id: empjiLoader
-        source: WITH_WEBENGINE ? "qrc:/src/app/commoncomponents/emojipicker/EmojiPicker.qml" : "qrc:/src/app/nowebengine/EmojiPicker.qml"
+        source: WITH_WEBENGINE ? "qrc:/commoncomponents/emojipicker/EmojiPicker.qml" : "qrc:/nowebengine/EmojiPicker.qml"
 
         function openEmojiPicker() {
             item.openEmojiPicker()
diff --git a/src/app/qml.qrc b/src/app/qml.qrc
new file mode 100644
index 000000000..854594f81
--- /dev/null
+++ b/src/app/qml.qrc
@@ -0,0 +1,211 @@
+<RCC>
+    <qresource prefix="/">
+        <file>MainApplicationWindow.qml</file>
+        <file>DaemonReconnectWindow.qml</file>
+        <file>constant/JamiQmlUtils.qml</file>
+        <file>constant/JamiStrings.qml</file>
+        <file>constant/JamiTheme.qml</file>
+        <file>commoncomponents/VideoView.qml</file>
+        <file>commoncomponents/LocalVideo.qml</file>
+        <file>commoncomponents/SettingParaCombobox.qml</file>
+        <file>commoncomponents/PreferenceItemDelegate.qml</file>
+        <file>commoncomponents/PasswordDialog.qml</file>
+        <file>commoncomponents/EditableLineEdit.qml</file>
+        <file>commoncomponents/MaterialLineEdit.qml</file>
+        <file>commoncomponents/PhotoboothView.qml</file>
+        <file>commoncomponents/JamiListView.qml</file>
+        <file>commoncomponents/DeleteAccountDialog.qml</file>
+        <file>commoncomponents/ConfirmDialog.qml</file>
+        <file>commoncomponents/CustomBorder.qml</file>
+        <file>commoncomponents/PushButton.qml</file>
+        <file>commoncomponents/JamiFileDialog.qml</file>
+        <file>commoncomponents/MaterialButton.qml</file>
+        <file>commoncomponents/ElidedTextLabel.qml</file>
+        <file>commoncomponents/SpinnerButton.qml</file>
+        <file>commoncomponents/UsernameLineEdit.qml</file>
+        <file>commoncomponents/Scaffold.qml</file>
+        <file>commoncomponents/LineEditContextMenu.qml</file>
+        <file>commoncomponents/BaseModalDialog.qml</file>
+        <file>commoncomponents/SimpleMessageDialog.qml</file>
+        <file>commoncomponents/ResponsiveImage.qml</file>
+        <file>commoncomponents/PresenceIndicator.qml</file>
+        <file>commoncomponents/DaemonReconnectPopup.qml</file>
+        <file>commoncomponents/SpinningAnimation.qml</file>
+        <file>commoncomponents/MediaPreviewBase.qml</file>
+        <file>settingsview/SettingsView.qml</file>
+        <file>settingsview/components/ChatviewSettings.qml</file>
+        <file>settingsview/components/FileTransferSettings.qml</file>
+        <file>settingsview/components/SettingsMenu.qml</file>
+        <file>settingsview/components/SettingsMenuButton.qml</file>
+        <file>settingsview/components/SettingsHeader.qml</file>
+        <file>settingsview/components/SystemSettings.qml</file>
+        <file>settingsview/components/RecordingSettings.qml</file>
+        <file>settingsview/components/UpdateSettings.qml</file>
+        <file>settingsview/components/AvSettingPage.qml</file>
+        <file>settingsview/components/AudioSettings.qml</file>
+        <file>settingsview/components/VideoSettings.qml</file>
+        <file>settingsview/components/GeneralSettingsPage.qml</file>
+        <file>settingsview/components/PluginSettingsPage.qml</file>
+        <file>settingsview/components/PluginListView.qml</file>
+        <file>settingsview/components/PluginPreferencesView.qml</file>
+        <file>settingsview/components/PluginPreferencesListView.qml</file>
+        <file>settingsview/components/CurrentAccountSettings.qml</file>
+        <file>settingsview/components/UserIdentity.qml</file>
+        <file>settingsview/components/JamiUserIdentity.qml</file>
+        <file>settingsview/components/SIPUserIdentity.qml</file>
+        <file>settingsview/components/AccountProfile.qml</file>
+        <file>settingsview/components/LinkedDevices.qml</file>
+        <file>settingsview/components/BannedContacts.qml</file>
+        <file>settingsview/components/AdvancedSettings.qml</file>
+        <file>settingsview/components/AdvancedJamiSecuritySettings.qml</file>
+        <file>settingsview/components/AdvancedSIPSecuritySettings.qml</file>
+        <file>settingsview/components/AdvancedMediaSettings.qml</file>
+        <file>settingsview/components/MediaSettings.qml</file>
+        <file>settingsview/components/AdvancedSDPSettings.qml</file>
+        <file>settingsview/components/AdvancedNameServerSettings.qml</file>
+        <file>settingsview/components/AdvancedVoiceMailSettings.qml</file>
+        <file>settingsview/components/AdvancedOpenDHTSettings.qml</file>
+        <file>settingsview/components/AdvancedPublicAddressSettings.qml</file>
+        <file>settingsview/components/AdvancedConnectivitySettings.qml</file>
+        <file>settingsview/components/AdvancedCallSettings.qml</file>
+        <file>settingsview/components/AdvancedChatSettings.qml</file>
+        <file>settingsview/components/SettingMaterialButton.qml</file>
+        <file>settingsview/components/ToggleSwitch.qml</file>
+        <file>settingsview/components/SettingSpinBox.qml</file>
+        <file>settingsview/components/SettingsComboBox.qml</file>
+        <file>settingsview/components/SettingsMaterialLineEdit.qml</file>
+        <file>settingsview/components/LevelMeter.qml</file>
+        <file>settingsview/components/DeviceItemDelegate.qml</file>
+        <file>settingsview/components/PluginItemDelegate.qml</file>
+        <file>settingsview/components/ContactItemDelegate.qml</file>
+        <file>settingsview/components/MediaCodecDelegate.qml</file>
+        <file>settingsview/components/NameRegistrationDialog.qml</file>
+        <file>settingsview/components/LinkDeviceDialog.qml</file>
+        <file>settingsview/components/RevokeDevicePasswordDialog.qml</file>
+        <file>wizardview/WizardView.qml</file>
+        <file>wizardview/components/WelcomePage.qml</file>
+        <file>wizardview/components/CreateAccountPage.qml</file>
+        <file>wizardview/components/CreateSIPAccountPage.qml</file>
+        <file>wizardview/components/ImportFromBackupPage.qml</file>
+        <file>wizardview/components/ImportFromDevicePage.qml</file>
+        <file>wizardview/components/ConnectToAccountManagerPage.qml</file>
+        <file>wizardview/components/ProfilePage.qml</file>
+        <file>wizardview/components/AccountCreationStepIndicator.qml</file>
+        <file>mainview/MainView.qml</file>
+        <file>mainview/components/PluginHandlerItemDelegate.qml</file>
+        <file>mainview/components/AboutPopUp.qml</file>
+        <file>mainview/components/SidePanel.qml</file>
+        <file>mainview/components/WelcomePage.qml</file>
+        <file>mainview/components/ChatView.qml</file>
+        <file>mainview/components/ConversationErrorsRow.qml</file>
+        <file>mainview/components/NewSwarmPage.qml</file>
+        <file>mainview/components/ChatViewHeader.qml</file>
+        <file>mainview/components/AccountComboBox.qml</file>
+        <file>mainview/components/CallStackView.qml</file>
+        <file>mainview/components/InitialCallPage.qml</file>
+        <file>mainview/components/CallOverlay.qml</file>
+        <file>mainview/components/ContactSearchBar.qml</file>
+        <file>mainview/components/OngoingCallPage.qml</file>
+        <file>mainview/components/ParticipantOverlay.qml</file>
+        <file>mainview/components/ProjectCreditsScrollView.qml</file>
+        <file>mainview/components/AccountComboBoxPopup.qml</file>
+        <file>mainview/components/SidePanelTabBar.qml</file>
+        <file>mainview/components/WelcomePageQrDialog.qml</file>
+        <file>mainview/components/ConversationSmartListContextMenu.qml</file>
+        <file>mainview/components/SwarmParticipantContextMenu.qml</file>
+        <file>mainview/components/CallViewContextMenu.qml</file>
+        <file>mainview/components/UserProfile.qml</file>
+        <file>mainview/components/SwarmDetailsPanel.qml</file>
+        <file>mainview/components/SwarmDetailsItem.qml</file>
+        <file>mainview/components/AddMemberPanel.qml</file>
+        <file>mainview/components/SelectScreen.qml</file>
+        <file>mainview/components/ScreenRubberBand.qml</file>
+        <file>mainview/components/ContactPicker.qml</file>
+        <file>mainview/components/PluginHandlerPicker.qml</file>
+        <file>mainview/components/ContactPickerItemDelegate.qml</file>
+        <file>mainview/components/RecordBox.qml</file>
+        <file>mainview/components/SipInputPanel.qml</file>
+        <file>mainview/components/ParticipantOverlayMenu.qml</file>
+        <file>mainview/js/selectscreenwindowcreation.js</file>
+        <file>mainview/js/screenrubberbandcreation.js</file>
+        <file>mainview/js/contactpickercreation.js</file>
+        <file>mainview/js/pluginhandlerpickercreation.js</file>
+        <file>mainview/components/FilterTabButton.qml</file>
+        <file>mainview/components/AccountItemDelegate.qml</file>
+        <file>mainview/components/ConversationListView.qml</file>
+        <file>mainview/components/SmartListItemDelegate.qml</file>
+        <file>mainview/components/BadgeNotifier.qml</file>
+        <file>mainview/components/ParticipantsLayer.qml</file>
+        <file>mainview/components/ParticipantsLayoutVertical.qml</file>
+        <file>mainview/components/ParticipantsLayoutHorizontal.qml</file>
+        <file>mainview/components/MainOverlay.qml</file>
+        <file>mainview/components/CallButtonDelegate.qml</file>
+        <file>mainview/components/CallActionBar.qml</file>
+        <file>commoncomponents/HalfPill.qml</file>
+        <file>commoncomponents/MaterialToolTip.qml</file>
+        <file>mainview/components/ParticipantCallInStatusDelegate.qml</file>
+        <file>mainview/components/ParticipantCallInStatusView.qml</file>
+        <file>settingsview/components/TroubleshootSettings.qml</file>
+        <file>settingsview/components/LogsView.qml</file>
+        <file>commoncomponents/contextmenu/ContextMenuAutoLoader.qml</file>
+        <file>commoncomponents/contextmenu/BaseContextMenu.qml</file>
+        <file>commoncomponents/contextmenu/GeneralMenuItem.qml</file>
+        <file>commoncomponents/contextmenu/GeneralMenuSeparator.qml</file>
+        <file>mainview/components/ParticipantOverlayButton.qml</file>
+        <file>mainview/components/ParticipantControlLayout.qml</file>
+        <file>mainview/components/ChatViewFooter.qml</file>
+        <file>commoncomponents/emojipicker/EmojiPicker.qml</file>
+        <file>commoncomponents/emojipicker/emojiPickerLoader.js</file>
+        <file>commoncomponents/emojipicker/emojiPickerLoader.html</file>
+        <file>commoncomponents/emojipicker/emoji.js</file>
+        <file>mainview/components/MessageBarTextArea.qml</file>
+        <file>mainview/components/FilesToSendDelegate.qml</file>
+        <file>mainview/components/MessageBar.qml</file>
+        <file>mainview/components/FilesToSendContainer.qml</file>
+        <file>mainview/components/ReplyingContainer.qml</file>
+        <file>commoncomponents/Avatar.qml</file>
+        <file>mainview/components/ConversationAvatar.qml</file>
+        <file>mainview/components/InvitationView.qml</file>
+        <file>commoncomponents/GeneralWebEngineView.qml</file>
+        <file>constant/JamiResources.qml</file>
+        <file>commoncomponents/BubbleLabel.qml</file>
+        <file>commoncomponents/BackButton.qml</file>
+        <file>commoncomponents/JamiSwitch.qml</file>
+        <file>mainview/components/UpdateToSwarm.qml</file>
+        <file>commoncomponents/TextMessageDelegate.qml</file>
+        <file>mainview/components/MessageListView.qml</file>
+        <file>commoncomponents/MessageBubble.qml</file>
+        <file>constant/MsgSeq.qml</file>
+        <file>commoncomponents/SBSContextMenu.qml</file>
+        <file>commoncomponents/SBSMessageBase.qml</file>
+        <file>commoncomponents/ReplyToRow.qml</file>
+        <file>commoncomponents/ReadStatus.qml</file>
+        <file>commoncomponents/GeneratedMessageDelegate.qml</file>
+        <file>commoncomponents/DataTransferMessageDelegate.qml</file>
+        <file>commoncomponents/ContactMessageDelegate.qml</file>
+        <file>mainview/components/ScrollToBottomButton.qml</file>
+        <file>commoncomponents/TypingDots.qml</file>
+        <file>commoncomponents/JamiScrollBar.qml</file>
+        <file>qtquickcontrols2.conf</file>
+        <file>commoncomponents/JamiFlickable.qml</file>
+        <file>AccountMigrationView.qml</file>
+        <file>settingsview/js/logviewwindowcreation.js</file>
+        <file>mainview/js/keyboardshortcuttablecreation.js</file>
+        <file>mainview/components/KeyboardShortcutTable.qml</file>
+        <file>mainview/components/KeyboardShortcutKeyDelegate.qml</file>
+        <file>mainview/components/KeyboardShortcutTabButton.qml</file>
+        <file>LayoutManager.qml</file>
+        <file>mainview/components/JamiIdentifier.qml</file>
+        <file>wizardview/components/NoUsernamePopup.qml</file>
+        <file>wizardview/components/AdvancedAccountSettings.qml</file>
+        <file>commoncomponents/InfoBox.qml</file>
+        <file>mainview/components/TipBox.qml</file>
+        <file>mainview/components/CustomizeTipBox.qml</file>
+        <file>mainview/components/BackupTipBox.qml</file>
+        <file>mainview/components/InformativeTipBox.qml</file>
+        <file>commoncomponents/TimestampInfo.qml</file>
+        <file>commoncomponents/MaterialTextField.qml</file>
+        <file>commoncomponents/ModalTextEdit.qml</file>
+        <file>commoncomponents/UsernameTextEdit.qml</file>
+    </qresource>
+</RCC>
diff --git a/src/app/qmlregister.cpp b/src/app/qmlregister.cpp
index 54ed58061..285f78148 100644
--- a/src/app/qmlregister.cpp
+++ b/src/app/qmlregister.cpp
@@ -173,11 +173,11 @@ registerTypes(QQmlEngine* engine,
     QML_REGISTERNAMESPACE(NS_MODELS, MessageList::staticMetaObject, "MessageList");
 
     // Qml singleton components
-    QML_REGISTERSINGLETONTYPE_URL(NS_CONSTANTS, "qrc:/src/app/constant/JamiTheme.qml", JamiTheme);
-    QML_REGISTERSINGLETONTYPE_URL(NS_MODELS, "qrc:/src/app/constant/JamiQmlUtils.qml", JamiQmlUtils);
-    QML_REGISTERSINGLETONTYPE_URL(NS_CONSTANTS, "qrc:/src/app/constant/JamiStrings.qml", JamiStrings);
-    QML_REGISTERSINGLETONTYPE_URL(NS_CONSTANTS, "qrc:/src/app/constant/JamiResources.qml", JamiResources);
-    QML_REGISTERSINGLETONTYPE_URL(NS_CONSTANTS, "qrc:/src/app/constant/MsgSeq.qml", MsgSeq);
+    QML_REGISTERSINGLETONTYPE_URL(NS_CONSTANTS, "qrc:/constant/JamiTheme.qml", JamiTheme);
+    QML_REGISTERSINGLETONTYPE_URL(NS_MODELS, "qrc:/constant/JamiQmlUtils.qml", JamiQmlUtils);
+    QML_REGISTERSINGLETONTYPE_URL(NS_CONSTANTS, "qrc:/constant/JamiStrings.qml", JamiStrings);
+    QML_REGISTERSINGLETONTYPE_URL(NS_CONSTANTS, "qrc:/constant/JamiResources.qml", JamiResources);
+    QML_REGISTERSINGLETONTYPE_URL(NS_CONSTANTS, "qrc:/constant/MsgSeq.qml", MsgSeq);
 
     QML_REGISTERSINGLETONTYPE_POBJECT(NS_CONSTANTS, parent, "MainApplication")
     QML_REGISTERSINGLETONTYPE_POBJECT(NS_CONSTANTS, screenInfo, "CurrentScreenInfo")
diff --git a/qtquickcontrols2.conf b/src/app/qtquickcontrols2.conf
similarity index 100%
rename from qtquickcontrols2.conf
rename to src/app/qtquickcontrols2.conf
diff --git a/src/app/utils.cpp b/src/app/utils.cpp
index f4b13b22f..4b7610e42 100644
--- a/src/app/utils.cpp
+++ b/src/app/utils.cpp
@@ -820,7 +820,7 @@ Utils::QByteArrayFromFile(const QString& filename)
     if (file.open(QIODevice::ReadOnly)) {
         return file.readAll();
     } else {
-        qDebug() << "QByteArrayFromFile: can't open file";
+        qDebug() << "QByteArrayFromFile: can't open file" << filename;
         return QByteArray();
     }
 }
diff --git a/src/libclient/CMakeLists.txt b/src/libclient/CMakeLists.txt
index 79d74acbd..2676c9c4c 100644
--- a/src/libclient/CMakeLists.txt
+++ b/src/libclient/CMakeLists.txt
@@ -55,8 +55,11 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH true)
 
 # libjami (daemon)
+if(NOT DEFINED EXTRAS_DIR)
+  set(EXTRAS_DIR ${PROJECT_SOURCE_DIR}/../../extras)
+endif()
 set(CMAKE_MODULE_PATH
-  ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake")
+  ${CMAKE_MODULE_PATH} "${EXTRAS_DIR}/build/cmake/modules")
 find_package(LibJami REQUIRED)
 if(LIBJAMI_FOUND)
   include_directories(${LIBJAMI_INCLUDE_DIRS})
-- 
GitLab