diff --git a/.ci/linux/deploy.sh b/.ci/linux/deploy.sh
new file mode 100755
index 00000000..78245322
--- /dev/null
+++ b/.ci/linux/deploy.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+
+set -e
+
+mkdir -p appdir
+cp build/nheko appdir/
+cp resources/nheko.desktop appdir/
+cp resources/nheko*.png appdir/
+
+wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
+chmod a+x linuxdeployqt*.AppImage
+
+unset QTDIR
+unset QT_PLUGIN_PATH
+unset LD_LIBRARY_PATH
+
+./linuxdeployqt*.AppImage ./appdir/*.desktop -bundle-non-qt-libs
+./linuxdeployqt*.AppImage ./appdir/*.desktop -appimage
+
+chmod +x nheko-x86_64.AppImage
diff --git a/.ci/linux/install-deps.sh b/.ci/linux/install-deps.sh
index 8c14f801..605e29b8 100755
--- a/.ci/linux/install-deps.sh
+++ b/.ci/linux/install-deps.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-sudo add-apt-repository -y ppa:beineri/opt-qt58-trusty
+sudo add-apt-repository -y ppa:beineri/opt-qt592-trusty
sudo add-apt-repository -y ppa:george-edison55/cmake-3.x
sudo apt-get update -qq
-sudo apt-get install -qq -y qt58base qt58tools cmake liblmdb-dev
+sudo apt-get install -qq -y qt59base qt59tools cmake liblmdb-dev
diff --git a/.ci/macos/deploy.sh b/.ci/macos/deploy.sh
new file mode 100755
index 00000000..76346d47
--- /dev/null
+++ b/.ci/macos/deploy.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+set -e
+
+# Add Qt binaries to path
+PATH=/usr/local/opt/qt/bin/:${PATH}
+
+sudo macdeployqt build/nheko.app -dmg
+user=$(id -nu)
+sudo chown ${user} build/nheko.dmg
+mv build/nheko.dmg .
diff --git a/.ci/windows/nheko.nsi b/.ci/windows/nheko.nsi
deleted file mode 100644
index cc674249..00000000
--- a/.ci/windows/nheko.nsi
+++ /dev/null
@@ -1,225 +0,0 @@
-############################################################################################
-# NSIS Installation Script created by NSIS Quick Setup Script Generator v1.09.18
-# Entirely Edited with NullSoft Scriptable Installation System
-# by Vlasis K. Barkas aka Red Wine red_wine@freemail.gr Sep 2006
-############################################################################################
-
-!define APP_NAME "nheko"
-!define COMP_NAME "mujx"
-!define WEB_SITE "https://github.com/mujx/nheko"
-!define VERSION "0.1.0.0"
-!define COPYRIGHT "mujx � 2017"
-!define DESCRIPTION "Desktop client for the Matrix protocol"
-!define LICENSE_TXT "LICENSE.txt"
-!define INSTALLER_NAME "..\..\nheko_setup.exe"
-!define INPUT_DIR "..\..\NhekoRelease"
-!define MAIN_APP_EXE "nheko.exe"
-!define INSTALL_TYPE "SetShellVarContext all"
-!define REG_ROOT "HKLM"
-!define REG_APP_PATH "Software\Microsoft\Windows\CurrentVersion\App Paths\${MAIN_APP_EXE}"
-!define UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}"
-
-!define REG_START_MENU "Start Menu Folder"
-
-var SM_Folder
-
-######################################################################
-
-VIProductVersion "${VERSION}"
-VIAddVersionKey "ProductName" "${APP_NAME}"
-VIAddVersionKey "CompanyName" "${COMP_NAME}"
-VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
-VIAddVersionKey "FileDescription" "${DESCRIPTION}"
-VIAddVersionKey "FileVersion" "${VERSION}"
-
-######################################################################
-
-SetCompressor ZLIB
-Name "${APP_NAME}"
-Caption "${APP_NAME}"
-OutFile "${INSTALLER_NAME}"
-BrandingText "${APP_NAME}"
-XPStyle on
-InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" ""
-InstallDir "$PROGRAMFILES\nheko"
-
-######################################################################
-
-!include "MUI.nsh"
-
-!define MUI_ICON "..\..\resources\nheko.ico"
-!define MUI_HEADERIMAGE
-!define MUI_HEADERIMAGE_BITMAP "..\..\resources\nheko.bmp"
-!define MUI_HEADERIMAGE_RIGHT
-
-!define MUI_ABORTWARNING
-!define MUI_UNABORTWARNING
-
-!insertmacro MUI_PAGE_WELCOME
-
-!ifdef LICENSE_TXT
-!insertmacro MUI_PAGE_LICENSE "${LICENSE_TXT}"
-!endif
-
-!insertmacro MUI_PAGE_DIRECTORY
-
-!ifdef REG_START_MENU
-!define MUI_STARTMENUPAGE_DEFAULTFOLDER "nheko"
-!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${REG_ROOT}"
-!define MUI_STARTMENUPAGE_REGISTRY_KEY "${UNINSTALL_PATH}"
-!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${REG_START_MENU}"
-!insertmacro MUI_PAGE_STARTMENU Application $SM_Folder
-!endif
-
-!insertmacro MUI_PAGE_INSTFILES
-
-!define MUI_FINISHPAGE_RUN "$INSTDIR\${MAIN_APP_EXE}"
-!insertmacro MUI_PAGE_FINISH
-
-!insertmacro MUI_UNPAGE_CONFIRM
-
-!insertmacro MUI_UNPAGE_INSTFILES
-
-!insertmacro MUI_UNPAGE_FINISH
-
-!insertmacro MUI_LANGUAGE "English"
-
-######################################################################
-
-Section -MainProgram
-${INSTALL_TYPE}
-SetOverwrite ifnewer
-SetOutPath "$INSTDIR"
-File /r "${INPUT_DIR}\*"
-SectionEnd
-
-######################################################################
-
-Section -Icons_Reg
-SetOutPath "$INSTDIR"
-WriteUninstaller "$INSTDIR\uninstall.exe"
-
-!ifdef REG_START_MENU
-!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
-CreateDirectory "$SMPROGRAMS\$SM_Folder"
-CreateShortCut "$SMPROGRAMS\$SM_Folder\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
-CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
-CreateShortCut "$SMPROGRAMS\$SM_Folder\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe"
-
-!ifdef WEB_SITE
-WriteIniStr "$INSTDIR\${APP_NAME} website.url" "InternetShortcut" "URL" "${WEB_SITE}"
-CreateShortCut "$SMPROGRAMS\$SM_Folder\${APP_NAME} Website.lnk" "$INSTDIR\${APP_NAME} website.url"
-!endif
-!insertmacro MUI_STARTMENU_WRITE_END
-!endif
-
-!ifndef REG_START_MENU
-CreateDirectory "$SMPROGRAMS\nheko"
-CreateShortCut "$SMPROGRAMS\nheko\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
-CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
-CreateShortCut "$SMPROGRAMS\nheko\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe"
-
-!ifdef WEB_SITE
-WriteIniStr "$INSTDIR\${APP_NAME} website.url" "InternetShortcut" "URL" "${WEB_SITE}"
-CreateShortCut "$SMPROGRAMS\nheko\${APP_NAME} Website.lnk" "$INSTDIR\${APP_NAME} website.url"
-!endif
-!endif
-
-WriteRegStr ${REG_ROOT} "${REG_APP_PATH}" "" "$INSTDIR\${MAIN_APP_EXE}"
-WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayName" "${APP_NAME}"
-WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "UninstallString" "$INSTDIR\uninstall.exe"
-WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayIcon" "$INSTDIR\${MAIN_APP_EXE}"
-WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayVersion" "${VERSION}"
-WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "Publisher" "${COMP_NAME}"
-
-!ifdef WEB_SITE
-WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "URLInfoAbout" "${WEB_SITE}"
-!endif
-SectionEnd
-
-######################################################################
-
-Section Uninstall
-${INSTALL_TYPE}
-
-########
-
-!macro BadPathsCheck
-StrCpy $R0 $INSTDIR "" -2
-StrCmp $R0 ":\" bad
-StrCpy $R0 $INSTDIR "" -14
-StrCmp $R0 "\Program Files" bad
-StrCpy $R0 $INSTDIR "" -8
-StrCmp $R0 "\Windows" bad
-StrCpy $R0 $INSTDIR "" -6
-StrCmp $R0 "\WinNT" bad
-StrCpy $R0 $INSTDIR "" -9
-StrCmp $R0 "\system32" bad
-StrCpy $R0 $INSTDIR "" -8
-StrCmp $R0 "\Desktop" bad
-StrCpy $R0 $INSTDIR "" -23
-StrCmp $R0 "\Documents and Settings" bad
-StrCpy $R0 $INSTDIR "" -13
-StrCmp $R0 "\My Documents" bad done
-bad:
- MessageBox MB_OK|MB_ICONSTOP "Install path invalid!"
- Abort
-done:
-!macroend
-
-StrCmp $INSTDIR "" 0 +2
- StrCpy $INSTDIR $EXEDIR
-
-# Check that the uninstall isn't dangerous.
-!insertmacro BadPathsCheck
-
-# Does path end with "\nheko"?
-!define CHECK_PATH "\nheko"
-StrLen $R1 "${CHECK_PATH}"
-StrCpy $R0 $INSTDIR "" -$R1
-StrCmp $R0 "${CHECK_PATH}" +3
- MessageBox MB_YESNO|MB_ICONQUESTION "Unrecognised uninstall path. Continue anyway?" IDYES +2
- Abort
-
-IfFileExists "$INSTDIR\*.*" 0 +2
-IfFileExists "$INSTDIR\nheko.exe" +3
- MessageBox MB_OK|MB_ICONSTOP "Install path invalid!"
- Abort
-
-########
-
-RMDir /r /REBOOTOK $INSTDIR
-
-Delete "$INSTDIR\uninstall.exe"
-!ifdef WEB_SITE
-Delete "$INSTDIR\${APP_NAME} website.url"
-!endif
-
-!ifdef REG_START_MENU
-!insertmacro MUI_STARTMENU_GETFOLDER "Application" $SM_Folder
-Delete "$SMPROGRAMS\$SM_Folder\${APP_NAME}.lnk"
-Delete "$SMPROGRAMS\$SM_Folder\Uninstall ${APP_NAME}.lnk"
-!ifdef WEB_SITE
-Delete "$SMPROGRAMS\$SM_Folder\${APP_NAME} Website.lnk"
-!endif
-Delete "$DESKTOP\${APP_NAME}.lnk"
-
-RmDir "$SMPROGRAMS\$SM_Folder"
-!endif
-
-!ifndef REG_START_MENU
-Delete "$SMPROGRAMS\nheko\${APP_NAME}.lnk"
-Delete "$SMPROGRAMS\nheko\Uninstall ${APP_NAME}.lnk"
-!ifdef WEB_SITE
-Delete "$SMPROGRAMS\nheko\${APP_NAME} Website.lnk"
-!endif
-Delete "$DESKTOP\${APP_NAME}.lnk"
-
-RmDir "$SMPROGRAMS\nheko"
-!endif
-
-DeleteRegKey ${REG_ROOT} "${REG_APP_PATH}"
-DeleteRegKey ${REG_ROOT} "${UNINSTALL_PATH}"
-SectionEnd
-
-######################################################################
diff --git a/.clang-format b/.clang-format
index 6dc5274b..059aee19 100644
--- a/.clang-format
+++ b/.clang-format
@@ -1,5 +1,6 @@
---
Language: Cpp
+Standard: Cpp11
AccessModifierOffset: -8
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: true
@@ -10,3 +11,4 @@ IndentCaseLabels: false
IndentWidth: 8
KeepEmptyLinesAtTheStartOfBlocks: false
PointerAlignment: Right
+Cpp11BracedListStyle: true
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000..1b8d5e07
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,20 @@
+
+
+### System:
+
+- Nheko commit/version:
+- Operating System:
+- Qt version:
+- C++ compiler:
+- Desktop Environment:
+
+### Actual behavior
+
+### Expected behavior
+
+### Steps to reproduce
+
+
+### Debugger traceback
diff --git a/.travis.yml b/.travis.yml
index b096b78e..3aa112d8 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -21,9 +21,33 @@ install:
- if [ $TRAVIS_OS_NAME == osx ]; then export CMAKE_PREFIX_PATH=/usr/local/opt/qt5; fi
- if [ $TRAVIS_OS_NAME == linux ]; then ./.ci/linux/install-deps.sh; fi
before_script:
- - if [ $TRAVIS_OS_NAME == linux ]; then source /opt/qt58/bin/qt58-env.sh; fi
+ - if [ $TRAVIS_OS_NAME == linux ]; then source /opt/qt59/bin/qt59-env.sh; fi
- cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release
script:
- make -C build -j2
- - if [ $TRAVIS_OS_NAME == linux ]; then ./.ci/linux/run-tests.sh; fi
- if [ $TRAVIS_OS_NAME == osx ]; then make lint; fi
+ - if [ $TRAVIS_OS_NAME == osx ]; then ./.ci/macos/deploy.sh; fi
+ - if [ $TRAVIS_OS_NAME == linux ]; then ./.ci/linux/run-tests.sh; fi
+ - if [ $TRAVIS_OS_NAME == linux ]; then ./.ci/linux/deploy.sh; fi
+
+deploy:
+ - skip_cleanup: true
+ overwrite: true
+ provider: releases
+ api_key:
+ secure: oprXzESukFiXBeF2BXkXUlegsAQc95Ub4kc/OkoNFaYBvqpA+IGpWHmHCx5JPny/OT3Kc2Urpe2JUeGSWDHZ7UCKDjH+NzGP3uN82fHh/HiszG/Srw7+hWEHm1ve+gMK9GS8pr+yUsUrPP0UfVXlPoI4pBWa4zGi2Ndb/SqvjCgIHFLtGyoBo6CydKQ/AyWiXSMKDfJL+Dx4JLIPP4RTCBJy8ZrZ8m/a5Tgy4Ij6+djjrgYCZCEhGxSYw7xDIT/9SV8g9NkrbisqBDrILzAH8Yhe4XMRMXo88OAxV5+Vb9Rw1hrqczez6lpFDbJetv8MjofND+pSoAFwtjaL1wTFK9Ud6w4O9AuHlEQH9cGVdvsxFcosRwJVh58x51JM9ptoktqhx/HHJBTuCHCYYlHwtRwbwqnMYdLzKZG5FnujT8DG+9mcva1fL6tzW/XD505VPMWwXFC/2/pvolgAkTFFXYSALAwZlK3IgoXU8Gok/3B4iHofzQsFf6Yq3BI/88x7tVASUqiYhoKrO50+gb6pNIRCyWgGUiBEVXBp6Ziq3ORQPyQJg7i9HHUGTUu74yvGLHWLwjNQzZP/hxJZK3VlJxzyXntdOxiJc8iOzNrU+rPKBAlAaE6bQDOoniIysEgdD5BXHTLFzPvts4P1n2Ckor5/rNJ+qXR8GU+/y7e1GKU=
+ file: nheko-x86_64.AppImage
+ on:
+ condition: $TRAVIS_OS_NAME == linux
+ repo: mujx/nheko
+ tags: true
+ - skip_cleanup: true
+ overwrite: true
+ provider: releases
+ api_key:
+ secure: oprXzESukFiXBeF2BXkXUlegsAQc95Ub4kc/OkoNFaYBvqpA+IGpWHmHCx5JPny/OT3Kc2Urpe2JUeGSWDHZ7UCKDjH+NzGP3uN82fHh/HiszG/Srw7+hWEHm1ve+gMK9GS8pr+yUsUrPP0UfVXlPoI4pBWa4zGi2Ndb/SqvjCgIHFLtGyoBo6CydKQ/AyWiXSMKDfJL+Dx4JLIPP4RTCBJy8ZrZ8m/a5Tgy4Ij6+djjrgYCZCEhGxSYw7xDIT/9SV8g9NkrbisqBDrILzAH8Yhe4XMRMXo88OAxV5+Vb9Rw1hrqczez6lpFDbJetv8MjofND+pSoAFwtjaL1wTFK9Ud6w4O9AuHlEQH9cGVdvsxFcosRwJVh58x51JM9ptoktqhx/HHJBTuCHCYYlHwtRwbwqnMYdLzKZG5FnujT8DG+9mcva1fL6tzW/XD505VPMWwXFC/2/pvolgAkTFFXYSALAwZlK3IgoXU8Gok/3B4iHofzQsFf6Yq3BI/88x7tVASUqiYhoKrO50+gb6pNIRCyWgGUiBEVXBp6Ziq3ORQPyQJg7i9HHUGTUu74yvGLHWLwjNQzZP/hxJZK3VlJxzyXntdOxiJc8iOzNrU+rPKBAlAaE6bQDOoniIysEgdD5BXHTLFzPvts4P1n2Ckor5/rNJ+qXR8GU+/y7e1GKU=
+ file: nheko.dmg
+ on:
+ condition: $TRAVIS_OS_NAME == osx
+ repo: mujx/nheko
+ tags: true
diff --git a/.vscode/.cmaketools.json b/.vscode/.cmaketools.json
new file mode 100644
index 00000000..148ec937
--- /dev/null
+++ b/.vscode/.cmaketools.json
@@ -0,0 +1,810 @@
+{
+ "variant": {
+ "label": "Debug",
+ "keywordSettings": {
+ "buildType": "debug"
+ },
+ "description": "Emit debug information without performing optimizations"
+ },
+ "activeEnvironments": [],
+ "codeModel": {
+ "configurations": [
+ {
+ "name": "Debug",
+ "projects": [
+ {
+ "buildDirectory": "/home/max/Program/nheko/build",
+ "name": "nheko",
+ "sourceDirectory": "/home/max/Program/nheko",
+ "targets": [
+ {
+ "artifacts": [
+ "/home/max/Program/nheko/build/nheko"
+ ],
+ "buildDirectory": "/home/max/Program/nheko/build",
+ "crossReferences": {
+ "backtrace": [
+ {
+ "line": 355,
+ "name": "add_executable",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "relatedStatements": [
+ {
+ "backtrace": [
+ {
+ "line": 233,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 234,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 235,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 236,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 238,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 239,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 356,
+ "name": "target_link_libraries",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_link_libraries"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 356,
+ "name": "target_link_libraries",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_link_libraries"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 356,
+ "name": "target_link_libraries",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_link_libraries"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 356,
+ "name": "target_link_libraries",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_link_libraries"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 356,
+ "name": "target_link_libraries",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_link_libraries"
+ }
+ ]
+ },
+ "fileGroups": [
+ {
+ "isGenerated": false,
+ "sources": [
+ "resources/res.qrc",
+ "build/translations.qrc"
+ ]
+ },
+ {
+ "compileFlags": " -Wall -Wextra -march=native -Werror -pipe -pedantic -Wunreachable-code -fdiagnostics-color=always -g -fPIC -std=gnu++11",
+ "defines": [
+ "QT_CONCURRENT_LIB",
+ "QT_CORE_LIB",
+ "QT_GUI_LIB",
+ "QT_NETWORK_LIB",
+ "QT_WIDGETS_LIB"
+ ],
+ "includePath": [
+ {
+ "path": "/home/max/Program/nheko/build"
+ },
+ {
+ "path": "/home/max/Program/nheko"
+ },
+ {
+ "path": "/home/max/Program/nheko/include"
+ },
+ {
+ "path": "/home/max/Program/nheko/include/ui"
+ },
+ {
+ "path": "/home/max/Program/nheko/include/events"
+ },
+ {
+ "path": "/home/max/Program/nheko/include/events/messages"
+ },
+ {
+ "path": "/home/max/Program/nheko/libs/lmdbxx"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5/QtCore"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/lib64/qt5/./mkspecs/linux-g++"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5/QtWidgets"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5/QtGui"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5/QtNetwork"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5/QtConcurrent"
+ }
+ ],
+ "isGenerated": false,
+ "language": "CXX",
+ "sources": [
+ "src/AvatarProvider.cc",
+ "src/Cache.cc",
+ "src/ChatPage.cc",
+ "src/CommunitiesListItem.cc",
+ "src/CommunitiesList.cc",
+ "src/Community.cc",
+ "src/Deserializable.cc",
+ "src/EmojiCategory.cc",
+ "src/EmojiItemDelegate.cc",
+ "src/EmojiPanel.cc",
+ "src/EmojiPickButton.cc",
+ "src/EmojiProvider.cc",
+ "src/ImageItem.cc",
+ "src/ImageOverlayDialog.cc",
+ "src/InputValidator.cc",
+ "src/JoinRoomDialog.cc",
+ "src/LeaveRoomDialog.cc",
+ "src/Login.cc",
+ "src/LoginPage.cc",
+ "src/LogoutDialog.cc",
+ "src/MainWindow.cc",
+ "src/MatrixClient.cc",
+ "src/Profile.cc",
+ "src/QuickSwitcher.cc",
+ "src/Register.cc",
+ "src/RegisterPage.cc",
+ "src/RoomInfoListItem.cc",
+ "src/RoomList.cc",
+ "src/RoomMessages.cc",
+ "src/RoomState.cc",
+ "src/SideBarActions.cc",
+ "src/UserSettingsPage.cc",
+ "src/Splitter.cc",
+ "src/Sync.cc",
+ "src/TextInputWidget.cc",
+ "src/TimelineItem.cc",
+ "src/TimelineView.cc",
+ "src/TimelineViewManager.cc",
+ "src/TopRoomBar.cc",
+ "src/TrayIcon.cc",
+ "src/TypingDisplay.cc",
+ "src/UserInfoWidget.cc",
+ "src/Versions.cc",
+ "src/WelcomePage.cc",
+ "src/main.cc",
+ "src/ui/Avatar.cc",
+ "src/ui/Badge.cc",
+ "src/ui/LoadingIndicator.cc",
+ "src/ui/FlatButton.cc",
+ "src/ui/FloatingButton.cc",
+ "src/ui/Label.cc",
+ "src/ui/OverlayModal.cc",
+ "src/ui/ScrollBar.cc",
+ "src/ui/SnackBar.cc",
+ "src/ui/RaisedButton.cc",
+ "src/ui/Ripple.cc",
+ "src/ui/RippleOverlay.cc",
+ "src/ui/OverlayWidget.cc",
+ "src/ui/TextField.cc",
+ "src/ui/ToggleButton.cc",
+ "src/ui/Theme.cc",
+ "src/ui/ThemeManager.cc"
+ ]
+ },
+ {
+ "isGenerated": true,
+ "sources": [
+ "build/nheko_de.qm",
+ "build/nheko_el.qm",
+ "build/nheko_en.qm",
+ "build/nheko_nl.qm",
+ "build/include/moc_AvatarProvider.cpp.rule",
+ "build/include/moc_ChatPage.cpp.rule",
+ "build/include/moc_CommunitiesListItem.cpp.rule",
+ "build/include/moc_CommunitiesList.cpp.rule",
+ "build/include/moc_Community.cpp.rule",
+ "build/include/moc_EmojiCategory.cpp.rule",
+ "build/include/moc_EmojiItemDelegate.cpp.rule",
+ "build/include/moc_EmojiPanel.cpp.rule",
+ "build/include/moc_EmojiPickButton.cpp.rule",
+ "build/include/ui/moc_FloatingButton.cpp.rule",
+ "build/include/moc_ImageItem.cpp.rule",
+ "build/include/moc_ImageOverlayDialog.cpp.rule",
+ "build/include/moc_JoinRoomDialog.cpp.rule",
+ "build/include/moc_LeaveRoomDialog.cpp.rule",
+ "build/include/moc_LoginPage.cpp.rule",
+ "build/include/moc_LogoutDialog.cpp.rule",
+ "build/include/moc_MainWindow.cpp.rule",
+ "build/include/moc_MatrixClient.cpp.rule",
+ "build/include/moc_QuickSwitcher.cpp.rule",
+ "build/include/moc_RegisterPage.cpp.rule",
+ "build/include/moc_RoomInfoListItem.cpp.rule",
+ "build/include/moc_RoomList.cpp.rule",
+ "build/include/moc_SideBarActions.cpp.rule",
+ "build/include/moc_UserSettingsPage.cpp.rule",
+ "build/include/moc_Splitter.cpp.rule",
+ "build/include/moc_TextInputWidget.cpp.rule",
+ "build/include/moc_TimelineItem.cpp.rule",
+ "build/include/moc_TimelineView.cpp.rule",
+ "build/include/moc_TimelineViewManager.cpp.rule",
+ "build/include/moc_TopRoomBar.cpp.rule",
+ "build/include/moc_TrayIcon.cpp.rule",
+ "build/include/moc_TypingDisplay.cpp.rule",
+ "build/include/moc_UserInfoWidget.cpp.rule",
+ "build/include/moc_WelcomePage.cpp.rule",
+ "build/include/ui/moc_Avatar.cpp.rule",
+ "build/include/ui/moc_Badge.cpp.rule",
+ "build/include/ui/moc_LoadingIndicator.cpp.rule",
+ "build/include/ui/moc_FlatButton.cpp.rule",
+ "build/include/ui/moc_Label.cpp.rule",
+ "build/include/ui/moc_OverlayWidget.cpp.rule",
+ "build/include/ui/moc_ScrollBar.cpp.rule",
+ "build/include/ui/moc_SnackBar.cpp.rule",
+ "build/include/ui/moc_RaisedButton.cpp.rule",
+ "build/include/ui/moc_Ripple.cpp.rule",
+ "build/include/ui/moc_RippleOverlay.cpp.rule",
+ "build/include/ui/moc_TextField.cpp.rule",
+ "build/include/ui/moc_ToggleButton.cpp.rule",
+ "build/include/ui/moc_Theme.cpp.rule",
+ "build/include/ui/moc_ThemeManager.cpp.rule",
+ "build/nheko_de.qm.rule",
+ "build/nheko_el.qm.rule",
+ "build/nheko_en.qm.rule",
+ "build/nheko_nl.qm.rule"
+ ]
+ },
+ {
+ "compileFlags": " -Wall -Wextra -march=native -Werror -pipe -pedantic -Wunreachable-code -fdiagnostics-color=always -g -fPIC -std=gnu++11",
+ "defines": [
+ "QT_CONCURRENT_LIB",
+ "QT_CORE_LIB",
+ "QT_GUI_LIB",
+ "QT_NETWORK_LIB",
+ "QT_WIDGETS_LIB"
+ ],
+ "includePath": [
+ {
+ "path": "/home/max/Program/nheko/build"
+ },
+ {
+ "path": "/home/max/Program/nheko"
+ },
+ {
+ "path": "/home/max/Program/nheko/include"
+ },
+ {
+ "path": "/home/max/Program/nheko/include/ui"
+ },
+ {
+ "path": "/home/max/Program/nheko/include/events"
+ },
+ {
+ "path": "/home/max/Program/nheko/include/events/messages"
+ },
+ {
+ "path": "/home/max/Program/nheko/libs/lmdbxx"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5/QtCore"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/lib64/qt5/./mkspecs/linux-g++"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5/QtWidgets"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5/QtGui"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5/QtNetwork"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5/QtConcurrent"
+ }
+ ],
+ "isGenerated": true,
+ "language": "CXX",
+ "sources": [
+ "build/include/moc_AvatarProvider.cpp",
+ "build/include/moc_ChatPage.cpp",
+ "build/include/moc_CommunitiesListItem.cpp",
+ "build/include/moc_CommunitiesList.cpp",
+ "build/include/moc_Community.cpp",
+ "build/include/moc_EmojiCategory.cpp",
+ "build/include/moc_EmojiItemDelegate.cpp",
+ "build/include/moc_EmojiPanel.cpp",
+ "build/include/moc_EmojiPickButton.cpp",
+ "build/include/ui/moc_FloatingButton.cpp",
+ "build/include/moc_ImageItem.cpp",
+ "build/include/moc_ImageOverlayDialog.cpp",
+ "build/include/moc_JoinRoomDialog.cpp",
+ "build/include/moc_LeaveRoomDialog.cpp",
+ "build/include/moc_LoginPage.cpp",
+ "build/include/moc_LogoutDialog.cpp",
+ "build/include/moc_MainWindow.cpp",
+ "build/include/moc_MatrixClient.cpp",
+ "build/include/moc_QuickSwitcher.cpp",
+ "build/include/moc_RegisterPage.cpp",
+ "build/include/moc_RoomInfoListItem.cpp",
+ "build/include/moc_RoomList.cpp",
+ "build/include/moc_SideBarActions.cpp",
+ "build/include/moc_UserSettingsPage.cpp",
+ "build/include/moc_Splitter.cpp",
+ "build/include/moc_TextInputWidget.cpp",
+ "build/include/moc_TimelineItem.cpp",
+ "build/include/moc_TimelineView.cpp",
+ "build/include/moc_TimelineViewManager.cpp",
+ "build/include/moc_TopRoomBar.cpp",
+ "build/include/moc_TrayIcon.cpp",
+ "build/include/moc_TypingDisplay.cpp",
+ "build/include/moc_UserInfoWidget.cpp",
+ "build/include/moc_WelcomePage.cpp",
+ "build/include/ui/moc_Avatar.cpp",
+ "build/include/ui/moc_Badge.cpp",
+ "build/include/ui/moc_LoadingIndicator.cpp",
+ "build/include/ui/moc_FlatButton.cpp",
+ "build/include/ui/moc_Label.cpp",
+ "build/include/ui/moc_OverlayWidget.cpp",
+ "build/include/ui/moc_ScrollBar.cpp",
+ "build/include/ui/moc_SnackBar.cpp",
+ "build/include/ui/moc_RaisedButton.cpp",
+ "build/include/ui/moc_Ripple.cpp",
+ "build/include/ui/moc_RippleOverlay.cpp",
+ "build/include/ui/moc_TextField.cpp",
+ "build/include/ui/moc_ToggleButton.cpp",
+ "build/include/ui/moc_Theme.cpp",
+ "build/include/ui/moc_ThemeManager.cpp",
+ "build/qrc_res.cpp",
+ "build/qrc_translations.cpp"
+ ]
+ }
+ ],
+ "fullName": "nheko",
+ "linkFlags": "-rdynamic",
+ "linkLanguageFlags": "-Wall -Wextra -march=native -Werror -pipe -pedantic -Wunreachable-code -fdiagnostics-color=always -g",
+ "linkLibraries": "libmatrix_events.a /usr/lib64/libQt5Widgets.so.5.9.2 /usr/lib64/libQt5Network.so.5.9.2 /usr/lib64/libQt5Concurrent.so.5.9.2 -llmdb /usr/lib64/libQt5Gui.so.5.9.2 /usr/lib64/libQt5Core.so.5.9.2",
+ "linkerLanguage": "CXX",
+ "name": "nheko",
+ "sourceDirectory": "/home/max/Program/nheko",
+ "type": "EXECUTABLE"
+ },
+ {
+ "buildDirectory": "/home/max/Program/nheko/build",
+ "crossReferences": {
+ "backtrace": [
+ {
+ "line": 300,
+ "name": "add_custom_target",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "relatedStatements": [
+ {
+ "backtrace": [
+ {
+ "line": 233,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 234,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 235,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 236,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 238,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 239,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ }
+ ]
+ },
+ "fileGroups": [
+ {
+ "isGenerated": true,
+ "sources": [
+ "build/CMakeFiles/LANG_QRC",
+ "build/CMakeFiles/LANG_QRC.rule",
+ "build/nheko_de.qm.rule",
+ "build/nheko_el.qm.rule",
+ "build/nheko_en.qm.rule",
+ "build/nheko_nl.qm.rule"
+ ]
+ }
+ ],
+ "fullName": "LANG_QRC",
+ "name": "LANG_QRC",
+ "sourceDirectory": "/home/max/Program/nheko",
+ "type": "UTILITY"
+ },
+ {
+ "artifacts": [
+ "/home/max/Program/nheko/build/libmatrix_events.a"
+ ],
+ "buildDirectory": "/home/max/Program/nheko/build",
+ "crossReferences": {
+ "backtrace": [
+ {
+ "line": 317,
+ "name": "add_library",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "relatedStatements": [
+ {
+ "backtrace": [
+ {
+ "line": 233,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 234,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 235,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 236,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 238,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 239,
+ "name": "include_directories",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_include_directories"
+ },
+ {
+ "backtrace": [
+ {
+ "line": 318,
+ "name": "target_link_libraries",
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ },
+ {
+ "path": "/home/max/Program/nheko/CMakeLists.txt"
+ }
+ ],
+ "type": "target_link_libraries"
+ }
+ ]
+ },
+ "fileGroups": [
+ {
+ "compileFlags": " -Wall -Wextra -march=native -Werror -pipe -pedantic -Wunreachable-code -fdiagnostics-color=always -g -fPIC -std=gnu++11",
+ "defines": [
+ "QT_CORE_LIB"
+ ],
+ "includePath": [
+ {
+ "path": "/home/max/Program/nheko/build"
+ },
+ {
+ "path": "/home/max/Program/nheko"
+ },
+ {
+ "path": "/home/max/Program/nheko/include"
+ },
+ {
+ "path": "/home/max/Program/nheko/include/ui"
+ },
+ {
+ "path": "/home/max/Program/nheko/include/events"
+ },
+ {
+ "path": "/home/max/Program/nheko/include/events/messages"
+ },
+ {
+ "path": "/home/max/Program/nheko/libs/lmdbxx"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/include/qt5/QtCore"
+ },
+ {
+ "isSystem": true,
+ "path": "/usr/lib64/qt5/./mkspecs/linux-g++"
+ }
+ ],
+ "isGenerated": false,
+ "language": "CXX",
+ "sources": [
+ "src/events/Event.cc",
+ "src/events/AliasesEventContent.cc",
+ "src/events/AvatarEventContent.cc",
+ "src/events/CanonicalAliasEventContent.cc",
+ "src/events/CreateEventContent.cc",
+ "src/events/HistoryVisibilityEventContent.cc",
+ "src/events/JoinRulesEventContent.cc",
+ "src/events/MemberEventContent.cc",
+ "src/events/MessageEventContent.cc",
+ "src/events/NameEventContent.cc",
+ "src/events/PowerLevelsEventContent.cc",
+ "src/events/TopicEventContent.cc",
+ "src/events/messages/Audio.cc",
+ "src/events/messages/Emote.cc",
+ "src/events/messages/File.cc",
+ "src/events/messages/Image.cc",
+ "src/events/messages/Location.cc",
+ "src/events/messages/Notice.cc",
+ "src/events/messages/Text.cc",
+ "src/events/messages/Video.cc",
+ "src/Deserializable.cc"
+ ]
+ }
+ ],
+ "fullName": "libmatrix_events.a",
+ "linkerLanguage": "CXX",
+ "name": "matrix_events",
+ "sourceDirectory": "/home/max/Program/nheko",
+ "type": "STATIC_LIBRARY"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "cookie": "0.46582309898312313",
+ "inReplyTo": "codemodel",
+ "type": "reply"
+ }
+}
\ No newline at end of file
diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
new file mode 100644
index 00000000..2706fb5f
--- /dev/null
+++ b/.vscode/c_cpp_properties.json
@@ -0,0 +1,16 @@
+{
+ "configurations": [
+ {
+ "name": "null",
+ "includePath": [],
+ "defines": [],
+ "browse": {
+ "path": [],
+ "limitSymbolsToIncludedHeaders": true,
+ "databaseFilename": ""
+ },
+ "intelliSenseMode": "clang-x64"
+ }
+ ],
+ "version": 3
+}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 00000000..6c283859
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,12 @@
+{
+ // See https://go.microsoft.com/fwlink/?LinkId=733558
+ // for the documentation about the tasks.json format
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "echo",
+ "type": "shell",
+ "command": "echo Hello"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f34d2ce6..6c10aca4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,10 +1,25 @@
cmake_minimum_required(VERSION 3.1)
-project(nheko C CXX)
-
option(BUILD_TESTS "Build all tests" OFF)
option(APPVEYOR_BUILD "Build on appveyor" OFF)
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
+
+# Include Qt basic functions
+include(QtCommon)
+
+project(nheko LANGUAGES C CXX VERSION 0.1.0)
+
+# Set PROJECT_VERSION_PATCH and PROJECT_VERSION_TWEAK to 0 if not present, needed by add_project_meta
+fix_project_version()
+
+# Set additional project information
+set(COMPANY "Nheko")
+set(COPYRIGHT "Copyright (c) 2017 Mujx")
+set(IDENTIFIER "com.mujx.nheko")
+
+add_project_meta(META_FILES_TO_INCLUDE)
+
#
# LMDB
#
@@ -156,6 +171,7 @@ set(SRC_FILES
src/RoomMessages.cc
src/RoomState.cc
src/SideBarActions.cc
+ src/UserSettingsPage.cc
src/Splitter.cc
src/Sync.cc
src/TextInputWidget.cc
@@ -184,6 +200,7 @@ set(SRC_FILES
src/ui/RippleOverlay.cc
src/ui/OverlayWidget.cc
src/ui/TextField.cc
+ src/ui/ToggleButton.cc
src/ui/Theme.cc
src/ui/ThemeManager.cc
)
@@ -245,6 +262,7 @@ qt5_wrap_cpp(MOC_HEADERS
include/RoomInfoListItem.h
include/RoomList.h
include/SideBarActions.h
+ include/UserSettingsPage.h
include/Splitter.h
include/TextInputWidget.h
include/TimelineItem.h
@@ -268,6 +286,7 @@ qt5_wrap_cpp(MOC_HEADERS
include/ui/Ripple.h
include/ui/RippleOverlay.h
include/ui/TextField.h
+ include/ui/ToggleButton.h
include/ui/Theme.h
include/ui/ThemeManager.h
)
@@ -298,14 +317,6 @@ qt5_add_resources(QRC resources/res.qrc)
add_library(matrix_events ${MATRIX_EVENTS} src/Deserializable.cc)
target_link_libraries(matrix_events Qt5::Core)
-#
-# Bundle icons.
-#
-if (APPLE)
- set(ICON_FILE resources/nheko.icns)
- set_source_files_properties(${ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
-endif()
-
if (BUILD_TESTS)
enable_testing()
@@ -332,15 +343,15 @@ else()
set (NHEKO_LIBS matrix_events Qt5::Widgets Qt5::Network Qt5::Concurrent ${LMDB_LIBRARY})
endif()
-set (NHEKO_DEPS ${OS_BUNDLE} ${SRC_FILES} ${UI_HEADERS} ${MOC_HEADERS} ${QRC} ${LANG_QRC} ${QM_SRC})
+set (NHEKO_DEPS ${SRC_FILES} ${UI_HEADERS} ${MOC_HEADERS} ${QRC} ${LANG_QRC} ${QM_SRC} ${META_FILES_TO_INCLUDE})
if(APPLE)
- add_executable (nheko ${NHEKO_DEPS})
+ add_executable (nheko ${OS_BUNDLE} ${NHEKO_DEPS})
target_link_libraries (nheko ${NHEKO_LIBS} Qt5::MacExtras)
elseif(WIN32)
- add_executable (nheko ${ICON_FILE} ${NHEKO_DEPS})
+ add_executable (nheko ${OS_BUNDLE} ${ICON_FILE} ${NHEKO_DEPS})
target_link_libraries (nheko ${NTDLIB} ${NHEKO_LIBS} Qt5::WinMain)
else()
- add_executable (nheko ${NHEKO_DEPS})
+ add_executable (nheko ${OS_BUNDLE} ${NHEKO_DEPS})
target_link_libraries (nheko ${NHEKO_LIBS})
endif()
diff --git a/Makefile b/Makefile
index b4f3f470..cb0e6d1b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,4 @@
-APP_NAME = nheko
-MAC_DIST_DIR = dist/MacOS
-APP_TEMPLATE = $(MAC_DIST_DIR)/Nheko.app
-
-# Linux specific helpers
debug:
@cmake -DBUILD_TESTS=OFF -H. -GNinja -Bbuild -DCMAKE_BUILD_TYPE=Debug
@cmake --build build
@@ -17,19 +12,14 @@ test:
@cmake --build build
@cd build && GTEST_COLOR=1 ctest --verbose
-app: release-debug $(APP_TEMPLATE)
- @cp -fp ./build/$(APP_NAME) $(APP_TEMPLATE)/Contents/MacOS
- @echo "Created '$(APP_NAME).app' in '$(APP_TEMPLATE)'"
+linux-appimage:
+ @./.ci/linux/deploy.sh
-app-install: app
- cp -Rf $(APP_TEMPLATE) /Applications/
+macos-app: release-debug
+ @./.ci/macos/deploy.sh
-dmg: app
- hdiutil create $(MAC_DIST_DIR)/Nheko.dmg \
- -volname "$(APP_NAME)" \
- -fs HFS+ \
- -srcfolder $(MAC_DIST_DIR) \
- -ov -format UDZO
+macos-app-install:
+ cp -Rf build/nheko.app /Applications
run:
@./build/nheko
diff --git a/README.md b/README.md
index 26356ef6..41ee62a1 100644
--- a/README.md
+++ b/README.md
@@ -16,10 +16,12 @@ but we are getting close to a more feature complete client.
Specifically there is support for:
- Joining & leaving rooms
- Sending & receiving images and emoji.
-- Receiving typing notifications.
+- Typing notifications.
### Installation
+There are pre-built nigtly releases [here](https://github.com/mujx/nheko/releases/tag/nightly) for Linux ([AppImage](https://appimage.org/)), Mac and Windows.
+
#### Arch Linux
```bash
pacaur -S nheko-git
@@ -37,10 +39,6 @@ sudo layman -a matrix
sudo emerge -a nheko
```
-#### Windows
-
-You can find an installer [here](https://ci.appveyor.com/project/mujx/nheko/branch/master/artifacts).
-
### Build Requirements
- Qt5 (5.7 or greater). Qt 5.7 adds support for color font rendering with
@@ -105,15 +103,7 @@ make -C build
The `nheko` binary will be located in the `build` directory.
-##### MacOS
-
-You can create an app bundle with `make app`. The output will be located at
-`dist/MacOS/Nheko.app` which can be copied to `/Applications/Nheko.app`.
-
-You can also create a disk image with `make dmg`. The output will be located at
-`dist/MacOS/Nheko.dmg`
-
-##### Nix
+#### Nix
Download the repo as mentioned above and run
diff --git a/appveyor.yml b/appveyor.yml
index b5625097..3f1a0e83 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -15,14 +15,32 @@ build:
install:
- set QT_DIR=C:\Qt\5.8\msvc2015_64
- set PATH=%PATH%;%QT_DIR%\bin;C:\MinGW\bin
- - copy LICENSE .ci\windows\LICENSE.txt
- - cinst nsis --version 3.0 -y -installArgs /D=C:\nsis
build_script:
- - cmake -G "Visual Studio 14 2015 Win64" -H. -Bbuild -DAPPVEYOR_BUILD=ON
+ # VERSION format: branch-master/branch-1.2
+ # INSTVERSION format: x.y.z
+ # WINVERSION format: 9999.0.0.123/1.2.0.234
+ - if "%APPVEYOR_REPO_TAG%"=="false" set INSTVERSION=0.1.0
+ - if "%APPVEYOR_REPO_TAG%"=="false" set VERSION=0.1.0
+ - if "%APPVEYOR_REPO_TAG%"=="false" if "%APPVEYOR_REPO_BRANCH%"=="master" set INSTVERSION=9999.0
+ - if "%APPVEYOR_REPO_TAG%"=="false" set WINVERSION=%INSTVERSION%.0.%APPVEYOR_BUILD_NUMBER%
+ # VERSION format: v1.2.3/v1.3.4
+ # INSTVERSION format: 1.2.3/1.3.4
+ # WINVERSION format: 1.2.3.123/1.3.4.234
+ - if "%APPVEYOR_REPO_TAG%"=="true" set VERSION=%APPVEYOR_REPO_TAG_NAME%
+ - if "%APPVEYOR_REPO_TAG%"=="true" set INSTVERSION=%VERSION:~1%
+ - if "%APPVEYOR_REPO_TAG%"=="true" set WINVERSION=%VERSION:~1%.%APPVEYOR_BUILD_NUMBER%
+ - set DATE=%date:~10,4%-%date:~4,2%-%date:~7,2%
+ - echo %VERSION%
+ - echo %INSTVERSION%
+ - echo %DATE%
+ - cmake -G "Visual Studio 14 2015 Win64" -H. -Bbuild -DAPPVEYOR_BUILD=ON -DCMAKE_BUILD_TYPE=Release
- cmake --build build --config Release
after_build:
+ # Variables
+ - set BUILD=%APPVEYOR_BUILD_FOLDER%
+ - echo %BUILD%
- mkdir NhekoRelease
- copy build\Release\nheko.exe NhekoRelease\nheko.exe
- windeployqt --qmldir C:\Qt\5.8\msvc2015_64\qml\ --release NhekoRelease\nheko.exe
@@ -31,9 +49,58 @@ after_build:
- copy C:\OpenSSL-Win64\lib\libeay32.lib .\NhekoRelease\libeay32.lib
- copy C:\OpenSSL-Win64\bin\ssleay32.dll .\NhekoRelease\ssleay32.dll
- 7z a nheko_win_64.zip .\NhekoRelease\*
- - C:\nsis\makensis .ci\windows\nheko.nsi
+ - ls -lh build\Release\
+ - ls -lh NhekoRelease\
+ - mkdir NhekoData
+ - xcopy .\NhekoRelease\*.* NhekoData\*.* /s /e /c /y
+ #
+ # Create the Qt Installer Framework version
+ #
+ - mkdir installer
+ - mkdir installer\config
+ - mkdir installer\packages
+ - mkdir installer\packages\com.mujx.nheko
+ - mkdir installer\packages\com.mujx.nheko\data
+ - mkdir installer\packages\com.mujx.nheko\meta
+ - mkdir installer\packages\com.mujx.nheko.cleanup\meta
+ # Copy installer data
+ - copy %BUILD%\resources\nheko.ico installer\config
+ - copy %BUILD%\resources\nheko.png installer\config
+ - copy %BUILD%\LICENSE installer\packages\com.mujx.nheko\meta\license.txt
+ - copy %BUILD%\LICENSE installer\packages\com.mujx.nheko.cleanup\meta\license.txt
+ - copy %BUILD%\deploy\installer\config.xml installer\config
+ - copy %BUILD%\deploy\installer\controlscript.qs installer\config
+ - copy %BUILD%\deploy\installer\uninstall.qs installer\packages\com.mujx.nheko\data
+ - copy %BUILD%\deploy\installer\gui\package.xml installer\packages\com.mujx.nheko\meta
+ - copy %BUILD%\deploy\installer\gui\installscript.qs installer\packages\com.mujx.nheko\meta
+ - copy %BUILD%\deploy\installer\cleanup\package.xml installer\packages\com.mujx.nheko.cleanup\meta
+ - copy %BUILD%\deploy\installer\cleanup\installscript.qs installer\packages\com.mujx.nheko.cleanup\meta
+ # Amend version and date
+ - sed -i "s/__VERSION__/0.1.0/" installer\config\config.xml
+ - sed -i "s/__VERSION__/0.1.0/" installer\packages\com.mujx.nheko\meta\package.xml
+ - sed -i "s/__VERSION__/0.1.0/" installer\packages\com.mujx.nheko.cleanup\meta\package.xml
+ - sed -i "s/__DATE__/%DATE%/" installer\packages\com.mujx.nheko\meta\package.xml
+ - sed -i "s/__DATE__/%DATE%/" installer\packages\com.mujx.nheko.cleanup\meta\package.xml
+ # Copy nheko data
+ - xcopy NhekoData\*.* installer\packages\com.mujx.nheko\data\*.* /s /e /c /y
+ - move NhekoRelease\nheko.exe installer\packages\com.mujx.nheko\data
+ - mkdir tools
+ - curl -L -O https://download.qt.io/official_releases/qt-installer-framework/3.0.1/QtInstallerFramework-win-x86.exe
+ - 7z x QtInstallerFramework-win-x86.exe -otools -aoa
+ - set PATH=%BUILD%\tools\bin;%PATH%
+ - binarycreator.exe -f -c installer\config\config.xml -p installer\packages nheko-installer.exe
+
+deploy:
+ description: "Development builds"
+ provider: GitHub
+ auth_token:
+ secure: YqB7hcM+4482eSHhtVR7ZA7N7lE78y8BC897/7UDTBQd+NWdWFW/6S+oKDie9TT7
+ artifact: nheko-installer.exe
+ force_update: true
+ prerelease: true
+ on:
+ appveyor_repo_tag: true
artifacts:
- path: nheko_win_64.zip
- - path: NhekoRelease\nheko.exe
- - path: nheko_setup.exe
+ - path: nheko-installer.exe
diff --git a/cmake/MacOSXBundleInfo.plist.in b/cmake/MacOSXBundleInfo.plist.in
new file mode 100644
index 00000000..7391a6fa
--- /dev/null
+++ b/cmake/MacOSXBundleInfo.plist.in
@@ -0,0 +1,36 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ ${MACOSX_BUNDLE_EXECUTABLE_NAME}
+ CFBundleGetInfoString
+ ${MACOSX_BUNDLE_INFO_STRING}
+ CFBundleIconFile
+ ${MACOSX_BUNDLE_ICON_FILE}
+ CFBundleIdentifier
+ ${MACOSX_BUNDLE_GUI_IDENTIFIER}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleLongVersionString
+ ${MACOSX_BUNDLE_LONG_VERSION_STRING}
+ CFBundleName
+ ${MACOSX_BUNDLE_BUNDLE_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ ${MACOSX_BUNDLE_SHORT_VERSION_STRING}
+ CFBundleVersion
+ ${MACOSX_BUNDLE_BUNDLE_VERSION}
+ CSResourcesFileMapped
+
+ LSRequiresCarbon
+
+ NSHumanReadableCopyright
+ ${MACOSX_BUNDLE_COPYRIGHT}
+ NSPrincipalClass
+ NSApplication
+
+
diff --git a/cmake/QtCommon.cmake b/cmake/QtCommon.cmake
new file mode 100644
index 00000000..2145019e
--- /dev/null
+++ b/cmake/QtCommon.cmake
@@ -0,0 +1,76 @@
+macro(fix_project_version)
+if (NOT PROJECT_VERSION_PATCH)
+ set(PROJECT_VERSION_PATCH 0)
+endif()
+
+if (NOT PROJECT_VERSION_TWEAK)
+ set(PROJECT_VERSION_TWEAK 0)
+endif()
+endmacro()
+
+macro(add_project_meta FILES_TO_INCLUDE)
+if (NOT RESOURCE_FOLDER)
+ set(RESOURCE_FOLDER resources)
+endif()
+
+if (NOT ICON_NAME)
+ set(ICON_NAME nheko)
+endif()
+
+if (APPLE)
+ set(ICON_FILE ${RESOURCE_FOLDER}/${ICON_NAME}.icns)
+elseif (WIN32)
+ set(ICON_FILE ${RESOURCE_FOLDER}/${ICON_NAME}.ico)
+endif()
+
+if (WIN32)
+ configure_file("${PROJECT_SOURCE_DIR}/cmake/windows_metafile.rc.in"
+ "windows_metafile.rc"
+ )
+ set(RES_FILES "windows_metafile.rc")
+ set(CMAKE_RC_COMPILER_INIT windres)
+ ENABLE_LANGUAGE(RC)
+ SET(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o