[Libreoffice-commits] core.git: cui/source officecfg/registry vcl/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Thu Sep 20 19:45:13 UTC 2018


 cui/source/options/personalization.cxx                     |   62 +++++++++----
 officecfg/registry/schema/org/openoffice/Office/Common.xcs |    5 +
 vcl/source/app/settings.cxx                                |    5 -
 3 files changed, 52 insertions(+), 20 deletions(-)

New commits:
commit 4cc71fef5a4fd05b2ee2953dd8a297ffffff29a0
Author:     Muhammet Kara <muhammet.kara at pardus.org.tr>
AuthorDate: Thu Sep 20 17:16:28 2018 +0300
Commit:     Muhammet Kara <muhammet.kara at pardus.org.tr>
CommitDate: Thu Sep 20 21:44:48 2018 +0200

    Use slug instead of name to store Personas
    
    Persona names aren't necessarily unique,
    but the slug is a unique id (also called pretty name)
    for personas.
    
    It can also be directly used to retrieve/reach the original
    url of an installed persona.
    
    Change-Id: Ieb81671a0fd654a727063d00a4f78a3b5cb29cbd
    Reviewed-on: https://gerrit.libreoffice.org/60821
    Tested-by: Jenkins
    Reviewed-by: Muhammet Kara <muhammet.kara at pardus.org.tr>

diff --git a/cui/source/options/personalization.cxx b/cui/source/options/personalization.cxx
index 9c4178d0b987..fde5872aeaf2 100644
--- a/cui/source/options/personalization.cxx
+++ b/cui/source/options/personalization.cxx
@@ -213,9 +213,14 @@ IMPL_LINK( SelectPersonaDialog, SelectPersona, Button*, pButton, void )
             {
                 m_aSelectedPersona = m_vPersonaSettings[index];
                 // get the persona name from the setting variable to show in the progress.
-                sal_Int32 nNameIndex = m_aSelectedPersona.indexOf( ';' );
-                OUString aName = m_aSelectedPersona.copy( 0, nNameIndex );
-                OUString aProgress = CuiResId(RID_SVXSTR_SELECTEDPERSONA) + aName;
+                sal_Int32 nSlugIndex, nNameIndex;
+                OUString aName, aProgress;
+
+                // Skip the slug
+                nSlugIndex = m_aSelectedPersona.indexOf( ';' );
+                nNameIndex = m_aSelectedPersona.indexOf( ';', nSlugIndex );
+                aName = m_aSelectedPersona.copy( nSlugIndex + 1, nNameIndex );
+                aProgress = CuiResId(RID_SVXSTR_SELECTEDPERSONA) + aName;
                 SetProgress( aProgress );
             }
             break;
@@ -409,8 +414,12 @@ void SvxPersonalizationTabPage::CheckAppliedTheme()
 
 void SvxPersonalizationTabPage::ShowAppliedThemeLabel(const OUString& aPersonaSetting)
 {
-    sal_Int32 nNameIndex = aPersonaSetting.indexOf( '/' );
-    OUString aName = "(" + aPersonaSetting.copy( 0, nNameIndex ) +")";
+    sal_Int32 nSlugIndex, nNameIndex;
+    OUString aName;
+
+    nSlugIndex = aPersonaSetting.indexOf( ';' ) + 1;
+    nNameIndex = aPersonaSetting.indexOf( ';', nSlugIndex );
+    aName = "(" + aPersonaSetting.copy( nSlugIndex, nNameIndex ) +")";
     m_pAppliedThemeLabel->Show();
     m_pAppliedThemeLabel->SetText( aName );
 }
