From b742b4d7f1f3bb6e1fce45ccf5d885e587e01801 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Tue, 27 Aug 2019 08:50:38 +0200 Subject: Use osl::FileBase::getSystemPathFromFileURL ...instead of INetURLObject FSysStyle::Detect guesswork (with the hope of eventually phasing out use of the latter). (In each of the three places where a filesystem pathname would need to be converted back to a URL with osl::FileBase::getFileURLFromSystemPath, failure is rather harmless, so they don't check error returns and are marked as "best effort".) Change-Id: Ia312b49b20543cdd83aff5609bb054e0fc1dc194 Reviewed-on: https://gerrit.libreoffice.org/78165 Tested-by: Jenkins Reviewed-by: Stephan Bergmann --- cui/inc/strings.hrc | 2 ++ cui/source/options/optjava.cxx | 69 ++++++++++++++++++++++++++++-------------- 2 files changed, 49 insertions(+), 22 deletions(-) diff --git a/cui/inc/strings.hrc b/cui/inc/strings.hrc index 9b70cbf55301..1ade0c0d6b38 100644 --- a/cui/inc/strings.hrc +++ b/cui/inc/strings.hrc @@ -379,6 +379,8 @@ #define RID_SVXSTR_REGISTERED_DATABASES NC_("RID_SVXSTR_REGISTERED_DATABASES", "Registered Databases") +#define RID_SVXSTR_CANNOTCONVERTURL_ERR NC_("RID_SVXSTR_CANNOTCONVERTURL_ERR", "The URL <%1> cannot be converted to a filesystem path.") + #define RID_SVXSTR_ABOUT_VERSION NC_("aboutdialog|textbuffer1", "Version: %ABOUTBOXPRODUCTVERSION%ABOUTBOXPRODUCTVERSIONSUFFIX") #define RID_SVXSTR_ABOUT_COPYRIGHT NC_("aboutdialog|copyright", "Copyright © 2000–2019 LibreOffice contributors.") #define RID_SVXSTR_ABOUT_CREDITS_URL NC_("aboutdialog|link", "https://www.libreoffice.org/about-us/credits/") diff --git a/cui/source/options/optjava.cxx b/cui/source/options/optjava.cxx index 1f718a9b5122..ec0eeac4494e 100644 --- a/cui/source/options/optjava.cxx +++ b/cui/source/options/optjava.cxx @@ -31,6 +31,7 @@ #include #include +#include #include #include @@ -790,26 +791,37 @@ IMPL_LINK_NOARG(SvxJavaClassPathDlg, AddArchiveHdl_Impl, weld::Button&, void) OUString sFolder; if (m_xPathList->count_selected_rows() > 0) { - INetURLObject aObj(m_xPathList->get_selected_text(), FSysStyle::Detect); - sFolder = aObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ); + osl::FileBase::getFileURLFromSystemPath(m_xPathList->get_selected_text(), sFolder); + // best effort } - else + if (sFolder.isEmpty()) sFolder = SvtPathOptions().GetWorkPath(); aDlg.SetDisplayDirectory( sFolder ); if ( aDlg.Execute() == ERRCODE_NONE ) { OUString sURL = aDlg.GetPath(); - INetURLObject aURL( sURL ); - OUString sFile = aURL.getFSysPath( FSysStyle::Detect ); - if ( !IsPathDuplicate( sFile ) ) + OUString sFile; + if (osl::FileBase::getSystemPathFromFileURL(sURL, sFile) == osl::FileBase::E_None) { - m_xPathList->append("", sFile, SvFileInformationManager::GetImageId(aURL)); - m_xPathList->select(m_xPathList->n_children() - 1); + INetURLObject aURL( sURL ); + if ( !IsPathDuplicate( sFile ) ) + { + m_xPathList->append("", sFile, SvFileInformationManager::GetImageId(aURL)); + m_xPathList->select(m_xPathList->n_children() - 1); + } + else + { + OUString sMsg( CuiResId( RID_SVXSTR_MULTIFILE_DBL_ERR ) ); + sMsg = sMsg.replaceFirst( "%1", sFile ); + std::unique_ptr xBox(Application::CreateMessageDialog(m_xDialog.get(), + VclMessageType::Warning, VclButtonsType::Ok, sMsg)); + xBox->run(); + } } else { - OUString sMsg( CuiResId( RID_SVXSTR_MULTIFILE_DBL_ERR ) ); - sMsg = sMsg.replaceFirst( "%1", sFile ); + OUString sMsg( CuiResId( RID_SVXSTR_CANNOTCONVERTURL_ERR ) ); + sMsg = sMsg.replaceFirst( "%1", sURL ); std::unique_ptr xBox(Application::CreateMessageDialog(m_xDialog.get(), VclMessageType::Warning, VclButtonsType::Ok, sMsg)); xBox->run(); @@ -826,26 +838,38 @@ IMPL_LINK_NOARG(SvxJavaClassPathDlg, AddPathHdl_Impl, weld::Button&, void) OUString sOldFolder; if (m_xPathList->count_selected_rows() > 0) { - INetURLObject aObj(m_xPathList->get_selected_text(), FSysStyle::Detect); - sOldFolder = aObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ); + osl::FileBase::getFileURLFromSystemPath(m_xPathList->get_selected_text(), sOldFolder); + // best effort } - else + if (sOldFolder.isEmpty()) sOldFolder = SvtPathOptions().GetWorkPath(); xFolderPicker->setDisplayDirectory( sOldFolder ); if ( xFolderPicker->execute() == ExecutableDialogResults::OK ) { OUString sFolderURL( xFolderPicker->getDirectory() ); INetURLObject aURL( sFolderURL ); - OUString sNewFolder = aURL.getFSysPath( FSysStyle::Detect ); - if ( !IsPathDuplicate( sNewFolder ) ) + OUString sNewFolder; + if (osl::FileBase::getSystemPathFromFileURL(sFolderURL, sNewFolder) + == osl::FileBase::E_None) { - m_xPathList->append("", sNewFolder, SvFileInformationManager::GetImageId(aURL)); - m_xPathList->select(m_xPathList->n_children() - 1); + if ( !IsPathDuplicate( sNewFolder ) ) + { + m_xPathList->append("", sNewFolder, SvFileInformationManager::GetImageId(aURL)); + m_xPathList->select(m_xPathList->n_children() - 1); + } + else + { + OUString sMsg( CuiResId( RID_SVXSTR_MULTIFILE_DBL_ERR ) ); + sMsg = sMsg.replaceFirst( "%1", sNewFolder ); + std::unique_ptr xBox(Application::CreateMessageDialog(m_xDialog.get(), + VclMessageType::Warning, VclButtonsType::Ok, sMsg)); + xBox->run(); + } } else { - OUString sMsg( CuiResId( RID_SVXSTR_MULTIFILE_DBL_ERR ) ); - sMsg = sMsg.replaceFirst( "%1", sNewFolder ); + OUString sMsg( CuiResId( RID_SVXSTR_CANNOTCONVERTURL_ERR ) ); + sMsg = sMsg.replaceFirst( "%1", sFolderURL ); std::unique_ptr xBox(Application::CreateMessageDialog(m_xDialog.get(), VclMessageType::Warning, VclButtonsType::Ok, sMsg)); xBox->run(); @@ -917,9 +941,10 @@ void SvxJavaClassPathDlg::SetClassPath( const OUString& _rPath ) do { OUString sToken = _rPath.getToken( 0, CLASSPATH_DELIMITER, nIdx ); - INetURLObject aURL( sToken, FSysStyle::Detect ); - OUString sPath = aURL.getFSysPath( FSysStyle::Detect ); - m_xPathList->append("", sPath, SvFileInformationManager::GetImageId(aURL)); + OUString sURL; + osl::FileBase::getFileURLFromSystemPath(sToken, sURL); // best effort + INetURLObject aURL( sURL ); + m_xPathList->append("", sToken, SvFileInformationManager::GetImageId(aURL)); } while (nIdx>=0); // select first entry -- cgit