Skip to content

Commit

Permalink
Merge branch 'release/v7.3.0' into 'master'
Browse files Browse the repository at this point in the history
Release 7.3.0

See merge request megachat/MEGAchat!2038
  • Loading branch information
MEGA-SDK-releases committed Feb 6, 2025
2 parents dc049de + 54c103e commit b70e4d8
Show file tree
Hide file tree
Showing 22 changed files with 575 additions and 100 deletions.
5 changes: 5 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,11 @@ if(ENABLE_QT_BINDINGS)
add_subdirectory(bindings/qt)
endif()

# Load Java bindings
if(ENABLE_JAVA_BINDINGS)
add_subdirectory(bindings/java)
endif()

# Load Qt App example.
if(ENABLE_CHATLIB_QTAPP)
add_subdirectory(examples/qtmegachatapi)
Expand Down
8 changes: 6 additions & 2 deletions bindings/Objective-C/MEGAChatMessage.mm
Original file line number Diff line number Diff line change
Expand Up @@ -176,11 +176,15 @@ - (uint64_t)userHandleAtIndex:(NSUInteger)index {
}

- (NSString *)userNameAtIndex:(NSUInteger)index {
return self.megaChatMessage ? [[NSString alloc] initWithUTF8String:self.megaChatMessage->getUserName((unsigned int)index)] : nil;
if (!self.megaChatMessage) return nil;
const char *ret = self.megaChatMessage->getUserName((unsigned int)index);
return ret ? [[NSString alloc] initWithUTF8String:ret] : nil;
}

- (NSString *)userEmailAtIndex:(NSUInteger)index {
return self.megaChatMessage ? [[NSString alloc] initWithUTF8String:self.megaChatMessage->getUserEmail((unsigned int)index)] : nil;
if (!self.megaChatMessage) return nil;
const char *ret = self.megaChatMessage->getUserEmail((unsigned int)index);
return ret ? [[NSString alloc] initWithUTF8String:ret] : nil;
}

