Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libQuotient for openSUSE:Factory 
checked in at 2025-09-20 22:04:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libQuotient (Old)
 and      /work/SRC/openSUSE:Factory/.libQuotient.new.27445 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libQuotient"

Sat Sep 20 22:04:57 2025 rev:22 rq:1306130 version:0.9.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/libQuotient/libQuotient.changes  2025-08-13 
16:33:27.111764142 +0200
+++ /work/SRC/openSUSE:Factory/.libQuotient.new.27445/libQuotient.changes       
2025-09-20 22:05:37.898574935 +0200
@@ -1,0 +2,10 @@
+Sat Sep 20 13:12:10 UTC 2025 - Christophe Marin <[email protected]>
+
+- Update to 0.9.5
+  * Fixed verification sessions getting stuck in some cases
+  * Pass more information about network errors when mxc: requests
+    fail
+  * Massively improve E2EE performance when many devices are
+    registered on an account
+
+-------------------------------------------------------------------

Old:
----
  libQuotient-0.9.4.tar.gz

New:
----
  libQuotient-0.9.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libQuotient.spec ++++++
--- /var/tmp/diff_new_pack.QYNCw6/_old  2025-09-20 22:05:38.494599936 +0200
+++ /var/tmp/diff_new_pack.QYNCw6/_new  2025-09-20 22:05:38.494599936 +0200
@@ -29,7 +29,7 @@
 %define sonum 0.9
 %define rname libQuotient
 Name:           libQuotient%{?pkg_suffix}
-Version:        0.9.4
+Version:        0.9.5
 Release:        0
 Summary:        Library for Qt Matrix Clients
 License:        LGPL-2.1-only

++++++ libQuotient-0.9.4.tar.gz -> libQuotient-0.9.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libQuotient-0.9.4/.github/workflows/ci.yml 
new/libQuotient-0.9.5/.github/workflows/ci.yml
--- old/libQuotient-0.9.4/.github/workflows/ci.yml      2025-08-12 
21:51:27.000000000 +0200
+++ new/libQuotient-0.9.5/.github/workflows/ci.yml      2025-09-20 
13:57:20.000000000 +0200
@@ -38,12 +38,18 @@
     env:
       GCC_VERSION: -13
       CLANG_VERSION: -17
+      SONAR_DIR: sonar
 
     steps:
     - uses: actions/checkout@v4
       with:
         fetch-depth: 0
 
+    - name: Install cmake
+      uses: jwlawson/actions-setup-cmake@v2
+      with:
+        cmake-version: '3.x'
+
     # Install on Linux via apt to get everything necessary in one go
     - name: Install dependencies (Linux)
       if: startsWith(matrix.os, 'ubuntu')
@@ -105,7 +111,7 @@
             "
 
         if [ '${{ matrix.static-analysis }}' == 'sonar' ]; then
-            mkdir -p $HOME/.sonar
+            # mkdir -p $HOME/.sonar
             CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_CXX_FLAGS=--coverage"
         fi
 
@@ -131,7 +137,7 @@
     - name: Set up Sonar Cloud tools
       id: sonar
       if: matrix.static-analysis == 'sonar'
-      uses: sonarsource/sonarcloud-github-c-cpp@v2
+      uses: SonarSource/sonarqube-scan-action/install-build-wrapper@v5
 
     - name: Build and install QtKeychain
       run: |
@@ -140,7 +146,8 @@
         cmake -S qtkeychain -B qtkeychain/build -DBUILD_WITH_QT6=ON $CMAKE_ARGS
         cmake --build qtkeychain/build --target install
 
-    - name: Build and install Olm
+    - name: Build and install Olm (non-Linux)
+      if: "!startsWith(matrix.os, 'ubuntu')"
       run: |
         cd ..
         git clone https://gitlab.matrix.org/matrix-org/olm.git
@@ -175,12 +182,12 @@
 
     - name: Regenerate API code
       if: matrix.update-api
-      run: cmake --build ../build/libQuotient --target update-api
+      run: cmake --build $BUILD_PATH --target update-api
 
     - name: Build and install libQuotient
       run: |
         if [[ '${{ matrix.static-analysis }}' == 'sonar' ]]; then
-            BUILD_WRAPPER="${{ steps.sonar.outputs.build-wrapper-binary }} 
--out-dir $BUILD_PATH/sonar"
+            BUILD_WRAPPER="${{ steps.sonar.outputs.build-wrapper-binary }} 
--out-dir $SONAR_DIR"
         fi
         $BUILD_WRAPPER cmake --build $BUILD_PATH --target all
         cmake --build $BUILD_PATH --target install
