...
 
Commits (463)
AccessModifierOffset: -8
AlignAfterOpenBracket: DontAlign
AlignConsecutiveAssignments: true
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: DontAlign
AlignOperands: true
AlignTrailingComments: true
#AllowAllArgumentsOnNextLine: false
#AllowAllConstructorInitializersOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false
#AllowShortLambdasOnASingleLine: Empty
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
# AfterCaseLabel: false
AfterClass: true
AfterControlStatement: false
AfterEnum: false
AfterFunction: true
AfterNamespace: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakAfterJavaFieldAnnotations: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Linux
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: BeforeColon
BreakInheritanceList: BeforeColon
BreakStringLiterals: true
ColumnLimit: 90
CommentPragmas: ''
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 8
ContinuationIndentWidth: 8
Cpp11BracedListStyle: true
DerivePointerAlignment: false
FixNamespaceComments: true
IncludeBlocks: Preserve
IndentCaseLabels: false
#IndentPPDirectives: BeforeHash
IndentWidth: 8
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: false
Language: Cpp
NamespaceIndentation: All
PenaltyBreakBeforeFirstCallParameter: 90
PenaltyBreakComment: 90
PenaltyBreakFirstLessLess: 0
PenaltyBreakString: 90
PenaltyExcessCharacter: 1
PenaltyReturnTypeOnItsOwnLine: 20
PointerAlignment: Right
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: true
#SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInContainerLiterals: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
TabWidth: 8
UseTab: ForContinuationAndIndentation
# EditorConfig file, https://EditorConfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
charset = utf-8
# Tab indentation (no size specified)
[src/*.*]
indent_style = tab
[src/qml/**]
indent_style = tab
[utils/travis/**]
indent_style = tab
[*.py]
indent_style = tab
[*.plist]
indent_style = tab
[CMakeLists.txt]
indent_style = tab
# 4 space indentation
[src/qxmpp-exts/**]
indent_style = space
indent_size = 4
[src/singleapp/**]
indent_style = space
indent_size = 4
[misc/android/{AndroidManifest.xml,build.gradle}]
indent_style = space
indent_size = 4
[utils/build-*]
indent_style = space
indent_size = 4
[clickable.json]
indent_style = space
indent_size = 2
[*.qrc]
indent_style = space
indent_size = 4
[*.pl]
indent_style = space
indent_size = 4
################### Kaidan ####################
kaidan
kaidan_automoc.cpp
misc/ubuntu-touch/manifest.json
misc/windows/*-kaidan.png
misc/macos/kaidan.iconset
misc/android/res/mipmap-*
3rdparty/openssl
3rdparty/qxmpp
3rdparty/linuxdeployqt
################### AppImage #################
AppDir/
......@@ -101,10 +109,11 @@ moc_*.cpp
qrc_*.cpp
ui_*.h
Makefile*
*build-*
# QtCreator
misc/android/gradle.properties
misc/android/gradle.properties~
misc/android/local.properties~
*.autosave
# QtCtreator Qml
......@@ -133,3 +142,7 @@ install_manifest.txt
*.swp
.vscode/
.directory
.DS_Store
src/tags
stages:
- test
- build
- deploy
clazy:
stage: test
image: kaidan/neon-bionic
variables:
CMAKE_CXX_COMPILER: clazy
script: utils/travis/build.sh
qmllint:
stage: test
image: kaidan/neon-bionic
script: qmllint $(find . -name "*.qml")
variables:
QT_SELECT: 5
ubuntu-trusty:
stage: build
image: kaidan/ubuntu-trusty
script: utils/travis/build.sh
neon-bionic:
stage: build
image: kaidan/neon-bionic
script: utils/travis/build.sh
debian-sid:
stage: build
image: kaidan/debian-unstable
script: utils/travis/build.sh
archlinux:
stage: build
image: kaidan/archlinux
script: utils/travis/build.sh
linux-appimage:
stage: deploy
image: kaidan/ubuntu-trusty
script: utils/build-linux-appimage.sh
variables:
QXMPP_BUILD: /usr
allow_failure: true
artifacts:
paths:
- "*.AppImage"
- "*.AppImage.zsync"
expire_in: 1 week
click-xenial:
stage: deploy
image: kaidan/ubuntu-touch-xenial
script: utils/travis/build.sh
allow_failure: true
variables:
PLATFORM: ubuntu-touch
artifacts:
paths:
- "*.click"
expire_in: 1 week
windows-mxe:
stage: deploy
image: kaidan/windows-mxe
script:
- utils/build-windows-mxe.sh
- mv build/bin/kaidan.exe kaidan.exe
allow_failure: true
artifacts:
paths:
- "kaidan.exe"
expire_in: 1 week
android:
stage: deploy
image: kdeorg/android-sdk
script:
- sudo apt update
- sudo apt -y install inkscape optipng
- GIT_EXTRA="--branch ${KF5_VERSION}" /opt/helpers/build-kde-dependencies --withProject kirigami
- /opt/helpers/build-cmake qxmpp https://github.com/qxmpp-project/qxmpp.git -DBUILD_EXAMPLES=OFF -DBUILD_TESTS=OFF
- GIT_EXTRA="--branch ${CI_COMMIT_REF_NAME} --recursive" /opt/helpers/build-cmake ${CI_PROJECT_NAME} ${CI_REPOSITORY_URL} -DQTANDROID_EXPORTED_TARGET=kaidan -DANDROID_APK_DIR=${CI_PROJECT_DIR}/src/${CI_PROJECT_NAME}/misc/android -DI18N=1 -DUSE_KNOTIFICATIONS=OFF
- ${CI_PROJECT_DIR}/src/${CI_PROJECT_NAME}/utils/render-logos.sh
- /opt/helpers/create-apk ${CI_PROJECT_NAME}
- mv ${CI_PROJECT_DIR}/build/${CI_PROJECT_NAME}/kaidan_build_apk/build/outputs/apk/kaidan_build_apk-debug.apk ${CI_PROJECT_DIR}
variables:
KF5_VERSION: master
allow_failure: true
artifacts:
paths:
- "kaidan_build_apk-debug.apk"
expire_in: 1 week
mac-osxcross:
stage: deploy
image: kaidan/mac-osxcross
script:
- utils/build-mac-osxcross.sh
- tar -cf kaidan.tar -C build/bin/ kaidan.app
allow_failure: true
artifacts:
paths:
- "kaidan.tar"
expire_in: 1 week
variables:
GIT_SUBMODULE_STRATEGY: recursive
BUILD_SYSTEM: cmake
BUILD_TYPE: Release
[submodule "libs/kaidansf"]
path = libs/kaidansf
url = https://github.com/kaidanim/kaidansf
[submodule "3rdparty/kirigami"]
path = 3rdparty/kirigami
url = https://github.com/KDE/kirigami
[submodule "3rdparty/breeze-icons"]
path = 3rdparty/breeze-icons
url = https://github.com/kde/breeze-icons
[submodule "3rdparty/qxmpp"]
path = 3rdparty/qxmpp
url = https://github.com/qxmpp-project/qxmpp
sudo: required
language: cpp
compiler: gcc
services:
- docker
before_install:
- docker pull debian:sid-slim
cache:
ccache: true
directories:
- /var/cache/apt/archives
sudo: required
dist: trusty
install:
- ./utils/travis/dependencies.sh
script:
- docker run -v $PWD:/mnt/kaidan debian:sid-slim /bin/bash -c "cd /mnt/kaidan/utils; ./travis-dependencies.sh; ./travis-build.sh"
- . utils/travis/common.sh
- env_setup
- ./utils/travis/build.sh
matrix:
include:
- env: BUILD_SYSTEM=cmake
git:
submodules: false
- env: PLATFORM=ubuntu-touch
git:
submodules: false
# only cache apt archives
cache:
directories:
- /var/cache/apt/archives
notifications:
email: false
Subproject commit a4bc2e5f38de971aef396655e6c122ec2a8aaeac
Subproject commit a2b0da8b540186eb4d25d1ae70618f231248d4e5
Subproject commit e6eb0b78d0cb17fccd5ddb60966ba2a0a2d2b593
cmake_minimum_required(VERSION 2.8.11)
cmake_minimum_required(VERSION 3.3)
find_package(ECM 5.40.0 REQUIRED NO_MODULE)
set(CMAKE_CXX_STANDARD 14)
set(QT_MIN_VERSION "5.7.0")
set(BOOST_MIN_VERSION "1.34.1")
set(QT_MIN_VERSION "5.8.0")
project(kaidan)
if(POLICY CMP0071)
cmake_policy(SET CMP0071 NEW)
endif()
# CMake options
option(I18N "Enable i18n support" FALSE)
option(SAILFISH_OS "Build with Sailfish OS GUI, needs libs/kaidansf submodule" FALSE)
project(kaidan)
# application name
set(APPLICATION_ID "io.github.kaidanim")
set(APPLICATION_ID "im.kaidan.kaidan")
set(APPLICATION_NAME "kaidan")
set(APPLICATION_DISPLAY_NAME "Kaidan")
set(APPLICATION_DESCRIPTION "Cross platform XMPP client")
# Version
set(VERSION_MAJOR 0)
set(VERSION_MINOR 3)
set(VERSION_PATCH 2)
#set(VERSION_EXTRA "dev")
set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
if(VERSION_EXTRA)
set(VERSION_STRING ${VERSION_STRING}-${VERSION_EXTRA})
if(UBUNTU_TOUCH)
set(APPLICATION_NAME "${APPLICATION_ID}")
endif()
set(VERSION_STRING "0.4.0~dev")
set(DEVELOPMENT_BUILD TRUE)
set(ANDROID_VERSION_CODE 3)
# CMake options
option(I18N "Enable i18n support" FALSE)
option(STATIC_BUILD "Build Kaidan statically")
option(UBUNTU_TOUCH "Building an Ubuntu Touch click (internal use only!)" FALSE)
option(CLICK_ARCH "Architecture that will be used in the click's manifest")
option(CLICK_DATE "Date used in the version number in the click's manifest")
option(QUICK_COMPILER "Use QtQuick compiler to improve performance" FALSE)
option(USE_KNOTIFICATIONS "Use KNotifications for displaying notifications" TRUE)
option(BUNDLE_ICONS "Bundle breeze icons" FALSE)
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
......@@ -33,22 +36,70 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
# CMake modules include
include(FeatureSummary)
include(GNUInstallDirs)
set(AUTOMOC_MOC_OPTIONS -Muri=${APPLICATION_ID})
#
# Dependecies
#
# CMake module path
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
# CMake modules include
include(KDEInstallDirs)
include(KDECompilerSettings NO_POLICY_SCOPE)
include(KDECMakeSettings)
include(ECMInstallIcons)
include(FeatureSummary)
kde_enable_exceptions()
# Find packages
find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Qml Quick Sql QuickControls2)
find_package(PkgConfig REQUIRED)
find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Qml Quick Svg Sql QuickControls2 Xml)
find_package(KF5Kirigami2 REQUIRED)
find_package(Gloox REQUIRED)
pkg_search_module(QXmpp REQUIRED qxmpp>=0.9)
# Optional QtQuickCompiler
if(QUICK_COMPILER)
find_package(Qt5QuickCompiler)
set_package_properties(Qt5QuickCompiler PROPERTIES
DESCRIPTION "Compile QML at build time"
TYPE OPTIONAL
)
endif()
if(USE_KNOTIFICATIONS)
find_package(KF5Notifications REQUIRED)
set(__KF5Notifications_LIBRARIES KF5::Notifications)
add_definitions(-DHAVE_KNOTIFICATIONS)
endif()
# Optional QWidget style integration (not on mobile)
if(NOT UBUNTU_TOUCH AND NOT ANDROID AND NOT IOS)
find_package(Qt5Widgets)
set_package_properties(Qt5Widgets PROPERTIES
DESCRIPTION "Integration with QWidget based desktop styles"
TYPE OPTIONAL
)
endif()
# Platform-specific
if(Qt5Widgets_FOUND)
add_definitions(-DHAVE_QWIDGETS -DQAPPLICATION_CLASS=QApplication)
set(__Qt5Widgets_LIBRARIES Qt5::Widgets)
else()
add_definitions(-DQAPPLICATION_CLASS=QGuiApplication)
endif()
if(ANDROID)
find_package(Qt5 REQUIRED COMPONENTS AndroidExtras)
endif()
if(ANDROID OR WIN32)
pkg_search_module(OPENSSL REQUIRED openssl IMPORTED_TARGET)
message(STATUS "Using OpenSSL ${OPENSSL_VERSION}")
endif()
#
# Load submodules
......@@ -62,104 +113,301 @@ if(I18N)
include("${CMAKE_SOURCE_DIR}/i18n/CMakeLists.txt")
endif()
# Sailfish OS GUI
if(SAILFISH_OS)
if(EXISTS "${CMAKE_SOURCE_DIR}/libs/kaidansf/CMakeLists.txt")
include("${CMAKE_SOURCE_DIR}/libs/kaidansf/CMakeLists.txt")
else()
message(FATAL_ERROR "Could NOT find KaidanSF adaptions for Sailfish OS.")
endif()
endif()
#
# Sources / Resources
#
# normal kirigami GUI, if no Sailfish OS build
if(NOT SAILFISH_OS)
set(KAIDAN_QML_QRC kaidan_qml.qrc)
# Include bundled icons on Ubuntu Touch, Android, Windows, macOS and iOS
if(BUNDLE_ICONS OR UBUNTU_TOUCH OR ANDROID OR WIN32 OR APPLE)
set(KAIDAN_ICONS_QRC kirigami-icons.qrc)
endif()
# Bundle images on Android, Windows, macOS and iOS
if(ANDROID OR WIN32 OR APPLE)
set(KAIDAN_IMAGES_QRC "data/images/images.qrc")
endif()
# Set app icon
if(APPLE)
set(KAIDAN_ICNS "${CMAKE_SOURCE_DIR}/misc/macos/kaidan.icns")
set_source_files_properties(${KAIDAN_ICNS} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
elseif(WIN32)
include(ECMAddAppIcon)
file(GLOB WIN_ICONS_SRCS "${CMAKE_SOURCE_DIR}/misc/windows/*kaidan.png")
message(STATUS ${WIN_ICONS_SRCS})
ecm_add_app_icon(KAIDAN_ICNS ICONS ${WIN_ICONS_SRCS})
message(STATUS ${KAIDAN_ICNS})
endif()
link_directories(${QXmpp_LIBDIR})
if(QUICK_COMPILER)
qtquick_compiler_add_resources(KAIDAN_QML_QRC kaidan_qml.qrc)
else()
qt5_add_resources(KAIDAN_QML_QRC kaidan_qml.qrc)
endif()
add_executable(${PROJECT_NAME}
MACOSX_BUNDLE
WIN32
${KAIDAN_ICNS}
${KAIDAN_SOURCES}
${KAIDAN_QML_QRC}
${I18N_QRC_CPP} # only set if enabled
${KAIDANSF_SOURCES} #
${KAIDAN_ICONS_QRC} # only set if enabled
${KAIDAN_IMAGES_QRC} #
${I18N_QRC_CPP} #
)
#
# Linker Flags
#
target_link_libraries(${PROJECT_NAME}
Qt5::Core
Qt5::Sql
Qt5::Qml
Qt5::Quick
${GLOOX_LIBRARIES}
Qt5::Svg
Qt5::Network
Qt5::Xml
${__Qt5Widgets_LIBRARIES}
${__KF5Notifications_LIBRARIES}
# currently needs to be hardcoded for windows builds
qxmpp
)
target_include_directories(${PROJECT_NAME} PUBLIC
${QXmpp_INCLUDE_DIRS}
)
target_compile_options(${PROJECT_NAME} PUBLIC
${QXmpp_CFLAGS_OTHER}
)
if(ANDROID OR WIN32 OR IOS)
target_link_libraries(${PROJECT_NAME} Qt5::QuickControls2 KF5::Kirigami2)
endif()
if(ANDROID OR WIN32)
target_link_libraries(${PROJECT_NAME} PkgConfig::OPENSSL)
endif()
if(ANDROID)
target_link_libraries(${PROJECT_NAME} Qt5::AndroidExtras)
endif()
if(STATIC_BUILD)
add_definitions(-DQXMPP_BUILD)
find_package(Perl REQUIRED)
set(STATIC_DEPENDENCIES_CMAKE_FILE "${CMAKE_BINARY_DIR}/QtStaticDependencies.cmake")
if(EXISTS ${STATIC_DEPENDENCIES_CMAKE_FILE})
file(REMOVE ${STATIC_DEPENDENCIES_CMAKE_FILE})
endif()
get_target_property(QT_LIBDIR Qt5::Core LOCATION)
get_filename_component(QT_LIBDIR ${QT_LIBDIR} DIRECTORY)
macro(CONVERT_PRL_LIBS_TO_CMAKE _qt_component)
if(TARGET Qt5::${_qt_component})
get_target_property(_lib_location Qt5::${_qt_component} LOCATION)
execute_process(COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/utils/convert-prl-libs-to-cmake.pl
--lib ${_lib_location}
--libdir ${QT_LIBDIR}
--out ${STATIC_DEPENDENCIES_CMAKE_FILE}
--component ${_qt_component}
--compiler ${CMAKE_CXX_COMPILER_ID}
)
endif()
endmacro()
link_directories(${_qt5_install_prefix}/../)
foreach(qt_module Gui Quick QuickControls2 Network Qml Svg Sql QSQLiteDriverPlugin
QJpegPlugin QGifPlugin QSvgPlugin QSvgIconPlugin QICOPlugin QGenericEnginePlugin
QLocalClientConnectionFactory QTcpServerConnectionFactory)
CONVERT_PRL_LIBS_TO_CMAKE(${qt_module})
endforeach()
if(WIN32)
CONVERT_PRL_LIBS_TO_CMAKE(QWindowsIntegrationPlugin)
elseif(IOS)
foreach(qt_module QIOSIntegrationPlugin QMacHeifPlugin QMacJp2Plugin
QICNSPlugin QTgaPlugin QTiffPlugin QWbmpPlugin QWebpPlugin)
CONVERT_PRL_LIBS_TO_CMAKE(${qt_module})
endforeach()
endif()
if(NOT EXISTS ${STATIC_DEPENDENCIES_CMAKE_FILE})
message(FATAL_ERROR "Unable to find ${STATIC_DEPENDENCIES_CMAKE_FILE}")
endif()
include(${STATIC_DEPENDENCIES_CMAKE_FILE})
set(QT_QML_PATH ${_qt5Quick_install_prefix})
find_library(KIRIGAMI_PLUGIN kirigamiplugin PATHS ${Kirigami2_INSTALL_PREFIX}/${KDE_INSTALL_QMLDIR}/org/kde/kirigami.2)
find_library(QUICK_PLUGIN qtquick2plugin PATHS ${QT_QML_PATH}/qml/QtQuick.2)
find_library(LABS_PLATFORM_PLUGIN qtlabsplatformplugin PATHS ${QT_QML_PATH}/qml/Qt/labs/platform)
find_library(GRAPHEFFECTS_PLUGIN qtgraphicaleffectsplugin PATHS ${QT_QML_PATH}/qml/QtGraphicalEffects)
find_library(GRAPHEFFECTS_PRIVATE_PLUGIN qtgraphicaleffectsprivate PATHS ${QT_QML_PATH}/qml/QtGraphicalEffects/private)
find_library(QQC2_PLUGIN qtquickcontrols2plugin PATHS ${QT_QML_PATH}/qml/QtQuick/Controls.2)
find_library(QQC2_MATERIAL_PLUGIN qtquickcontrols2materialstyleplugin PATHS ${QT_QML_PATH}/qml/QtQuick/Controls.2/Material)
find_library(QQC2_UNIVERSAL_PLUGIN qtquickcontrols2universalstyleplugin PATHS ${QT_QML_PATH}/qml/QtQuick/Controls.2/Universal)
find_library(QLAYOUTS_PLUGIN qquicklayoutsplugin PATHS ${QT_QML_PATH}/qml/QtQuick/Layouts)
find_library(QWINDOW_PLUGIN windowplugin PATHS ${QT_QML_PATH}/qml/QtQuick/Window.2)
find_library(QSHAPES_PLUGIN qmlshapesplugin PATHS ${QT_QML_PATH}/qml/QtQuick/Shapes)
find_library(QUICKSHAPES Qt5QuickShapes PATHS ${QT_LIBDIR})
find_library(QTEMPLATES_PLUGIN qtquicktemplates2plugin PATHS ${QT_QML_PATH}/qml/QtQuick/Templates.2)
find_library(QMODELS_PLUGIN modelsplugin PATHS ${QT_QML_PATH}/qml/QtQml/Models.2)
target_link_libraries(${PROJECT_NAME}
${plugin_libs}
Qt5::QSQLiteDriverPlugin
Qt5::QJpegPlugin
Qt5::QGifPlugin
Qt5::QSvgPlugin
Qt5::QSvgIconPlugin
Qt5::QICOPlugin
Qt5::QGenericEnginePlugin
Qt5::QLocalClientConnectionFactory
Qt5::QTcpServerConnectionFactory
${KIRIGAMI_PLUGIN}
${QUICK_PLUGIN}
${LABS_PLATFORM_PLUGIN}
${GRAPHEFFECTS_PLUGIN}
${GRAPHEFFECTS_PRIVATE_PLUGIN}
${QQC2_PLUGIN}
${QQC2_MATERIAL_PLUGIN}
${QQC2_UNIVERSAL_PLUGIN}
${QLAYOUTS_PLUGIN}
${QWINDOW_PLUGIN}
${QSHAPES_PLUGIN}
${QUICKSHAPES}
${QTEMPLATES_PLUGIN}
${QMODELS_PLUGIN}
${__Qt5Widgets_LIBRARIES}
)
if(WIN32)
target_link_libraries(${PROJECT_NAME}
Qt5::QWindowsIntegrationPlugin
)
elseif(IOS)
target_link_libraries(${PROJECT_NAME}
Qt5::QIOSIntegrationPlugin
Qt5::QMacHeifPlugin
Qt5::QMacJp2Plugin
Qt5::QICNSPlugin
Qt5::QTgaPlugin
Qt5::QTiffPlugin
Qt5::QWbmpPlugin
Qt5::QWebpPlugin
)
endif()
endif()
# Set a custom plist file for the app bundle
if(APPLE)
if(IOS)
set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/misc/ios/Info.plist)
else()
set_target_properties(${PROJECT_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/misc/macos/Info.plist)
endif()
endif()
#
# Global C++ variables
#
if(SAILFISH_OS)
set(KAIDAN_COMPILE_DEFINITIONS
SAILFISH_OS=True
PLATFORM_DISPLAY_NAME="Sailfish OS"
)
else()
# iOS-specific linker flags
if(IOS)
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-Wl,-e,_qt_main_wrapper -u _qt_registerPlatformPlugin")
endif()
if(UBUNTU_TOUCH)
set(KAIDAN_COMPILE_DEFINITIONS UBUNTU_TOUCH=True)
elseif(NOT ANDROID AND NOT IOS AND NOT WIN32 AND NOT APPLE)
set(KAIDAN_COMPILE_DEFINITIONS NOTIFICATIONS_LIBNOTIFY=True)
endif()
if(STATIC_BUILD)
set(KAIDAN_COMPILE_DEFINITIONS
NOTIFICATIONS_LIBNOTIFY=True
STATIC_BUILD=True
${KAIDAN_COMPILE_DEFINITIONS}
)
endif()
target_compile_definitions(${PROJECT_NAME} PRIVATE
DEBUG_SOURCE_PATH="${CMAKE_SOURCE_DIR}"
VERSION_STRING="${VERSION_STRING}"
APPLICATION_ID="${APPLICATION_ID}"
APPLICATION_NAME="${APPLICATION_NAME}"
APPLICATION_DISPLAY_NAME="${APPLICATION_DISPLAY_NAME}"
APPLICATION_DESCRIPTION="${APPLICATION_DESCRIPTION}"
VERSION_STRING="${VERSION_STRING}"
DEBUG_SOURCE_PATH="${CMAKE_SOURCE_DIR}"
${KAIDAN_COMPILE_DEFINITIONS}
)
#
# Install Kaidan
#
if(UNIX AND NOT APPLE)
if(ANDROID)
configure_file(${CMAKE_SOURCE_DIR}/misc/android/AndroidManifest.xml.in
${CMAKE_SOURCE_DIR}/misc/android/AndroidManifest.xml)
endif()
if(UBUNTU_TOUCH AND CLICK_ARCH)
set(CLICK_VERSION ${VERSION_STRING})
if(DEVELOPMENT_BUILD)
set(CLICK_VERSION "${CLICK_VERSION}.${CLICK_DATE}")
endif()
# will replace ${CLICK_ARCH} with its value
configure_file(${CMAKE_SOURCE_DIR}/misc/ubuntu-touch/manifest.json.in
${CMAKE_SOURCE_DIR}/misc/ubuntu-touch/manifest.json)
# install kaidan binary
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/bin/${PROJECT_NAME}
DESTINATION ${CMAKE_INSTALL_PREFIX}
)
# install kaidan media
install(DIRECTORY "data/images"
DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/${APPLICATION_ID}"
)
# install icon
install(FILES "misc/kaidan.svg" "misc/ubuntu-touch/apparmor.json"
"misc/ubuntu-touch/kaidan.desktop" "misc/ubuntu-touch/manifest.json"
DESTINATION "${CMAKE_INSTALL_PREFIX}"
)
elseif(UNIX AND NOT APPLE)
# install kaidan binary
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
DESTINATION ${CMAKE_INSTALL_FULL_BINDIR}
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/bin/${PROJECT_NAME}
DESTINATION ${CMAKE_INSTALL_FULL_BINDIR}
)
# install kaidan media
install(DIRECTORY "data/images"
DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}"
DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}"
)
# install icon (scalable + 128x)
install(FILES "misc/kaidan.svg"
DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/icons/hicolor/scalable/apps"
DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/icons/hicolor/scalable/apps"
)
install(FILES "misc/kaidan-128x128.png"
DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/icons/hicolor/128x128/apps"
RENAME "kaidan.png"
DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/icons/hicolor/128x128/apps"
RENAME "kaidan.png"
)
# install desktop file
install(FILES "misc/kaidan.desktop"
DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/applications"
DESTINATION "${KDE_INSTALL_APPDIR}"
)
# install metainfo
install(FILES "misc/metadata.xml"
DESTINATION "${KDE_INSTALL_METAINFODIR}"
RENAME "im.kaidan.kaidan.appdata.xml"
)
endif()
# KNotifications
if(USE_KNOTIFICATIONS)
install(FILES misc/kaidan.notifyrc DESTINATION ${KNOTIFYRC_INSTALL_DIR})
endif()
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
Upstream-Name: kaidan
Source: https://git.kaidan.im/kaidan/kaidan/
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Files: src/*
utils/*
misc/*
Copyright: 2016-2019, Linus Jahn <lnj@kaidan.im>
2016-2019, Jonah Brüchert <jbb@kaidan.im>
2017-2019, Ilya Bizyaev <bizyaev@zoho.com>
2018, Allan Nordhøy <epost@anotheragency.no>
2019, Xavier <xavi@delape.net>
2018, Nicolas Fella <nicolas.fella@gmx.de>
2018, Bjarne Roß <ross.b@freenet.de>
2018, SohnyBohny <sohny.bean@streber24.de>
2018, Marco Martin <notmart@gmail.com>
2017, probonopd <probonopd@users.noreply.github.com>
2016, Marzanna <MRZA-MRZA@users.noreply.github.com>
2017-2018, Eike Hein <hein@kde.org>
License: GPL-3+ with OpenSSL exception
Files: i18n/*
Copyright: 2017-2018, Linus Jahn <lnj@kaidan.im>
2017-2018, Jonah Brüchert <jbb@kaidan.im>
2017-2018, Muhammad Nur Hidayat Yasuyoshi <mnh48mail@gmail.com>
2018, Allan Nordhøy <epost@anotheragency.no>
2018, advocatux <advocatux@airpost.net>
2017-2018, Joeke de Graaf <mappack@null.net>
2017, Ilya Bizyaev <bizyaev@zoho.com>
2017, ZatroxDE <zatroxde@outlook.com>
2018, aitzol berasategi <aitzol@disroot.org>
2019, ssantos <ssantos@web.de>
2018, oiseauroch <tobias.ollive@mailoo.org>
2018, Andreas Kleinert <Andy.Kleinert@gmail.com>
2017, Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
License: GPL-3+ with OpenSSL exception
Files: src/StatusBar.cpp
src/StatusBar.h
src/singleapp/*
src/hsluv-c/*
utils/generate-license.py
Copyright: 2016, J-P Nurmi <jpnurmi@gmail.com>
2018-2019, Linus Jahn <lnj@kaidan.im>
2015-2018, Itay Grudev <itay+github.com@grudev.com>
2015, Alexei Boronine <alexei@boronine.com>
2015, Roger Tallada <info@rogertallada.com>
2017, Martin Mitas <mity@morous.org>
License: MIT
Files: src/EmojiModel.cpp
src/EmojiModel.h
qml/elements/EmojiPicker.qml
Copyright: 2017, Konstantinos Sideris <siderisk@auth.gr>
License: GPL-3+
Files: data/images/message_checkmark.svg
Copyright: 2014, Michael Kurz <betheg@bitcloner.org>
License: GPL-3+
Comment:
message_checkmark.svg: Originally from conversations, optimized using SVGO by LNJ <git@lnj.li>
Files: misc/kaidan.svg
misc/kaidan-small-margin.svg
misc/kaidan-128x128.png
data/images/banner.png
Copyright: 2016-2017, Ilya Bizyaev <bizyaev@zoho.com>
2016, MBB <mbb-mail@gmx.de>
License: CC-BY-SA-4.0
Files: data/images/chat.png
Copyright: 2013, Subtle Patterns, Toptal Designers
License: CC-BY-SA-3.0
Comment:
data/images/chat.png: From <https://www.toptal.com/designers/subtlepatterns/inspiration-geometry/>
Files: utils/convert-prl-libs-to-cmake.pl
Copyright: 2016, Konstantin Tokarev <annulen@yandex.ru>
License: MIT-Apple
License: GPL-3+ with OpenSSL exception
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.
.
In addition, as a special exception, the author of this program gives permission
to link the code of its release with the OpenSSL project's "OpenSSL" library (or
with modified versions of it that use the same license as the "OpenSSL"
library), and distribute the linked executables. You must obey the GNU General
Public License in all respects for all of the code used other than "OpenSSL".
If you modify this file, you may extend this exception to your version of the
file, but you are not obligated to do so. If you do not wish to do so, delete
this exception statement from your 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 package. If not, see <http://www.gnu.org/licenses/>.
.
On Debian systems, the full text of the GNU General Public License version 3 can
be found in the file
`/usr/share/common-licenses/GPL-3'.
License: GPL-3+
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 package; if not, write to the Free Software Foundation, Inc., 51 Franklin
St, Fifth Floor, Boston, MA 02110-1301 USA
.
On Debian systems, the full text of the GNU General Public
License version 3 can be found in the file
`/usr/share/common-licenses/GPL-3'.
License: MIT
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
License: MIT-Apple
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
.
THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
Kaidan - Cross platform XMPP client
===================================
License of Kaidan source code and translations:
-----------------------------------------------
Copyright (C) 2016-2017 Kaidan developers and contributors (see source file
comments and the version control log)
Kaidan 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.
Kaidan 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 Kaidan. If not, see <http://www.gnu.org/licenses/>.
Additional permission under GNU GPL version 3 section 7
If you modify this Program, or any covered work, by linking or combining
it with the OpenSSL library (or a modified version of that library),
containing parts covered by the terms of the OpenSSL License, the
licensors of this Program grant you additional permission to convey
the resulting work.
License of Kaidan media (images, sounds):
-----------------------------------------
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0):
http://creativecommons.org/licenses/by-sa/4.0/
Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0):
http://creativecommons.org/licenses/by-sa/3.0/
Copyright (C) 2016-2017 Ilya Bizyaev <bizyaev.game@yandex.ru> (CC BY-SA 4.0):
misc/kaidan.svg
misc/kaidan-128x128.png
Copyright (C) 2017 LNJ <git@lnj.li> (CC BY-SA 4.0):
data/images/fallback-avatar.svg
Copyright (C) 2016 MBB <mbb-mail@gmx.de> (CC BY-SA 4.0):
data/images/banner.png
Copyright (C) 2014 Michael Kurz <betheg@bitcloner.org> (from Conversations) (GPLv3+):
data/images/message_checkmark.svg (optimized using SVGO by LNJ)
Copyright (C) 2013 Subtle Patterns, Toptal Designers (CC BY-SA 3.0):
data/images/chat.png (source: https://www.toptal.com/designers/subtlepatterns/inspiration-geometry/)
Copyright (C) Raja Sandhu, XMPP Standards Foundation (MIT):
data/images/xmpp.svg
Copyright (C) Dandelion Developers (https://github.com/Diaspora-for-Android/dandelion) (GPLv3+):
data/images/diaspora.svg
License of all media files not listed in here:
Copyright (C) 2017 Kaidan developers (CC BY-SA 4.0)
# Kaidan - A user-friendly XMPP client for every device!
[![Build Status](https://travis-ci.org/KaidanIM/Kaidan.svg?branch=master)](https://travis-ci.org/KaidanIM/Kaidan)
[![Release](https://img.shields.io/github/release/kaidanim/kaidan.svg)](https://github.com/kaidanim/kaidan/releases)
[![Downloads](https://img.shields.io/github/downloads/kaidanim/kaidan/total.svg)](https://github.com/kaidanim/kaidan/releases)
[![Issues](https://img.shields.io/github/issues/kaidanim/kaidan.svg)](https://github.com/kaidanim/kaidan/issues)
[![Kaidan MUC](https://search.jabbercat.org/api/1.0/badge?address=kaidan@muc.kaidan.im)](https://i.kaidan.im)
[![Flatpak Build Status](https://binary-factory.kde.org/buildStatus/icon?job=Kaidan_flatpak)](https://binary-factory.kde.org/job/Kaidan_flatpak/)
[![Translation](https://hosted.weblate.org/widgets/kaidan/-/svg-badge.svg)](https://hosted.weblate.org/projects/kaidan/translations/)
[![License](https://img.shields.io/badge/License-GPLv3%2B%20%2F%20CC%20BY--SA%204.0-blue.svg)](https://raw.githubusercontent.com/kaidanim/kaidan/master/LICENSE.txt)
[![license](https://img.shields.io/badge/License-GPLv3%2B%20%2F%20CC%20BY--SA%204.0-blue.svg)](https://raw.githubusercontent.com/kaidanim/kaidan/master/LICENSE)
[![Donations](https://img.shields.io/liberapay/patrons/kaidan.svg?logo=liberapay)](https://liberapay.com/kaidan)
![](http://i.imgur.com/k1Aup3h.png)
![Kaidan screenshot](https://www.kaidan.im/images/screenshot.png)
## About
Kaidan is a simple, user-friendly Jabber/XMPP client providing a modern user-interface
using [Kirigami](https://techbase.kde.org/Kirigami) and [QtQuick](http://wiki.qt.io/Qt_Quick).
The back-end of Kaidan is completely written in C++ using the [gloox](https://camaya.net/gloox/)
XMPP client library and [Qt 5](https://www.qt.io/).
Kaidan is a simple, user-friendly Jabber/XMPP client providing a modern user
interface using [Kirigami][kg] and [QtQuick][qquick]. The back-end of Kaidan is
written in C++ using the [QXmpp][qxmpp] XMPP client library and [Qt 5][qt].
Currently Kaidan only has been tested on GNU/Linux Desktops, but because of the use of Qt we shouldn't have
any problems porting it to all other common platforms, even Android. Nevertheless we will work on another
GUI using Silica for better look & feel on Sailfish OS soon™ (See [KaidanSF](https://github.com/KaidanIM/KaidanSF)).
But if you want to get a client for Sailfish OS _now_, maybe take a look at
[Shmoose](https://github.com/geobra/harbour-shmoose), a fork by an earlier developer of Kaidan.
Kaidan runs on mobile and desktop Linux systems, including Plasma Mobile and
[Ubuntu Touch][openstore]. There are static Windows builds and macOS is also
supported, but we currently can't provide builds for it. The support for the
legacy mobile systems Android and iOS is very experimental and we currently only
provide test builds for [Android][android]. We might support SailfishOS in the
future in case the Sailfish SDK gets an update for Qt.
Kaidan is *not* finished yet, so don't expect it working as well as a finished client will do.
Kaidan is *not* finished yet, so don't expect it working as well as a finished
client will do -- Many features are still missing, many things still need to be
fixed and improved.
## Screenshots
For a list of supported XEPs, have a look at the [Wiki][supp-xeps].
![](http://i.imgur.com/Yfuf6AT.png)
## Installing Kaidan
## Installation
Instead of building Kaidan yourself, you can also just install ready-made builds. On these pages is explained
how to do that:
* [Install the Flatpak](https://invent.kde.org/kde/kaidan/wikis/install/flatpak)
* [Install from OpenStore (Ubuntu Touch)][openstore]
### Debian Stretch based systems
## Building Kaidan
Add our APT repository to your system
### Dependencies
```
sudo apt install apt-transport-https software-properties-common dirmngr gnupg
sudo apt-add-repository "deb https://raw.githubusercontent.com/kaidanim/packages/master stretch main"
sudo apt-key adv --recv-key "210EB0BCA70439F0"
sudo apt update
```
Here are the general dependencies of Kaidan listed:
* [Qt](https://doc.qt.io/qt-5/build-sources.html) (Core Qml Quick Svg Sql QuickControls2) (>= 5.8.0)
* [QXmpp][qxmpp] (>= 0.9.0)
* [Kirigami 2](https://phabricator.kde.org/source/kirigami/) (>= 5.42.0)
* [ECM (extra-cmake-modules)](https://api.kde.org/ecm/manual/ecm.7.html)
* [KNotifications][knotif] (`-DUSE_KNOTIFICATIONS=OFF` to disable)
Then you can install Kaidan
### Build instructions
```bash
sudo apt install kaidan
```
There are guides on how to build Kaidan for each supported platform (currently there are still pages missing):
* [Linux Desktop](https://invent.kde.org/kde/kaidan/wikis/building/linux-debian-based)
* [Ubuntu Touch (click package)](https://invent.kde.org/kde/kaidan/wikis/building/ubuntu-touch)
### Compile it yourself
#### Install all dependencies:
* [Qt](http://doc.qt.io/qt-5/build-sources.html) (Core Qml Quick Sql QuickControls2) (>= 5.7.0)
* [gloox](https://camaya.net/gloox/download/) (>= 1.0.10)
* [Kirigami 2](https://phabricator.kde.org/source/kirigami/) (>= 2.0.0)
Build only dependencies:
* A C++ compiler
* Qt Tools
* CMake
* Git (if you don't want to use tarballs/zips from github)
##### On debian *sid* do the following:
```bash
sudo apt install apt-transport-https git-core cmake build-essential zlib1g-dev \
libgloox-dev libnotify-bin libqt5quick5 libqt5quickcontrols2-5 libqt5quickwidgets5 \
libqt5qml5 libqt5gui5 libqt5core5a qtdeclarative5-dev qttools5-dev qt5-default \
qtquickcontrols2-5-dev kirigami2-dev
```
##### On debian *stretch* do the following:
Debian *stretch* has *no* Kirigami 2 packages, so we have to install them from external sources:
```bash
sudo apt install apt-transport-https software-properties-common dirmngr gnupg
sudo apt-add-repository "deb https://raw.githubusercontent.com/kaidanim/packages/master sid main"
sudo apt-key adv --recv-key "210EB0BCA70439F0"
sudo apt update
sudo apt install apt-transport-https git-core cmake build-essential zlib1g-dev \
libgloox-dev libnotify-bin libqt5quick5 libqt5quickcontrols2-5 libqt5quickwidgets5 \
libqt5qml5 libqt5gui5 libqt5core5a qtdeclarative5-dev qttools5-dev qt5-default \
qtquickcontrols2-5-dev kirigami2-dev
```
#### Get the source code:
```bash
git clone https://github.com/kaidanim/kaidan
```
#### Finally compile it:
```bash
mkdir kaidan/build ; cd kaidan/build
cmake .. -DI18N=1
make -j$(nproc)
```
#### Now you can run Kaidan:
```bash
./kaidan
```
#### If you like it, install it by:
```bash
sudo make install
```
----
![GPLv3](https://www.gnu.org/graphics/gplv3-127x51.png)
![CC BY-SA 4.0](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)
[kg]: https://kde.org/products/kirigami/
[qquick]: https://wiki.qt.io/Qt_Quick
[qxmpp]: http://qxmpp.org
[qt]: https://www.qt.io/
[openstore]: https://open-store.io/app/im.kaidan.kaidan
[android]: https://www.kaidan.im/download/#android
[supp-xeps]: https://invent.kde.org/kde/kaidan/wikis/Supported-XEPs
[knotif]: https://api.kde.org/frameworks/knotifications/html/index.html
# Changelog
### Version 0.4.0 (UNRELEASED)
Build system:
* Support for Android (ilyabizyaev)
* Support for Ubuntu Touch (jbb)
* Support for MacOS (ilyabizyaev)
* Support for Windows (ilyabizyaev)
* Support for iOS (ilyabizyaev)
* Add KDE Flatpak (jbb)
* Switch Android builds to CMake with ECM (ilyabizyaev)
* Improve Linux AppImage build script (ilyabizyaev)
* Add additional image formats in AppImage (jbb)
Back-end:
* Add XEP-0352: Client State Indication (gloox/QXmpp) (lnj)
* Add media/file sharing (lnj)
* Full back-end rewrite to QXmpp (lnj)
* Implement XEP-0363: HTTP File Upload and UploadManager for QXmpp (lnj)
* Use XEP-0280: Message Carbons from QXmpp (lnj)
* Use XEP-0352: Client State Indication from QXmpp (lnj)
* Check incoming messages for media links (lnj)
* Implement XEP-0308: Last Message Correction (lnj, jbb)
* Make attachments downloadable (lnj)
* Implement XEP-0382: Spoiler messages (xavi)
* Kaidan is now offline usable (lnj)
* Kaidan is able to open xmpp: URIs (lnj)
User interface:
* New logo (ilyabizyaev)
* Show presence information of contacts (lnj)
* Add EmojiPicker from Spectral (jbb)
* Highlight links in chat and make links clickable (lnj)
* New about dialog instead of the about page (ilyabizyaev)
* Add image preview in chat and before sending (lnj)
* Send messages on Enter, new line on Ctrl-Enter (ilyabizyaev)
* 'Add contact' is now the main action on the contacts page (lnj)
* Elide contact names and messages in roster (lnj)
* Chat page redesign (ilyabizyaev)
* Display passive notifications when trying to use online actions while offline (lnj)
* Automatically reconnect on connection loss (lnj)
* Contacts page: Display whether online in title (lnj)
* Add different connection error messages (jbb)
* Use QApplication when building with QWidgets (notmart)
* Ask user to approve subscription requests (lnj)
* Remove contact action: Make JIDs bold (lnj)
* Add contact sheet: Ask for optional message to contact (lnj)
* Add empty chat page with help notice to be displayed on start up (jbb)
* Redesign log in page (sohnybohny)
* Add Copy Invitaion URL action (jbb)
* Add 'press and hold' functionality for messages context menu (jbb)
* Add copy to clipboard function for messages (jbb)
* Add mobile file chooser (jbb)
* Highlight the currently opened chat on contacts page (lnj)
* Remove predefined window sizes (lnj)
* Use new Kirigami application header (nicofee)
* Make images open externally when clicked (jbb)
* Use QtQuickCompiler (jbb)
* Display upload progress bar (lnj)
* Add text+color avatars as fallback (lnj, jbb)
* Remove diaspora log in option (lnj)
Misc:
* Forget passwords on log out (lnj)
* Append four random chars to resource (lnj)
* Save passwords in base64 instead of clear text (lnj)
* Generate the LICENSE file automatically with all git authors (lnj)
* Store ubuntu touch builds as job artifacts (lnj)
* Add GitLab CI integration (jbb)
Fixes:
* Fix TLS connection bug (lnj)
* Don't send notifications when receiving own messages via. carbons (lnj)
* Fix timezone bug of message timestamps (lnj)
* Fix several message editing bugs (lnj)
* Fix black icons (jbb)
* Fix richt text labels in Plasma Mobile (lnj)
* Small Plasma Mobile fixes (jbb)
### Version 0.3.2 (released on 25.11.2017)
* Added AppImage build script (#138) (@JBBgameich)
* Use relative paths to find resource files (#143) (@LNJ2)
......
{
"template": "custom",
"build_dir": "./bin/ubuntu-touch/",
"build": "../../utils/build-linux-click.sh",
"kill": "kaidan",
"dependencies_build": [
"ninja-build",
"extra-cmake-modules"
],
"libraries": {
"qxmpp": {
"template": "cmake",
"src_dir": "3rdparty/qxmpp",
"make_jobs": 2,
"build_args": [
"-DCMAKE_BUILD_TYPE=Release",
"-DBUILD_TESTS=OFF",
"-DBUILD_EXAMPLES=OFF",
"-DCMAKE_PREFIX_PATH=../../../bin/ubuntu-touch/tmp",
"-DCMAKE_INSTALL_PREFIX=../../../bin/ubuntu-touch/tmp"
],
"postbuild": "make install"
}
}
}
# - Try to find GLOOX
# Find GLOOX headers, libraries and the answer to all questions.
#
# GLOOX_FOUND True if gloox got found
# GLOOX_INCLUDE_DIR Location of gloox headers
# GLOOX_LIBRARIES List of libaries to use gloox
#
# Copyright (c) 2009 Nigmatullin Ruslan <euroelessar@gmail.com>
#
# Redistribution and use is allowed according to the terms of the New
# BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
FIND_PATH( GLOOX_INCLUDE_DIR "gloox/gloox.h" )
FIND_LIBRARY( GLOOX_LIBRARIES gloox )
if( GLOOX_LIBRARIES AND GLOOX_INCLUDE_DIR )
message( STATUS "Found gloox: ${GLOOX_LIBRARIES}" )
set( GLOOX_FOUND 1 )
else( GLOOX_LIBRARIES AND GLOOX_INCLUDE_DIR )
message( STATUS "Could NOT find gloox" )
endif( GLOOX_LIBRARIES AND GLOOX_INCLUDE_DIR )
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 187.50293 187.50293"><circle cx="93.852" cy="93.806" r="93.678" fill="#207be6"/><path d="M37.984 37.837h113.43v112.806H37.984zm141.788 141.788h113.43V292.43h-113.43z" fill="none"/><path d="M107.337 133.213l-9.102-12.714c-2.43-3.403-4.405-6.05-4.51-6.05-.113 0-3.932 5.143-9.055 12.166a793.067 793.067 0 0 1-8.951 12.165c-.142 0-17.582-12.288-17.63-12.41-.018-.067 3.923-5.861 8.763-12.866 4.84-7.013 8.8-12.855 8.8-12.997 0-.217-1.569-.766-13.876-4.868L47.74 90.951c-.123-.048.596-2.486 3.091-10.341 1.796-5.663 3.3-10.332 3.346-10.389.048-.057 6.683 2.07 14.746 4.726 8.054 2.647 14.708 4.812 14.793 4.812.076 0 .17-.123.208-.284.029-.142.095-6.995.152-15.237.056-8.224.141-15.03.189-15.124.085-.114 2.344-.142 10.653-.142 5.804 0 10.615.038 10.681.094.095.057.255 4.585.53 14.746.434 16.694.444 16.92.708 16.92.095 0 6.485-2.136 14.189-4.754a480.141 480.141 0 0 1 14.084-4.65c.151.179 6.475 20.738 6.39 20.814-.038.047-6.466 2.24-14.274 4.887-10.747 3.648-14.216 4.868-14.244 5.019-.029.113 3.667 5.643 8.374 12.515 4.632 6.768 8.394 12.364 8.375 12.42a916.375 916.375 0 0 1-17.506 12.894c-.056 0-2.259-2.997-4.887-6.664z" fill="#fafafa"/></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256">
<defs>
<clipPath id="a">
<path fill="#338000" d="M0 0h256v256H0z"/>
</clipPath>
</defs>
<path fill="#338000" d="M0 0h256v256H0z"/>
<path d="M99.3 130.8l57-84.8 113.5 113.5-9.2 132.6z" clip-path="url(#a)" fill="#000007" opacity=".3"/>
<path d="M173 88.4a45 54.4 0 0 1-45 54.5 45 54.4 0 0 1-45-55 45 54.4 0 0 1 45-54 45 54.4 0 0 1 45 54.3zm61 107.2a106 45 0 0 1-106 45 106 45 0 0 1-106-45 106 45 0 0 1 106-45 106 45 0 0 1 106 45z" fill="#55d400"/>
<path d="M22 195.3h212V256H22z" fill="#55d400"/>
</svg>
<RCC>
<qresource prefix="/images/">
<file alias="banner.png">banner.png</file>
<file alias="chat.png">chat.png</file>
<file alias="message_checkmark.svg">message_checkmark.svg</file>
<file alias="kaidan.svg">kaidan.svg</file>
</qresource>
<qresource prefix="/org/kde/kirigami/icons/">
<file alias="kaidan.svg">kaidan.svg</file>
</qresource>
</RCC>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="512"
width="512"
viewBox="0 0 511.99999 511.99999"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="kaidan.svg"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs8">
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter3374">
<feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood3376" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite3378" />
<feGaussianBlur
in="composite1"
stdDeviation="16.0317"
result="blur"
id="feGaussianBlur3380" />
<feOffset
dx="6"
dy="6"
result="offset"
id="feOffset3382" />
<feComposite
in2="SourceGraphic"
operator="out"
result="composite2"
id="feComposite3384"
in="offset" />
</filter>
<filter
style="color-interpolation-filters:sRGB;"
inkscape:label="Drop Shadow"
id="filter4106">
<feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"