...
 
Commits (136)
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
......@@ -9,6 +9,7 @@ clazy:
variables:
CMAKE_CXX_COMPILER: clazy
script: utils/travis/build.sh
allow_failure: true
qmllint:
stage: test
......@@ -50,23 +51,13 @@ linux-appimage:
- "*.AppImage.zsync"
expire_in: 1 week
click-xenial:
stage: deploy
image: kaidan/ubuntu-touch-xenial
script: utils/travis/build.sh
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"
......@@ -74,23 +65,28 @@ windows-mxe:
android:
stage: deploy
image: kdeorg/android-sdk
image: kdeorg/android-arm-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
- ${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}
- utils/build-android-docker.sh
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
......
......@@ -7,3 +7,6 @@
[submodule "3rdparty/qxmpp"]
path = 3rdparty/qxmpp
url = https://github.com/qxmpp-project/qxmpp
[submodule "3rdparty/zxing-cpp"]
path = 3rdparty/zxing-cpp
url = https://github.com/nu-book/zxing-cpp
#
# This list is used by git-shortlog to fix a few botched name translations
# in the git archive, either because the author's full name was messed up
# and/or not always written the same way, making contributions from the
# same person appearing not to be so.
#
Linus Jahn <lnj@kaidan.im> <git@lnj.li>
Linus Jahn <lnj@kaidan.im> <linus.jahn@searchmetrics.com>
Jonah Brüchert <jbb@kaidan.im> <jbb.prv@gmx.de>
Jonah Brüchert <jbb@kaidan.im> <jbb.mail@gmx.de>
Jonah Brüchert <jbb@kaidan.im> <jbbgameich@gmail.com>
Jonah Brüchert <jbb@kaidan.im> <jbbgameich@outlook.com>
geobra <s.g.b@gmx.de>
Muhammad Nur Hidayat Yasuyoshi <mnh48mail@gmail.com>
Subproject commit a4bc2e5f38de971aef396655e6c122ec2a8aaeac
Subproject commit 1f12816dd78b6a7447c95919c7bf096be986ffd4
Subproject commit a2b0da8b540186eb4d25d1ae70618f231248d4e5
Subproject commit 4384fa0c81628fa96c36405fb65a2b0ecf04a989
Subproject commit 754cc5a70479a54659dbc93ccb5bf28e1da77ef4
Subproject commit e6eb0b78d0cb17fccd5ddb60966ba2a0a2d2b593
Subproject commit 670e78e89549ef001710b2a98b9011f9b7b58d12
cmake_minimum_required(VERSION 2.8.12)
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.8.0")
set(QT_MIN_VERSION "5.10.0")
if(POLICY CMP0071)
cmake_policy(SET CMP0071 NEW)
......@@ -15,17 +15,20 @@ set(APPLICATION_DISPLAY_NAME "Kaidan")
if(UBUNTU_TOUCH)
set(APPLICATION_NAME "${APPLICATION_ID}")
endif()
set(VERSION_STRING "0.4.0~dev")
set(VERSION_STRING "0.5.0-dev")
set(DEVELOPMENT_BUILD TRUE)
set(ANDROID_VERSION_CODE 3)
set(ANDROID_VERSION_CODE 6)
# CMake options
option(I18N "Enable i18n support" FALSE)
option(STATIC_BUILD "Build Kaidan statically")
option(UBUNTU_TOUCH "Building a Ubuntu Touch click (internal use only!)" FALSE)
option(APPIMAGE "Build Kaidan as AppImage (will only work in the appimage script)" FALSE)
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)
......@@ -52,10 +55,10 @@ include(FeatureSummary)
kde_enable_exceptions()
# Find packages
find_package(PkgConfig REQUIRED)
find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Qml Quick Svg Sql QuickControls2 Xml)
find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Qml Quick Svg Sql QuickControls2 Xml Multimedia)
find_package(KF5Kirigami2 REQUIRED)
pkg_search_module(QXmpp REQUIRED qxmpp>=0.9)
find_package(ZXing REQUIRED COMPONENTS Core)
find_package(QXmpp 1.0.0 REQUIRED)
# Optional QtQuickCompiler
if(QUICK_COMPILER)
......@@ -66,6 +69,12 @@ if(QUICK_COMPILER)
)
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)
......@@ -88,6 +97,7 @@ if(ANDROID)
endif()
if(ANDROID OR WIN32)
find_package(PkgConfig REQUIRED)
pkg_search_module(OPENSSL REQUIRED openssl IMPORTED_TARGET)
message(STATUS "Using OpenSSL ${OPENSSL_VERSION}")
endif()
......@@ -111,7 +121,7 @@ endif()
#
# Include bundled icons on Ubuntu Touch, Android, Windows, macOS and iOS
if(UBUNTU_TOUCH OR ANDROID OR WIN32 OR APPLE)
if(BUNDLE_ICONS OR UBUNTU_TOUCH OR ANDROID OR WIN32 OR APPLE)
set(KAIDAN_ICONS_QRC kirigami-icons.qrc)
endif()
......@@ -132,8 +142,6 @@ elseif(WIN32)
message(STATUS ${KAIDAN_ICNS})
endif()
link_directories(${QXmpp_LIBDIR})
if(QUICK_COMPILER)
qtquick_compiler_add_resources(KAIDAN_QML_QRC kaidan_qml.qrc)
else()
......@@ -159,17 +167,11 @@ target_link_libraries(${PROJECT_NAME}
Qt5::Svg
Qt5::Network
Qt5::Xml
Qt5::Multimedia
ZXing::Core
QXmpp::QXmpp
${__Qt5Widgets_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}
${__KF5Notifications_LIBRARIES}
)
if(ANDROID OR WIN32 OR IOS)
......@@ -314,8 +316,8 @@ endif()
if(UBUNTU_TOUCH)
set(KAIDAN_COMPILE_DEFINITIONS UBUNTU_TOUCH=True)
elseif(NOT ANDROID AND NOT IOS AND NOT WIN32)
set(KAIDAN_COMPILE_DEFINITIONS NOTIFICATIONS_LIBNOTIFY=True)
elseif(APPIMAGE)
set(KAIDAN_COMPILE_DEFINITIONS APPIMAGE=True)
endif()
if(STATIC_BUILD)
......@@ -396,5 +398,9 @@ elseif(UNIX AND NOT APPLE)
)
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/
Source: https://invent.kde.org/kde/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>
Copyright: 2016-2019, Jonah Brüchert <jbb@kaidan.im>
2016-2019, Linus Jahn <lnj@kaidan.im>
2017-2019, Ilya Bizyaev <bizyaev@zoho.com>
2018, Allan Nordhøy <epost@anotheragency.no>
2019, Filipe Azevedo <pasnox@gmail.com>
2019, Melvin Keskin <melvo@olomono.de>
2019, Robert Maerkisch <zatroxde@protonmail.ch>
2019, Simon Schmeisser <s.schmeisser@gmx.net>
2019, Nick Richards <nick@nedrichards.com>
2019, Simon Redman <simon@ergotech.com>
2019, Xavier <xavi@delape.net>
2018, Nicolas Fella <nicolas.fella@gmx.de>
2018, Bjarne Roß <ross.b@freenet.de>
......@@ -20,17 +26,25 @@ Copyright: 2016-2019, Linus Jahn <lnj@kaidan.im>
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>
Copyright: 2017-2019, Linus Jahn <lnj@kaidan.im>
2017-2019, Jonah Brüchert <jbb@kaidan.im>
2017-2019, Muhammad Nur Hidayat Yasuyoshi <mnh48mail@gmail.com>
2018-2019, Allan Nordhøy <epost@anotheragency.no>
2018-2019, advocatux <advocatux@airpost.net>
2018-2019, oiseauroch <tobias.ollive@mailoo.org>
2018-2019, aitzol berasategi <aitzol@disroot.org>
2019, ssantos <ssantos@web.de>
2019, Sylke Vicious <silkevicious@gmail.com>
2019, Anne Onyme 017 <anneonyme017@netcourrier.com>
2019, Milan Korecky <milan.korecky@gmail.com>
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>
2017, Robert Maerkisch <zatroxde@protonmail.ch>
2019, Joan CiberSheep <cibersheep@gmail.com>
2019, Clemens Riese <weblate.org@clerie.de>
2019, Txaume <txaumevw@gmail.com>
2019, Xosé M <xosem@disroot.org>
2019, Melvin Keskin <melvo@olomono.de>
2018, Andreas Kleinert <Andy.Kleinert@gmail.com>
2017, Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
License: GPL-3+ with OpenSSL exception
......@@ -54,6 +68,11 @@ Files: src/EmojiModel.cpp
Copyright: 2017, Konstantinos Sideris <siderisk@auth.gr>
License: GPL-3+
Files: src/QrCodeVideoFrame.h
src/QrCodeVideoFrame.cpp
Copyright: 2017, QZXing authors
License: apache-2.0
Files: data/images/message_checkmark.svg
Copyright: 2014, Michael Kurz <betheg@bitcloner.org>
License: GPL-3+
......@@ -162,3 +181,16 @@ License: MIT-Apple
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
License: apache-2.0
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
.
http://www.apache.org/licenses/LICENSE-2.0
.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
......@@ -39,10 +39,12 @@ how to do that:
### Dependencies
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)
* [Qt](https://doc.qt.io/qt-5/build-sources.html) (Core Qml Quick Svg Sql QuickControls2 Multimedia) (>= 5.10.0)
* [QXmpp][qxmpp] (>= 1.0.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)
* [ZXing-cpp](https://github.com/nu-book/zxing-cpp)
* [KNotifications][knotif] (`-DUSE_KNOTIFICATIONS=OFF` to disable)
### Build instructions
......@@ -58,3 +60,4 @@ There are guides on how to build Kaidan for each supported platform (currently t
[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)
### Version 0.4.1 (released on Jul 16, 2019)
* Fix SSL problems for AppImage (lnj)
* Fix connection problems (lnj)
* Keep QXmpp v0.8.3 compatibility (lnj)
### Version 0.4.0 (released on Jul 08, 2019)
Build system:
* Support for Android (ilyabizyaev)
......@@ -13,9 +19,11 @@ Build system:
* Improve Linux AppImage build script (ilyabizyaev)
* Add additional image formats in AppImage (jbb)
Back-end:
Features:
* Show proper notifications using KNotifications (lnj)
* Add settings page for changing passwords (jbb, lnj)
* Add XEP-0352: Client State Indication (gloox/QXmpp) (lnj)
* Add media/file sharing (lnj)
* Add media/file (including GIFs) sharing (lnj, jbb)
* 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)
......@@ -26,11 +34,9 @@ Back-end:
* 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)
* Show presence information of contacts (lnj, melvo)
* Add EmojiPicker from Spectral with search and favorites functionality (jbb, fazevedo)
* 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)
......@@ -70,12 +76,13 @@ Misc:
* Add GitLab CI integration (jbb)
Fixes:
* Fix blocking of GUI thread while database interaction (lnj)
* 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)
* Fix rich text labels in Plasma Mobile (lnj)
* Small Plasma Mobile fixes (jbb)
### Version 0.3.2 (released on 25.11.2017)
......
......@@ -20,6 +20,19 @@
"-DCMAKE_INSTALL_PREFIX=../../../bin/ubuntu-touch/tmp"
],
"postbuild": "make install"
},
"zxing-cpp": {
"template": "cmake",
"src_dir": "3rdparty/zxing-cpp",
"make_jobs": 2,
"build_args": [
"-DCMAKE_BUILD_TYPE=Release",
"-DBUILD_SHARED_LIBRARY=ON",
"-DLINK_CPP_STATICALLY=OFF",
"-DCMAKE_PREFIX_PATH=../../../bin/ubuntu-touch/tmp",
"-DCMAKE_INSTALL_PREFIX=../../../bin/ubuntu-touch/tmp"
],
"postbuild": "make install"
}
}
}
......@@ -5,7 +5,8 @@
<file alias="message_checkmark.svg">message_checkmark.svg</file>
<file alias="kaidan.svg">kaidan.svg</file>
</qresource>
<qresource prefix="/org/kde/kirigami/icons/">
<qresource prefix="/icons/breeze/apps/48/">
<file alias="kaidan.svg">kaidan.svg</file>
<file alias="kaidan.svg">kaidan-bw.svg</file>
</qresource>
</RCC>
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 255.99999">
<path fill="#0d0d0d" d="M 128.00195 11.371094 C 63.570528 11.371094 11.333984 63.605389 11.333984 128.03906 C 11.333984 160.2559 20.563722 193.25433 41.675781 214.36133 C 62.788402 235.47451 95.786508 244.70508 128.00391 244.70508 C 192.43646 244.70508 244.66992 192.47078 244.66992 128.03711 L 244.66797 128.03906 C 244.66797 63.605389 192.43563 11.368846 128.00195 11.371094 z M 77.134766 69.181641 L 179.02734 69.181641 C 186.44187 69.181641 192.41016 75.149929 192.41016 82.564453 C 192.41016 89.978977 186.44187 95.949219 179.02734 95.949219 L 77.134766 95.949219 C 69.720241 95.949219 63.75 89.978977 63.75 82.564453 C 63.75 75.149929 69.720241 69.181641 77.134766 69.181641 z M 59.693359 114.64648 L 196.31445 114.64648 C 203.72898 114.64648 209.69922 120.61477 209.69922 128.0293 C 209.69922 135.44382 203.72898 141.41406 196.31445 141.41406 L 59.693359 141.41406 C 52.278835 141.41406 46.310547 135.44382 46.310547 128.0293 C 46.310547 120.61477 52.278835 114.64648 59.693359 114.64648 z M 77.0625 160.94922 C 84.477024 160.94922 90.447266 166.91946 90.447266 174.33398 C 90.447266 181.74851 84.477024 187.7168 77.0625 187.7168 C 69.647976 187.7168 63.679688 181.74851 63.679688 174.33398 C 63.679688 166.91946 69.647976 160.94922 77.0625 160.94922 z M 112.88281 160.94922 L 178.95898 160.94922 C 186.37351 160.94922 192.3418 166.91946 192.3418 174.33398 C 192.3418 181.74851 186.37351 187.7168 178.95898 187.7168 L 112.88281 187.7168 C 105.46829 187.7168 99.5 181.74851 99.5 174.33398 C 99.5 166.91946 105.46829 160.94922 112.88281 160.94922 z" filter="url(#e)" transform="translate(0 -796.36) matrix(1.011 0 0 1.011 -1.4036 -10.136) matrix(0.98911968,0,0,0.98911968,1.3883284,797.72107)"/>
</svg>
# Updating License Information
These steps should only be followed while [releasing a new Kaidan version](release.md).
1. `git checkout master`
1. `git pull origin master`
1. `utils/generate-license.py > LICENSE` (On Debian `sudo apt install python3-git` may be needed.)
1. Add possible aliases:
1. `git diff`
1. If there are contributers with multiple email addresses:
1. Adjust *utils/generate-license.py*:
1. Add a line like the following for each alias in REPLACE_USER_IDS = [...]:
`("Alias <alias@example.org>", "FirstName LastName <user@example.com>"),`
1. `git add utils/generate-license.py`
1. `utils/generate-license.py > LICENSE`
1. `git add LICENSE`
# Releasing a New Kaidan Version
## Summary
### Main Repository
* [ ] Update translations
* [ ] Update changelog content
* [ ] Update license information
* [ ] Update version in *CMakeLists.txt*
* [ ] Update changelog release date
* [ ] Archive release on *stable* branch
* [ ] Add tag on *stable* branch
* [ ] Publish release builds
* [ ] Merge *stable* branch into *master* branch
* [ ] Update version in *CMakeLists.txt* to new development version
### Website Repository
* [ ] Update screenshot
* [ ] Update version and date in *index.html*
* [ ] Publish blog post
### Mastodon
* [ ] Create a toot
## Details
**X.Y.Z and N+1 must be adjusted to correspond to the actual version unless otherwise noted.**
### In Repository **https://invent.kde.org/kde/kaidan.git**
1. `git checkout master`
1. `git pull origin master`
1. `git checkout -b release/vX.Y.Z` or if that branch already exists: `git checkout release/vX.Y.Z`
1. [Update translations](translation.md)
1. Update changelog (*changelog.md*):
1. Set version *vX.Y.Z*
1. Set release date to *UNRELEASED*
1. Mention important changes and their authors
1. `git add changelog.md`
1. `git commit -m "Prepare changelog for vX.Y.Z"`
1. Check correct functionality of all release builds
1. [Update license information](license.md)
1. In *CMakeLists.txt*:
1. Change `set(VERSION_STRING "X.Y.Z-dev")` to `set(VERSION_STRING "X.Y.Z")`
1. Change `set(DEVELOPMENT_BUILD TRUE)` to `set(DEVELOPMENT_BUILD FALSE)`
1. Change `set(ANDROID_VERSION_CODE N)` to `set(ANDROID_VERSION_CODE N+1)`
1. `git add CMakeLists.txt`
1. Update changelog (*changelog.md*):
1. Set release date
1. `git add changelog.md`
1. `git commit -m "Release Kaidan vX.Y.Z"`
1. `git push --set-upstream origin release/vX.Y.Z`
1. Archive release on *stable* branch:
1. `git checkout stable` or if that branch does not already exist: `git checkout -b stable origin/stable`
1. `git pull origin stable`
1. `git merge release/vX.Y.Z`
1. `git push origin stable`
1. `git push -d release/vX.Y.Z`
1. Add tag on *stable* branch:
1. `git tag -a vX.Y.Z` or for signed tags: `git tag -s v0.4.1`
1. Add changelog part for vX.Y.Z as tag message
1. `git push origin vX.Y.Z`
1. Add changelog part for vX.Y.Z as release note on https://invent.kde.org/kde/kaidan/tags
1. Publish release builds on https://download.kde.org:
1. Download builds from https://invent.kde.org/kde/kaidan/pipelines?scope=tags&page=1 for tag *vX.Y.Z*
1. Rename downloaded builds to *kaidan_X.Y.Z_<architecture>.<type>* (Replace <architecture>.<type> with the corresponding architecture and file type.)
1. `../releaseme/tarme.rb --version X.Y.Z --origin stable kaidan` (*releasme* is the directory of the repository **https://anongit.kde.org/releaseme.git**.)
1. `kdecp5 kaidan-X.Y.Z.* ftp://upload.kde.org/incoming`:
1. Create admin ticket as described in output with additional lines for all uploaded files and hash values by SHA-256 and SHA-1
1. Merge *stable* branch into *master* branch:
1. `git checkout master`
1. `git merge stable`
1. Start new development version:
* **X.Y.Z, X.Y+1 and N+1 must be adjusted to correspond to the actual version.**
1. In *CMakeLists.txt*:
1. Change `set(VERSION_STRING "X.Y.Z")` to `set(VERSION_STRING "X.Y+1.0-dev")`
1. Change `set(DEVELOPMENT_BUILD FALSE)` to `set(DEVELOPMENT_BUILD TRUE)`
1. Change `set(ANDROID_VERSION_CODE N)` to `set(ANDROID_VERSION_CODE N+1)`
1. `git add CMakeLists.txt`
1. `git commit -m "Continue with Kaidan vX.Y+1.0-dev"`
1. `git push origin master`
### In Repository **https://invent.kde.org/websites/kaidan-im.git**
1. `git checkout master`
1. `git pull origin master`
1. Update screenshot (which will update the screenshot on the website and in the README):
1. Create one screenshot for desktop and one for mobile version
1. Put those two screenshots into one image like *images/screenshot.png* and overwrite that by that by the new one
1. `optipng -o7 images/screenshot.png`
1. `advpng -z4 images/screenshot.png`
1. `git add images/screenshot.png`
1. `git commit -m "Update screenshot"`
1. `git push origin master`
1. Update version and date in the following lines of *index.html*:
1. `<h3>Current version: X.Y.Z</h3>`
1. `<h4>(released MONTH DAY, YEAR)</h4>`
1. Publish blog post:
1. Create *_posts/YEAR-MONTH-DAY-kaidan-X.Y.Z.md*
1. Add header as in other posts of that directory
1. Copy *images/screenshot.png* to *images/screenshots/screenshot-X.Y*
1. Include *images/screenshots/screenshot-X.Y* into blog post
1. Add changelog part for vX.Y.Z
### On Mastodon via **https://fosstodon.org/@kaidan**
1. Create a toot like https://fosstodon.org/@kaidan/101929341888805925
# Adding Translations Repository
`git remote add weblate https://hosted.weblate.org/git/kaidan/translations/`
# Updating Translations
1. <a name="update-weblate"/> Update translations from Weblate:
1. On https://hosted.weblate.org/projects/kaidan/translations/#repository with a developer account:
1. Click *Commit*
1. Click *Rebase*
1. `git pull weblate master`
1. `git push origin master`
1. If there is a push error related to the policy of KDE which specifies that at least a first and a last name must be set for the author field:
1. Prepend X for a missing field to the specific commit (possibly by `rebase -i`)
1. `git push origin master`
1. Update translation sources:
1. `git checkout master`
1. `git pull origin master`
1. `cd build && make -j$(nproc) && cd -`
1. `git add i18n`
1. `git commit -m "Update translation sources" --author "Kaidan translations <translations@kaidan.im>"`
1. `git push origin master`
1. Shortly before the release follow the [first steps](#update-weblate) again.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -7,9 +7,12 @@
<file alias="qml/AboutDialog.qml">src/qml/AboutDialog.qml</file>
<file alias="qml/GlobalDrawer.qml">src/qml/GlobalDrawer.qml</file>
<file alias="qml/EmptyChatPage.qml">src/qml/EmptyChatPage.qml</file>
<file alias="qml/QrCodeScannerPage.qml">src/qml/QrCodeScannerPage.qml</file>
<file alias="qml/UserProfilePage.qml">src/qml/UserProfilePage.qml</file>
<file alias="qml/elements/SubRequestAcceptSheet.qml">src/qml/elements/SubRequestAcceptSheet.qml</file>
<file alias="qml/elements/RosterAddContactSheet.qml">src/qml/elements/RosterAddContactSheet.qml</file>
<file alias="qml/elements/RosterRenameContactSheet.qml">src/qml/elements/RosterRenameContactSheet.qml</file>
<file alias="qml/elements/RosterRemoveContactSheet.qml">src/qml/elements/RosterRemoveContactSheet.qml</file>
<file alias="qml/elements/RosterListItem.qml">src/qml/elements/RosterListItem.qml</file>
<file alias="qml/elements/MessageCounter.qml">src/qml/elements/MessageCounter.qml</file>
......@@ -25,6 +28,7 @@
<file alias="qml/elements/MediaPreviewOther.qml">src/qml/elements/MediaPreviewOther.qml</file>
<file alias="qml/elements/EmojiPicker.qml">src/qml/elements/EmojiPicker.qml</file>
<file alias="qml/elements/TextAvatar.qml">src/qml/elements/TextAvatar.qml</file>
<file alias="qml/elements/Avatar.qml">src/qml/elements/Avatar.qml</file>
<file alias="qml/settings/SettingsItem.qml">src/qml/settings/SettingsItem.qml</file>
<file alias="qml/settings/SettingsPage.qml">src/qml/settings/SettingsPage.qml</file>
......
......@@ -5,7 +5,6 @@
<qresource prefix="/icons/breeze/actions/22">
<file alias="application-menu.svg">3rdparty/breeze-icons/icons/actions/22/application-menu.svg</file>
<file alias="bookmark-remove.svg">3rdparty/breeze-icons/icons/actions/22/bookmark-remove.svg</file>
<file alias="document-decrypt.svg">3rdparty/breeze-icons/icons/actions/22/document-decrypt.svg</file>
<file alias="contact-new.svg">3rdparty/breeze-icons/icons/actions/22/contact-new.svg</file>
<file alias="dialog-close.svg">3rdparty/breeze-icons/icons/actions/22/dialog-close.svg</file>
......@@ -20,7 +19,7 @@
<file alias="overflow-menu.svg">3rdparty/breeze-icons/icons/actions/22/overflow-menu.svg</file>
<file alias="system-shutdown.svg">3rdparty/breeze-icons/icons/actions/22/system-shutdown.svg</file>
<file alias="view-list-icons.svg">3rdparty/breeze-icons/icons/actions/22/view-list-icons.svg</file>
<file alias="go-parent-folder.svg">3rdparty/breeze-icons/icons/actions/22/go-parent-folder.svg</file>
<file alias="go-parent-folder.svg">3rdparty/breeze-icons/icons/actions/22/go-parent-folder.svg</file>
<file alias="folder.svg">3rdparty/breeze-icons/icons/places/22/folder.svg</file>
<file alias="text-x-plain.svg">3rdparty/breeze-icons/icons/mimetypes/22/text-x-plain.svg</file>
<file alias="tab-close.svg">3rdparty/breeze-icons/icons/actions/22/tab-close.svg</file>
......@@ -28,10 +27,26 @@
<file alias="password-show-off.svg">3rdparty/breeze-icons/icons/actions/22/password-show-off.svg</file>
<file alias="settings-configure.svg">3rdparty/breeze-icons/icons/actions/22/settings-configure.svg</file>
<file alias="lock.svg">3rdparty/breeze-icons/icons/actions/22/lock.svg</file>
<file alias="view-barcode.svg">3rdparty/breeze-icons/icons/actions/22/view-barcode.svg</file>
<file alias="player-volume.svg">3rdparty/breeze-icons/icons/actions/22/player-volume.svg</file>
<file alias="im-user-online.svg">3rdparty/breeze-icons/icons/actions/22/im-user-online.svg</file>
<file alias="im-user-away.svg">3rdparty/breeze-icons/icons/actions/22/im-user-away.svg</file>
<file alias="im-kick-user.svg">3rdparty/breeze-icons/icons/actions/22/im-kick-user.svg</file>
<file alias="im-ban-kick-user.svg">3rdparty/breeze-icons/icons/actions/22/im-ban-kick-user.svg</file>
<file alias="im-user-offline.svg">3rdparty/breeze-icons/icons/actions/22/im-user-offline.svg</file>
<file alias="im-invisible-user.svg">3rdparty/breeze-icons/icons/actions/22/im-invisible-user.svg</file>
<file alias="user-identity.svg">3rdparty/breeze-icons/icons/actions/22/user-identity.svg</file>
<file alias="edit-rename.svg">3rdparty/breeze-icons/icons/actions/22/edit-rename.svg</file>
<file alias="delete.svg">3rdparty/breeze-icons/icons/actions/22/delete.svg</file>
</qresource>
<qresource prefix="/icons/breeze/emotes/22">
<file alias="face-smile.svg">3rdparty/breeze-icons/icons/emotes/22/face-smile.svg</file>
</qresource>
<qresource prefix="/icons/breeze/actions/16">
<file alias="document-send.svg">3rdparty/breeze-icons/icons/actions/16/document-send.svg</file>
<file alias="search.svg">3rdparty/breeze-icons/icons/actions/16/search.svg</file>
</qresource>
<qresource prefix="/icons/breeze/actions/symbolic">
......@@ -52,7 +67,7 @@
<file alias="text-x-plain.svg">3rdparty/breeze-icons/icons/mimetypes/22/text-x-plain.svg</file>
</qresource>
<qresource prefix="icons/breeze/preferences/32">
<file alias="preferences-desktop-emoticons.svg">3rdparty/breeze-icons/icons/preferences/32/preferences-desktop-emoticons.svg</file>
<qresource prefix="/icons/status/symbolic">
<file alias="audio-volume-muted-symbolic.svg">3rdparty/breeze-icons/icons/status/symbolic/audio-volume-muted-symbolic.svg</file>
</qresource>
</RCC>
<?xml version="1.0"?>
<manifest package="@APPLICATION_ID@" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="@VERSION_STRING@" android:versionCode="@ANDROID_VERSION_CODE@" android:installLocation="auto">
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="@APPLICATION_DISPLAY_NAME@" android:icon="@mipmap/icon">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="Kaidan" android:screenOrientation="unspecified" android:launchMode="singleTop">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="Kaidan" android:screenOrientation="unspecified" android:launchMode="singleTop" android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
......
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.android.tools.build:gradle:3.2.0'
}
}
allprojects {
repositories {
jcenter()
}
repositories {
google()
jcenter()
}
apply plugin: 'com.android.application'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
}
android {
......
#Mon Feb 20 10:43:22 EST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.4-bin.zip
This diff is collapsed.
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=-Xmx1024m -Dfile.encoding=UTF-8
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
[Global]
IconName=kaidan
Comment=A user-friendly XMPP client for every device
Name=Kaidan
[Event/new-message]
Name=New message
Comment=You have received a new message
Action=Sound|Popup
......@@ -24,6 +24,10 @@
<image type="source">https://www.kaidan.im/images/screenshot.png</image>
</screenshot>
</screenshots>
<content_rating type="oars-1.1">
<content_attribute id="social-chat">intense</content_attribute>
<content_attribute id="social-contacts">intense</content_attribute>
</content_rating>
<provides>
<binary>kaidan</binary>
</provides>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -47,7 +47,7 @@ DiscoveryManager::DiscoveryManager(QXmppClient *client, QObject *parent)
#else
// Plasma Mobile packages won't differ from desktop builds, so we need to check the mobile
// variable on runtime.
if (!qgetenv("QT_QUICK_CONTROLS_MOBILE").isEmpty())
if (!qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_MOBILE"))
manager->setClientType("phone");
else
manager->setClientType("pc");
......@@ -79,7 +79,8 @@ void DiscoveryManager::handleInfo(const QXmppDiscoveryIq&)
void DiscoveryManager::handleItems(const QXmppDiscoveryIq &iq)
{
// request info from all items
for (const QXmppDiscoveryIq::Item &item : iq.items()) {
const QList<QXmppDiscoveryIq::Item> items = iq.items();
for (const QXmppDiscoveryIq::Item &item : items) {
if (item.jid() == client->configuration().domain())
continue;
manager->requestInfo(item.jid());
......
This diff is collapsed.
......@@ -46,8 +46,11 @@ class DownloadJob : public QObject
{
Q_OBJECT
public:
DownloadJob(QString msgId, QUrl source, QString filePath,
QNetworkAccessManager *netMngr, TransferCache *transferCache,
DownloadJob(QString msgId,
QUrl source,
QString filePath,
QNetworkAccessManager *netMngr,
TransferCache *transferCache,
Kaidan *kaidan);
QString downloadLocation() const;
......@@ -99,8 +102,8 @@ signals:
void abortDownloadRequested(const QString msgId);
public slots:
void startDownload(const QString msgId, const QString url);
void abortDownload(const QString msgId);
void startDownload(const QString &msgId, const QString &url);
void abortDownload(const QString &msgId);
private:
DownloadThread *thread;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.