@@ -210,22 +217,24 @@
       if: matrix.static-analysis == 'codeql'
       uses: github/codeql-action/analyze@v3
 
-    - name: Run sonar-scanner
+    - name: Prepare coverage files for Sonar analysis
       if: matrix.static-analysis == 'sonar'
-      env:
-        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
-        SONAR_SERVER_URL: 'https://sonarcloud.io'
       run: |
         mkdir .coverage && pushd .coverage
-        find $BUILD_PATH -name '*.gcda' -print0 \
-            | xargs -0 gcov$GCC_VERSION -s $GITHUB_WORKSPACE -pr
+        find $BUILD_PATH -name '*.gcda' -print0 | xargs -0 gcov$GCC_VERSION -s 
$GITHUB_WORKSPACE -pr
         # Coverage of the test source code is not tracked, as it is always 100%
         # (if not, some tests failed and broke the build at an earlier stage)
         rm -f quotest* autotests*
         popd
-        ${{ steps.sonar.outputs.sonar-scanner-binary }} \
-            -Dsonar.host.url="$SONAR_SERVER_URL" \
-            
-Dsonar.cfamily.compile-commands="$BUILD_PATH/sonar/compile_commands.json" \
-            -Dsonar.cfamily.threads=2 \
-            -Dsonar.cfamily.gcov.reportsPath=.coverage
+
+    - name: Run sonar-scanner
+      if: matrix.static-analysis == 'sonar'
+      uses: SonarSource/sonarqube-scan-action@v5
+      env:
+        # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
+      with:
+        args: >
+          -Dsonar.cfamily.compile-commands=${{ env.SONAR_DIR 
}}/compile_commands.json
+          -Dsonar.cfamily.threads=2
+          -Dsonar.cfamily.gcov.reportsPath=.coverage
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libQuotient-0.9.4/CMakeLists.txt 
new/libQuotient-0.9.5/CMakeLists.txt
--- old/libQuotient-0.9.4/CMakeLists.txt        2025-08-12 21:51:27.000000000 
+0200
+++ new/libQuotient-0.9.5/CMakeLists.txt        2025-09-20 13:57:20.000000000 
+0200
@@ -4,7 +4,7 @@
 endif()
 
 set(API_VERSION "0.9")