@@ -469,8 +478,12 @@ void SvxPersonalizationTabPage::LoadExtensionThemes()
     for( sal_Int32 nIndex = 0; nIndex < nLength; nIndex++ )
     {
         Reference< XPropertySet > xPropertySet( officecfg::Office::Common::Misc::PersonasList::get()->getByName( installedPersonas[nIndex] ), UNO_QUERY_THROW );
-        OUString aPersonaName, aPreviewFile, aHeaderFile, aFooterFile, aTextColor, aAccentColor, aPersonaSettings;
-        Any aValue = xPropertySet->getPropertyValue( "Name" );
+        OUString aPersonaSlug, aPersonaName, aPreviewFile, aHeaderFile, aFooterFile, aTextColor, aAccentColor, aPersonaSettings;
+
+        Any aValue = xPropertySet->getPropertyValue( "Slug" );
+        aValue >>= aPersonaSlug;
+
+        aValue = xPropertySet->getPropertyValue( "Name" );
         aValue >>= aPersonaName;
         m_pPersonaList->InsertEntry( aPersonaName );
 
@@ -489,7 +502,8 @@ void SvxPersonalizationTabPage::LoadExtensionThemes()
         aValue = xPropertySet->getPropertyValue( "AccentColor" );
         aValue >>= aAccentColor;
 
-        aPersonaSettings = aPreviewFile + ";" + aHeaderFile + ";" + aFooterFile + ";" + aTextColor + ";" + aAccentColor;
+        aPersonaSettings = aPersonaSlug + ";" + aPersonaName + ";" + aPreviewFile
+                + ";" + aHeaderFile + ";" + aFooterFile + ";" + aTextColor + ";" + aAccentColor;
         rtl::Bootstrap::expandMacros( aPersonaSettings );
         m_vExtensionPersonaSettings.push_back( aPersonaSettings );
     }
