add contact and fix stack

This commit is contained in:
amneiht 2025-04-08 15:29:42 +07:00
parent 9b72f49ef0
commit 2d5e583579
27 changed files with 531 additions and 181 deletions

View file

@ -10,6 +10,7 @@ set(QPACKAGE Core Gui Qml Quick QuickControls2 Test)
find_package(QT NAMES Qt5 Qt6 REQUIRED COMPONENTS ${QPACKAGE} )
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS ${QPACKAGE})
option(DEBUG "Enaable asan debug" OFF)
# lazy add file
#file(GLOB_RECURSE BASE_DIR "src/base/*.cpp" "src/base/*.h")
#file(GLOB_RECURSE INCLUDE_DIR "include/*.h" )
@ -55,7 +56,7 @@ add_executable(chat
src/model/chat/contact/contactproxymodel.h src/model/chat/contact/contactproxymodel.cpp
src/model/chat/contact/contactmodel.h src/model/chat/contact/contactmodel.cpp
src/model/chat/contact/contactchecklistmodel.h src/model/chat/contact/contactchecklistmodel.cpp
)
)
target_include_directories(chat PRIVATE "./include" "./src")
@ -71,3 +72,10 @@ install(TARGETS chat
find_package(Deltachat REQUIRED)
target_link_libraries(chat Deltachat)
#for debug
if ( DEBUG )
# target_compile_definitions(chat PRIVATE -fsanitize=address)
list(APPEND CMAKE_C_FLAG PRIVATE -fsanitize=address -g )
target_link_libraries(chat asan)
endif()

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 15.0.1, 2025-04-04T01:00:55. -->
<!-- Written by QtCreator 15.0.1, 2025-04-08T01:02:19. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
@ -106,16 +106,16 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DLINPHONE_SDK:STRING=/home/amneiht/app/workspace/lib/linphone/release/x64
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX};/home/amneiht/app/workspace/lib/delta_chat/rls_1.157.2/x64
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/deltachat/Desktop_Qt_5_15_2_GCC_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
@ -165,15 +165,15 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/deltachat/Desktop_Qt_5_15_2_GCC_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
@ -220,15 +220,15 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/deltachat/Desktop_Qt_5_15_2_GCC_64bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
@ -275,15 +275,15 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/deltachat/Desktop_Qt_5_15_2_GCC_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
@ -331,15 +331,15 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/deltachat/Desktop_Qt_5_15_2_GCC_64bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
@ -467,17 +467,17 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_CXX_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_EXE_LINKER_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_EXE_LINKER_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_CXX_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX};/home/amneiht/app/workspace/lib/delta_chat/arm64
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/chat/Arm64_Qt_5_15-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
@ -526,17 +526,17 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_CXX_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_EXE_LINKER_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_EXE_LINKER_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_CXX_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/chat/Arm64_Qt_5_15-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
@ -583,17 +583,17 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_CXX_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_EXE_LINKER_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_EXE_LINKER_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_CXX_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/chat/Arm64_Qt_5_15-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
@ -640,17 +640,17 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_CXX_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_EXE_LINKER_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_EXE_LINKER_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_CXX_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/chat/Arm64_Qt_5_15-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
@ -698,17 +698,17 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_CXX_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_EXE_LINKER_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_EXE_LINKER_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_CXX_FLAGS:STRING=&quot;--sysroot=/home/amneiht/app/workspace/toolchain/mip10dv/sysroots/aarch64-poky-linux&quot;
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/chat/Arm64_Qt_5_15-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
@ -834,15 +834,15 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX};/home/amneiht/app/workspace/lib/delta_chat/rls_1.157.2/x64
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/chat/Desktop_Qt_6_5_0_GCC_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
@ -892,15 +892,15 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/chat/Desktop_Qt_6_5_0_GCC_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
@ -947,15 +947,15 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/chat/Desktop_Qt_6_5_0_GCC_64bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
@ -1002,15 +1002,15 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/chat/Desktop_Qt_6_5_0_GCC_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
@ -1058,15 +1058,15 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_GENERATOR:STRING=Ninja
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_COLOR_DIAGNOSTICS:BOOL=ON
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_GENERATOR:STRING=Ninja</value>
-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/mnt/ramdisk/build/chat/Desktop_Qt_6_5_0_GCC_64bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">

