sw/source/uibase/dbui/dbmgr.cxx |   37 ++++++++++++++++++-------------------
 1 file changed, 18 insertions(+), 19 deletions(-)

New commits:
commit e954b945536fdf0fd4aa3d56aec5c1e2ce4c6196
Author:     Gülşah Köse <gulsah.k...@collabora.com>
AuthorDate: Fri Jul 8 14:48:27 2022 +0300
Commit:     Aron Budea <aron.bu...@collabora.com>
CommitDate: Fri Jul 22 19:06:37 2022 +0200

    tdf#149915 Proper creation of vnd.sun.star.pkg:// URL
    
    Using different methods of creation (one using DecodeMechanism::NONE,
    another using DecodeMechanism::WithCharset) gave differently encoded
    end results, comparing unequal.
    
    The proper way is using DecodeMechanism::NONE on the document's URL,
    as implemented in commit 06756e412b2a02030ce3355b3fe4e2ecc71d2301
      Author Mike Kaganski <mike.kagan...@collabora.com>
      Date   Sat Nov 18 22:41:40 2017 +0300
        One more proper construction of vnd.sun.star.pkg URL
    
    Co-authored-by: Mike Kaganski <mike.kagan...@collabora.com>
    
    Change-Id: I272f277ef8b4bd23e6cb7884e68f3c79f742683a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136901
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    Tested-by: Mike Kaganski <mike.kagan...@collabora.com>
    (cherry picked from commit 9790585a62cb55e0e0024819596592193a6de269)

diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx
index 475388d2134e..9ad6184de3ac 100644
--- a/sw/source/uibase/dbui/dbmgr.cxx
+++ b/sw/source/uibase/dbui/dbmgr.cxx
@@ -134,6 +134,21 @@ void lcl_emitEvent(SfxEventHintId nEventId, sal_Int32 
nStrId, SfxObjectShell* pD
                                            pDocShell));
 }
 
+// Construct vnd.sun.star.pkg:// URL
+OUString ConstructVndSunStarPkgUrl(const OUString& rMainURL, 
std::u16string_view rStreamRelPath)
+{
+    auto xContext(comphelper::getProcessComponentContext());
+    auto xUri = 
css::uri::UriReferenceFactory::create(xContext)->parse(rMainURL);
+    assert(xUri.is());
+    xUri = css::uri::VndSunStarPkgUrlReferenceFactory::create(xContext)
+        ->createVndSunStarPkgUrlReference(xUri);
+    assert(xUri.is());
+    return xUri->getUriReference() + "/"
+        + INetURLObject::encode(
+            rStreamRelPath, INetURLObject::PART_FPATH,
+            INetURLObject::EncodeMechanism::All);
+}
+
 }
 
 std::vector<std::pair<SwDocShell*, OUString>> 
SwDBManager::m_aUncommittedRegistrations;
@@ -254,10 +269,9 @@ void SAL_CALL 
SwDataSourceRemovedListener::revokedDatabaseLocation(const sdb::Da
     if (!pDocShell)
         return;
 
-    OUString aOwnURL = 
pDocShell->GetMedium()->GetURLObject().GetMainURL(INetURLObject::DecodeMechanism::WithCharset);
-    OUString sTmpName = "vnd.sun.star.pkg://" +
-        INetURLObject::encode(aOwnURL, INetURLObject::PART_AUTHORITY, 
INetURLObject::EncodeMechanism::All);
-    sTmpName += "/" + m_pDBManager->getEmbeddedName();
+    const OUString sTmpName = ConstructVndSunStarPkgUrl(
+        
pDocShell->GetMedium()->GetURLObject().GetMainURL(INetURLObject::DecodeMechanism::NONE),
+        m_pDBManager->getEmbeddedName());
 
     if (sTmpName != rEvent.OldLocation)
         return;
@@ -2760,21 +2774,6 @@ OUString LoadAndRegisterDataSource_Impl(DBConnURIType 
type, const uno::Reference
     }
     return sFind;
 }
-
-// Construct vnd.sun.star.pkg:// URL
-OUString ConstructVndSunStarPkgUrl(const OUString& rMainURL, 
std::u16string_view rStreamRelPath)
-{
-    auto xContext(comphelper::getProcessComponentContext());
-    auto xUri = 
css::uri::UriReferenceFactory::create(xContext)->parse(rMainURL);
-    assert(xUri.is());
-    xUri = css::uri::VndSunStarPkgUrlReferenceFactory::create(xContext)
-        ->createVndSunStarPkgUrlReference(xUri);
-    assert(xUri.is());
-    return xUri->getUriReference() + "/"
-        + INetURLObject::encode(
-            rStreamRelPath, INetURLObject::PART_FPATH,
-            INetURLObject::EncodeMechanism::All);
-}
 }
 
 OUString SwDBManager::LoadAndRegisterDataSource(weld::Window* pParent, 
SwDocShell* pDocShell)

Reply via email to