@@ -569,7 +583,7 @@ static OUString searchValue( const OString &rBuffer, sal_Int32 from, const OStri
 /// Parse the Persona web page, and find where to get the bitmaps + the color values.
 static bool parsePersonaInfo( const OString &rBufferArg, OUString *pHeaderURL, OUString *pFooterURL,
                               OUString *pTextColor, OUString *pAccentColor, OUString *pPreviewURL,
-                              OUString *pName )
+                              OUString *pName, OUString *pSlug )
 {
     // tdf#115417: buffer retrieved from html response can contain " or "
     // let's replace the whole buffer with last one so we can treat it easily
@@ -601,7 +615,12 @@ static bool parsePersonaInfo( const OString &rBufferArg, OUString *pHeaderURL, O
         return false;
 
     *pName = searchValue( rBuffer, persona, "\"name\":\"" );
-    return !pName->isEmpty();
+    if ( pName->isEmpty() )
+        return false;
+
+    *pSlug = searchValue( rBuffer, persona, "\"bySlug\":{\"" );
+
+    return !pSlug->isEmpty();
 }
 
 SearchAndParseThread::SearchAndParseThread( SelectPersonaDialog* pDialog,
@@ -660,15 +679,15 @@ bool getPreviewFile( const OUString& rURL, OUString *pPreviewFile, OUString *pPe
     xStream->closeInput();
 
     // get the important bits of info
-    OUString aHeaderURL, aFooterURL, aTextColor, aAccentColor, aPreviewURL, aName;
+    OUString aHeaderURL, aFooterURL, aTextColor, aAccentColor, aPreviewURL, aName, aSlug;
 
-    if ( !parsePersonaInfo( aBuffer.makeStringAndClear(), &aHeaderURL, &aFooterURL, &aTextColor, &aAccentColor, &aPreviewURL, &aName ) )
+    if ( !parsePersonaInfo( aBuffer.makeStringAndClear(), &aHeaderURL, &aFooterURL, &aTextColor, &aAccentColor, &aPreviewURL, &aName, &aSlug ) )
         return false;
 
     // copy the images to the user's gallery
     OUString gallery = "${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" SAL_CONFIGFILE( "bootstrap") "::UserInstallation}";
     rtl::Bootstrap::expandMacros( gallery );
-    gallery += "/user/gallery/personas/" + aName + "/";
+    gallery += "/user/gallery/personas/" + aSlug + "/";
     osl::Directory::createPath( gallery );
 
     OUString aPreviewFile( INetURLObject( aPreviewURL ).getName() );
@@ -681,7 +700,7 @@ bool getPreviewFile( const OUString& rURL, OUString *pPreviewFile, OUString *pPe
         return false;
     }
     *pPreviewFile = gallery + aPreviewFile;
-    *pPersonaSetting = aName + ";" + aHeaderURL + ";" + aFooterURL + ";" + aTextColor + ";" + aAccentColor;
+    *pPersonaSetting = aSlug + ";" + aName + ";" + aHeaderURL + ";" + aFooterURL + ";" + aTextColor + ";" + aAccentColor;
     return true;
 }
 
@@ -825,13 +844,17 @@ void SearchAndParseThread::execute()
         if ( !xFileAccess.is() )
             return;
 
-        OUString aName, aHeaderURL, aFooterURL, aTextColor, aAccentColor;
+        OUString aSlug, aName, aHeaderURL, aFooterURL, aTextColor, aAccentColor;
         OUString aPersonaSetting;
 
         // get the required fields from m_aURL
         sal_Int32 nOldIndex = 0;
         sal_Int32 nNewIndex = m_aURL.indexOf( ';', nOldIndex );
-        aName = m_aURL.copy( nOldIndex, ( nNewIndex - nOldIndex ) );
+        aSlug = m_aURL.copy( nOldIndex, ( nNewIndex - nOldIndex ) );
+
+        nOldIndex = nNewIndex + 1;
+        nNewIndex = m_aURL.indexOf( ';', nOldIndex );
+        aName = m_aURL.copy(nOldIndex , ( nNewIndex - nOldIndex ) );
 
         nOldIndex = nNewIndex + 1;
         nNewIndex = m_aURL.indexOf( ';', nOldIndex );
@@ -858,8 +881,8 @@ void SearchAndParseThread::execute()
         OUString aHeaderFile( INetURLObject( aHeaderURL ).getName() );
         OUString aFooterFile( INetURLObject( aFooterURL ).getName() );
 
-        aHeaderFile = aName + "/" + aHeaderFile;
-        aFooterFile = aName + "/" + aFooterFile;
+        aHeaderFile = aSlug + "/" + aHeaderFile;
+        aFooterFile = aSlug + "/" + aFooterFile;
 
         try {
             xFileAccess->copy( aHeaderURL, gallery + aHeaderFile );
@@ -883,7 +906,8 @@ void SearchAndParseThread::execute()
 
         SolarMutexGuard aGuard;
 
-        aPersonaSetting = aHeaderFile + ";" + aFooterFile + ";" + aTextColor + ";" + aAccentColor;
+        aPersonaSetting = aSlug + ";" + aName + ";" + aHeaderFile + ";" + aFooterFile
+                + ";" + aTextColor + ";" + aAccentColor;
         m_pPersonaDialog->SetAppliedPersonaSetting( aPersonaSetting );
         m_pPersonaDialog->EndDialog( RET_OK );
     }
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index 948fddc7cc31..d7c01d389780 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -810,6 +810,11 @@
       <info>
         <desc>Stores the details of the installed personas.</desc>
       </info>
+      <prop oor:name="Slug" oor:type="xs:string" oor:nillable="false">
+        <info>
+          <desc>Unique pretty id of the persona, also part of its url</desc>
+        </info>
+      </prop>
       <prop oor:name="Name" oor:type="xs:string" oor:nillable="false">
         <info>
           <desc>The Persona's name</desc>
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
index 0dc2558ab36a..8da8c0355e7d 100644
--- a/vcl/source/app/settings.cxx
+++ b/vcl/source/app/settings.cxx
@@ -2122,7 +2122,10 @@ static void setupPersonaHeaderFooter( WhichPersona eWhich, OUString& rHeaderFoot
     if ( aPersona == "own" || aPersona == "default" )
     {
         sal_Int32 nIndex = 0;
-        aHeader = aPersonaSettings.getToken( 0, ';', nIndex );
+
+        // Skip the persona slug and name
+        aHeader = aPersonaSettings.getToken( 2, ';', nIndex );
+
         if ( nIndex > 0 )
             aFooter = aPersonaSettings.getToken( 0, ';', nIndex );
 


More information about the Libreoffice-commits mailing list