From 69db8684a133d70d78a7d5d7eee1e8405ccef173 Mon Sep 17 00:00:00 2001 From: ababi Date: Tue, 12 Jan 2021 17:26:52 +0100 Subject: [PATCH] packaging: add global installation support for linux - avoid using fixed paths and find LRC either when globally installed or located in custom directory - add installation rules for binaries, .desktop files, .appdata.xml, logo and doc - add support for generating and copying runtime files (webresources and translations) - add launcher script (client qt/gnome/kde selector) - add uninstall support - add missing sources (moderatorlistmodel) - update README Gitlab: #160, #230, #263, #264 Change-Id: I3fee77a917be038072a20c7f99b510f9a8bf65b4 --- CMakeLists.txt | 204 ++++++++--- README.md | 21 +- cmake/cmake_uninstall.cmake.in | 41 +++ copy-runtime-files.py | 2 +- doc/Doxyfile | 10 + doc/Doxyfile.in | 10 + doc/jami-qt.1 | 21 ++ images/jami-32px.xpm | 392 +++++++++++++++++++++ images/jami-48px.png | Bin 0 -> 3894 bytes images/jami.svg | 358 +++++++++++++++++++ jami-qt.appdata.xml | 89 +++++ jami-qt.desktop | 11 + jami-qt.desktop.autostart | 10 + jami-qt.pro | 37 +- src/jami | 68 ++++ src/mainview/components/MessageWebView.qml | 2 +- 16 files changed, 1206 insertions(+), 70 deletions(-) create mode 100644 cmake/cmake_uninstall.cmake.in create mode 100644 doc/Doxyfile create mode 100644 doc/Doxyfile.in create mode 100644 doc/jami-qt.1 create mode 100644 images/jami-32px.xpm create mode 100644 images/jami-48px.png create mode 100644 images/jami.svg create mode 100644 jami-qt.appdata.xml create mode 100644 jami-qt.desktop create mode 100644 jami-qt.desktop.autostart create mode 100644 src/jami diff --git a/CMakeLists.txt b/CMakeLists.txt index f6d0b350..8d1b19fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,24 +12,11 @@ set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) -set(SRC_DIR ${CMAKE_SOURCE_DIR}/src) +set(SRC_DIR ${PROJECT_SOURCE_DIR}/src) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}") -set(QML_RESOURCES ${CMAKE_SOURCE_DIR}/resources.qrc) -set(QML_RESOURCES_QML ${CMAKE_SOURCE_DIR}/qml.qrc) - -if(NOT DEFINED LRC) - set(LRC ${CMAKE_CURRENT_SOURCE_DIR}/../install/lrc) - set(LRCPATH ${LRC}/include/libringclient) - set(LRCLIBDIR ${LRC}/lib) -else() - set(LRCPATH ${LRC}/src) - if (NOT DEFINED LRCBUILD) - set(LRCLIBDIR ${LRC}/build) - else() - set(LRCLIBDIR ${LRCBUILD}) - endif() -endif() +set(QML_RESOURCES ${PROJECT_SOURCE_DIR}/resources.qrc) +set(QML_RESOURCES_QML ${PROJECT_SOURCE_DIR}/qml.qrc) set(QML_LIBS Qt5::Quick @@ -80,7 +67,8 @@ set(COMMON_SOURCES ${SRC_DIR}/qmlregister.cpp ${SRC_DIR}/utilsadapter.cpp ${SRC_DIR}/dbuserrorhandler.cpp - ${SRC_DIR}/xrectsel.c) + ${SRC_DIR}/xrectsel.c + ${SRC_DIR}/moderatorlistmodel.cpp) set(COMMON_HEADERS ${SRC_DIR}/avatarimageprovider.h @@ -130,7 +118,8 @@ set(COMMON_HEADERS ${SRC_DIR}/qtutils.h ${SRC_DIR}/utilsadapter.h ${SRC_DIR}/dbuserrorhandler.h - ${SRC_DIR}/xrectsel.h) + ${SRC_DIR}/xrectsel.h + ${SRC_DIR}/moderatorlistmodel.h) find_package(PkgConfig REQUIRED) pkg_check_modules(LIBNM libnm) @@ -140,66 +129,169 @@ if(LIBNM_FOUND) endif() if(QT5_VER AND QT5_PATH) - string(REPLACE "." ";" VERSION_LIST ${QT5_VER}) - list(GET VERSION_LIST 0 QT5_VER_MAJOR) - list(GET VERSION_LIST 1 QT5_VER_MINOR) - list(GET VERSION_LIST 2 QT5_VER_PATCH) + string(REPLACE "." ";" VERSION_LIST ${QT5_VER}) + list(GET VERSION_LIST 0 QT5_VER_MAJOR) + list(GET VERSION_LIST 1 QT5_VER_MINOR) + list(GET VERSION_LIST 2 QT5_VER_PATCH) - if ((${QT5_VER_MAJOR} GREATER_EQUAL 5) AND (${QT5_VER_MINOR} GREATER_EQUAL 14)) - message(STATUS "Using custom Qt version") - find_package(Qt5 ${QT5_VER} REQUIRED - COMPONENTS - Core - Quick - QuickWidgets - Network - Svg - QuickControls2 - WebEngine - DBus - PATHS ${QT5_PATH} NO_DEFAULT_PATH) - set(CMAKE_INSTALL_RPATH_USE_LINK_PATH true) - endif() + if((${QT5_VER_MAJOR} GREATER_EQUAL 5) AND (${QT5_VER_MINOR} GREATER_EQUAL 14)) + message(STATUS "Using custom Qt version") + find_package(Qt5 ${QT5_VER} REQUIRED COMPONENTS + Core + Quick + QuickWidgets + Network + Svg + QuickControls2 + WebEngine + DBus + PATHS ${QT5_PATH} NO_DEFAULT_PATH) + find_package(Qt5LinguistTools ${QT5_VER} + PATHS ${QT5_PATH} NO_DEFAULT_PATH) + endif() else() - find_package(Qt5 REQUIRED - COMPONENTS - Core - Quick - QuickWidgets - Network - Svg - QuickControls2 - WebEngine - DBus) + find_package(Qt5 REQUIRED COMPONENTS + Core + Quick + QuickWidgets + Network + Svg + QuickControls2 + WebEngine + DBus) + find_package(Qt5LinguistTools) +endif() +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH true) + +# If LRC is not globally installed, it's path should be specified +# by setting variable LRC. If library is not inside LRC + suffixes +# lib, build or build-local, it's path should be set with LRCLIB. +if(DEFINED LRC) + if(EXISTS ${LRC}/include/libringclient) + set(LRC_SRC_PATH ${LRC}/include/libringclient) + else() + set(LRC_SRC_PATH ${LRC}/src) + endif() + if(NOT DEFINED LRCLIB) + set(LRCLIB ${LRC}) + endif() + find_library(ringclient ringclient + PATHS ${LRCLIB} + PATH_SUFFIXES lib build build-local NO_DEFAULT_PATH) + message("Will expect lrc library in ${LRCLIB} (including \ +subdirs /lib, /build and /build-local)") + set(LRC_LIB_NAME ${ringclient}) +else() + find_package(LibRingClient REQUIRED) + if (LibRingClient_FOUND) + set(LRC_SRC_PATH ${LIB_RING_CLIENT_INCLUDE_DIR}) + set(LRC_LIB_NAME ${LIB_RING_CLIENT_LIBRARY}) + else() + message("lrc not found!") + endif() endif() -include_directories(${CMAKE_CURRENT_SOURCE_DIR} - ${SRC_DIR} - ${LRCPATH} - ${LIBNM_INCLUDE_DIRS}) +message("Will expect lrc headers in ${LRC_SRC_PATH}") -link_libraries(${LIBNM_LIBRARIES}) +include_directories(${PROJECT_SOURCE_DIR} + ${SRC_DIR} + ${LRC_SRC_PATH} + ${LIBNM_INCLUDE_DIRS}) add_executable(${PROJECT_NAME} ${SRC_DIR}/main.cpp ${COMMON_HEADERS} ${COMMON_SOURCES} ${QML_RESOURCES} - ${QML_RESOURCES_QML}) + ${QML_RESOURCES_QML} + ${LRC_SRC_PATH}/webresource.qrc) -message(${LRCLIBDIR}) find_library(ringclient ringclient ${LRCLIBDIR} NO_DEFAULT_PATH) find_library(qrencode qrencode) find_library(X11 X11) target_link_libraries(jami-qt ${QML_LIBS} - ${ringclient} + ${LRC_LIB_NAME} ${qrencode} ${X11} -) + ${LIBNM_LIBRARIES}) if(ENABLE_TESTS) message("Add Jami tests") add_subdirectory(tests) endif() + +# Installation rules +install(TARGETS jami-qt + RUNTIME DESTINATION bin) + +# install .desktop in XDG desktop dir so that it is recognized by the system +install(FILES ${PROJECT_SOURCE_DIR}/jami-qt.desktop + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) + +# logos +install(FILES images/jami.svg + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps) + +install(FILES images/jami-48px.png + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps + RENAME jami.png) + +install(FILES images/jami-32px.xpm + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/pixmaps + RENAME jami.xpm) + +install(FILES jami-qt.appdata.xml + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/metainfo) + +# install jami launcher that selects between clients +install( + FILES + "${PROJECT_SOURCE_DIR}/src/jami" + DESTINATION + ${CMAKE_INSTALL_PREFIX}/bin + PERMISSIONS + WORLD_READ + OWNER_WRITE + OWNER_READ + GROUP_READ + OWNER_EXECUTE + GROUP_EXECUTE + WORLD_EXECUTE) + +# add a target to generate API documentation with Doxygen +find_package(Doxygen) +if(DOXYGEN_FOUND) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile @ONLY) + add_custom_target(doc + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc + COMMENT "Generating API documentation with Doxygen" VERBATIM) + + # create doc/README.md symlink to README since Doxygen doesn't understand file with no extension + add_custom_command( + TARGET doc + PRE_BUILD + COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/README ${CMAKE_CURRENT_SOURCE_DIR}/doc/README.md) +endif(DOXYGEN_FOUND) + + +# translations +if(Qt5LinguistTools_FOUND) + message("Releasing and copying translation files") + file(GLOB TS_FILES ${PROJECT_SOURCE_DIR}/translations/*.ts) + qt5_add_translation(QM_FILES ${TS_FILES}) + add_custom_target(translations ALL DEPENDS ${QM_FILES}) + install(FILES ${QM_FILES} + DESTINATION "${CMAKE_INSTALL_PREFIX}/share/libringclient/translations") +endif() + +# uninstall +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) + +add_custom_target(uninstall + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) diff --git a/README.md b/README.md index acd99193..268939e7 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,9 @@ Then, you can build daemon, lrc and client-qt with: And you will have the daemon in `daemon/bin/dring` and the client in `client-qt/build-local/jami-qt`. You also can run it with +If you use a Qt version that is not wide-system installed you need to specify its path after the `--qt` flag, i. e., `./make-ring.py --install --qt /home//Qt/5.15.0/gcc_64 + + ```bash ./make-ring.py --run --qt ``` @@ -81,10 +84,23 @@ And you will have the daemon in `daemon/bin/dring` and the client in `client-qt/ cd client-qt mkdir build cd build -${YOUR_QT5_gcc64_PATH}/bin/qmake ../jami-qt.pro -make -j9 +cmake .. -DQT5_VER=5.15.0 -DQT5_PATH=/home//Qt/5.15.0/gcc_64 -DLRC= -DCMAKE_INSTALL_PREFIX= +make -j ``` +Variables `QT5_VER` and `QT5_PATH` are used to specify version and path for a custom installation of Qt. + +If lrc library is installed in a custom directory you can set its path with the variable LRC. Additionally you can specify built library location with `LRCLIB` (otherwise it will seach inside LRC with the suffixes `/lib`, `/build` and `/build-local`). + +After the build has finished, you are finally ready to launch jami-qt in your build directory. + +If you want to install it to the path provided by `CMAKE_INSTALL_PREFIX` you can run: + +```bash +make install +``` + + If you want more details, or separately build other projects you can check [this page](https://git.jami.net/savoirfairelinux/ring-project/wikis/technical/Build-instructions). ## Building On Native Windows @@ -184,7 +200,6 @@ Only 64-bit MSVC build can be compiled. ```bash cd client-windows - pandoc -f markdown -t html5 -o changelog.html changelog.md python make-client.py -d python make-client.py -b powershell -ExecutionPolicy Unrestricted -File copy-runtime-files.ps1 diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in new file mode 100644 index 00000000..0c64cc2b --- /dev/null +++ b/cmake/cmake_uninstall.cmake.in @@ -0,0 +1,41 @@ +# Taken from: +# https://cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F +# +# Copyright (C) 2021 Savoir-faire Linux Inc. +# +# 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. +# + +if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") +endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + +file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +string(REGEX REPLACE "\n" ";" files "${files}") +foreach(file ${files}) + message(STATUS "Uninstalling $ENV{DESTDIR}${file}") + if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + exec_program( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") + endif(NOT "${rm_retval}" STREQUAL 0) + else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + message(STATUS "File $ENV{DESTDIR}${file} does not exist.") + endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") +endforeach(file) diff --git a/copy-runtime-files.py b/copy-runtime-files.py index 03430a95..8e31b1a2 100644 --- a/copy-runtime-files.py +++ b/copy-runtime-files.py @@ -195,7 +195,7 @@ def compile_and_copy_web_resources(): print(bcolors.FAIL + "No rcc found!" + bcolors.ENDC) sys.exit() - lrc_web_resources_path = globalVar.lrc_path + os.sep + 'webresource.qrc' + lrc_web_resources_path = globalVar.lrc_path + os.sep + "src" + os.sep + 'webresource.qrc' execute_cmd(rcc + ' -binary ' + lrc_web_resources_path + ' -o ' + globalVar.output_path + os.sep + 'webresource.rcc') diff --git a/doc/Doxyfile b/doc/Doxyfile new file mode 100644 index 00000000..05f5c6d2 --- /dev/null +++ b/doc/Doxyfile @@ -0,0 +1,10 @@ +PROJECT_NAME = "jami-qt" +PROJECT_NUMBER = +INPUT = /home/ababi/ring-project/client-qt +RECURSIVE = YES +EXCLUDE = /home/ababi/ring-project/client-qt/build-local +FILE_PATTERNS = *.cpp *.h *.c *.md +INPUT_ENCODING = UTF-8 +USE_MDFILE_AS_MAINPAGE = /home/ababi/ring-project/client-qt/doc/README.md +EXTRACT_ALL = YES +EXTRACT_LOCAL_CLASSES = YES diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in new file mode 100644 index 00000000..b71f9c26 --- /dev/null +++ b/doc/Doxyfile.in @@ -0,0 +1,10 @@ +PROJECT_NAME = "@CMAKE_PROJECT_NAME@" +PROJECT_NUMBER = @PROJECT_VERSION@ +INPUT = @PROJECT_SOURCE_DIR@ +RECURSIVE = YES +EXCLUDE = @PROJECT_BINARY_DIR@ +FILE_PATTERNS = *.cpp *.h *.c *.md +INPUT_ENCODING = UTF-8 +USE_MDFILE_AS_MAINPAGE = @PROJECT_SOURCE_DIR@/doc/README.md +EXTRACT_ALL = YES +EXTRACT_LOCAL_CLASSES = YES diff --git a/doc/jami-qt.1 b/doc/jami-qt.1 new file mode 100644 index 00000000..e616b104 --- /dev/null +++ b/doc/jami-qt.1 @@ -0,0 +1,21 @@ +.\" Manpage for jami-qt. +.TH man 8 "08 April 2021" "1.0" "jami-qt man page" +.SH NAME +jami-qt \- Qt client for jami.net +.SH SYNOPSIS +jami-qt [options] +.SH DESCRIPTION +jami-qt is a qt client for jami.net +.SH OPTIONS +.B \-v, \-\-version +Display the version and exit. +.TP +.B \-d, \-\-debug +Enable debug. +.TP +.B \-h, \-\-help +Display help text and exit. +.SH SEE ALSO +dring(1) +.SH AUTHOR +Alexandre Viau (alexandre.viau@savoirfairelinux.net) diff --git a/images/jami-32px.xpm b/images/jami-32px.xpm new file mode 100644 index 00000000..e533e8c9 --- /dev/null +++ b/images/jami-32px.xpm @@ -0,0 +1,392 @@ +/* XPM */ +static char * jami_xpm[] = { +"32 32 357 2", +" c None", +". c #2B5B92", +"+ c #202654", +"@ c #262F5E", +"# c #252C5A", +"$ c #252F5D", +"% c #2865A0", +"& c #2767A2", +"* c #2569A5", +"= c #26305F", +"- c #293868", +"; c #2B4070", +"> c #2B3D6D", +", c #2B3E6E", +"' c #256BA6", +") c #2868A3", +"! c #2171AF", +"~ c #2073B2", +"{ c #1C77B7", +"] c #197ABA", +"^ c #284172", +"/ c #2C4172", +"( c #2D4879", +"_ c #2E4C7E", +": c #2E4B7D", +"< c #2E4E7F", +"[ c #2E4C7D", +"} c #2C5183", +"| c #1A7AB8", +"1 c #2074B0", +"2 c #256CA8", +"3 c #1A79B9", +"4 c #177CBC", +"5 c #147EBF", +"6 c #127FC1", +"7 c #1080C2", +"8 c #265A90", +"9 c #2D497A", +"0 c #2E4779", +"a c #2D4172", +"b c #2D5487", +"c c #2D5386", +"d c #27649A", +"e c #0D85C3", +"f c #1380BD", +"g c #1A7AB7", +"h c #2173AF", +"i c #266CA7", +"j c #117FC2", +"k c #1080C3", +"l c #0F80C3", +"m c #0F81C4", +"n c #0E81C4", +"o c #1F6EAB", +"p c #2E4B7C", +"q c #2E4678", +"r c #2C4070", +"s c #2C4A7C", +"t c #2D568A", +"u c #1F79B3", +"v c #0A8ECC", +"w c #0B8AC8", +"x c #0E85C3", +"y c #147FBD", +"z c #1B79B6", +"A c #2074B1", +"B c #0E81C5", +"C c #147DBE", +"D c #2D4577", +"E c #2C3E6F", +"F c #2B4576", +"G c #2D568B", +"H c #138FCC", +"I c #0A94D3", +"J c #0A91CF", +"K c #0A8DCB", +"L c #0B89C7", +"M c #0E84C2", +"N c #1180C2", +"O c #137EC0", +"P c #157DBE", +"Q c #275D93", +"R c #293B6A", +"S c #2B4E81", +"T c #2C4F82", +"U c #26679C", +"V c #0B9AD9", +"W c #0B98D7", +"X c #0B96D5", +"Y c #0A94D2", +"Z c #0B8DCB", +"` c #1E76B5", +" . c #2172B0", +".. c #2368A2", +"+. c #273261", +"@. c #294374", +"#. c #2A4577", +"$. c #1B86C1", +"%. c #0D9BDB", +"&. c #0C9BDB", +"*. c #0C99D9", +"=. c #0B96D4", +"-. c #1C77B6", +";. c #1F73B1", +">. c #2075B2", +",. c #2079B6", +"'. c #207EBA", +"). c #2080BC", +"!. c #1D85C1", +"~. c #1980B9", +"{. c #1980BA", +"]. c #187FB8", +"^. c #187BB4", +"/. c #1973AD", +"(. c #2069A2", +"_. c #275D94", +":. c #26669C", +"<. c #0F9CDC", +"[. c #0E9CDC", +"}. c #0D9CDC", +"|. c #0C9BDA", +"1. c #0B99D9", +"2. c #0A93D1", +"3. c #1092D0", +"4. c #0E98D8", +"5. c #0E9DDD", +"6. c #109EDE", +"7. c #0F9DDD", +"8. c #0B99D8", +"9. c #0A95D3", +"0. c #0E85C2", +"a. c #1C78B5", +"b. c #2769A4", +"c. c #1D8ECC", +"d. c #0F9EDE", +"e. c #158AC9", +"f. c #1C78B9", +"g. c #1181BF", +"h. c #0B8BC9", +"i. c #0A93D2", +"j. c #0B98D8", +"k. c #1083C1", +"l. c #1E76B3", +"m. c #2676B0", +"n. c #119EDD", +"o. c #0E9BDB", +"p. c #1C78B7", +"q. c #1D77B7", +"r. c #2074B2", +"s. c #1F75B2", +"t. c #1083C0", +"u. c #0B8CCA", +"v. c #1C94D1", +"w. c #168ECD", +"x. c #2073B1", +"y. c #2669A4", +"z. c #2769A5", +"A. c #1D77B4", +"B. c #0B97D6", +"C. c #137FBD", +"D. c #1F85C1", +"E. c #109DDD", +"F. c #1C7BB9", +"G. c #1C78B8", +"H. c #2072B1", +"I. c #2768A3", +"J. c #2C598E", +"K. c #266BA7", +"L. c #1B79B7", +"M. c #0D86C4", +"N. c #0A8FCD", +"O. c #0A96D4", +"P. c #0C9ADA", +"Q. c #0A92D0", +"R. c #157FBD", +"S. c #1196D4", +"T. c #178DCB", +"U. c #1D77B6", +"V. c #2C588C", +"W. c #246EAA", +"X. c #197BB9", +"Y. c #0C87C5", +"Z. c #0A90CE", +"`. c #0C9AD9", +" + c #149EDD", +".+ c #1697D4", +"++ c #1790CD", +"@+ c #1486C3", +"#+ c #1285C3", +"$+ c #0E9ADA", +"%+ c #2866A1", +"&+ c #2D578B", +"*+ c #2370AC", +"=+ c #177DBA", +"-+ c #1095D4", +";+ c #198AC6", +">+ c #207EB7", +",+ c #2674AA", +"'+ c #2A6FA5", +")+ c #2D679A", +"!+ c #2D598D", +"~+ c #2D5488", +"{+ c #2C5A8F", +"]+ c #2A6097", +"^+ c #1A7CB5", +"/+ c #24679E", +"(+ c #2070AB", +"_+ c #1B78B7", +":+ c #28669F", +"<+ c #2172AF", +"[+ c #147FBC", +"}+ c #157FBB", +"|+ c #216EA5", +"1+ c #285689", +"2+ c #2C4272", +"3+ c #2C4171", +"4+ c #2B5C91", +"5+ c #29639A", +"6+ c #27679F", +"7+ c #256BA4", +"8+ c #236EA9", +"9+ c #2172AD", +"0+ c #1F75B1", +"a+ c #187DBA", +"b+ c #1380BE", +"c+ c #0F8ECA", +"d+ c #273B6A", +"e+ c #2A3969", +"f+ c #2C4071", +"g+ c #294E81", +"h+ c #265E95", +"i+ c #2469A5", +"j+ c #28659E", +"k+ c #2D5689", +"l+ c #236FAA", +"m+ c #285D93", +"n+ c #2D4D7F", +"o+ c #2A5B90", +"p+ c #1C79B5", +"q+ c #197BB8", +"r+ c #167EBB", +"s+ c #1082C0", +"t+ c #0F85C2", +"u+ c #0D87C4", +"v+ c #1683C1", +"w+ c #225E91", +"x+ c #2A3A6A", +"y+ c #2A3C6D", +"z+ c #2D4A7C", +"A+ c #2C5488", +"B+ c #2D5588", +"C+ c #2E568B", +"D+ c #1B7AB5", +"E+ c #0B93D1", +"F+ c #1C71AA", +"G+ c #2B3F6F", +"H+ c #2C4374", +"I+ c #2D4B7E", +"J+ c #2C5C94", +"K+ c #2B5C95", +"L+ c #29639B", +"M+ c #0E90CE", +"N+ c #0B94D2", +"O+ c #0C97D5", +"P+ c #0C98D6", +"Q+ c #0C99D7", +"R+ c #1195D3", +"S+ c #266DA8", +"T+ c #256CA7", +"U+ c #2B4B7D", +"V+ c #2D4576", +"W+ c #2D4778", +"X+ c #2D487A", +"Y+ c #2E4A7C", +"Z+ c #2C5B92", +"`+ c #2A6099", +" @ c #2A5D95", +".@ c #2A5F98", +"+@ c #2A609A", +"@@ c #2179B4", +"#@ c #0D9AD8", +"$@ c #0D9BD9", +"%@ c #0E9BD9", +"&@ c #0E9CDA", +"*@ c #0E9CDB", +"=@ c #1691CE", +"-@ c #2B588D", +";@ c #2C568B", +">@ c #2A5F99", +",@ c #2D4678", +"'@ c #2B4475", +")@ c #294576", +"!@ c #274779", +"~@ c #264F83", +"{@ c #2275B1", +"]@ c #1B8AC5", +"^@ c #0F9DDB", +"/@ c #0F9DDC", +"(@ c #1B88C3", +"_@ c #2E4D7F", +":@ c #2E4A7D", +"<@ c #2E5488", +"[@ c #2E5083", +"}@ c #2D4475", +"|@ c #2A3D6D", +"1@ c #1B72AC", +"2@ c #1F75B4", +"3@ c #1496D4", +"4@ c #109EDD", +"5@ c #1E81BA", +"6@ c #2E4A7B", +"7@ c #2E487A", +"8@ c #2E5487", +"9@ c #1D74B1", +"0@ c #117FC1", +"a@ c #187BBB", +"b@ c #1F74B2", +"c@ c #2373AF", +"d@ c #119CDC", +"e@ c #1F7DB6", +"f@ c #2E4778", +"g@ c #2D4375", +"h@ c #2D4173", +"i@ c #2E4F81", +"j@ c #2E5285", +"k@ c #2E5589", +"l@ c #1B77B5", +"m@ c #127FC0", +"n@ c #197ABB", +"o@ c #1F7CB8", +"p@ c #1C81BB", +"q@ c #2B3C6C", +"r@ c #2A3767", +"s@ c #2D4374", +"t@ c #2E497A", +"u@ c #2A5A90", +"v@ c #187ABA", +"w@ c #0F80C4", +"x@ c #1A7ABA", +"y@ c #1C83C0", +"z@ c #0B97D5", +"A@ c #1489C5", +"B@ c #245081", +"C@ c #272F5E", +"D@ c #252D5C", +"E@ c #26629B", +"F@ c #137EBF", +"G@ c #2270AE", +"H@ c #1574AC", +"I@ c #1B78B8", +"J@ c #147DBF", +"K@ c #0D87C5", +"L@ c #1182BF", +"M@ c #167DBB", +"N@ c #1E77B3", +"O@ c #236FAB", +"P@ c #2669A3", +" ", +" . + @ # $ % ", +" & * = - ; > > , ' ) ", +" ! ~ { ] ^ / ( _ : < [ [ [ } | 1 2 ) ", +" 3 4 5 6 7 8 9 _ : 0 a b c c c c d e f g h i ", +" 6 j k l m n o _ p q r s t t t t t u v w x y z A ", +" m m B B m m C _ D E F G G G G G G H I J K L M f ", +" m l k N O P Q > R S T T T T T U V W X Y J Z ", +" 6 5 4 3 ` ...+.@.#.#.#.#.#.#.$.%.&.*.W =.Y ", +" -.;.>.,.'.).!.~.{.].^./.(._.:.<.[.}.%.|.1.W ", +" 2.3.4.}.5.6.7.[.%.8.9.v 0.a.b.c.d.7.5.[.}.&.e.f. ", +" g.h.i.W &.}.7.6.7.[.&.j.I Z k.l.m.n.d.6.d.7.5.o.p.f.q.r. ", +" s.t.u.I W &.[.7.6.7.}.&.W Y u.g.1 v.[.5.7.d.6.d.w.q.f.q.x.y. ", +"z.A.M v 9.8.&.[.7.6.7.}.|.B.2.w C.D.o.%.}.[.5.7.E.F.G.G.q.H.I.J.", +"K.L.M.N.O.*.%.[.7.6.5.}.P.B.Q.L R.S.W *.&.}.}.[.T.` G.G.U. .& V.", +"W.X.Y.Z.X `.}.5.d.d.7.n. +.+++@+#+J I X W `.&.$+>.U.G.G.U. .%+&+", +"*+=+L J X -+;+>+,+'+)+!+~+&+{+]+f L K Q.9.X W ^+/+(+_+f.U.! :+t ", +"<+[+}+|+1+2+3+3+2+4+5+6+7+8+9+0+a+b+e w v Q.c+d+e+3+f+g+h+i+j+k+", +"l+m+n+n+n+n+n+n+n+o+p+q+r+f s+t+u+v+g b+M.w w+x+y+z+n+n+n+n+A+B+", +"C+C+C+C+C+C+C+C+C+C+D+L h.Z v Z.Q.E+,.A q+F+G+/ H+I+C+C+C+C+C+ ", +" J+K+K+K+K+K+K+K+L+M+N+=.=.O+P+Q+R+S+T+U+V+W+X+Y+Z+K+K+J+ ", +" `+ @.@+@+@+@+@@@#@$@%@&@&@*@*@=@-@9 Y+[ _ _ ;@>@ ", +" _ ,@'@)@!@~@{@]@^@^@/@/@/@/@7.(@_@_ _ _ : :@ ", +" <@[@: }@|@1@2@T+3@E.4@4@6.6.6.6.5@: Y+6@7@0 ", +" G t 8@[@9@0@a@b@c@d@7.7.7.7.5.5.[.e@f@V+g@h@ ", +" i@j@k@J.l@m l m@n@x.o@[.[.}.}.}.%.&.&.p@H+q@e+r@ ", +" s@t@u@v@w@B m l O x@! y@&.P.`.1.8.W B.z@A@B@C@D@ ", +" E@-.P 7 m B m k F@3 G@W X O.9.Y 2.J Z.v u.H@ ", +" ! I@J@7 m B m k 5 J v u.w L K@x t.L@ ", +" 3 F@k m B b+M@q+a.N@ ", +" a@O l O@y.P@ ", +" "}; diff --git a/images/jami-48px.png b/images/jami-48px.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea8bd314d38a31242d4d11ca1283c79113ac4d5 GIT binary patch literal 3894 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 Ef@hFmMgRZ+ literal 0 HcmV?d00001 diff --git a/images/jami.svg b/images/jami.svg new file mode 100644 index 00000000..6f4f9c3e --- /dev/null +++ b/images/jami.svg @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jami-qt.appdata.xml b/jami-qt.appdata.xml new file mode 100644 index 00000000..2c799988 --- /dev/null +++ b/jami-qt.appdata.xml @@ -0,0 +1,89 @@ + + + + net.jami.Jami + CC-BY-SA-3.0 + GPL-3.0+ + Jami + Privacy-oriented voice, video, chat, and conference platform + jami + +

