diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a25a0d..1658900 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,414 +1,414 @@ 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") if(POLICY CMP0071) cmake_policy(SET CMP0071 NEW) endif() project(kaidan) set(APPLICATION_ID "im.kaidan.kaidan") set(APPLICATION_NAME "kaidan") set(APPLICATION_DISPLAY_NAME "Kaidan") if(UBUNTU_TOUCH) set(APPLICATION_NAME "${APPLICATION_ID}") endif() -set(VERSION_STRING "0.4.1") +set(VERSION_STRING "0.4.2") set(DEVELOPMENT_BUILD FALSE) -set(ANDROID_VERSION_CODE 5) +set(ANDROID_VERSION_CODE 6) # CMake options option(I18N "Enable i18n support" FALSE) option(STATIC_BUILD "Build Kaidan statically") 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) # Instruct CMake to run moc, uic and rcc automatically when needed. set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) set(AUTOMOC_MOC_OPTIONS -Muri=${APPLICATION_ID}) # # Dependecies # # CMake module path 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(PkgConfig REQUIRED) find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Qml Quick Svg Sql QuickControls2 Xml) find_package(KF5Kirigami2 REQUIRED) pkg_search_module(QXmpp REQUIRED qxmpp>=0.8.3) # 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 # # Main kaidan sources include("${CMAKE_SOURCE_DIR}/src/CMakeLists.txt") # I18n support if(I18N) include("${CMAKE_SOURCE_DIR}/i18n/CMakeLists.txt") endif() # # Sources / Resources # # 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} ${KAIDAN_ICONS_QRC} # only set if enabled ${KAIDAN_IMAGES_QRC} # ${I18N_QRC_CPP} # ) target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Sql Qt5::Qml Qt5::Quick 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 # # 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(APPIMAGE) set(KAIDAN_COMPILE_DEFINITIONS APPIMAGE=True) endif() if(STATIC_BUILD) set(KAIDAN_COMPILE_DEFINITIONS 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}" ${KAIDAN_COMPILE_DEFINITIONS} ) # # Install Kaidan # 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}/bin/${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} ) # install kaidan media install(DIRECTORY "data/images" 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" ) install(FILES "misc/kaidan-128x128.png" DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/icons/hicolor/128x128/apps" RENAME "kaidan.png" ) # install desktop file install(FILES "misc/kaidan.desktop" 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) diff --git a/changelog.md b/changelog.md index c6bf2d1..c16b65a 100644 --- a/changelog.md +++ b/changelog.md @@ -1,153 +1,166 @@ # Changelog +### Version 0.4.2 (released on Apr 02, 2020) + + * Fix roster not cleared when switching account (lnj) + * ChatMessage: Do not display media URLs (lnj) + * ChatMessage: Add media URL copy action (lnj) + * ChatMessage: Fix copy to clipboard function (lnj) + * Fix scroll indiciator not overlap message on the right edge (fazevedo) + * Fix upload issues (fazevedo) + * ChatPage: Clear message correction when sent (fazevedo) + * Fix roster sorting (lnj) + * Fix buttonTextColor deprecation warnings (sredman) + * Fix build with QXmpp >= 1.0.1 (lnj) + ### 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) * 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) 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 (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) * 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) * New logo (ilyabizyaev) * 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) * 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 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 rich 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) * Source directory is only used for resource files in debug builds (#146) (@LNJ2) ### Version 0.3.1 (released on 20.11.2017) Fixes: * Fixed database creation errors (#135, #132) (@LNJ2) * ChatPage: Fixed recipient's instead of author's avatar displayed (#131, #137) (@LNJ2) Misc: * Added Travis-CI integration (#133, #134, #136) (@JBBgameich) Internationalization: * Added Malay translations (#129) (@MuhdNurHidayat) ### Version 0.3.0 (released on 15.08.2017) * Added XEP-0280: Message Carbons (#117) (@LNJ2) * Added XEP-0054/XEP-0153: VCard-based avatars (#73, #105, #119) (@LNJ2) * Added file storage for simply caching all avatars (@LNJ2) * New roster design - showing round avatars and last message (#118) (@LNJ2) * New chat page design - showing time, delivery status and round avatars (#123) (@LNJ2) * Switched to XMPP client library "gloox" (#114) (@LNJ2) * Rewritten most of the back-end for gloox and partialy also restructured it (#114) (@LNJ2) * (Re)written new LogHandler for gloox (Swiften had this already included) (#114) (@LNJ2) ### Version 0.2.3 (released on 19.06.2017) Fixes: * LoginPage: Remove material shadow (#113) (@JBBgameich) * Kaidan was crashing since v0.2.2 when inserting a new message to the DB (@LNJ2) ### Version 0.2.2 (released on 19.06.2017) Fixes: * RosterPage: Clear TextFields after closing AddContactSheet (#106) (@JBBgameich) Unused back-end features: * RosterController: Save lastMessage for each contact (#108) (@LNJ2) * Add database versioning and conversion (#110) (@LNJ2) * Database: Add new roster row `avatarHash` (#112) (@LNJ2) Misc: * CMake: Add feature summary (#109) (@LNJ2) ### Version 0.2.1 (released on 08.06.2017) Fixes: * Roster page: Fixed style: Now has contour lines and a cool material effect (@LNJ2) ### Version 0.2.0 (released on 06.06.2017) User interface: * GUI: Port to Kirigami 2 (#81) (@JBBgameich) * User Material/Green Theme per default (@LNJ2) * Login page: New design with diaspora* login option (#87) (@JBBgameich) * Chat page: Slightly improved design (@LNJ2) New features: * Add Roster Editing (#84, #86) (@LNJ2, @JBBgameich) * Roster refreshes now automatically (#83) (@LNJ2) * Contacts are now sorted (@LNJ2) * Add unread message counters (#92, #101) (@LNJ2) * Add LibNotify-Linux notifications (#90) (@LNJ2) * Add custom JID resources (#82) (@LNJ2) * Add XEP-0184: Message Delivery Receipts (@LNJ2) * Disable stream compression by default (for HipChat/other server compatibility) (@LNJ2) Fixes: * AboutPage: Fix possible closing of multiple pages (@LNJ2)