diff options
author | Yusuf Keten <ketenyusuf@gmail.com> | 2020-07-30 19:31:28 +0300 |
---|---|---|
committer | Muhammet Kara <muhammet.kara@collabora.com> | 2020-08-07 07:24:09 +0200 |
commit | 4e31468ce84951a8789f5bcd229145d6dcd55c5e (patch) | |
tree | 2dd1117337ff2141f9680497209fd6435cc77937 /cui | |
parent | f52f86a3905fc099832187ad20fd29f0ab73b43f (diff) |
tdf#133026: Additions: Disable install buttons of the existing extensions
If the extension exists, the install button will be disabled.
Change-Id: Ide88faeabe86d9cdb6a3cb99257710d92e3b4769
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99809
Tested-by: Jenkins
Reviewed-by: Muhammet Kara <muhammet.kara@collabora.com>
Diffstat (limited to 'cui')
-rw-r--r-- | cui/source/dialogs/AdditionsDialog.cxx | 83 | ||||
-rw-r--r-- | cui/source/inc/AdditionsDialog.hxx | 31 |
2 files changed, 107 insertions, 7 deletions
diff --git a/cui/source/dialogs/AdditionsDialog.cxx b/cui/source/dialogs/AdditionsDialog.cxx index 61a45329cbee..71f7fb1f09c4 100644 --- a/cui/source/dialogs/AdditionsDialog.cxx +++ b/cui/source/dialogs/AdditionsDialog.cxx @@ -47,6 +47,13 @@ #include <ucbhelper/content.hxx> #include <comphelper/simplefileaccessinteraction.hxx> +#include <com/sun/star/deployment/DeploymentException.hpp> +#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> +#include <com/sun/star/frame/TerminationVetoException.hpp> +#include <com/sun/star/ucb/CommandAbortedException.hpp> +#include <com/sun/star/ucb/CommandFailedException.hpp> + +//cURL #include <curl/curl.h> #include <orcus/json_document_tree.hpp> #include <orcus/config.hpp> @@ -341,6 +348,7 @@ void SearchAndParseThread::LoadInfo(const AdditionInfo& additionInfo, AdditionsI rCurrentItem.m_xLinkButtonComments->set_uri(additionInfo.sCommentURL); rCurrentItem.m_xLabelDownloadNumber->set_label(additionInfo.sDownloadNumber); rCurrentItem.m_pParentDialog = m_pAdditionsDialog; + rCurrentItem.m_sDownloadURL = additionInfo.sDownloadURL; } void SearchAndParseThread::Append(const AdditionInfo& additionInfo) @@ -409,6 +417,48 @@ void SearchAndParseThread::Search() nIteration++; } } + CheckInstalledExtensions(); +} + +void SearchAndParseThread::CheckInstalledExtensions() +{ + uno::Sequence<uno::Sequence<uno::Reference<deployment::XPackage>>> xAllPackages + = m_pAdditionsDialog->getInstalledExtensions(); + + if (!xAllPackages.hasElements()) + return; + + OUString currentExtensionName; + + for (auto& package : xAllPackages) + { + for (auto& extensionVersion : package) + { + if (extensionVersion.is()) + { + currentExtensionName = extensionVersion->getName(); + if (currentExtensionName.isEmpty()) + continue; + + m_pAdditionsDialog->m_searchOptions.searchString = currentExtensionName; + utl::TextSearch textSearch(m_pAdditionsDialog->m_searchOptions); + + for (auto& rInfo : m_pAdditionsDialog->m_aAdditionsItems) + { + OUString sExtensionDownloadURL = rInfo.m_sDownloadURL; + + if (!textSearch.searchForward(sExtensionDownloadURL)) + { + continue; + } + else + { + rInfo.m_xButtonInstall->set_sensitive(false); + } + } + } + } + } } void SearchAndParseThread::execute() @@ -479,6 +529,9 @@ AdditionsDialog::AdditionsDialog(weld::Window* pParent, const OUString& sAdditio OString rURL = sPrefixURL + m_sTag + sSuffixURL; m_sURL = rURL; + m_xExtensionManager + = deployment::ExtensionManager::get(::comphelper::getProcessComponentContext()); + //Initialize search util m_searchOptions.AlgorithmType2 = css::util::SearchAlgorithms2::ABSOLUTE; m_searchOptions.transliterateFlags |= TransliterationFlags::IGNORE_CASE; @@ -501,6 +554,36 @@ AdditionsDialog::~AdditionsDialog() } } +uno::Sequence<uno::Sequence<uno::Reference<deployment::XPackage>>> +AdditionsDialog::getInstalledExtensions() +{ + uno::Sequence<uno::Sequence<uno::Reference<deployment::XPackage>>> xAllPackages; + + try + { + xAllPackages = m_xExtensionManager->getAllExtensions( + uno::Reference<task::XAbortChannel>(), uno::Reference<ucb::XCommandEnvironment>()); + } + catch (const deployment::DeploymentException&) + { + SAL_WARN("cui.dialogs", "Deployment Exception"); + } + catch (const ucb::CommandFailedException&) + { + SAL_WARN("cui.dialogs", "Command Failed Exception"); + } + catch (const ucb::CommandAbortedException&) + { + SAL_WARN("cui.dialogs", "Command Aborted Exception"); + } + catch (const lang::IllegalArgumentException& e) + { + css::uno::Any anyEx = cppu::getCaughtException(); + throw css::lang::WrappedTargetRuntimeException(e.Message, e.Context, anyEx); + } + return xAllPackages; +} + void AdditionsDialog::SetProgress(const OUString& rProgress) { if (rProgress.isEmpty()) diff --git a/cui/source/inc/AdditionsDialog.hxx b/cui/source/inc/AdditionsDialog.hxx index 7b082a1b5230..7a688516fa1a 100644 --- a/cui/source/inc/AdditionsDialog.hxx +++ b/cui/source/inc/AdditionsDialog.hxx @@ -13,10 +13,19 @@ #include <vcl/svapp.hxx> #include <salhelper/thread.hxx> #include <rtl/ref.hxx> -#include <vcl/timer.hxx> #include <vcl/weld.hxx> + +// Detect changes on the UI +#include <vcl/timer.hxx> + +// Search and filter #include <i18nutil/searchopt.hxx> +// Extension Manager Connection +#include <com/sun/star/deployment/XExtensionManager.hpp> +#include <com/sun/star/deployment/ExtensionManager.hpp> +#include <com/sun/star/deployment/XPackageManager.hpp> + class AdditionsDialog; class SearchAndParseThread; @@ -40,6 +49,7 @@ struct AdditionsItem , m_xLabelDownloadNumber(m_xBuilder->weld_label("labelDownloadNumber")) , m_xButtonShowMore(m_xBuilder->weld_button("buttonShowMore")) , m_pParentDialog(nullptr) + , m_sDownloadURL("") { m_xButtonShowMore->connect_clicked(LINK(this, AdditionsItem, ShowMoreHdl)); } @@ -63,6 +73,7 @@ struct AdditionsItem std::unique_ptr<weld::Label> m_xLabelDownloadNumber; std::unique_ptr<weld::Button> m_xButtonShowMore; AdditionsDialog* m_pParentDialog; + OUString m_sDownloadURL; }; struct AdditionInfo @@ -89,6 +100,8 @@ class AdditionsDialog : public weld::GenericDialogController private: Timer m_aSearchDataTimer; + css::uno::Reference<css::deployment::XExtensionManager> m_xExtensionManager; + DECL_LINK(SearchUpdateHdl, weld::Entry&, void); DECL_LINK(ImplUpdateDataHdl, Timer*, void); DECL_LINK(FocusOut_Impl, weld::Widget&, void); @@ -116,6 +129,8 @@ public: AdditionsDialog(weld::Window* pParent, const OUString& sAdditionsTag); ~AdditionsDialog() override; + css::uno::Sequence<css::uno::Sequence<css::uno::Reference<css::deployment::XPackage>>> + getInstalledExtensions(); void SetProgress(const OUString& rProgress); void ClearList(); }; @@ -127,12 +142,6 @@ private: std::atomic<bool> m_bExecute; bool m_bIsFirstLoading; - virtual ~SearchAndParseThread() override; - virtual void execute() override; - -public: - SearchAndParseThread(AdditionsDialog* pDialog, const bool& bIsFirstLoading); - void LoadInfo(const AdditionInfo& additionInfo, AdditionsItem& rCurrentItem); void Search(); @@ -140,6 +149,14 @@ public: void AppendAllExtensions(); + void CheckInstalledExtensions(); + + virtual ~SearchAndParseThread() override; + virtual void execute() override; + +public: + SearchAndParseThread(AdditionsDialog* pDialog, const bool& bIsFirstLoading); + void StopExecution() { m_bExecute = false; } }; |