+ An end-to-end encrypted secure and distributed voice, video, and + chat communication platform that requires no central server and + leaves the power of privacy and freedom in the hands of users. +

+

+ Jami supports the following key features: +

+
    +
  • One-to-one conversations
  • +
  • File sharing
  • +
  • Audio calls and conferences
  • +
  • Video calls and conferences
  • +
  • Screen sharing in video calls and conferences
  • +
  • Recording and sending audio messages
  • +
  • Recording and sending video messages
  • +
  • Functioning as a SIP phone software
  • +
+

+ Client applications for GNU/Linux, Windows, macOS, iOS, Android, + and Android TV are available, making Jami an interoperable and + cross-platform communication framework. +

+
+ + https://jami.net/ + https://git.jami.net/savoirfairelinux/jami-client-qt/issues + https://www.transifex.com/savoirfairelinux/jami + + + + + + Send Audio, Video and Chat messages + https://dl.jami.net/media-resources/screenshots/jami_linux_audiovideo.png + + + Easily share desktop contents + https://dl.jami.net/media-resources/screenshots/jami_linux_screenshare.png + + + Crystal clear audio calls between Jami users + + + + Conference calls with an unlimited participants + + + + Encrypted and secure text messaging, no servers + + + + Send files of all sizes + + + + + jami-qt.desktop + + jami-qtjami + + + Network + P2P + InstantMessaging + FileTransfer + + + jami-client-qt + + + intense + intense + + + net.jami.daemon + +
diff --git a/jami-qt.desktop b/jami-qt.desktop new file mode 100644 index 00000000..4b86212a --- /dev/null +++ b/jami-qt.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=Jami +GenericName=Jami +Comment=Jami is a secured and distributed communication software +Exec=jami-qt %u +Icon=jami +StartupNotify=true +Terminal=false +Type=Application +Categories=Network;Telephony; +Keywords=Qt;chat;talk;im;message;voip; \ No newline at end of file diff --git a/jami-qt.desktop.autostart b/jami-qt.desktop.autostart new file mode 100644 index 00000000..b0de0c0c --- /dev/null +++ b/jami-qt.desktop.autostart @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Jami +GenericName=Jami +Comment=Jami is a secured and distributed communication software +Exec=jami-qt +Icon=jami +StartupNotify=true +Terminal=false +Type=Application +Categories=Qt;Network;Telephony; diff --git a/jami-qt.pro b/jami-qt.pro index 9fc5d632..0656c657 100644 --- a/jami-qt.pro +++ b/jami-qt.pro @@ -95,29 +95,48 @@ unix { QMAKE_CXXFLAGS += -std=c++17 } - INCLUDEPATH += ../src + # Client source path + INCLUDEPATH += $$PWD/src - isEmpty(LRC) { - LRC=$$PWD/../install/lrc + # Default LRC path + isEmpty(LRC) { LRC=$$PWD/../install/lrc } + + # Check if LRC is installed or in project dir + exists($${LRC}/include/libringclient) { INCLUDEPATH += $${LRC}/include/libringclient - LIBDIR = $${LRC}/lib + message(Will expect lrc headers in $${LRC}/include/libringclient) } else { INCLUDEPATH += $${LRC}/src - isEmpty(LRCBUILD) { - LIBDIR = $${LRC}/build + message(Will expect lrc headers in $${LRC}/src) + } + + # TODO: subdirs should be added as suffixes to $${LRC} + isEmpty(LRCLIB) { + exists($${LRC}/lib) { + LRCLIB = $${LRC}/lib } else { - LIBDIR = $${LRCBUILD} + LRCLIB = $${LRC}/build-local } } - QMAKE_RPATHDIR += $${LIBDIR} - LIBS += -L$${LIBDIR} -lringclient + # Include LRC lib path if custom installation + contains(LRCLIB, .*/usr.*) { + LIBS += -lringclient + message(Will expect lrc library in /usr) + } else { + QMAKE_RPATHDIR += $${LRCLIB} + LIBS += -L$${LRCLIB} -lringclient + message(Will expect lrc library in $${LRCLIB}) + } + LIBS += -lqrencode LIBS += -lX11 CONFIG += link_pkgconfig PKGCONFIG += libnm + # TODO: set global installation like cmake (correct + # installation paths, desktop files, autostart...) isEmpty(PREFIX) { PREFIX = /tmp/$${TARGET}/bin } target.path = $$PREFIX/bin INSTALLS += target diff --git a/src/jami b/src/jami new file mode 100644 index 00000000..2f1ff327 --- /dev/null +++ b/src/jami @@ -0,0 +1,68 @@ +#!/bin/bash +# +# Copyright (C) 2015-2021 Savoir-faire Linux Inc. +# Author: Emmanuel Lepage Vallee +# Author: Stepan Salenikovich +# Author: Albert BabĂ­ +# +# 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. +# + +HAS_KDE=0 +HAS_GNOME=0 +HAS_QT=0 + +if type "ring-kde" > /dev/null 2> /dev/null; then + HAS_KDE=1 +fi + +if type "jami-gnome" > /dev/null 2> /dev/null; then + HAS_GNOME=1 +fi + +if type "jami-qt" > /dev/null 2> /dev/null; then + HAS_QT=1 +fi + +# client-qt always top priority +if [ $HAS_QT == "1" ]; then + jami-qt $* + exit $? +fi + +# No clients installed +if [ $HAS_KDE == "0" ] && [ $HAS_GNOME == "0" ]; then + echo "Jami not found" >&2 + exit 1 +fi + +# Only one client is installed +if [ $HAS_KDE == "1" ] && [ $HAS_GNOME == "0" ]; then + ring-kde $* + exit $? +elif [ $HAS_KDE == "0" ] && [ $HAS_GNOME == "1" ]; then + jami-gnome $* + exit $? +fi + +# Both clients installed: run KDE client if KDE wm is running +# else use the Gnome client. +if [ -z "$(ps aux | grep kwin | grep -v grep)" ]; then + jami-gnome $* + exit $? +else + ring-kde $* + exit $? +fi diff --git a/src/mainview/components/MessageWebView.qml b/src/mainview/components/MessageWebView.qml index b6610f8b..e55d2853 100644 --- a/src/mainview/components/MessageWebView.qml +++ b/src/mainview/components/MessageWebView.qml @@ -293,7 +293,7 @@ Rectangle { messageWebView.runJavaScript(UtilsAdapter.getStyleSheet( "chatwin", UtilsAdapter.qStringFromFile( - ":/chatview-windows.css"))) + ":/chatview-qt.css"))) messageWebView.runJavaScript(UtilsAdapter.qStringFromFile( ":/linkify.js")) messageWebView.runJavaScript(UtilsAdapter.qStringFromFile(