- (BOOL)hasScheduledMeetingChangeForType:(MEGAChatMessageScheduledMeetingChangeType)changeType {
Expand Down
64 changes: 64 additions & 0 deletions bindings/java/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
find_package(Java REQUIRED)
find_package(SWIG REQUIRED)
include(UseSWIG)

# Set the output directory for generated Java files
set(JAVA_OUTPUT_DIR ${CMAKE_BINARY_DIR}/bindings/java/nz/mega/sdk)

# Define the interface file and its properties
set(SWIG_INTERFACE_FILE ${CMAKE_CURRENT_LIST_DIR}/../megachatapi.i)
set_source_files_properties(${SWIG_INTERFACE_FILE} PROPERTIES
CPLUSPLUS ON
)

# Set SWIG flags for generating Java code
if(ENABLE_SYNC)
list(APPEND ADDITIONAL_SWIG_DEFINES -DENABLE_SYNC)
endif()

if(USE_LIBUV)
list(APPEND ADDITIONAL_SWIG_DEFINES -DHAVE_LIBUV)
endif()

if(NOT USE_WEBRTC)
list(APPEND ADDITIONAL_SWIG_DEFINES -DKARERE_DISABLE_WEBRTC)
endif()

set(CMAKE_SWIG_FLAGS -c++ -package "nz.mega.sdk" ${ADDITIONAL_SWIG_DEFINES} -I${CMAKE_CURRENT_LIST_DIR}/../../src -I${CMAKE_CURRENT_LIST_DIR}/../../third-party/mega/include)

# Generate java binding files
swig_add_library(MEGAchatJavaBindings
TYPE STATIC
LANGUAGE java
SOURCES ${SWIG_INTERFACE_FILE}
OUTPUT_DIR ${JAVA_OUTPUT_DIR}
)

# For Android we do not need JNI
if(ANDROID)
set(JNI_INCLUDE_DIRS
${ANDROID_NDK_HOME}/sysroot/usr/include
${ANDROID_NDK_HOME}/sysroot/usr/include/${ANDROID_ABI}
)
else()
find_package(JNI REQUIRED)
endif()

target_include_directories(MEGAchatJavaBindings
PRIVATE
${Java_INCLUDE_DIRS}
${JNI_INCLUDE_DIRS}
${JAVA_OUTPUT_DIR}
)

target_link_libraries(MEGAchatJavaBindings
PRIVATE
MEGA::CHATlib
SDKJavaBindings
)

# Compile Java code
add_custom_command(TARGET MEGAchatJavaBindings POST_BUILD
COMMAND ${Java_JAVAC_EXECUTABLE} -d ${JAVA_OUTPUT_DIR} -cp ${JAVA_OUTPUT_DIR} ${JAVA_OUTPUT_DIR}/*.java
COMMENT "Compiling Java classes..."
)
3 changes: 3 additions & 0 deletions bindings/megachatapi.i
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

%module(directors="1") megachat
%{

/* Includes the header */
#include "megachatapi.h"

extern JavaVM *MEGAjvm;
Expand Down Expand Up @@ -121,5 +123,6 @@ typedef long long time_t;
typedef long long uint64_t;
typedef long long int64_t;

/* generate the wrappers */
%include "megachatapi.h"

123 changes: 123 additions & 0 deletions dockerfile/android-cross-build.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# Dockerfile for cross-compiling for Android and its different architectures.
#
# Build the Docker image:
# docker build -t megachat-android-cross-build -f /path/to/your/megachat/dockerfile/android-cross-build.dockerfile .
# -t : Tags the built container with a name
# -f : Specify dockerfile to be build, replace /path/to/your/megachat with your local path to it
#
# Run the Docker container and build the project for a specific architecture:
# docker run -v /path/to/your/megachat:/mega/megachat -v /path/to/your/vcpkg:/mega/vcpkg -e ARCH=[arm, arm64, x86, x64] -it megachat-android-cross-build
# -v : Mounts a local directory into the container, replace /path/to/your/megachat and /path/to/your/vcpkg with your local paths
# -e : Sets an environment variable, `ARCH` environment variable is used to specify the target architecture
# -it : Starts an interactive terminal session inside the container after the cmake project is configured and build


# Manual test run for this file:
#
# docker build -t megachat-android-cross-build -f android-cross-build.dockerfile .
# docker run -v /c/_dev/mega/MEGAchat:/mega/megachat -v /c/_dev/mega/vcpkg:/mega/vcpkg -it megachat-android-cross-build /bin/bash
#
# #Build for arm64: export ARCH=arm64 && export VCPKG_TRIPLET='arm64-android-mega' && export ANDROID_ARCH='arm64-v8a'
# #Build for arm: export ARCH=arm && export VCPKG_TRIPLET='arm-android-mega' && export ANDROID_ARCH='armeabi-v7a'
# #Build for x64: export ARCH=x64 && export VCPKG_TRIPLET='x64-android-mega' && export ANDROID_ARCH='x86_64'
# #Build for x86: export ARCH=x86 && export VCPKG_TRIPLET='x86-android-mega' && export ANDROID_ARCH='x86'
#
# cmake -B buildAndroid_${ARCH} -S megachat -DVCPKG_ROOT=/mega/vcpkg -DCMAKE_BUILD_TYPE=Debug -DUSE_FREEIMAGE=OFF -DUSE_FFMPEG=OFF -DUSE_PDFIUM=OFF -DUSE_READLINE=OFF -DVCPKG_TARGET_TRIPLET=${VCPKG_TRIPLET} -DENABLE_JAVA_BINDINGS=ON -DENABLE_CHATLIB_MEGACLC=OFF -DENABLE_CHATLIB_TESTS=OFF -DENABLE_CHATLIB_QTAPP=OFF -DCMAKE_SYSTEM_NAME=Android -DCMAKE_ANDROID_API=26 -DCMAKE_ANDROID_ARCH_ABI=${ANDROID_ARCH} -DCMAKE_ANDROID_NDK=${ANDROID_NDK_HOME} -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON -DENABLE_CHATLIB_WERROR=OFF -DUSE_WEBRTC=OFF
#
# cmake --build buildAndroid_${ARCH} -j10


# Base image
FROM ubuntu:22.04

# Install dependencies
RUN apt-get update && apt-get install -y \
autoconf \
autoconf-archive \
build-essential \
cmake \
curl \
git \
libasound2-dev \
libglib2.0-dev \
libgtk-3-dev \
libpulse-dev \
nasm \
openjdk-21-jdk \
pkg-config \
python3 \
python3-pip \
python3-pkg-resources \
swig \
unzip \
wget \
zip \
&& rm -rf /var/lib/apt/lists/*

WORKDIR /mega

RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
ENV PATH=$PATH:/mega/depot_tools

# Download, extract and set the Android NDK
ARG MEGA_NDK_RELEASE=27b
ARG MEGA_NDK_ZIP=android-ndk-r${MEGA_NDK_RELEASE}-linux.zip
RUN mkdir -p /mega/android-ndk && \
chmod 777 /mega && \
cd /mega/android-ndk && \
wget https://dl.google.com/android/repository/${MEGA_NDK_ZIP} && \
unzip ${MEGA_NDK_ZIP} && \
rm ${MEGA_NDK_ZIP}
ENV ANDROID_NDK_HOME=/mega/android-ndk/android-ndk-r${MEGA_NDK_RELEASE}
ENV PATH=$PATH:$ANDROID_NDK_HOME
ENV JAVA_HOME=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64
ENV PATH=$PATH:$JAVA_HOME

# Set default architecture
ARG ARCH=x64

# Configure and build CMake command, this will be executed when running the container
CMD ["sh", "-c", "\
owner_uid=$(stat -c '%u' /mega/megachat) && \
owner_gid=$(stat -c '%g' /mega/megachat) && \
groupadd -g $owner_gid me && \
echo 'Adding \"me\" user...' && \
useradd -r -M -u $owner_uid -g $owner_gid -d /mega -s /bin/bash me && \
case ${ARCH} in \
arm) \
export VCPKG_TRIPLET='arm-android-mega' && \
export ANDROID_ARCH='armeabi-v7a';; \
arm64) \
export VCPKG_TRIPLET='arm64-android-mega' && \
export ANDROID_ARCH='arm64-v8a';; \
x86) \
export VCPKG_TRIPLET='x86-android-mega' && \
export ANDROID_ARCH='x86';; \
x64) \
export VCPKG_TRIPLET='x64-android-mega' && \
export ANDROID_ARCH='x86_64';; \
*) \
echo 'Unsupported architecture: ${ARCH}' && exit 1;; \
esac && \
su - me -w 'ANDROID_NDK_HOME,PATH,JAVA_HOME,VCPKG_TRIPLET,ANDROID_ARCH' -c ' \
cmake -B buildAndroid_${ANDROID_ARCH} -S megachat \
-DVCPKG_ROOT=/mega/vcpkg \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DVCPKG_TARGET_TRIPLET=${VCPKG_TRIPLET} \
-DENABLE_JAVA_BINDINGS=ON \
-DENABLE_CHATLIB_MEGACLC=OFF \
-DENABLE_CHATLIB_TESTS=OFF \
-DENABLE_CHATLIB_QTAPP=OFF \
-DUSE_FREEIMAGE=OFF \
-DUSE_FFMPEG=OFF \
-DUSE_PDFIUM=OFF \
-DUSE_READLINE=OFF \
-DCMAKE_SYSTEM_NAME=Android \
-DCMAKE_ANDROID_API=26 \
-DCMAKE_ANDROID_ARCH_ABI=${ANDROID_ARCH} \
-DCMAKE_ANDROID_NDK=${ANDROID_NDK_HOME} \
-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON \
-DENABLE_CHATLIB_WERROR=OFF \
-DUSE_WEBRTC=OFF && \
cmake --build buildAndroid_${ANDROID_ARCH}' && \
exec /bin/bash"]
3 changes: 0 additions & 3 deletions examples/qtmegachatapi/chatItemWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -471,9 +471,6 @@ void ChatItemWidget::contextMenuEvent(QContextMenuEvent *event)
auto actUpdateMeetingOccurr = roomMenu->addAction(tr("Update scheduled meeting occurrence"));
connect(actUpdateMeetingOccurr, SIGNAL(triggered()), mController, SLOT(updateScheduledMeetingOccurrence()));

auto actDelSchedMeeting = roomMenu->addAction(tr("Delete scheduled meeting"));
connect(actDelSchedMeeting, SIGNAL(triggered()), mController, SLOT(removeScheduledMeeting()));

auto actFetchSchedMeeting = roomMenu->addAction(tr("Fetch scheduled meetings"));
connect(actFetchSchedMeeting, SIGNAL(triggered()), mController, SLOT(fetchScheduledMeeting()));

Expand Down
6 changes: 0 additions & 6 deletions examples/qtmegachatapi/listItemController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,12 +161,6 @@ void ChatListItemController::updateScheduledMeeting()
cancelled, sm->flags(), sm->rules(),
updateChatTitle == "y");
}
void ChatListItemController::removeScheduledMeeting()
{
std::string aux = mMainWindow->mApp->getText("Sched meeting Id to remove: ", false).c_str();
uint64_t schedId = mMegaApi->base64ToUserHandle(aux.c_str());
mMegaApi->removeScheduledMeeting(mItemId, schedId);
}

void ChatListItemController::fetchScheduledMeeting()
{
Expand Down
1 change: 0 additions & 1 deletion examples/qtmegachatapi/listItemController.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ class ChatListItemController : public QObject,
public slots:
void updateScheduledMeeting();
void updateScheduledMeetingOccurrence();
void removeScheduledMeeting();
void fetchScheduledMeeting();
void fetchScheduledMeetingEvents();
void leaveGroupChat();
Expand Down
2 changes: 1 addition & 1 deletion jenkinsfile/Jenkinsfile_MR_linux_cmake
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ pipeline {
sed -i "s#MEGAChatTest#${env.USER_AGENT_TESTS_MEGACHAT}#g" tests/sdk_test/sdk_test.h
"""
sh "echo Building SDK"
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=Debug -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
sh "cmake -DCMAKE_BUILD_TYPE=Debug -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
-S ${megachat_sources_workspace} -B ${megachat_sources_workspace}/${BUILD_DIR}"
sh "cmake --build ${megachat_sources_workspace}/${BUILD_DIR} -j3"
}
Expand Down
4 changes: 2 additions & 2 deletions jenkinsfile/Jenkinsfile_MR_macOS_cmake
Original file line number Diff line number Diff line change
Expand Up @@ -117,15 +117,15 @@ pipeline {
//Build for arm64
sh "echo Building for arm64 in ${BUILD_TYPE} mode"
sh "mkdir ${BUILD_DIR}"
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
sh "cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
-S ${megachat_sources_workspace} -B ${megachat_sources_workspace}/${BUILD_DIR} -DCMAKE_PREFIX_PATH=${MEGAQTPATH} \
-DCMAKE_OSX_ARCHITECTURES=arm64 -DENABLE_CHATLIB_QTAPP=OFF -DENABLE_CHATLIB_TESTS=ON -DUSE_FFMPEG=OFF -DUSE_FREEIMAGE=OFF"
sh "cmake --build ${megachat_sources_workspace}/${BUILD_DIR} -j3"

//build for x64
sh "echo Building for x64-crosscompiling in ${BUILD_TYPE} mode"
sh "mkdir ${BUILD_DIR_X64}"
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
sh "cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT=${VCPKGPATH} ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
-DCMAKE_OSX_ARCHITECTURES=x86_64 -DENABLE_CHATLIB_QTAPP=OFF -DENABLE_CHATLIB_TESTS=ON -DUSE_FFMPEG=OFF -DUSE_FREEIMAGE=OFF \
-S ${megachat_sources_workspace} -B ${megachat_sources_workspace}/${BUILD_DIR_X64} -DCMAKE_PREFIX_PATH=${MEGAQTPATH}"
sh "cmake --build ${megachat_sources_workspace}/${BUILD_DIR_X64} -j3"
Expand Down
8 changes: 6 additions & 2 deletions jenkinsfile/Jenkinsfile_MR_windows_cmake
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ pipeline {
}
dir(megachat_sources_workspace){
sh "echo Building in ${BUILD_TYPE} mode"
sh "cmake -DENABLE_CHATLIB_WERROR=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT='${VCPKGPATH}' ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
sh "cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DVCPKG_ROOT='${VCPKGPATH}' ${BUILD_OPTIONS} -DCMAKE_VERBOSE_MAKEFILE=ON \
-DENABLE_CHATLIB_QTAPP=OFF -DENABLE_CHATLIB_TESTS=ON -DUSE_FFMPEG=OFF -DUSE_FREEIMAGE=OFF \
-S '${megachat_sources_workspace}' -B '${megachat_sources_workspace}'\\\\${BUILD_DIR}\\\\"
sh "cmake --build '${megachat_sources_workspace}'\\\\${BUILD_DIR} --config ${BUILD_TYPE} -j2"
Expand Down Expand Up @@ -147,6 +147,7 @@ pipeline {
${JF_PATH}\\jf rt del --url ${REPO_URL} --access-token ${MEGACHAT_ARTIFACTORY_TOKEN} ${ART_UPLOAD_PATH}
${JF_PATH}\\jf rt upload --url ${REPO_URL} --access-token ${MEGACHAT_ARTIFACTORY_TOKEN} megaclc.exe ${ART_UPLOAD_PATH}
"""
}
}
windows_artifactory_upload("MEGAchat/${env.gitlabMergeRequestIid}/windows/megaclc/")
}
Expand All @@ -156,7 +157,6 @@ pipeline {
}

post{

success {
script{
if (uploadMegaclcExecuted){
Expand All @@ -166,15 +166,19 @@ pipeline {
setCommitStatus('success')
}
}
deleteDir()
}
failure {
setCommitStatus('failure')
deleteDir()
}
aborted {
setCommitStatus('aborted')
deleteDir()
}
unstable {
setCommitStatus('unstable')
deleteDir()
}
}
}
Loading

0 comments on commit b70e4d8

Please sign in to comment.