[Libreoffice-commits] core.git: cui/source
Yusuf Keten (via logerrit)
logerrit at kemper.freedesktop.org
Fri Aug 7 05:24:50 UTC 2020
cui/source/dialogs/AdditionsDialog.cxx | 83 +++++++++++++++++++++++++++++++++
cui/source/inc/AdditionsDialog.hxx | 31 +++++++++---
2 files changed, 107 insertions(+), 7 deletions(-)
New commits:
commit 4e31468ce84951a8789f5bcd229145d6dcd55c5e
Author: Yusuf Keten <ketenyusuf at gmail.com>
AuthorDate: Thu Jul 30 19:31:28 2020 +0300
Commit: Muhammet Kara <muhammet.kara at collabora.com>
CommitDate: Fri Aug 7 07:24:09 2020 +0200
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 at collabora.com>
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; }
};
More information about the Libreoffice-commits
mailing list