View file

@ -2,27 +2,51 @@ import QtQuick 2.15
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
Item {
required property string $text
height: parent.height
TextIcon {
id: icon
y:5
size: parent.height - 10
dptext: $text
anchors.left: parent.left
}
Text {
anchors{
right: parent.right
}
height: parent.height
width: parent.width - icon.width -3
verticalAlignment: Text.AlignVCenter
// horizontalAlignment: Text.AlignHCenter
text: $text
elide: Text.ElideRight
font.pixelSize: height/3
RowLayout {
anchors.fill: parent
TextIcon {
id: icon
y:5
size: parent.height - 10
dptext: $text
}
Text {
Layout.fillWidth: true
height: parent.height
verticalAlignment: Text.AlignVCenter
// horizontalAlignment: Text.AlignHCenter
text: $text
elide: Text.ElideRight
// font.pixelSize: height/3
}
}
/* old code
TextIcon {
id: icon
y:5
size: parent.height - 10
dptext: $text
anchors.left: parent.left
}
Text {
anchors{
right: parent.right
}
height: parent.height
width: parent.width - icon.width -3
verticalAlignment: Text.AlignVCenter
// horizontalAlignment: Text.AlignHCenter
text: $text
elide: Text.ElideRight
font.pixelSize: height/3
}
//*/
}

View file

@ -32,8 +32,12 @@ Rectangle {
}
function setView(component , property)
{
if(property !== undefined)
{
load.setSource(component , property )
stack.pushMap(component , property )
}
else
load.setSource(component)
}
@ -58,12 +62,16 @@ Rectangle {
target: _view
function onCloseView()
{
// clear old data
load.source = ""
stack.popMap(load.source );
// pop stack data
var ssource = stack.popView()
var data = stack.popMap(ssource);
if(ssource !== "")
{
load.active = false
Qt.callLater(showView,ssource);
Qt.callLater(showView,ssource,data);
} else {
virtual.visible = false
load.active = false

View file

@ -22,9 +22,9 @@ function leaveGroup(){
model.leaveGroup()
}
function showView(dir)
function showView(dir , obj )
{
// append url
var url = "qrc:/qml/chat/" + dir
mess_area.showView(url)
var url = "qrc:/qml/chat/message/" + dir
mess_area.showView(url , obj)
}

View file

@ -16,10 +16,10 @@ PanelView{
Layout.fillWidth: true
ChatRoomModel {
id:model
// chatid: chat_id
}
MessageModel {
id:mess
chatId: chat_id
}
Menu {
id: menu
@ -69,13 +69,13 @@ PanelView{
spacing: 3
ContactIcon {
$text : model.chatName()
Layout.fillWidth: true
MouseArea {
anchors.fill: parent
onClicked: {
MS.showView("popup/GroupContact.qml")
}
}
Layout.fillWidth: true
MouseArea {
anchors.fill: parent
onClicked: {
MS.showView("popup/GroupContact.qml",{ chat_id : chat_id })
}
}
}
/*
TextIcon {
@ -152,6 +152,7 @@ PanelView{
z:2
Layout.fillWidth: true
height: 30
visible: model.active
RowLayout {
anchors.fill: parent
TextArea {

View file

@ -50,7 +50,8 @@ Item{
wrapMode: Text.WordWrap
onLinkActivated:
{
console.debug(link)
var obj = { qrcode:link , stext:$text }
mess_area.showView("qrc:/qml/chat/popup/JoinChatPopup.qml",obj)
}
}
RowLayout {

View file

@ -4,12 +4,14 @@ import QtQuick.Layouts 1.3
import DCStyle 1.0
import Dcchat 1.0
import "MessPopup.js" as MP
Rectangle {
id : ct
height: 50
required property string $name
required property int $id
required property int chat_id
// mess_area.model : call model from parent
RowLayout {
id: row
width: parent.width
@ -25,12 +27,15 @@ Rectangle {
// radius: 4
// color: "lightgray"
// }
visible: $id != 1
visible: $id != 1 && mess_area.model.isGroup()
id:btn
text: qsTr("rm")
onClicked: {
ChatMediator.setContactId($id);
mess_area.showView("qrc:/qml/chat/popup/RemovePopup.qml",{ contact_id:$id })
// ChatMediator.setContactId($id);
var dir = MP.build_dir("RemovePopup.qml")
console.debug(" chat id " + chat_id)
mess_area.showView(dir,{ contact_id:$id , chat_id : chat_id })
}
}
}

View file

@ -4,15 +4,18 @@ import QtQuick.Layouts 1.3
import Dcchat 1.0
import DCStyle 1.0
import "MessPopup.js" as MP
Rectangle {
width: 400
color: "white"
height: 500
radius: 5
required property int chat_id
ChatContact {
id : model
chatId: chat_id
}
Rectangle {
id: contact
@ -29,12 +32,13 @@ Rectangle {
width: parent.width
height: 30
Text {
text: qsTr("Group")
text: mess_area.model.isGroup() ? qsTr("Group") : qsTr("Contact")
Layout.fillWidth: true
}
Button {
width: 20
text: qsTr("edit")
visible: false
}
Button {
width: 20
@ -55,11 +59,11 @@ Rectangle {
spacing: 10
TextIcon {
dptext: model.chatName()
dptext: model.chatName
size:50
}
Text {
text: model.chatName()
text: model.chatName
height: 50
font.pixelSize: 50 / 2
}
@ -70,6 +74,7 @@ Rectangle {
color: "lightgray"
Layout.fillWidth: true
z:2
visible: mess_area.model.isGroup()
Text{
anchors.fill: parent
text: qsTr("Number in Group: ")+model.nuser
@ -80,6 +85,7 @@ Rectangle {
height: 50
Layout.fillWidth: true
z:1
visible: mess_area.model.isGroup() && mess_area.model.active
RowLayout {
anchors.fill: parent
TextIcon {
@ -95,14 +101,21 @@ Rectangle {
}
}
MouseArea {
anchors.fill: parent
onClicked: {
var dir = MP.build_dir("GroupContactAdd.qml")
mess_area.showView(dir)
}
}
}
ListView {
id: view
Layout.fillWidth: true
height: 250
model: model
delegate: ContactItem {
chat_id: model.chatId
width: contact.width
}
}

View file

@ -0,0 +1,98 @@
import QtQuick 2.15
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.3
import DCStyle 1.0
import Dcchat 1.0
Rectangle {
width: 400
height: 640
ContactCheckListModel {
id:model
chatId: mess_area.chat_id
}
ColumnLayout {
x:5
y:5
width: parent.width -10
height: parent.height - 10
spacing: 5
Text {
Layout.fillWidth: true
text:qsTr("Group")
}
Rectangle {
Layout.fillWidth: true
height: icon.height
z:1
ContactIcon {
id: icon
$text : mess_area.model.chatName()
height: 40
width: parent.width
}
}
Rectangle {
Layout.fillWidth: true
color: "gray"
height: 3
z:1
}
ListView {
id:view
Layout.fillWidth: true
Layout.fillHeight: true
spacing: 2
model : model
delegate: Rectangle {
required property string $name
required property int $id
required property bool $check
required property int index
width: view.width
height: 40
RowLayout {
anchors.fill: parent
ContactIcon {
Layout.fillWidth: true
height: parent.height
$text: $name
}
CheckBox {
id: _checkbox
checked: $check
onCheckStateChanged: {
// console.debug("index is"+index)
model.setData(model.index(index,0),checkState,model.editRole())
}
}
}
}
}
RowLayout {
Layout.fillWidth: true
height: 30
Button {
Layout.fillWidth: true
height: parent.height
text: qsTr("Exit")
onClicked: {
mess_area.closeView()
}
}
Button {
Layout.fillWidth: true
height: parent.height
text: qsTr("Add")
onClicked: {
// lmodel.createChat(tf.text)
model.addContactToChat(mess_area.chat_id)
mess_area.closeView()
}
}
}
}
}

View file

@ -0,0 +1,43 @@
import QtQuick 2.15
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.0
import Dcchat 1.0
Rectangle {
width: 300
height: 100
required property string stext
required property string qrcode
ColumnLayout {
anchors.fill: parent
Text {
id: name
text: stext
Layout.fillWidth: true
Layout.fillHeight: true
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.pixelSize: 20
}
RowLayout {
Layout.fillWidth: true
implicitHeight: btn.implicitHeight
Button {
id: btn
text: qsTr("Yes")
onClicked: {
ChatMediator.chatWithQrCode(qrcode)
mess_area.closeView()
}
}
Item {
Layout.fillWidth: true
}
Button {
text: qsTr("No")
onClicked: {
mess_area.closeView()
}
}
}
}
}

View file

@ -0,0 +1,5 @@
.pragma library
function build_dir(path){
return "qrc:/qml/chat/message/popup/"+path
}

View file

@ -7,6 +7,7 @@ Rectangle {
width:250
height: 100
required property int chat_id
required property int contact_id
ColumnLayout {
anchors.fill: parent
@ -22,7 +23,7 @@ Rectangle {
text:qsTr("Yes")
onClicked: {
clearContact()
mess_area.closeView()
// mess_area.closeView()
}
}
Button {
@ -36,7 +37,7 @@ Rectangle {
}
}
function clearContact(){
var chat_id = ChatMediator.getChatId()
ChatMediator.clearContact(chat_id , contact_id);
ChatMediator.removeContactFromChat(chat_id , contact_id);
}
}

View file

@ -10,17 +10,20 @@
<file>qml/chat/ChatListView.js</file>
<file>qml/DCStyle/view/PanelView.qml</file>
<file>qml/chat/popup/ChatContact.qml</file>
<file>qml/chat/popup/ContactItem.qml</file>
<file>qml/chat/popup/RemovePopup.qml</file>
<file>qml/DCStyle/icon/TextIcon.qml</file>
<file>qml/chat/popup/GroupContact.qml</file>
<file>qml/chat/message/MessageArea.js</file>
<file>qml/chat/message/MessageArea.qml</file>
<file>qml/chat/message/MessageItem.qml</file>
<file>qml/chat/popup/QrCodePopup.qml</file>
<file>qml/chat/contact/ContactList.qml</file>
<file>qml/DCStyle/icon/ContactIcon.qml</file>
<file>qml/chat/contact/RmContact.qml</file>
<file>qml/chat/contact/CreateGroup.qml</file>
<file>qml/chat/message/popup/ContactItem.qml</file>
<file>qml/chat/message/popup/GroupContact.qml</file>
<file>qml/chat/message/popup/GroupContactAdd.qml</file>
<file>qml/chat/message/popup/JoinChatPopup.qml</file>
<file>qml/chat/message/popup/QrCodePopup.qml</file>
<file>qml/chat/message/popup/RemovePopup.qml</file>
<file>qml/chat/message/popup/MessPopup.js</file>
</qresource>
</RCC>

View file

@ -34,8 +34,20 @@ QString ChatMediator::getQrCode()
return qrCode;
}
void ChatMediator::chatWithQrCode(const QString& qrcode)
{
auto ctx = dc::Account::getInstance()->getSelectedAccount();
ctx->joinSecurejoin(qrcode);
}
void ChatMediator::removeContact(int id)
{
auto ctx = dc::Account::getInstance()->getSelectedAccount();
ctx->deleteContact(id);
}
void ChatMediator::removeContactFromChat(int chat_id, int contact_id)
{
auto ctx = dc::Account::getInstance()->getSelectedAccount();
ctx->removeContactFromChat(chat_id, contact_id);
}

View file

@ -20,8 +20,10 @@ public:
// for qt Code
Q_INVOKABLE void createQrCode(uint32_t chat_id);
Q_INVOKABLE QString getQrCode();
Q_INVOKABLE void chatWithQrCode(const QString& qrcode);
//
Q_INVOKABLE void removeContact(int id);
Q_INVOKABLE void removeContactFromChat(int chat_id, int contact_id);
};
#endif // CHATMEDIATOR_H

View file

@ -14,17 +14,19 @@ ChatRoomModel::ChatRoomModel(QObject* parent)
mess_count = 10;
auto acc = dc::Account::getInstance();
// signal connect
connect(acc.get(), &dc::Account::incomingMessage, this, &ChatRoomModel::onIncomingMessage);
connect(acc.get(), &dc::Account::outGoingMessage, this, &ChatRoomModel::onOutGoingMessage);
connect(this, &ChatRoomModel::updateData, this, &ChatRoomModel::rowChange, Qt::DirectConnection);
connect(acc.get(), &dc::Account::removeContactFromChat, this, &ChatRoomModel::onContactRemove);
connect(acc.get(), &dc::Account::messagesDelevery, this, &ChatRoomModel::onMessageDelivered);
connect(acc.get(), &dc::Account::messageFalse, this, &ChatRoomModel::onMessageDelivered);
connect(acc.get(), &dc::Account::chatListItemChange, this, &ChatRoomModel::onChatListChange);
time = new QTimer(this);
connect(time, &QTimer::timeout, this, &ChatRoomModel::markAsRead); // get chat ip
auto med = ChatCore::getMediator();
setChatid(med->getChatId());
// test = new QAbstractItemModelTester(this, QAbstractItemModelTester::FailureReportingMode::Warning, this);
}
@ -38,6 +40,7 @@ void ChatRoomModel::setChatid(int newChatid)
if (m_chatid == newChatid)
return;
m_chatid = newChatid;
beginResetModel();
auto ctx = dc::Account::getInstance()->getSelectedAccount();
chatlist = ctx->getMsgIdList(m_chatid);
// limit mess display
@ -53,6 +56,7 @@ void ChatRoomModel::setChatid(int newChatid)
auto chat = ctx->getChat(m_chatid);
m_group = chat->getType() == DC_CHAT_TYPE_GROUP;
time->start(3000);
endResetModel();
}
bool ChatRoomModel::checkSignal(uint32_t accountId, int chatId)
@ -77,7 +81,7 @@ QString ChatRoomModel::displayQrCode(const std::shared_ptr<dc::Lot>& lot, bool&
ret = QObject::tr("Chat with : ") + ctx->getContact(id)->getAddr();
break;
case DC_QR_ASK_VERIFYGROUP:
ret = QObject::tr("Tap to join group: ") + lot->getText1();
ret = QObject::tr("Chat with group: ") + lot->getText1();
break;
default:
valid = false;
@ -221,6 +225,14 @@ void ChatRoomModel::onMessageDelivered(uint32_t accountId, int chatId, int msg_i
}
}
void ChatRoomModel::onChatListChange(uint32_t accountId, int chatId)
{
if (!checkSignal(accountId, chatId)) {
return;
}
emit this->activeChanged();
}
void ChatRoomModel::rowChange()
{
@ -341,3 +353,9 @@ ChatRoomModel::~ChatRoomModel()
delete time;
chatlist.clear();
}
bool ChatRoomModel::getActive() const
{
auto chat = dc::Account::getInstance()->getSelectedAccount()->getChat(m_chatid);
return chat->canSend();
}

View file

@ -8,6 +8,8 @@
class ChatRoomModel : public QAbstractListModel {
Q_OBJECT
Q_PROPERTY(bool active READ getActive NOTIFY activeChanged FINAL)
private:
int mess_count = 20;
int current_count;
@ -49,15 +51,20 @@ public:
Q_INVOKABLE void clearAllMsg();
// QAbstractItemModel interface
QHash<int, QByteArray> roleNames() const;
bool getActive() const;
public slots:
void onIncomingMessage(uint32_t accountId, int chatId, int msgId);
void onOutGoingMessage(uint32_t accountId, int chatId, int msgid);
// void onChatListItemChange(uint32_t accountId, int chatId);
void onContactRemove(uint32_t accountId, int chatId, int contact_id);
void onMessageDelivered(uint32_t accountId, int chatId, int msg_id);
void onChatListChange(uint32_t accountId, int chatId);
signals:
void updateData();
void activeChanged();
private:
void rowChange();
void markAsRead();

View file

@ -5,8 +5,8 @@
ChatContact::ChatContact(QObject* parent)
: QAbstractListModel { parent }
{
m_chatid = ChatCore::getMediator()->getChatId();
m_contacts = dc::Account::getInstance()->getSelectedAccount()->getChatContacts(m_chatid);
// m_chatid = ChatCore::getMediator()->getChatId();
// m_contacts = dc::Account::getInstance()->getSelectedAccount()->getChatContacts(m_chatid);
}
int ChatContact::rowCount(const QModelIndex& parent) const
@ -41,12 +41,6 @@ QHash<int, QByteArray> ChatContact::roleNames() const
return res;
}
QString ChatContact::chatName()
{
auto chat = dc::Account::getInstance()->getSelectedAccount()->getChat(m_chatid);
return chat->getName();
}
int ChatContact::getNuser() const
{
return m_contacts.size();
@ -63,6 +57,32 @@ void ChatContact::removeContact(int id)
emit this->nuserChanged();
auto ctx = dc::Account::getInstance()->getSelectedAccount();
ctx->removeContactFromChat(m_chatid, id);
ctx->removeContactFromChat(m_chatId, id);
}
}
int ChatContact::getChatId() const
{
return m_chatId;
}
void ChatContact::setChatId(int newChatId)
{
if (m_chatId == newChatId)
return;
m_chatId = newChatId;
beginResetModel();
m_contacts = dc::Account::getInstance()->getSelectedAccount()->getChatContacts(m_chatId);
endResetModel();
emit chatNameChanged();
emit chatIdChanged();
}
QString ChatContact::getChatName() const
{
if (m_chatId >= 0) {
auto chat = dc::Account::getInstance()->getSelectedAccount()->getChat(m_chatId);
return chat->getName();
}
return "";
}

View file

@ -7,8 +7,9 @@ class ChatContact : public QAbstractListModel {
Q_OBJECT
Q_PROPERTY(int nuser READ getNuser NOTIFY nuserChanged FINAL)
Q_PROPERTY(int chatId READ getChatId WRITE setChatId NOTIFY chatIdChanged FINAL)
Q_PROPERTY(QString chatName READ getChatName NOTIFY chatNameChanged FINAL)
private:
int m_chatid;
QList<uint32_t> m_contacts;
enum ChatRole {
@ -16,6 +17,8 @@ private:
Id
};
int m_chatId = -1;
public:
explicit ChatContact(QObject* parent = nullptr);
@ -25,12 +28,18 @@ public:
QVariant data(const QModelIndex& index, int role) const;
QHash<int, QByteArray> roleNames() const;
Q_INVOKABLE QString chatName();
int getNuser() const;
Q_INVOKABLE void removeContact(int id);
int getChatId() const;
void setChatId(int newChatId);
QString getChatName() const;
signals:
void nuserChanged();
void chatIdChanged();
void chatNameChanged();
};
#endif // CHATCONTACT_H

View file

@ -41,7 +41,7 @@ bool ContactCheckListModel::setData(const QModelIndex& index, const QVariant& va
if (role == Role::Check) {
bool data = value.toBool();
qDebug() << "data change to " + QString::number(data);
// qDebug() << "data change to " + QString::number(data);
int row = index.row();
check_list.removeAt(row);
check_list.insert(row, data);
@ -67,7 +67,7 @@ void ContactCheckListModel::createChat(const QString& name, bool sercure)
if (!sercure) {
// add memner in check list if not sercure
for (int i = 0; i < check_list.size(); i++) {
for (int i = 0; i < contact_list.size(); i++) {
if (check_list.at(i)) {
ctx->addContactToChat(id, contact_list.at(i));
d++;
@ -76,7 +76,44 @@ void ContactCheckListModel::createChat(const QString& name, bool sercure)
}
}
void ContactCheckListModel::addContactToChat(int id)
{
auto ctx = dc::Account::getInstance()->getSelectedAccount();
for (int i = 0; i < contact_list.size(); i++) {
if (check_list.at(i)) {
ctx->addContactToChat(id, contact_list.at(i));
}
}
}
int ContactCheckListModel::editRole()
{
return Role::Check;
}
int ContactCheckListModel::getChatId() const
{
return m_id;
}
void ContactCheckListModel::setChatId(int newId)
{
if (m_id == newId)
return;
m_id = newId;
// remove all contact in chat
beginResetModel();
auto ctx = dc::Account::getInstance()->getSelectedAccount();
contact_list = ctx->getContacts(0, "");
auto rlist = ctx->getChatContacts(m_id);
for (auto rid : rlist) {
int pos = contact_list.indexOf(rid);
if (pos >= 0)
contact_list.removeAt(pos);
}
for (int i = 0; i < contact_list.size(); i++) {
check_list.append(false);
}
endResetModel();
emit chatIdChanged();
}

View file

@ -5,6 +5,7 @@
// show contact and ckecklist box
class ContactCheckListModel : public QAbstractListModel {
Q_OBJECT
Q_PROPERTY(int chatId READ getChatId WRITE setChatId NOTIFY chatIdChanged FINAL)
private:
enum Role {
Id = Qt::UserRole + 1,
@ -15,7 +16,7 @@ private:
QList<int> contact_list;
QList<bool> check_list;
int chat_id = -1;
int m_id;
public:
explicit ContactCheckListModel(QObject* parent = nullptr);
@ -28,7 +29,12 @@ public:
QHash<int, QByteArray> roleNames() const;
Q_INVOKABLE void createChat(const QString& name, bool sercure = false);
Q_INVOKABLE void addContactToChat(int id);
Q_INVOKABLE int editRole();
int getChatId() const;
void setChatId(int newId);
signals:
void chatIdChanged();
};
#endif // CONTACTCHECKLISTMODEL_H

View file

@ -6,23 +6,30 @@ MessageModel::MessageModel(QObject* parent)
: QObject { parent }
{
auto med = ChatCore::getMediator();
setId(med->getChatId());
// setId(med->getChatId());
}
MessageModel::~MessageModel()
{
}
void MessageModel::setId(int newId)
{
if (m_id == newId)
return;
m_id = newId;
emit idChanged();
}
void MessageModel::sendText(const QString& Text)
{
auto ctx = dc::Account::getInstance()->getSelectedAccount();
ctx->sendTextMessage(m_id, Text);
if (m_chatId > 0) {
auto ctx = dc::Account::getInstance()->getSelectedAccount();
ctx->sendTextMessage(m_chatId, Text);
}
}
int MessageModel::getChatId() const
{
return m_chatId;
}
void MessageModel::setChatId(int newChatId)
{
if (m_chatId == newChatId)
return;
m_chatId = newChatId;
emit chatIdChanged();
}

View file

@ -6,18 +6,21 @@
class MessageModel : public QObject {
Q_OBJECT
Q_PROPERTY(int chatId READ getChatId WRITE setChatId NOTIFY chatIdChanged FINAL)
public:
explicit MessageModel(QObject* parent = nullptr);
~MessageModel();
Q_INVOKABLE void sendText(const QString& Text);
int getChatId() const;
void setChatId(int newChatId);
signals:
void idChanged();
void chatIdChanged();
private:
// chat id
void setId(int newId);
int m_id;
int m_chatId = -1;
};
Q_DECLARE_METATYPE(MessageModel*);

View file

@ -7,6 +7,8 @@ ChatStack::ChatStack(QObject* par)
ChatStack::~ChatStack()
{
map.clear();
stack.clear();
}
void ChatStack::pushView(const QString& url)
@ -29,3 +31,15 @@ void ChatStack::clearStackView()
{
stack.clear();
}
void ChatStack::pushMap(const QString& key, const QVariant& data)
{
map[key] = data;
}
QVariant ChatStack::popMap(const QString& key)
{
auto data = map[key];
map.remove(key);
return data;
}

View file

@ -1,6 +1,7 @@
#ifndef CHATSTACK_H
#define CHATSTACK_H
#include <QHash>
#include <QList>
#include <QObject>
@ -9,6 +10,7 @@ class ChatStack : public QObject {
Q_OBJECT
private:
QList<QString> stack;
QHash<QString, QVariant> map;
public:
ChatStack(QObject* par = nullptr);
@ -17,6 +19,9 @@ public:
Q_INVOKABLE void pushView(const QString& url);
Q_INVOKABLE QString popView();
Q_INVOKABLE void clearStackView();
Q_INVOKABLE void pushMap(const QString& key, const QVariant& data);
Q_INVOKABLE QVariant popMap(const QString& key);
};
#endif // CHATSTACK_H