-project(Quotient VERSION "${API_VERSION}.4" LANGUAGES CXX)
+project(Quotient VERSION "${API_VERSION}.5" LANGUAGES CXX)
 set(PRE_STAGE "")
 string(JOIN ~ FULL_VERSION ${PROJECT_VERSION} ${PRE_STAGE})
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libQuotient-0.9.4/Quotient/connectionencryptiondata_p.cpp 
new/libQuotient-0.9.5/Quotient/connectionencryptiondata_p.cpp
--- old/libQuotient-0.9.4/Quotient/connectionencryptiondata_p.cpp       
2025-08-12 21:51:27.000000000 +0200
+++ new/libQuotient-0.9.5/Quotient/connectionencryptiondata_p.cpp       
2025-09-20 13:57:20.000000000 +0200
@@ -955,15 +955,11 @@
     const QString& roomId, const QOlmOutboundGroupSession& outboundSession,
     const QMultiHash<QString, QString>& devices)
 {
-    const auto& sessionId = outboundSession.sessionId();
-    const auto& sessionKey = outboundSession.sessionKey();
-    const auto& index = outboundSession.sessionMessageIndex();
-
-    const auto closure = [this, roomId, sessionId, sessionKey, index, devices] 
{
-        doSendSessionKeyToDevices(roomId, sessionId, sessionKey, index, 
devices);
-    };
+    auto closure = 
std::bind_front(&ConnectionEncryptionData::doSendSessionKeyToDevices, this,
+                                   roomId, outboundSession.sessionId(), 
outboundSession.sessionKey(),
+                                   outboundSession.sessionMessageIndex(), 
devices);
     if (currentQueryKeysJob != nullptr) {
-        currentQueryKeysJob = currentQueryKeysJob.onResult(q, closure);
+        currentQueryKeysJob = currentQueryKeysJob.onResult(q, 
std::move(closure));
     } else
         closure();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libQuotient-0.9.4/Quotient/database.cpp 
new/libQuotient-0.9.5/Quotient/database.cpp
--- old/libQuotient-0.9.4/Quotient/database.cpp 2025-08-12 21:51:27.000000000 
+0200
+++ new/libQuotient-0.9.5/Quotient/database.cpp 2025-09-20 13:57:20.000000000 
+0200
@@ -629,9 +629,7 @@
 {
     auto query = prepareQuery(u"UPDATE master_keys SET verified=true WHERE 
key=:key;"_s);
     query.bindValue(u":key"_s, masterKey);
-    transaction();
     execute(query);
-    commit();
 }
 
 QString Database::userSigningPublicKey()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libQuotient-0.9.4/Quotient/jobs/jobhandle.h 
new/libQuotient-0.9.5/Quotient/jobs/jobhandle.h
--- old/libQuotient-0.9.4/Quotient/jobs/jobhandle.h     2025-08-12 
21:51:27.000000000 +0200
+++ new/libQuotient-0.9.5/Quotient/jobs/jobhandle.h     2025-09-20 
13:57:20.000000000 +0200
@@ -209,6 +209,7 @@
 private:
     //! A function object that can be passed to QFuture::then and 
QFuture::onCanceled
     template <typename FnT>
+        requires (!std::is_reference_v<FnT>)
     struct BoundFn {
         auto operator()() { return callFn<false>(nullptr); } // For 
QFuture::onCanceled
         auto operator()(future_value_type job) { return callFn(job); } // For 
QFuture::then
@@ -244,6 +245,9 @@
     template <typename FnT>
     BoundFn(FnT&&) -> BoundFn<FnT>;
 
+    template <typename FnT>
+    BoundFn(const FnT &) -> BoundFn<FnT>;
+
     template <typename FnT, typename ConfigT = Skip>
     static auto bindToContext(FnT&& fn, ConfigT config = {})
     {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libQuotient-0.9.4/Quotient/jobs/syncjob.cpp 
new/libQuotient-0.9.5/Quotient/jobs/syncjob.cpp
--- old/libQuotient-0.9.4/Quotient/jobs/syncjob.cpp     2025-08-12 
21:51:27.000000000 +0200
+++ new/libQuotient-0.9.5/Quotient/jobs/syncjob.cpp     2025-09-20 
13:57:20.000000000 +0200
@@ -23,7 +23,7 @@
         query.addQueryItem(u"timeout"_s, QString::number(timeout));
         backoffStrategy.jobTimeouts = { std::chrono::seconds(timeout / 1000 + 
10) };
     } else
-        backoffStrategy.jobTimeouts = { std::chrono::years { 1000 } }; // 
effectively disable the timeout
+        backoffStrategy.jobTimeouts = { std::chrono::weeks { 3 } }; // 
effectively disable the timeout
     setBackoffStrategy(std::move(backoffStrategy));
     addParam<IfNotEmpty>(query, u"since"_s, since);
     setRequestQuery(query);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libQuotient-0.9.4/Quotient/keyverificationsession.cpp 
new/libQuotient-0.9.5/Quotient/keyverificationsession.cpp
--- old/libQuotient-0.9.4/Quotient/keyverificationsession.cpp   2025-08-12 
21:51:27.000000000 +0200
+++ new/libQuotient-0.9.5/Quotient/keyverificationsession.cpp   2025-09-20 
13:57:20.000000000 +0200
@@ -428,9 +428,7 @@
 void KeyVerificationSession::handleStart(const KeyVerificationStartEvent& 
event)
 {
     if (startSentByUs) {
-        if (m_remoteUserId > m_connection->userId()
-            || (m_remoteUserId == m_connection->userId()
-                && m_remoteDeviceId > m_connection->deviceId())) {
+        if (m_remoteUserId > m_connection->userId()) {
             return;
         }
         startSentByUs = false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libQuotient-0.9.4/Quotient/mxcreply.cpp 
new/libQuotient-0.9.5/Quotient/mxcreply.cpp
--- old/libQuotient-0.9.4/Quotient/mxcreply.cpp 2025-08-12 21:51:27.000000000 
+0200
+++ new/libQuotient-0.9.5/Quotient/mxcreply.cpp 2025-09-20 13:57:20.000000000 
+0200
@@ -26,7 +26,14 @@
 
         if (d->m_reply->error() != NoError) {
             const QJsonDocument doc = 
QJsonDocument::fromJson(d->m_reply->readAll());
-            setErrorString(QStringLiteral("%1 
(%2)").arg(doc["error"_L1].toString(), d->m_reply->url().toString()));
+            QString errorString;
+            if (doc.object().contains("error"_L1)) {
+                errorString = doc["error"_L1].toString();
+            } else {
+                errorString = d->m_reply->errorString();
+            }
+            setErrorString(QStringLiteral("%1 (%2)").arg(errorString,
+                                                         
d->m_reply->url().toString()));
         } else if (fileMetadata.isValid()) {
             auto buffer = new QBuffer(this);
             buffer->setData(decryptFile(d->m_reply->readAll(), fileMetadata));

Reply via email to