summaryrefslogtreecommitdiff
path: root/desktop/source/deployment/gui
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/source/deployment/gui')
-rw-r--r--desktop/source/deployment/gui/dp_gui.h9
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui.hrc3
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_dialog.src20
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_dialog2.cxx182
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_dialog2.hxx40
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx203
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_extensioncmdqueue.hxx13
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_extlistbox.cxx100
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_extlistbox.hxx26
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_service.cxx2
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_theextmgr.cxx179
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_theextmgr.hxx22
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedata.hxx40
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedialog.cxx403
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedialog.hxx25
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedialog.src12
-rw-r--r--desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx50
-rw-r--r--desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx6
-rw-r--r--desktop/source/deployment/gui/license_dialog.cxx11
-rw-r--r--desktop/source/deployment/gui/license_dialog.hxx1
20 files changed, 735 insertions, 612 deletions
diff --git a/desktop/source/deployment/gui/dp_gui.h b/desktop/source/deployment/gui/dp_gui.h
index 85e6eaef3544..092b232ce96d 100644
--- a/desktop/source/deployment/gui/dp_gui.h
+++ b/desktop/source/deployment/gui/dp_gui.h
@@ -79,21 +79,18 @@ enum PackageState { REGISTERED, NOT_REGISTERED, AMBIGUOUS, NOT_AVAILABLE };
class SelectedPackage: public salhelper::SimpleReferenceObject {
public:
SelectedPackage() {}
- SelectedPackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> &xPackage,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager> &xPackageManager )
- : m_xPackage( xPackage ),
- m_xPackageManager( xPackageManager )
+ SelectedPackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> &xPackage)
+ : m_xPackage( xPackage )
{}
virtual ~SelectedPackage();
::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> getPackage() const { return m_xPackage; }
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager> getPackageManager() const { return m_xPackageManager; }
+
private:
SelectedPackage(SelectedPackage &); // not defined
void operator =(SelectedPackage &); // not defined
::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> m_xPackage;
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager> m_xPackageManager;
};
} // namespace dp_gui
diff --git a/desktop/source/deployment/gui/dp_gui.hrc b/desktop/source/deployment/gui/dp_gui.hrc
index 1d2f4869cc7f..5f52b042edf3 100644..100755
--- a/desktop/source/deployment/gui/dp_gui.hrc
+++ b/desktop/source/deployment/gui/dp_gui.hrc
@@ -153,6 +153,7 @@
#define RID_STR_REMOVING_PACKAGES (RID_DEPLOYMENT_GUI_START+86)
#define RID_STR_ENABLING_PACKAGES (RID_DEPLOYMENT_GUI_START+87)
#define RID_STR_DISABLING_PACKAGES (RID_DEPLOYMENT_GUI_START+88)
+#define RID_STR_ACCEPT_LICENSE (RID_DEPLOYMENT_GUI_START+89)
#define RID_STR_INSTALL_FOR_ALL (RID_DEPLOYMENT_GUI_START+90)
#define RID_STR_INSTALL_FOR_ME (RID_DEPLOYMENT_GUI_START+91)
@@ -161,6 +162,7 @@
#define RID_STR_EXIT_BTN (RID_DEPLOYMENT_GUI_START+94)
#define RID_STR_NO_ADMIN_PRIVILEGE (RID_DEPLOYMENT_GUI_START+95)
#define RID_STR_ERROR_MISSING_DEPENDENCIES (RID_DEPLOYMENT_GUI_START+96)
+#define RID_STR_ERROR_MISSING_LICENSE (RID_DEPLOYMENT_GUI_START+97)
#define WARNINGBOX_CONCURRENTINSTANCE (RID_DEPLOYMENT_GUI_START+100)
@@ -172,7 +174,6 @@
#define RID_WARNINGBOX_DISABLE_SHARED_EXTENSION (RID_DEPLOYMENT_GUI_START+106)
#define RID_DLG_LICENSE RID_DEPLOYMENT_LICENSE_START
-#define WARNINGBOX_NOSHAREDALLOWED (RID_DEPLOYMENT_LICENSE_START+1)
diff --git a/desktop/source/deployment/gui/dp_gui_dialog.src b/desktop/source/deployment/gui/dp_gui_dialog.src
index 79c0c5172030..15823288ee20 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_dialog.src
+++ b/desktop/source/deployment/gui/dp_gui_dialog.src
@@ -72,6 +72,11 @@ String RID_STR_DISABLING_PACKAGES
Text [ en-US ] = "Disabling %EXTENSION_NAME";
};
+String RID_STR_ACCEPT_LICENSE
+{
+ Text [ en-US ] = "Accept license for %EXTENSION_NAME";
+};
+
String RID_STR_INSTALL_FOR_ALL
{
Text [ en-US ] = "~For all users";
@@ -109,6 +114,11 @@ String RID_STR_ERROR_MISSING_DEPENDENCIES
Text [ en-US ] = "The extension cannot be enabled as the following system dependencies are not fulfilled:";
};
+String RID_STR_ERROR_MISSING_LICENSE
+{
+ Text [ en-US ] = "This extension is disabled because you haven't accepted the license yet.\n";
+};
+
// Dialog layout
// ---------------------------------------------------
// row 1 | multi line edit
@@ -131,7 +141,7 @@ String RID_STR_ERROR_MISSING_DEPENDENCIES
#define ROW1_Y RSC_SP_DLG_INNERBORDER_TOP
#define ROW1_HEIGHT 16*RSC_CD_FIXEDTEXT_HEIGHT
#define ROW2_Y ROW1_Y+ROW1_HEIGHT+RSC_SP_CTRL_GROUP_Y
-#define ROW2_HEIGHT 2*RSC_CD_FIXEDTEXT_HEIGHT
+#define ROW2_HEIGHT 3*RSC_CD_FIXEDTEXT_HEIGHT
#define ROW3_Y ROW2_Y+ROW2_HEIGHT+RSC_SP_CTRL_GROUP_Y
#define ROW3_HEIGHT 3*RSC_CD_FIXEDTEXT_HEIGHT
#define ROW4_Y ROW3_Y+ROW3_HEIGHT+RSC_SP_CTRL_GROUP_Y
@@ -282,14 +292,6 @@ ModalDialog RID_DLG_LICENSE
-WarningBox WARNINGBOX_NOSHAREDALLOWED
-{
- Buttons = WB_OK ;
- DefButton = WB_DEF_OK;
- Message[ en-US ] ="The extension \'%NAME\' cannot be installed under \"%PRODUCTNAME Extensions\", because "
- "every user has to agree to the license agreement of the extension. The extension will not be installed.";
-};
-
WarningBox RID_WARNINGBOX_INSTALL_EXTENSION {
Buttons = WB_OK_CANCEL;
DefButton = WB_DEF_OK;
diff --git a/desktop/source/deployment/gui/dp_gui_dialog2.cxx b/desktop/source/deployment/gui/dp_gui_dialog2.cxx
index 71fda4d9b3e0..87f70e449b9d 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_dialog2.cxx
+++ b/desktop/source/deployment/gui/dp_gui_dialog2.cxx
@@ -37,7 +37,10 @@
#include "dp_gui_extlistbox.hxx"
#include "dp_gui_shared.hxx"
#include "dp_gui_theextmgr.hxx"
+#include "dp_gui_extensioncmdqueue.hxx"
#include "dp_misc.h"
+#include "dp_update.hxx"
+#include "dp_identifier.hxx"
#include "vcl/ctrl.hxx"
#include "vcl/menu.hxx"
@@ -74,8 +77,6 @@
#include "com/sun/star/uno/Any.hxx"
#include "com/sun/star/uno/XComponentContext.hpp"
-#include "com/sun/star/deployment/thePackageManagerFactory.hpp"
-
#include <map>
#include <vector>
#include <boost/shared_ptr.hpp>
@@ -108,17 +109,6 @@ struct StrAllFiles : public rtl::StaticWithInit< const OUString, StrAllFiles >
};
//------------------------------------------------------------------------------
-UpdateListEntry::UpdateListEntry( const uno::Reference< deployment::XPackage > &xPackage,
- const uno::Reference< deployment::XPackageManager > &xPackageManager ) :
- m_xPackage( xPackage ),
- m_xPackageManager( xPackageManager )
-{}
-
-//------------------------------------------------------------------------------
-UpdateListEntry::~UpdateListEntry()
-{}
-
-//------------------------------------------------------------------------------
// ExtBoxWithBtns_Impl
//------------------------------------------------------------------------------
@@ -279,6 +269,9 @@ void ExtBoxWithBtns_Impl::SetButtonPos( const Rectangle& rRect )
// -----------------------------------------------------------------------
void ExtBoxWithBtns_Impl::SetButtonStatus( const TEntry_Impl pEntry )
{
+ bool bShowOptionBtn = true;
+
+ pEntry->m_bHasButtons = false;
if ( ( pEntry->m_eState == REGISTERED ) || ( pEntry->m_eState == NOT_AVAILABLE ) )
{
m_pEnableBtn->SetText( DialogHelper::getResourceString( RID_CTX_ITEM_DISABLE ) );
@@ -288,26 +281,36 @@ void ExtBoxWithBtns_Impl::SetButtonStatus( const TEntry_Impl pEntry )
{
m_pEnableBtn->SetText( DialogHelper::getResourceString( RID_CTX_ITEM_ENABLE ) );
m_pEnableBtn->SetHelpId( HID_EXTENSION_MANAGER_LISTBOX_ENABLE );
+ bShowOptionBtn = false;
}
- if ( ( pEntry->m_eState == NOT_AVAILABLE ) || pEntry->m_bMissingDeps )
+ if ( ( !pEntry->m_bUser || ( pEntry->m_eState == NOT_AVAILABLE ) || pEntry->m_bMissingDeps )
+ && !pEntry->m_bMissingLic )
m_pEnableBtn->Hide();
else
{
m_pEnableBtn->Enable( !pEntry->m_bLocked );
m_pEnableBtn->Show();
+ pEntry->m_bHasButtons = true;
}
- if ( pEntry->m_bHasOptions )
+ if ( pEntry->m_bHasOptions && bShowOptionBtn )
{
m_pOptionsBtn->Enable( pEntry->m_bHasOptions );
m_pOptionsBtn->Show();
+ pEntry->m_bHasButtons = true;
}
else
m_pOptionsBtn->Hide();
- m_pRemoveBtn->Show();
- m_pRemoveBtn->Enable( !pEntry->m_bLocked );
+ if ( pEntry->m_bUser || pEntry->m_bShared )
+ {
+ m_pRemoveBtn->Enable( !pEntry->m_bLocked );
+ m_pRemoveBtn->Show();
+ pEntry->m_bHasButtons = true;
+ }
+ else
+ m_pRemoveBtn->Hide();
}
// -----------------------------------------------------------------------
@@ -394,17 +397,13 @@ void ExtBoxWithBtns_Impl::MouseButtonDown( const MouseEvent& rMEvt )
switch( ShowPopupMenu( aMousePos, nPos ) )
{
case CMD_NONE: break;
- case CMD_ENABLE: m_pParent->enablePackage( GetEntryData( nPos )->m_xPackageManager,
- GetEntryData( nPos )->m_xPackage, true );
+ case CMD_ENABLE: m_pParent->enablePackage( GetEntryData( nPos )->m_xPackage, true );
break;
- case CMD_DISABLE: m_pParent->enablePackage( GetEntryData( nPos )->m_xPackageManager,
- GetEntryData( nPos )->m_xPackage, false );
+ case CMD_DISABLE: m_pParent->enablePackage( GetEntryData( nPos )->m_xPackage, false );
break;
- case CMD_UPDATE: m_pParent->updatePackage( GetEntryData( nPos )->m_xPackageManager,
- GetEntryData( nPos )->m_xPackage );
+ case CMD_UPDATE: m_pParent->updatePackage( GetEntryData( nPos )->m_xPackage );
break;
- case CMD_REMOVE: m_pParent->removePackage( GetEntryData( nPos )->m_xPackageManager,
- GetEntryData( nPos )->m_xPackage );
+ case CMD_REMOVE: m_pParent->removePackage( GetEntryData( nPos )->m_xPackage );
break;
}
}
@@ -506,11 +505,14 @@ IMPL_LINK( ExtBoxWithBtns_Impl, HandleEnableBtn, void*, EMPTYARG )
if ( nActive != EXTENSION_LISTBOX_ENTRY_NOTFOUND )
{
TEntry_Impl pEntry = GetEntryData( nActive );
- const bool bEnable( pEntry->m_eState != REGISTERED );
- m_pParent->enablePackage( pEntry->m_xPackageManager,
- pEntry->m_xPackage,
- bEnable );
+ if ( pEntry->m_bMissingLic )
+ m_pParent->acceptLicense( pEntry->m_xPackage );
+ else
+ {
+ const bool bEnable( pEntry->m_eState != REGISTERED );
+ m_pParent->enablePackage( pEntry->m_xPackage, bEnable );
+ }
}
return 1;
@@ -524,8 +526,7 @@ IMPL_LINK( ExtBoxWithBtns_Impl, HandleRemoveBtn, void*, EMPTYARG )
if ( nActive != EXTENSION_LISTBOX_ENTRY_NOTFOUND )
{
TEntry_Impl pEntry = GetEntryData( nActive );
- m_pParent->removePackage( pEntry->m_xPackageManager,
- pEntry->m_xPackage );
+ m_pParent->removePackage( pEntry->m_xPackage );
}
return 1;
@@ -571,21 +572,21 @@ String DialogHelper::getResourceString( USHORT id )
}
//------------------------------------------------------------------------------
-bool DialogHelper::IsSharedPkgMgr( const uno::Reference< deployment::XPackageManager > &xPackageManager )
+bool DialogHelper::IsSharedPkgMgr( const uno::Reference< deployment::XPackage > &xPackage )
{
- if ( xPackageManager->getContext().equals( OUSTR("shared") ) )
+ if ( xPackage->getRepositoryName().equals( OUSTR("shared") ) )
return true;
else
return false;
}
//------------------------------------------------------------------------------
-bool DialogHelper::continueOnSharedExtension( const uno::Reference< deployment::XPackageManager > &xPackageManager,
+bool DialogHelper::continueOnSharedExtension( const uno::Reference< deployment::XPackage > &xPackage,
Window *pParent,
const USHORT nResID,
bool &bHadWarning )
{
- if ( !bHadWarning && IsSharedPkgMgr( xPackageManager ) )
+ if ( !bHadWarning && IsSharedPkgMgr( xPackage ) )
{
const ::vos::OGuard guard( Application::GetSolarMutex() );
WarningBox aInfoBox( pParent, getResId( nResID ) );
@@ -759,17 +760,16 @@ void ExtMgrDialog::setGetExtensionsURL( const ::rtl::OUString &rURL )
//------------------------------------------------------------------------------
long ExtMgrDialog::addPackageToList( const uno::Reference< deployment::XPackage > &xPackage,
- const uno::Reference< deployment::XPackageManager > &xPackageManager )
+ bool bLicenseMissing )
{
m_aUpdateBtn.Enable( true );
- return m_pExtensionBox->addEntry( xPackage, xPackageManager );
+ return m_pExtensionBox->addEntry( xPackage, bLicenseMissing );
}
//------------------------------------------------------------------------------
-void ExtMgrDialog::prepareChecking( const uno::Reference< deployment::XPackageManager > &xPackageManager )
+void ExtMgrDialog::prepareChecking()
{
- if ( xPackageManager.is() )
- m_pExtensionBox->prepareChecking( xPackageManager );
+ m_pExtensionBox->prepareChecking();
}
//------------------------------------------------------------------------------
@@ -793,68 +793,82 @@ bool ExtMgrDialog::removeExtensionWarn( const OUString &rExtensionName ) const
}
//------------------------------------------------------------------------------
-bool ExtMgrDialog::enablePackage( const uno::Reference< deployment::XPackageManager > &xPackageManager,
- const uno::Reference< deployment::XPackage > &xPackage,
+bool ExtMgrDialog::enablePackage( const uno::Reference< deployment::XPackage > &xPackage,
bool bEnable )
{
- if ( !xPackageManager.is() || !xPackage.is() )
+ if ( !xPackage.is() )
return false;
if ( bEnable )
{
- if ( ! continueOnSharedExtension( xPackageManager, this, RID_WARNINGBOX_ENABLE_SHARED_EXTENSION, m_bEnableWarning ) )
+ if ( ! continueOnSharedExtension( xPackage, this, RID_WARNINGBOX_ENABLE_SHARED_EXTENSION, m_bEnableWarning ) )
return false;
}
else
{
- if ( ! continueOnSharedExtension( xPackageManager, this, RID_WARNINGBOX_DISABLE_SHARED_EXTENSION, m_bDisableWarning ) )
+ if ( ! continueOnSharedExtension( xPackage, this, RID_WARNINGBOX_DISABLE_SHARED_EXTENSION, m_bDisableWarning ) )
return false;
}
- m_pManager->enablePackage( xPackage, bEnable );
+ m_pManager->getCmdQueue()->enableExtension( xPackage, bEnable );
return true;
}
//------------------------------------------------------------------------------
-bool ExtMgrDialog::removePackage( const uno::Reference< deployment::XPackageManager > &xPackageManager,
- const uno::Reference< deployment::XPackage > &xPackage )
+bool ExtMgrDialog::removePackage( const uno::Reference< deployment::XPackage > &xPackage )
{
- if ( !xPackageManager.is() || !xPackage.is() )
+ if ( !xPackage.is() )
return false;
- if ( !IsSharedPkgMgr( xPackageManager ) || m_bDeleteWarning )
+ if ( !IsSharedPkgMgr( xPackage ) || m_bDeleteWarning )
{
if ( ! removeExtensionWarn( xPackage->getDisplayName() ) )
return false;
}
- if ( ! continueOnSharedExtension( xPackageManager, this, RID_WARNINGBOX_REMOVE_SHARED_EXTENSION, m_bDeleteWarning ) )
+ if ( ! continueOnSharedExtension( xPackage, this, RID_WARNINGBOX_REMOVE_SHARED_EXTENSION, m_bDeleteWarning ) )
return false;
- m_pManager->removePackage( xPackageManager, xPackage );
+ m_pManager->getCmdQueue()->removeExtension( xPackage );
return true;
}
//------------------------------------------------------------------------------
-bool ExtMgrDialog::updatePackage( const uno::Reference< deployment::XPackageManager > &xPackageManager,
- const uno::Reference< deployment::XPackage > &xPackage )
+bool ExtMgrDialog::updatePackage( const uno::Reference< deployment::XPackage > &xPackage )
{
- if ( !xPackageManager.is() || !xPackage.is() )
+ if ( !xPackage.is() )
return false;
- std::vector< TUpdateListEntry > vEntries;
- TUpdateListEntry pEntry( new UpdateListEntry( xPackage, xPackageManager ) );
- vEntries.push_back( pEntry );
+ // get the extension with highest version
+ uno::Sequence<uno::Reference<deployment::XPackage> > seqExtensions =
+ m_pManager->getExtensionManager()->getExtensionsWithSameIdentifier(
+ dp_misc::getIdentifier(xPackage), xPackage->getName(), uno::Reference<ucb::XCommandEnvironment>());
+ uno::Reference<deployment::XPackage> extension =
+ dp_misc::getExtensionWithHighestVersion(seqExtensions);
+ OSL_ASSERT(extension.is());
+ std::vector< css::uno::Reference< css::deployment::XPackage > > vEntries;
+ vEntries.push_back(extension);
- m_pManager->updatePackages( vEntries );
+ m_pManager->getCmdQueue()->checkForUpdates( vEntries );
return true;
}
//------------------------------------------------------------------------------
-uno::Sequence< OUString > ExtMgrDialog::raiseAddPicker( const uno::Reference< deployment::XPackageManager > &xPackageManager )
+bool ExtMgrDialog::acceptLicense( const uno::Reference< deployment::XPackage > &xPackage )
+{
+ if ( !xPackage.is() )
+ return false;
+
+ m_pManager->getCmdQueue()->acceptLicense( xPackage );
+
+ return true;
+}
+
+//------------------------------------------------------------------------------
+uno::Sequence< OUString > ExtMgrDialog::raiseAddPicker()
{
const uno::Any mode( static_cast< sal_Int16 >( ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE ) );
const uno::Reference< uno::XComponentContext > xContext( m_pManager->getContext() );
@@ -872,7 +886,8 @@ uno::Sequence< OUString > ExtMgrDialog::raiseAddPicker( const uno::Reference< de
t_string2string title2filter;
OUString sDefaultFilter( StrAllFiles::get() );
- const uno::Sequence< uno::Reference< deployment::XPackageTypeInfo > > packageTypes( xPackageManager->getSupportedPackageTypes() );
+ const uno::Sequence< uno::Reference< deployment::XPackageTypeInfo > > packageTypes(
+ m_pManager->getExtensionManager()->getSupportedPackageTypes() );
for ( sal_Int32 pos = 0; pos < packageTypes.getLength(); ++pos )
{
@@ -1026,8 +1041,7 @@ IMPL_LINK( ExtMgrDialog, HandleAddBtn, void*, EMPTYARG )
{
setBusy( true );
- uno::Reference< deployment::XPackageManager > xUserPkgMgr = m_pManager->getUserPkgMgr();
- uno::Sequence< OUString > aFileList = raiseAddPicker( xUserPkgMgr );
+ uno::Sequence< OUString > aFileList = raiseAddPicker();
if ( aFileList.getLength() )
{
@@ -1133,13 +1147,13 @@ void ExtMgrDialog::Resize()
{
ImplControlValue aValue;
bool bNativeOK;
- Region aControlRegion( Rectangle( (const Point&)Point(), m_aProgressBar.GetSizePixel() ) );
- Region aNativeControlRegion, aNativeContentRegion;
+ Rectangle aControlRegion( Point( 0, 0 ), m_aProgressBar.GetSizePixel() );
+ Rectangle aNativeControlRegion, aNativeContentRegion;
if( (bNativeOK = GetNativeControlRegion( CTRL_PROGRESS, PART_ENTIRE_CONTROL, aControlRegion,
CTRL_STATE_ENABLED, aValue, rtl::OUString(),
aNativeControlRegion, aNativeContentRegion ) ) != FALSE )
{
- nProgressHeight = aNativeControlRegion.GetBoundRect().GetHeight();
+ nProgressHeight = aNativeControlRegion.GetHeight();
}
}
@@ -1298,23 +1312,22 @@ UpdateRequiredDialog::~UpdateRequiredDialog()
//------------------------------------------------------------------------------
long UpdateRequiredDialog::addPackageToList( const uno::Reference< deployment::XPackage > &xPackage,
- const uno::Reference< deployment::XPackageManager > &xPackageManager )
+ bool bLicenseMissing )
{
// We will only add entries to the list with unsatisfied dependencies
- if ( !checkDependencies( xPackage ) )
+ if ( !bLicenseMissing && !checkDependencies( xPackage ) )
{
- m_bHasLockedEntries |= (bool) xPackageManager->isReadOnly();
+ m_bHasLockedEntries |= m_pManager->isReadOnly( xPackage );
m_aUpdateBtn.Enable( true );
- return m_pExtensionBox->addEntry( xPackage, xPackageManager );
+ return m_pExtensionBox->addEntry( xPackage );
}
return 0;
}
//------------------------------------------------------------------------------
-void UpdateRequiredDialog::prepareChecking( const uno::Reference< deployment::XPackageManager > &xPackageManager )
+void UpdateRequiredDialog::prepareChecking()
{
- if ( xPackageManager.is() )
- m_pExtensionBox->prepareChecking( xPackageManager );
+ m_pExtensionBox->prepareChecking();
}
//------------------------------------------------------------------------------
@@ -1331,11 +1344,10 @@ void UpdateRequiredDialog::checkEntries()
}
//------------------------------------------------------------------------------
-bool UpdateRequiredDialog::enablePackage( const uno::Reference< deployment::XPackageManager > &,
- const uno::Reference< deployment::XPackage > &xPackage,
- bool bEnable )
+bool UpdateRequiredDialog::enablePackage( const uno::Reference< deployment::XPackage > &xPackage,
+ bool bEnable )
{
- m_pManager->enablePackage( xPackage, bEnable );
+ m_pManager->getCmdQueue()->enableExtension( xPackage, bEnable );
return true;
}
@@ -1451,20 +1463,18 @@ IMPL_LINK( UpdateRequiredDialog, HandleUpdateBtn, void*, EMPTYARG )
{
::osl::ClearableMutexGuard aGuard( m_aMutex );
- std::vector< TUpdateListEntry > vUpdateEntries;
+ std::vector< uno::Reference< deployment::XPackage > > vUpdateEntries;
sal_Int32 nCount = m_pExtensionBox->GetEntryCount();
for ( sal_Int32 i = 0; i < nCount; ++i )
{
TEntry_Impl pEntry = m_pExtensionBox->GetEntryData( i );
- TUpdateListEntry pUpdateEntry( new UpdateListEntry( pEntry->m_xPackage,
- pEntry->m_xPackageManager ) );
- vUpdateEntries.push_back( pUpdateEntry );
+ vUpdateEntries.push_back( pEntry->m_xPackage );
}
aGuard.clear();
- m_pManager->updatePackages( vUpdateEntries );
+ m_pManager->getCmdQueue()->checkForUpdates( vUpdateEntries );
return 1;
}
@@ -1580,13 +1590,13 @@ void UpdateRequiredDialog::Resize()
{
ImplControlValue aValue;
bool bNativeOK;
- Region aControlRegion( Rectangle( (const Point&)Point(), m_aProgressBar.GetSizePixel() ) );
- Region aNativeControlRegion, aNativeContentRegion;
+ Rectangle aControlRegion( Point( 0, 0 ), m_aProgressBar.GetSizePixel() );
+ Rectangle aNativeControlRegion, aNativeContentRegion;
if( (bNativeOK = GetNativeControlRegion( CTRL_PROGRESS, PART_ENTIRE_CONTROL, aControlRegion,
CTRL_STATE_ENABLED, aValue, rtl::OUString(),
aNativeControlRegion, aNativeContentRegion ) ) != FALSE )
{
- nProgressHeight = aNativeControlRegion.GetBoundRect().GetHeight();
+ nProgressHeight = aNativeControlRegion.GetHeight();
}
}
@@ -1719,7 +1729,7 @@ void UpdateRequiredDialog::disableAllEntries()
for ( long nIndex = 0; nIndex < nCount; nIndex++ )
{
TEntry_Impl pEntry = m_pExtensionBox->GetEntryData( nIndex );
- enablePackage( pEntry->m_xPackageManager, pEntry->m_xPackage, false );
+ enablePackage( pEntry->m_xPackage, false );
}
setBusy( false );
diff --git a/desktop/source/deployment/gui/dp_gui_dialog2.hxx b/desktop/source/deployment/gui/dp_gui_dialog2.hxx
index d5e939ace8a9..f0a85cce98c0 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_dialog2.hxx
+++ b/desktop/source/deployment/gui/dp_gui_dialog2.hxx
@@ -46,7 +46,6 @@
#include "com/sun/star/awt/XWindow.hpp"
#include "com/sun/star/deployment/XPackage.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
#include "com/sun/star/uno/XComponentContext.hpp"
#include "com/sun/star/ui/dialogs/XExecutableDialog.hpp"
#include "com/sun/star/util/XModifyListener.hpp"
@@ -82,16 +81,16 @@ public:
virtual void updateProgress( const long nProgress ) = 0;
virtual void updatePackageInfo( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) = 0;
- virtual long addPackageToList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > & ) = 0;
+ virtual long addPackageToList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
+ bool bLicenseMissing = false ) = 0;
- virtual void prepareChecking( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager ) = 0;
+ virtual void prepareChecking() = 0;
virtual void checkEntries() = 0;
static ResId getResId( USHORT nId );
static String getResourceString( USHORT id );
- static bool IsSharedPkgMgr( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &);
- static bool continueOnSharedExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &,
+ static bool IsSharedPkgMgr( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &);
+ static bool continueOnSharedExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &,
Window *pParent,
const USHORT nResID,
bool &bHadWarning );
@@ -160,19 +159,17 @@ public:
void setGetExtensionsURL( const ::rtl::OUString &rURL );
virtual long addPackageToList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > & );
- bool enablePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
+ bool bLicenseMissing = false );
+ bool enablePackage(const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
bool bEnable );
- bool removePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
- bool updatePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
+ bool removePackage(const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
+ bool updatePackage(const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
+ bool acceptLicense(const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
- virtual void prepareChecking( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
+ virtual void prepareChecking();
virtual void checkEntries();
- ::com::sun::star::uno::Sequence< ::rtl::OUString > raiseAddPicker( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
+ ::com::sun::star::uno::Sequence< ::rtl::OUString > raiseAddPicker();
};
//==============================================================================
@@ -235,17 +232,14 @@ public:
void selectEntry( long nPos );
virtual long addPackageToList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > & );
- bool enablePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
- bool bEnable );
- bool updatePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
+ bool bLicenseMissing = false );
+ bool enablePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage, bool bEnable );
+ bool updatePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
- virtual void prepareChecking( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
+ virtual void prepareChecking();
virtual void checkEntries();
- ::com::sun::star::uno::Sequence< ::rtl::OUString > raiseAddPicker( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
+ ::com::sun::star::uno::Sequence< ::rtl::OUString > raiseAddPicker();
bool installForAllUsers( bool &bInstallForAll ) const;
bool installExtensionWarn( const ::rtl::OUString &rExtensionURL ) const;
diff --git a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx
index 58a5ab1c19ea..8bd8a6191201 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx
+++ b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx
@@ -36,10 +36,10 @@
#include <cstddef>
#include "com/sun/star/beans/PropertyValue.hpp"
+#include "com/sun/star/beans/NamedValue.hpp"
#include "com/sun/star/deployment/DependencyException.hpp"
#include "com/sun/star/deployment/LicenseException.hpp"
-#include "com/sun/star/deployment/LicenseIndividualAgreementException.hpp"
#include "com/sun/star/deployment/VersionException.hpp"
#include "com/sun/star/deployment/InstallException.hpp"
#include "com/sun/star/deployment/PlatformException.hpp"
@@ -48,7 +48,6 @@
#include "com/sun/star/deployment/DeploymentException.hpp"
#include "com/sun/star/deployment/UpdateInformationProvider.hpp"
#include "com/sun/star/deployment/XPackage.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
#include "com/sun/star/task/XAbortChannel.hpp"
#include "com/sun/star/task/XInteractionAbort.hpp"
@@ -77,6 +76,7 @@
#include "comphelper/anytostring.hxx"
#include "vcl/msgbox.hxx"
#include "toolkit/helper/vclunohelper.hxx"
+#include "comphelper/processfactory.hxx"
#include "dp_gui.h"
#include "dp_gui_thread.hxx"
@@ -110,12 +110,15 @@ using ::rtl::OUString;
namespace {
-OUString getVersion( const uno::Reference< deployment::XPackage > &rPackage )
+OUString getVersion( OUString const & sVersion )
{
- OUString sVersion( rPackage->getVersion());
return ( sVersion.getLength() == 0 ) ? OUString( RTL_CONSTASCII_USTRINGPARAM( "0" ) ) : sVersion;
}
+OUString getVersion( const uno::Reference< deployment::XPackage > &rPackage )
+{
+ return getVersion( rPackage->getVersion());
+}
}
@@ -193,37 +196,30 @@ public:
//------------------------------------------------------------------------------
struct ExtensionCmd
{
- enum E_CMD_TYPE { ADD, ENABLE, DISABLE, REMOVE, CHECK_FOR_UPDATES };
+ enum E_CMD_TYPE { ADD, ENABLE, DISABLE, REMOVE, CHECK_FOR_UPDATES, ACCEPT_LICENSE };
E_CMD_TYPE m_eCmdType;
bool m_bWarnUser;
OUString m_sExtensionURL;
- uno::Reference< deployment::XPackageManager > m_xPackageManager;
- uno::Reference< deployment::XPackage > m_xPackage;
- std::vector< TUpdateListEntry > m_vExtensionList;
+ OUString m_sRepository;
+ uno::Reference< deployment::XPackage > m_xPackage;
+ std::vector< uno::Reference< deployment::XPackage > > m_vExtensionList;
ExtensionCmd( const E_CMD_TYPE eCommand,
- const uno::Reference< deployment::XPackageManager > &rPackageManager,
const OUString &rExtensionURL,
+ const OUString &rRepository,
const bool bWarnUser )
: m_eCmdType( eCommand ),
m_bWarnUser( bWarnUser ),
m_sExtensionURL( rExtensionURL ),
- m_xPackageManager( rPackageManager ) {};
+ m_sRepository( rRepository ) {};
ExtensionCmd( const E_CMD_TYPE eCommand,
- const uno::Reference< deployment::XPackageManager > &rPackageManager,
const uno::Reference< deployment::XPackage > &rPackage )
: m_eCmdType( eCommand ),
m_bWarnUser( false ),
- m_xPackageManager( rPackageManager ),
m_xPackage( rPackage ) {};
ExtensionCmd( const E_CMD_TYPE eCommand,
- const uno::Reference< deployment::XPackage > &rPackage )
- : m_eCmdType( eCommand ),
- m_bWarnUser( false ),
- m_xPackage( rPackage ) {};
- ExtensionCmd( const E_CMD_TYPE eCommand,
- const std::vector< TUpdateListEntry > &vExtensionList )
+ const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList )
: m_eCmdType( eCommand ),
m_bWarnUser( false ),
m_vExtensionList( vExtensionList ) {};
@@ -239,14 +235,14 @@ public:
TheExtensionManager *pManager,
const uno::Reference< uno::XComponentContext > & rContext );
- void addExtension( const uno::Reference< deployment::XPackageManager > &rPackageManager,
- const OUString &rExtensionURL,
+ void addExtension( const OUString &rExtensionURL,
+ const OUString &rRepository,
const bool bWarnUser );
- void removeExtension( const uno::Reference< deployment::XPackageManager > &rPackageManager,
- const uno::Reference< deployment::XPackage > &rPackage );
+ void removeExtension( const uno::Reference< deployment::XPackage > &rPackage );
void enableExtension( const uno::Reference< deployment::XPackage > &rPackage,
const bool bEnable );
- void checkForUpdates( const std::vector< TUpdateListEntry > &vExtensionList );
+ void checkForUpdates( const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList );
+ void acceptLicense( const uno::Reference< deployment::XPackage > &rPackage );
void stop();
bool isBusy();
@@ -263,17 +259,18 @@ private:
virtual void SAL_CALL onTerminated();
void _addExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
- const uno::Reference< deployment::XPackageManager > &xPackageManager,
const OUString &rPackageURL,
+ const OUString &rRepository,
const bool bWarnUser );
void _removeExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
- const uno::Reference< deployment::XPackageManager > &xPackageManager,
const uno::Reference< deployment::XPackage > &xPackage );
void _enableExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
const uno::Reference< deployment::XPackage > &xPackage );
void _disableExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
const uno::Reference< deployment::XPackage > &xPackage );
- void _checkForUpdates( const std::vector< TUpdateListEntry > &vExtensionList );
+ void _checkForUpdates( const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList );
+ void _acceptLicense( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
+ const uno::Reference< deployment::XPackage > &xPackage );
enum Input { NONE, START, STOP };
@@ -288,6 +285,7 @@ private:
const OUString m_sAddingPackages;
const OUString m_sRemovingPackages;
const OUString m_sDefaultCmd;
+ const OUString m_sAcceptLicense;
osl::Condition m_wakeup;
osl::Mutex m_mutex;
Input m_eInput;
@@ -376,7 +374,6 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const &
lang::WrappedTargetException wtExc;
deployment::DependencyException depExc;
deployment::LicenseException licExc;
- deployment::LicenseIndividualAgreementException licAgreementExc;
deployment::VersionException verExc;
deployment::InstallException instExc;
deployment::PlatformException platExc;
@@ -438,23 +435,12 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const &
|| (n == RET_CANCEL && !Application::IsDialogCancelEnabled());
}
}
- else if (request >>= licAgreementExc)
- {
- vos::OGuard aSolarGuard( Application::GetSolarMutex() );
- ResId warnId(WARNINGBOX_NOSHAREDALLOWED, *DeploymentGuiResMgr::get());
- WarningBox warn( m_pDialogHelper? m_pDialogHelper->getWindow() : NULL, warnId);
- String msgText = warn.GetMessText();
- msgText.SearchAndReplaceAllAscii( "%PRODUCTNAME", BrandName::get() );
- msgText.SearchAndReplaceAllAscii("%NAME", licAgreementExc.ExtensionName);
- warn.SetMessText(msgText);
- warn.Execute();
- abort = true;
- }
else if (request >>= licExc)
{
uno::Reference< ui::dialogs::XExecutableDialog > xDialog(
deployment::ui::LicenseDialog::create(
- m_xContext, VCLUnoHelper::GetInterface( m_pDialogHelper? m_pDialogHelper->getWindow() : NULL ), licExc.Text ) );
+ m_xContext, VCLUnoHelper::GetInterface( m_pDialogHelper? m_pDialogHelper->getWindow() : NULL ),
+ licExc.ExtensionName, licExc.Text ) );
sal_Int16 res = xDialog->execute();
if ( res == ui::dialogs::ExecutableDialogResults::CANCEL )
abort = true;
@@ -468,7 +454,8 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const &
else if (request >>= verExc)
{
sal_uInt32 id;
- switch (dp_misc::comparePackageVersions( verExc.New, verExc.Deployed ))
+ switch (dp_misc::compareVersions(
+ verExc.NewVersion, verExc.Deployed->getVersion() ))
{
case dp_misc::LESS:
id = RID_WARNINGBOX_VERSION_LESS;
@@ -480,8 +467,8 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const &
id = RID_WARNINGBOX_VERSION_GREATER;
break;
}
- OSL_ASSERT( verExc.New.is() && verExc.Deployed.is() );
- bool bEqualNames = verExc.New->getDisplayName().equals(
+ OSL_ASSERT( verExc.Deployed.is() );
+ bool bEqualNames = verExc.NewDisplayName.equals(
verExc.Deployed->getDisplayName());
{
vos::OGuard guard(Application::GetSolarMutex());
@@ -506,9 +493,9 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const &
{
s = String(ResId(RID_STR_WARNINGBOX_VERSION_GREATER_DIFFERENT_NAMES, *DeploymentGuiResMgr::get()));
}
- s.SearchAndReplaceAllAscii( "$NAME", verExc.New->getDisplayName());
+ s.SearchAndReplaceAllAscii( "$NAME", verExc.NewDisplayName);
s.SearchAndReplaceAllAscii( "$OLDNAME", verExc.Deployed->getDisplayName());
- s.SearchAndReplaceAllAscii( "$NEW", getVersion(verExc.New) );
+ s.SearchAndReplaceAllAscii( "$NEW", getVersion(verExc.NewVersion) );
s.SearchAndReplaceAllAscii( "$DEPLOYED", getVersion(verExc.Deployed) );
box.SetMessText(s);
approve = box.Execute() == RET_OK;
@@ -527,7 +514,7 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const &
{
vos::OGuard guard(Application::GetSolarMutex());
- approve = m_pDialogHelper->installExtensionWarn( instExc.New->getDisplayName() );
+ approve = m_pDialogHelper->installExtensionWarn( instExc.displayName );
}
else
approve = false;
@@ -644,6 +631,7 @@ ExtensionCmdQueue::Thread::Thread( DialogHelper *pDialogHelper,
m_sAddingPackages( DialogHelper::getResourceString( RID_STR_ADDING_PACKAGES ) ),
m_sRemovingPackages( DialogHelper::getResourceString( RID_STR_REMOVING_PACKAGES ) ),
m_sDefaultCmd( DialogHelper::getResourceString( RID_STR_ADD_PACKAGES ) ),
+ m_sAcceptLicense( DialogHelper::getResourceString( RID_STR_ACCEPT_LICENSE ) ),
m_eInput( NONE ),
m_bTerminated( false ),
m_bStopped( false ),
@@ -653,8 +641,8 @@ ExtensionCmdQueue::Thread::Thread( DialogHelper *pDialogHelper,
}
//------------------------------------------------------------------------------
-void ExtensionCmdQueue::Thread::addExtension( const uno::Reference< deployment::XPackageManager > &rPackageManager,
- const ::rtl::OUString &rExtensionURL,
+void ExtensionCmdQueue::Thread::addExtension( const ::rtl::OUString &rExtensionURL,
+ const ::rtl::OUString &rRepository,
const bool bWarnUser )
{
::osl::MutexGuard aGuard( m_mutex );
@@ -665,7 +653,26 @@ void ExtensionCmdQueue::Thread::addExtension( const uno::Reference< deployment::
if ( rExtensionURL.getLength() )
{
- TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::ADD, rPackageManager, rExtensionURL, bWarnUser ) );
+ TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::ADD, rExtensionURL, rRepository, bWarnUser ) );
+
+ m_queue.push( pEntry );
+ m_eInput = START;
+ m_wakeup.set();
+ }
+}
+
+//------------------------------------------------------------------------------
+void ExtensionCmdQueue::Thread::removeExtension( const uno::Reference< deployment::XPackage > &rPackage )
+{
+ ::osl::MutexGuard aGuard( m_mutex );
+
+ //If someone called stop then we do not remove the extension -> game over!
+ if ( m_bStopped )
+ return;
+
+ if ( rPackage.is() )
+ {
+ TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::REMOVE, rPackage ) );
m_queue.push( pEntry );
m_eInput = START;
@@ -674,8 +681,7 @@ void ExtensionCmdQueue::Thread::addExtension( const uno::Reference< deployment::
}
//------------------------------------------------------------------------------
-void ExtensionCmdQueue::Thread::removeExtension( const uno::Reference< deployment::XPackageManager > &rPackageManager,
- const uno::Reference< deployment::XPackage > &rPackage )
+void ExtensionCmdQueue::Thread::acceptLicense( const uno::Reference< deployment::XPackage > &rPackage )
{
::osl::MutexGuard aGuard( m_mutex );
@@ -683,9 +689,9 @@ void ExtensionCmdQueue::Thread::removeExtension( const uno::Reference< deploymen
if ( m_bStopped )
return;
- if ( rPackageManager.is() && rPackage.is() )
+ if ( rPackage.is() )
{
- TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::REMOVE, rPackageManager, rPackage ) );
+ TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::ACCEPT_LICENSE, rPackage ) );
m_queue.push( pEntry );
m_eInput = START;
@@ -715,7 +721,8 @@ void ExtensionCmdQueue::Thread::enableExtension( const uno::Reference< deploymen
}
//------------------------------------------------------------------------------
-void ExtensionCmdQueue::Thread::checkForUpdates( const std::vector< TUpdateListEntry > &vExtensionList )
+void ExtensionCmdQueue::Thread::checkForUpdates(
+ const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList )
{
::osl::MutexGuard aGuard( m_mutex );
@@ -819,10 +826,10 @@ void ExtensionCmdQueue::Thread::execute()
switch ( pEntry->m_eCmdType ) {
case ExtensionCmd::ADD :
- _addExtension( currentCmdEnv, pEntry->m_xPackageManager, pEntry->m_sExtensionURL, pEntry->m_bWarnUser );
+ _addExtension( currentCmdEnv, pEntry->m_sExtensionURL, pEntry->m_sRepository, pEntry->m_bWarnUser );
break;
case ExtensionCmd::REMOVE :
- _removeExtension( currentCmdEnv, pEntry->m_xPackageManager, pEntry->m_xPackage );
+ _removeExtension( currentCmdEnv, pEntry->m_xPackage );
break;
case ExtensionCmd::ENABLE :
_enableExtension( currentCmdEnv, pEntry->m_xPackage );
@@ -833,6 +840,9 @@ void ExtensionCmdQueue::Thread::execute()
case ExtensionCmd::CHECK_FOR_UPDATES :
_checkForUpdates( pEntry->m_vExtensionList );
break;
+ case ExtensionCmd::ACCEPT_LICENSE :
+ _acceptLicense( currentCmdEnv, pEntry->m_xPackage );
+ break;
}
}
//catch ( deployment::DeploymentException &)
@@ -912,8 +922,8 @@ void ExtensionCmdQueue::Thread::execute()
//------------------------------------------------------------------------------
void ExtensionCmdQueue::Thread::_addExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
- const uno::Reference< deployment::XPackageManager > &xPackageManager,
const OUString &rPackageURL,
+ const OUString &rRepository,
const bool bWarnUser )
{
//check if we have a string in anyTitle. For example "unopkg gui \" caused anyTitle to be void
@@ -936,17 +946,16 @@ void ExtensionCmdQueue::Thread::_addExtension( ::rtl::Reference< ProgressCmdEnv
}
rCmdEnv->setWarnUser( bWarnUser );
- uno::Reference< task::XAbortChannel > xAbortChannel( xPackageManager->createAbortChannel() );
+ uno::Reference< deployment::XExtensionManager > xExtMgr = m_pManager->getExtensionManager();
+ uno::Reference< task::XAbortChannel > xAbortChannel( xExtMgr->createAbortChannel() );
OUString sTitle = searchAndReplaceAll( m_sAddingPackages, OUSTR("%EXTENSION_NAME"), sName );
rCmdEnv->progressSection( sTitle, xAbortChannel );
try
{
- uno::Reference< deployment::XPackage > xPackage( xPackageManager->addPackage(
- rPackageURL, OUString() /* detect media-type */,
- xAbortChannel, rCmdEnv.get() ) );
- OSL_ASSERT( xPackage.is() );
- }
+ xExtMgr->addExtension(rPackageURL, uno::Sequence<beans::NamedValue>(),
+ rRepository, xAbortChannel, rCmdEnv.get() );
+ }
catch ( ucb::CommandFailedException & )
{
// When the extension is already installed we'll get a dialog asking if we want to overwrite. If we then press
@@ -962,18 +971,22 @@ void ExtensionCmdQueue::Thread::_addExtension( ::rtl::Reference< ProgressCmdEnv
//------------------------------------------------------------------------------
void ExtensionCmdQueue::Thread::_removeExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
- const uno::Reference< deployment::XPackageManager > &xPackageManager,
const uno::Reference< deployment::XPackage > &xPackage )
{
- uno::Reference< task::XAbortChannel > xAbortChannel( xPackageManager->createAbortChannel() );
+ uno::Reference< deployment::XExtensionManager > xExtMgr = m_pManager->getExtensionManager();
+ uno::Reference< task::XAbortChannel > xAbortChannel( xExtMgr->createAbortChannel() );
OUString sTitle = searchAndReplaceAll( m_sRemovingPackages, OUSTR("%EXTENSION_NAME"), xPackage->getDisplayName() );
rCmdEnv->progressSection( sTitle, xAbortChannel );
OUString id( dp_misc::getIdentifier( xPackage ) );
try
{
- xPackageManager->removePackage( id, xPackage->getName(), xAbortChannel, rCmdEnv.get() );
+ xExtMgr->removeExtension( id, xPackage->getName(), xPackage->getRepositoryName(), xAbortChannel, rCmdEnv.get() );
}
+ catch ( deployment::DeploymentException & )
+ {}
+ catch ( ucb::CommandFailedException & )
+ {}
catch ( ucb::CommandAbortedException & )
{}
@@ -983,7 +996,8 @@ void ExtensionCmdQueue::Thread::_removeExtension( ::rtl::Reference< ProgressCmdE
}
//------------------------------------------------------------------------------
-void ExtensionCmdQueue::Thread::_checkForUpdates( const std::vector< TUpdateListEntry > &vExtensionList )
+void ExtensionCmdQueue::Thread::_checkForUpdates(
+ const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList )
{
UpdateDialog* pUpdateDialog;
std::vector< UpdateData > vData;
@@ -1042,13 +1056,14 @@ void ExtensionCmdQueue::Thread::_enableExtension( ::rtl::Reference< ProgressCmdE
if ( !xPackage.is() )
return;
- uno::Reference< task::XAbortChannel > xAbortChannel( xPackage->createAbortChannel() );
+ uno::Reference< deployment::XExtensionManager > xExtMgr = m_pManager->getExtensionManager();
+ uno::Reference< task::XAbortChannel > xAbortChannel( xExtMgr->createAbortChannel() );
OUString sTitle = searchAndReplaceAll( m_sEnablingPackages, OUSTR("%EXTENSION_NAME"), xPackage->getDisplayName() );
rCmdEnv->progressSection( sTitle, xAbortChannel );
try
{
- xPackage->registerPackage( xAbortChannel, rCmdEnv.get() );
+ xExtMgr->enableExtension( xPackage, xAbortChannel, rCmdEnv.get() );
if ( m_pDialogHelper )
m_pDialogHelper->updatePackageInfo( xPackage );
}
@@ -1063,13 +1078,36 @@ void ExtensionCmdQueue::Thread::_disableExtension( ::rtl::Reference< ProgressCmd
if ( !xPackage.is() )
return;
- uno::Reference< task::XAbortChannel > xAbortChannel( xPackage->createAbortChannel() );
+ uno::Reference< deployment::XExtensionManager > xExtMgr = m_pManager->getExtensionManager();
+ uno::Reference< task::XAbortChannel > xAbortChannel( xExtMgr->createAbortChannel() );
OUString sTitle = searchAndReplaceAll( m_sDisablingPackages, OUSTR("%EXTENSION_NAME"), xPackage->getDisplayName() );
rCmdEnv->progressSection( sTitle, xAbortChannel );
try
{
- xPackage->revokePackage( xAbortChannel, rCmdEnv.get() );
+ xExtMgr->disableExtension( xPackage, xAbortChannel, rCmdEnv.get() );
+ if ( m_pDialogHelper )
+ m_pDialogHelper->updatePackageInfo( xPackage );
+ }
+ catch ( ::ucb::CommandAbortedException & )
+ {}
+}
+
+//------------------------------------------------------------------------------
+void ExtensionCmdQueue::Thread::_acceptLicense( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
+ const uno::Reference< deployment::XPackage > &xPackage )
+{
+ if ( !xPackage.is() )
+ return;
+
+ uno::Reference< deployment::XExtensionManager > xExtMgr = m_pManager->getExtensionManager();
+ uno::Reference< task::XAbortChannel > xAbortChannel( xExtMgr->createAbortChannel() );
+ OUString sTitle = searchAndReplaceAll( m_sAcceptLicense, OUSTR("%EXTENSION_NAME"), xPackage->getDisplayName() );
+ rCmdEnv->progressSection( sTitle, xAbortChannel );
+
+ try
+ {
+ xExtMgr->checkPrerequisitesAndEnable( xPackage, xAbortChannel, rCmdEnv.get() );
if ( m_pDialogHelper )
m_pDialogHelper->updatePackageInfo( xPackage );
}
@@ -1120,17 +1158,16 @@ ExtensionCmdQueue::~ExtensionCmdQueue() {
stop();
}
-void ExtensionCmdQueue::addExtension( const uno::Reference< deployment::XPackageManager > &rPackageManager,
- const ::rtl::OUString & extensionURL,
+void ExtensionCmdQueue::addExtension( const ::rtl::OUString & extensionURL,
+ const ::rtl::OUString & repository,
const bool bWarnUser )
{
- m_thread->addExtension( rPackageManager, extensionURL, bWarnUser );
+ m_thread->addExtension( extensionURL, repository, bWarnUser );
}
-void ExtensionCmdQueue::removeExtension( const uno::Reference< deployment::XPackageManager > &rPackageManager,
- const uno::Reference< deployment::XPackage > &rPackage )
+void ExtensionCmdQueue::removeExtension( const uno::Reference< deployment::XPackage > &rPackage )
{
- m_thread->removeExtension( rPackageManager, rPackage );
+ m_thread->removeExtension( rPackage );
}
void ExtensionCmdQueue::enableExtension( const uno::Reference< deployment::XPackage > &rPackage,
@@ -1139,11 +1176,21 @@ void ExtensionCmdQueue::enableExtension( const uno::Reference< deployment::XPack
m_thread->enableExtension( rPackage, bEnable );
}
-void ExtensionCmdQueue::checkForUpdates( const std::vector< TUpdateListEntry > &vExtensionList )
+void ExtensionCmdQueue::checkForUpdates( const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList )
{
m_thread->checkForUpdates( vExtensionList );
}
+void ExtensionCmdQueue::acceptLicense( const uno::Reference< deployment::XPackage > &rPackage )
+{
+ m_thread->acceptLicense( rPackage );
+}
+
+void ExtensionCmdQueue::syncRepositories( const uno::Reference< uno::XComponentContext > &xContext )
+{
+ dp_misc::syncRepositories( new ProgressCmdEnv( xContext, NULL, OUSTR("Extension Manager") ) );
+}
+
void ExtensionCmdQueue::stop()
{
m_thread->stop();
diff --git a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.hxx b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.hxx
index f984c71c6c1c..7ac00e2740d4 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.hxx
+++ b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.hxx
@@ -40,7 +40,6 @@
/// @HTML
namespace com { namespace sun { namespace star {
- namespace deployment { class XPackageManager; }
namespace task { class XInteractionRequest; }
namespace uno { class XComponentContext; }
} } }
@@ -78,14 +77,16 @@ public:
/**
*/
- void addExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &rPackageManager,
- const ::rtl::OUString &rExtensionURL,
+ void addExtension( const ::rtl::OUString &rExtensionURL,
+ const ::rtl::OUString &rRepository,
const bool bWarnUser );
- void removeExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &rPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &rPackage );
+ void removeExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &rPackage );
void enableExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &rPackage,
const bool bEnable );
- void checkForUpdates( const std::vector< TUpdateListEntry > &vList );
+ void checkForUpdates(const std::vector< ::com::sun::star::uno::Reference<
+ ::com::sun::star::deployment::XPackage > > &vList );
+ void acceptLicense( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &rPackage );
+ static void syncRepositories( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > & xContext );
/**
This call does not block. It signals the internal thread
that it should install the remaining extensions and then terminate.
diff --git a/desktop/source/deployment/gui/dp_gui_extlistbox.cxx b/desktop/source/deployment/gui/dp_gui_extlistbox.cxx
index bcaa3252ea8f..24b47aa223e3 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_extlistbox.cxx
+++ b/desktop/source/deployment/gui/dp_gui_extlistbox.cxx
@@ -44,6 +44,10 @@
#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
+#define USER_PACKAGE_MANAGER OUSTR("user")
+#define SHARED_PACKAGE_MANAGER OUSTR("shared")
+#define BUNDLED_PACKAGE_MANAGER OUSTR("bundled")
+
using namespace ::com::sun::star;
namespace dp_gui {
@@ -52,19 +56,20 @@ namespace dp_gui {
// struct Entry_Impl
//------------------------------------------------------------------------------
Entry_Impl::Entry_Impl( const uno::Reference< deployment::XPackage > &xPackage,
- const uno::Reference< deployment::XPackageManager > &xPackageManager,
- PackageState eState ) :
+ const PackageState eState, const bool bReadOnly ) :
m_bActive( false ),
- m_bLocked( false ),
+ m_bLocked( bReadOnly ),
m_bHasOptions( false ),
+ m_bUser( false ),
m_bShared( false ),
m_bNew( false ),
m_bChecked( false ),
m_bMissingDeps( false ),
+ m_bHasButtons( false ),
+ m_bMissingLic( false ),
m_eState( eState ),
m_pPublisher( NULL ),
- m_xPackage( xPackage ),
- m_xPackageManager( xPackageManager )
+ m_xPackage( xPackage )
{
m_sTitle = xPackage->getDisplayName();
m_sVersion = xPackage->getVersion();
@@ -85,8 +90,6 @@ Entry_Impl::Entry_Impl( const uno::Reference< deployment::XPackage > &xPackage,
else
m_aIconHC = m_aIcon;
- m_bLocked = m_xPackageManager->isReadOnly();
-
if ( eState == AMBIGUOUS )
m_sErrorText = DialogHelper::getResourceString( RID_STR_ERROR_UNKNOWN_STATUS );
else if ( eState == NOT_REGISTERED )
@@ -106,14 +109,11 @@ StringCompare Entry_Impl::CompareTo( const CollatorWrapper *pCollator, const TEn
eCompare = m_sVersion.CompareTo( pEntry->m_sVersion );
if ( eCompare == COMPARE_EQUAL )
{
- if ( m_xPackageManager != pEntry->m_xPackageManager )
- {
- sal_Int32 nCompare = m_xPackageManager->getContext().compareTo( pEntry->m_xPackageManager->getContext() );
- if ( nCompare < 0 )
- eCompare = COMPARE_LESS;
- else if ( nCompare > 0 )
- eCompare = COMPARE_GREATER;
- }
+ sal_Int32 nCompare = m_xPackage->getRepositoryName().compareTo( pEntry->m_xPackage->getRepositoryName() );
+ if ( nCompare < 0 )
+ eCompare = COMPARE_LESS;
+ else if ( nCompare > 0 )
+ eCompare = COMPARE_GREATER;
}
}
return eCompare;
@@ -373,6 +373,8 @@ void ExtensionBox_Impl::CalcActiveHeight( const long nPos )
aSize.Height() = 10000;
rtl::OUString aText( m_vEntries[ nPos ]->m_sErrorText );
+ if ( aText.getLength() )
+ aText += OUSTR("\n");
aText += m_vEntries[ nPos ]->m_sDescription;
Rectangle aRect = GetTextRect( Rectangle( Point(), aSize ), aText,
@@ -382,7 +384,10 @@ void ExtensionBox_Impl::CalcActiveHeight( const long nPos )
if ( aTextHeight < m_nStdHeight )
aTextHeight = m_nStdHeight;
- m_nActiveHeight = aTextHeight + m_nExtraHeight;
+ if ( m_vEntries[ nPos ]->m_bHasButtons )
+ m_nActiveHeight = aTextHeight + m_nExtraHeight;
+ else
+ m_nActiveHeight = aTextHeight + 2;
}
//------------------------------------------------------------------------------
@@ -599,7 +604,12 @@ void ExtensionBox_Impl::DrawRow( const Rectangle& rRect, const TEntry_Impl pEntr
aPos.Y() += aTextHeight;
if ( pEntry->m_bActive )
{
- DrawText( Rectangle( aPos.X(), aPos.Y(), rRect.Right(), rRect.Bottom() - m_nExtraHeight ),
+ long nExtraHeight = 0;
+
+ if ( pEntry->m_bHasButtons )
+ nExtraHeight = m_nExtraHeight;
+
+ DrawText( Rectangle( aPos.X(), aPos.Y(), rRect.Right(), rRect.Bottom() - nExtraHeight ),
sDescription, TEXT_DRAW_MULTILINE | TEXT_DRAW_WORDBREAK );
}
else
@@ -619,7 +629,7 @@ void ExtensionBox_Impl::DrawRow( const Rectangle& rRect, const TEntry_Impl pEntr
}
// Draw status icons
- if ( pEntry->m_bShared )
+ if ( !pEntry->m_bUser )
{
aPos = rRect.TopRight() + Point( -(RIGHT_ICON_OFFSET + SMALL_ICON_SIZE), TOP_OFFSET );
if ( pEntry->m_bLocked )
@@ -627,7 +637,7 @@ void ExtensionBox_Impl::DrawRow( const Rectangle& rRect, const TEntry_Impl pEntr
else
DrawImage( aPos, Size( SMALL_ICON_SIZE, SMALL_ICON_SIZE ), isHCMode() ? m_aSharedImageHC : m_aSharedImage );
}
- if ( ( pEntry->m_eState == AMBIGUOUS ) || pEntry->m_bMissingDeps )
+ if ( ( pEntry->m_eState == AMBIGUOUS ) || pEntry->m_bMissingDeps || pEntry->m_bMissingLic )
{
aPos = rRect.TopRight() + Point( -(RIGHT_ICON_OFFSET + SPACE_BETWEEN + 2*SMALL_ICON_SIZE), TOP_OFFSET );
DrawImage( aPos, Size( SMALL_ICON_SIZE, SMALL_ICON_SIZE ), isHCMode() ? m_aWarningImageHC : m_aWarningImage );
@@ -946,29 +956,24 @@ bool ExtensionBox_Impl::FindEntryPos( const TEntry_Impl pEntry, const long nStar
//------------------------------------------------------------------------------
long ExtensionBox_Impl::addEntry( const uno::Reference< deployment::XPackage > &xPackage,
- const uno::Reference< deployment::XPackageManager > &xPackageManager )
+ bool bLicenseMissing )
{
- long nPos = 0;
+ long nPos = 0;
PackageState eState = m_pManager->getPackageState( xPackage );
+ bool bLocked = m_pManager->isReadOnly( xPackage );
- TEntry_Impl pEntry( new Entry_Impl( xPackage, xPackageManager, eState ) );
+ TEntry_Impl pEntry( new Entry_Impl( xPackage, eState, bLocked ) );
xPackage->addEventListener( uno::Reference< lang::XEventListener > ( m_xRemoveListener, uno::UNO_QUERY ) );
::osl::ClearableMutexGuard guard(m_entriesMutex);
if ( m_vEntries.empty() )
{
- pEntry->m_bHasOptions = m_pManager->supportsOptions( xPackage );
- pEntry->m_bShared = ( m_pManager->getSharedPkgMgr() == xPackageManager );
- pEntry->m_bNew = m_bInCheckMode;
m_vEntries.push_back( pEntry );
}
else
{
if ( !FindEntryPos( pEntry, 0, m_vEntries.size()-1, nPos ) )
{
- pEntry->m_bHasOptions = m_pManager->supportsOptions( xPackage );
- pEntry->m_bShared = ( m_pManager->getSharedPkgMgr() == xPackageManager );
- pEntry->m_bNew = m_bInCheckMode;
m_vEntries.insert( m_vEntries.begin()+nPos, pEntry );
}
else if ( !m_bInCheckMode )
@@ -976,6 +981,16 @@ long ExtensionBox_Impl::addEntry( const uno::Reference< deployment::XPackage > &
OSL_ENSURE( 0, "ExtensionBox_Impl::addEntry(): Will not add duplicate entries" );
}
}
+
+ pEntry->m_bHasOptions = m_pManager->supportsOptions( xPackage );
+ pEntry->m_bUser = xPackage->getRepositoryName().equals( USER_PACKAGE_MANAGER );
+ pEntry->m_bShared = xPackage->getRepositoryName().equals( SHARED_PACKAGE_MANAGER );
+ pEntry->m_bNew = m_bInCheckMode;
+ pEntry->m_bMissingLic = bLicenseMissing;
+
+ if ( bLicenseMissing )
+ pEntry->m_sErrorText = DialogHelper::getResourceString( RID_STR_ERROR_MISSING_LICENSE );
+
//access to m_nActive must be guarded
if ( !m_bInCheckMode && m_bHasActive && ( m_nActive >= nPos ) )
m_nActive += 1;
@@ -1005,9 +1020,12 @@ void ExtensionBox_Impl::updateEntry( const uno::Reference< deployment::XPackage
(*iIndex)->m_sVersion = xPackage->getVersion();
(*iIndex)->m_sDescription = xPackage->getDescription();
+ if ( eState == REGISTERED )
+ (*iIndex)->m_bMissingLic = false;
+
if ( eState == AMBIGUOUS )
(*iIndex)->m_sErrorText = DialogHelper::getResourceString( RID_STR_ERROR_UNKNOWN_STATUS );
- else
+ else if ( ! (*iIndex)->m_bMissingLic )
(*iIndex)->m_sErrorText = String();
if ( IsReallyVisible() )
@@ -1091,16 +1109,13 @@ void ExtensionBox_Impl::RemoveUnlocked()
}
//------------------------------------------------------------------------------
-void ExtensionBox_Impl::prepareChecking( const uno::Reference< deployment::XPackageManager > &xPackageMgr )
+void ExtensionBox_Impl::prepareChecking()
{
m_bInCheckMode = true;
typedef std::vector< TEntry_Impl >::iterator ITER;
for ( ITER iIndex = m_vEntries.begin(); iIndex < m_vEntries.end(); ++iIndex )
{
- if ( (*iIndex)->m_xPackageManager == xPackageMgr )
- (*iIndex)->m_bChecked = false;
- else
- (*iIndex)->m_bChecked = true;
+ (*iIndex)->m_bChecked = false;
(*iIndex)->m_bNew = false;
}
}
@@ -1119,17 +1134,30 @@ void ExtensionBox_Impl::checkEntries()
{
if ( (*iIndex)->m_bChecked == false )
{
+ (*iIndex)->m_bChecked = true;
bNeedsUpdate = true;
nPos = iIndex-m_vEntries.begin();
if ( (*iIndex)->m_bNew )
- {
+ { // add entry to list and correct active pos
if ( nNewPos == - 1)
nNewPos = nPos;
if ( nPos <= m_nActive )
m_nActive += 1;
+ iIndex++;
+ }
+ else
+ { // remove entry from list
+ if ( nPos < m_nActive )
+ m_nActive -= 1;
+ else if ( ( nPos == m_nActive ) && ( nPos == (long) m_vEntries.size() - 1 ) )
+ m_nActive -= 1;
+ m_vRemovedEntries.push_back( *iIndex );
+ m_vEntries.erase( iIndex );
+ iIndex = m_vEntries.begin() + nPos;
}
}
- iIndex++;
+ else
+ iIndex++;
}
guard.clear();
diff --git a/desktop/source/deployment/gui/dp_gui_extlistbox.hxx b/desktop/source/deployment/gui/dp_gui_extlistbox.hxx
index 16ef974deff9..762f50296690 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_extlistbox.hxx
+++ b/desktop/source/deployment/gui/dp_gui_extlistbox.hxx
@@ -38,7 +38,6 @@
#include "com/sun/star/lang/Locale.hpp"
#include "com/sun/star/lang/XEventListener.hpp"
#include "com/sun/star/deployment/XPackage.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
#include <boost/shared_ptr.hpp>
@@ -65,13 +64,16 @@ typedef ::boost::shared_ptr< Entry_Impl > TEntry_Impl;
struct Entry_Impl
{
- bool m_bActive;
- bool m_bLocked;
- bool m_bHasOptions;
- bool m_bShared;
- bool m_bNew;
- bool m_bChecked;
- bool m_bMissingDeps;
+ bool m_bActive :1;
+ bool m_bLocked :1;
+ bool m_bHasOptions :1;
+ bool m_bUser :1;
+ bool m_bShared :1;
+ bool m_bNew :1;
+ bool m_bChecked :1;
+ bool m_bMissingDeps :1;
+ bool m_bHasButtons :1;
+ bool m_bMissingLic :1;
PackageState m_eState;
String m_sTitle;
String m_sVersion;
@@ -84,11 +86,9 @@ struct Entry_Impl
svt::FixedHyperlink *m_pPublisher;
::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> m_xPackage;
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager> m_xPackageManager;
Entry_Impl( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- PackageState eState );
+ const PackageState eState, const bool bReadOnly );
~Entry_Impl();
StringCompare CompareTo( const CollatorWrapper *pCollator, const TEntry_Impl pEntry ) const;
@@ -207,11 +207,11 @@ public:
//-----------------
virtual void selectEntry( const long nPos );
long addEntry( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
+ bool bLicenseMissing = false );
void updateEntry( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
void removeEntry( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
- void prepareChecking( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageMgr );
+ void prepareChecking();
void checkEntries();
TheExtensionManager* getExtensionManager() const { return m_pManager; }
diff --git a/desktop/source/deployment/gui/dp_gui_service.cxx b/desktop/source/deployment/gui/dp_gui_service.cxx
index 578ff04a6c88..29bedf1b229f 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_service.cxx
+++ b/desktop/source/deployment/gui/dp_gui_service.cxx
@@ -46,6 +46,7 @@
#include "boost/bind.hpp"
#include "license_dialog.hxx"
#include "dp_gui_dialog2.hxx"
+#include "dp_gui_extensioncmdqueue.hxx"
using namespace ::dp_misc;
using namespace ::com::sun::star;
@@ -264,6 +265,7 @@ void ServiceImpl::startExecuteModal(
+ ::utl::ConfigManager::GetDirectConfigProperty(
::utl::ConfigManager::PRODUCTVERSION).get<OUString>();
app->SetDisplayName(sTitle);
+ ExtensionCmdQueue::syncRepositories( m_xComponentContext );
}
}
else
diff --git a/desktop/source/deployment/gui/dp_gui_theextmgr.cxx b/desktop/source/deployment/gui/dp_gui_theextmgr.cxx
index 796918202a52..d0347c7cbf4e 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_theextmgr.cxx
+++ b/desktop/source/deployment/gui/dp_gui_theextmgr.cxx
@@ -36,17 +36,20 @@
#include "toolkit/helper/vclunohelper.hxx"
#include "com/sun/star/beans/XPropertySet.hpp"
-#include "com/sun/star/deployment/XPackageManagerFactory.hpp"
-#include "com/sun/star/deployment/thePackageManagerFactory.hpp"
#include "dp_gui_dialog2.hxx"
#include "dp_gui_extensioncmdqueue.hxx"
#include "dp_gui_theextmgr.hxx"
#include "dp_gui_theextmgr.hxx"
#include "dp_identifier.hxx"
+#include "dp_update.hxx"
#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
+#define USER_PACKAGE_MANAGER OUSTR("user")
+#define SHARED_PACKAGE_MANAGER OUSTR("shared")
+#define BUNDLED_PACKAGE_MANAGER OUSTR("bundled")
+
using namespace ::com::sun::star;
using ::rtl::OUString;
@@ -65,16 +68,11 @@ TheExtensionManager::TheExtensionManager( Window *pParent,
m_xContext( xContext ),
m_pParent( pParent ),
m_pExtMgrDialog( NULL ),
- m_pUpdReqDialog( NULL )
+ m_pUpdReqDialog( NULL ),
+ m_pExecuteCmdQueue( NULL )
{
- m_sPackageManagers.realloc(2);
- m_sPackageManagers[0] = deployment::thePackageManagerFactory::get( m_xContext )->getPackageManager( OUSTR("user") );
- m_sPackageManagers[1] = deployment::thePackageManagerFactory::get( m_xContext )->getPackageManager( OUSTR("shared") );;
-
- for ( sal_Int32 i = 0; i < m_sPackageManagers.getLength(); ++i )
- {
- m_sPackageManagers[i]->addModifyListener( this );
- }
+ m_xExtensionManager = deployment::ExtensionManager::get( xContext );
+ m_xExtensionManager->addModifyListener( this );
uno::Reference< lang::XMultiServiceFactory > xConfig(
xContext->getServiceManager()->createInstanceWithContext(
@@ -121,6 +119,8 @@ TheExtensionManager::~TheExtensionManager()
delete m_pUpdReqDialog;
if ( m_pExtMgrDialog )
delete m_pExtMgrDialog;
+ if ( m_pExecuteCmdQueue )
+ delete m_pExecuteCmdQueue;
}
//------------------------------------------------------------------------------
@@ -133,14 +133,16 @@ void TheExtensionManager::createDialog( const bool bCreateUpdDlg )
if ( !m_pUpdReqDialog )
{
m_pUpdReqDialog = new UpdateRequiredDialog( NULL, this );
- m_pExecuteCmdQueue.reset( new ExtensionCmdQueue( (DialogHelper*) m_pUpdReqDialog, this, m_xContext ) );
+ delete m_pExecuteCmdQueue;
+ m_pExecuteCmdQueue = new ExtensionCmdQueue( (DialogHelper*) m_pUpdReqDialog, this, m_xContext );
createPackageList();
}
}
else if ( !m_pExtMgrDialog )
{
m_pExtMgrDialog = new ExtMgrDialog( m_pParent, this );
- m_pExecuteCmdQueue.reset( new ExtensionCmdQueue( (DialogHelper*) m_pExtMgrDialog, this, m_xContext ) );
+ delete m_pExecuteCmdQueue;
+ m_pExecuteCmdQueue = new ExtensionCmdQueue( (DialogHelper*) m_pExtMgrDialog, this, m_xContext );
m_pExtMgrDialog->setGetExtensionsURL( m_sGetExtensionsURL );
createPackageList();
}
@@ -205,27 +207,29 @@ bool TheExtensionManager::isVisible()
//------------------------------------------------------------------------------
bool TheExtensionManager::checkUpdates( bool /* bShowUpdateOnly */, bool /*bParentVisible*/ )
{
- std::vector< TUpdateListEntry > vEntries;
+ std::vector< uno::Reference< deployment::XPackage > > vEntries;
+ uno::Sequence< uno::Sequence< uno::Reference< deployment::XPackage > > > xAllPackages;
- for ( sal_Int32 i = 0; i < m_sPackageManagers.getLength(); ++i )
+ try {
+ xAllPackages = m_xExtensionManager->getAllExtensions( uno::Reference< task::XAbortChannel >(),
+ uno::Reference< ucb::XCommandEnvironment >() );
+ } catch ( deployment::DeploymentException & ) {
+ return false;
+ } catch ( ucb::CommandFailedException & ) {
+ return false;
+ } catch ( ucb::CommandAbortedException & ) {
+ return false;
+ } catch ( lang::IllegalArgumentException & e ) {
+ throw uno::RuntimeException( e.Message, e.Context );
+ }
+
+ for ( sal_Int32 i = 0; i < xAllPackages.getLength(); ++i )
{
- uno::Sequence< uno::Reference< deployment::XPackage > > xPackages;
- try {
- xPackages = m_sPackageManagers[i]->getDeployedPackages( uno::Reference< task::XAbortChannel >(),
- uno::Reference< ucb::XCommandEnvironment >() );
- for ( sal_Int32 k = 0; k < xPackages.getLength(); ++k )
- {
- TUpdateListEntry pEntry( new UpdateListEntry( xPackages[k], m_sPackageManagers[i] ) );
- vEntries.push_back( pEntry );
- }
- } catch ( deployment::DeploymentException & ) {
- continue;
- } catch ( ucb::CommandFailedException & ) {
- continue;
- } catch ( ucb::CommandAbortedException & ) {
- return true;
- } catch ( lang::IllegalArgumentException & e ) {
- throw uno::RuntimeException( e.Message, e.Context );
+ uno::Reference< deployment::XPackage > xPackage = dp_misc::getExtensionWithHighestVersion(xAllPackages[i]);
+ OSL_ASSERT(xPackage.is());
+ if ( xPackage.is() )
+ {
+ vEntries.push_back( xPackage );
}
}
@@ -234,32 +238,6 @@ bool TheExtensionManager::checkUpdates( bool /* bShowUpdateOnly */, bool /*bPare
}
//------------------------------------------------------------------------------
-bool TheExtensionManager::enablePackage( const uno::Reference< deployment::XPackage > &xPackage,
- bool bEnable )
-{
- m_pExecuteCmdQueue->enableExtension( xPackage, bEnable );
-
- return true;
-}
-
-//------------------------------------------------------------------------------
-bool TheExtensionManager::removePackage( const uno::Reference< deployment::XPackageManager > &xPackageManager,
- const uno::Reference< deployment::XPackage > &xPackage )
-{
- m_pExecuteCmdQueue->removeExtension( xPackageManager, xPackage );
-
- return true;
-}
-
-//------------------------------------------------------------------------------
-bool TheExtensionManager::updatePackages( const std::vector< TUpdateListEntry > &vList )
-{
- m_pExecuteCmdQueue->checkForUpdates( vList );
-
- return true;
-}
-
-//------------------------------------------------------------------------------
bool TheExtensionManager::installPackage( const OUString &rPackageURL, bool bWarnUser )
{
if ( rPackageURL.getLength() == 0 )
@@ -267,22 +245,20 @@ bool TheExtensionManager::installPackage( const OUString &rPackageURL, bool bWar
createDialog( false );
- uno::Reference< deployment::XPackageManager > xUserPkgMgr = getUserPkgMgr();
- uno::Reference< deployment::XPackageManager > xSharedPkgMgr = getSharedPkgMgr();
-
bool bInstall = true;
bool bInstallForAll = false;
- if ( !bWarnUser && ! xSharedPkgMgr->isReadOnly() )
+ // DV! missing function is read only repository from extension manager
+ if ( !bWarnUser && ! m_xExtensionManager->isReadOnlyRepository( SHARED_PACKAGE_MANAGER ) )
bInstall = getDialogHelper()->installForAllUsers( bInstallForAll );
if ( !bInstall )
return false;
if ( bInstallForAll )
- m_pExecuteCmdQueue->addExtension( xSharedPkgMgr, rPackageURL, false );
+ m_pExecuteCmdQueue->addExtension( rPackageURL, SHARED_PACKAGE_MANAGER, false );
else
- m_pExecuteCmdQueue->addExtension( xUserPkgMgr, rPackageURL, bWarnUser );
+ m_pExecuteCmdQueue->addExtension( rPackageURL, USER_PACKAGE_MANAGER, bWarnUser );
return true;
}
@@ -312,40 +288,52 @@ void TheExtensionManager::terminateDialog()
}
//------------------------------------------------------------------------------
-bool TheExtensionManager::createPackageList( const uno::Reference< deployment::XPackageManager > &xPackageManager )
+void TheExtensionManager::createPackageList()
{
- uno::Sequence< uno::Reference< deployment::XPackage > > packages;
+ uno::Sequence< uno::Sequence< uno::Reference< deployment::XPackage > > > xAllPackages;
try {
- packages = xPackageManager->getDeployedPackages( uno::Reference< task::XAbortChannel >(),
- uno::Reference< ucb::XCommandEnvironment >() );
+ xAllPackages = m_xExtensionManager->getAllExtensions( uno::Reference< task::XAbortChannel >(),
+ uno::Reference< ucb::XCommandEnvironment >() );
} catch ( deployment::DeploymentException & ) {
- //handleGeneralError(e.Cause);
- return true;
+ return;
} catch ( ucb::CommandFailedException & ) {
- //handleGeneralError(e.Reason);
- return true;
+ return;
} catch ( ucb::CommandAbortedException & ) {
- return false;
+ return;
} catch ( lang::IllegalArgumentException & e ) {
throw uno::RuntimeException( e.Message, e.Context );
}
- for ( sal_Int32 j = 0; j < packages.getLength(); ++j )
+ for ( sal_Int32 i = 0; i < xAllPackages.getLength(); ++i )
{
- getDialogHelper()->addPackageToList( packages[j], xPackageManager );
- }
+ uno::Sequence< uno::Reference< deployment::XPackage > > xPackageList = xAllPackages[i];
- return true;
-}
+ for ( sal_Int32 j = 0; j < xPackageList.getLength(); ++j )
+ {
+ uno::Reference< deployment::XPackage > xPackage = xPackageList[j];
+ if ( xPackage.is() )
+ {
+ PackageState eState = getPackageState( xPackage );
+ getDialogHelper()->addPackageToList( xPackage );
+ // When the package is enabled, we can stop here, otherwise we have to look for
+ // another version of this package
+ if ( ( eState == REGISTERED ) || ( eState == NOT_AVAILABLE ) )
+ break;
+ }
+ }
+ }
-//------------------------------------------------------------------------------
-void TheExtensionManager::createPackageList()
-{
- for ( sal_Int32 i = 0; i < m_sPackageManagers.getLength(); ++i )
+ uno::Sequence< uno::Reference< deployment::XPackage > > xNoLicPackages;
+ xNoLicPackages = m_xExtensionManager->getExtensionsWithUnacceptedLicenses( SHARED_PACKAGE_MANAGER,
+ uno::Reference< ucb::XCommandEnvironment >() );
+ for ( sal_Int32 i = 0; i < xNoLicPackages.getLength(); ++i )
{
- if ( ! createPackageList( m_sPackageManagers[i] ) )
- break;
+ uno::Reference< deployment::XPackage > xPackage = xNoLicPackages[i];
+ if ( xPackage.is() )
+ {
+ getDialogHelper()->addPackageToList( xPackage, true );
+ }
}
}
@@ -378,6 +366,17 @@ PackageState TheExtensionManager::getPackageState( const uno::Reference< deploym
}
//------------------------------------------------------------------------------
+bool TheExtensionManager::isReadOnly( const uno::Reference< deployment::XPackage > &xPackage ) const
+{
+ if ( m_xExtensionManager.is() && xPackage.is() )
+ {
+ return m_xExtensionManager->isReadOnlyRepository( xPackage->getRepositoryName() );
+ }
+ else
+ return true;
+}
+
+//------------------------------------------------------------------------------
// The function investigates if the extension supports options.
bool TheExtensionManager::supportsOptions( const uno::Reference< deployment::XPackage > &xPackage ) const
{
@@ -488,16 +487,12 @@ void TheExtensionManager::notifyTermination( ::lang::EventObject const & rEvt )
//------------------------------------------------------------------------------
// XModifyListener
-void TheExtensionManager::modified( ::lang::EventObject const & rEvt )
+void TheExtensionManager::modified( ::lang::EventObject const & /*rEvt*/ )
throw ( uno::RuntimeException )
{
- uno::Reference< deployment::XPackageManager > xPackageManager( rEvt.Source, uno::UNO_QUERY );
- if ( xPackageManager.is() )
- {
- getDialogHelper()->prepareChecking( xPackageManager );
- createPackageList( xPackageManager );
- getDialogHelper()->checkEntries();
- }
+ getDialogHelper()->prepareChecking();
+ createPackageList();
+ getDialogHelper()->checkEntries();
}
//------------------------------------------------------------------------------
diff --git a/desktop/source/deployment/gui/dp_gui_theextmgr.hxx b/desktop/source/deployment/gui/dp_gui_theextmgr.hxx
index 1cdd1851d59e..094e25e249b7 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_theextmgr.hxx
+++ b/desktop/source/deployment/gui/dp_gui_theextmgr.hxx
@@ -33,7 +33,8 @@
#include "cppuhelper/implbase2.hxx"
#include "com/sun/star/container/XNameAccess.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
+#include "com/sun/star/deployment/XExtensionManager.hpp"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
#include "com/sun/star/frame/XDesktop.hpp"
#include "com/sun/star/frame/XTerminateListener.hpp"
#include "com/sun/star/uno/XComponentContext.hpp"
@@ -57,21 +58,17 @@ class TheExtensionManager :
private:
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext;
::com::sun::star::uno::Reference< ::com::sun::star::frame::XDesktop > m_xDesktop;
- ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager> > m_sPackageManagers;
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > m_xExtensionManager;
::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > m_xNameAccessNodes;
- ::std::auto_ptr< ExtensionCmdQueue > m_pExecuteCmdQueue;
-
Window *m_pParent;
ExtMgrDialog *m_pExtMgrDialog;
UpdateRequiredDialog *m_pUpdReqDialog;
+ ExtensionCmdQueue *m_pExecuteCmdQueue;
::rtl::OUString m_sGetExtensionsURL;
- // liste der packages ( xpackage?, mit parent manager, ... )
-
void createPackageList();
- bool createPackageList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
public:
static ::rtl::Reference<TheExtensionManager> s_ExtMgr;
@@ -85,6 +82,7 @@ public:
Dialog* getDialog() { return m_pExtMgrDialog ? (Dialog*) m_pExtMgrDialog : (Dialog*) m_pUpdReqDialog; }
DialogHelper* getDialogHelper() { return m_pExtMgrDialog ? (DialogHelper*) m_pExtMgrDialog : (DialogHelper*) m_pUpdReqDialog; }
+ ExtensionCmdQueue* getCmdQueue() const { return m_pExecuteCmdQueue; }
void SetText( const ::rtl::OUString &rTitle );
void Show();
@@ -94,12 +92,6 @@ public:
//-----------------
bool checkUpdates( bool showUpdateOnly, bool parentVisible );
- bool updatePackages( const std::vector< TUpdateListEntry > &vList );
-
- bool enablePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
- bool bEnable );
- bool removePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
bool installPackage( const ::rtl::OUString &rPackageURL, bool bWarnUser = false );
bool queryTermination();
@@ -109,8 +101,8 @@ public:
bool supportsOptions( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) const;
PackageState getPackageState( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) const;
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > getContext() const { return m_xContext; }
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > getUserPkgMgr() const { return m_sPackageManagers[0]; }
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > getSharedPkgMgr() const { return m_sPackageManagers[1]; }
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > getExtensionManager() const { return m_xExtensionManager; }
+ bool isReadOnly( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) const;
//-----------------
static ::rtl::Reference<TheExtensionManager> get(
diff --git a/desktop/source/deployment/gui/dp_gui_updatedata.hxx b/desktop/source/deployment/gui/dp_gui_updatedata.hxx
index dda6126f70d0..76eb8af31e8e 100644
--- a/desktop/source/deployment/gui/dp_gui_updatedata.hxx
+++ b/desktop/source/deployment/gui/dp_gui_updatedata.hxx
@@ -35,7 +35,6 @@
namespace com { namespace sun { namespace star { namespace deployment {
- class XPackageManager;
class XPackage;
}}}}
namespace com { namespace sun { namespace star { namespace xml { namespace dom {
@@ -45,31 +44,42 @@ namespace com { namespace sun { namespace star { namespace xml { namespace dom {
namespace dp_gui {
-struct UpdateListEntry
+struct UpdateData
{
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> m_xPackage;
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager> m_xPackageManager;
-
- UpdateListEntry( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
- ~UpdateListEntry();
-};
-
-typedef ::boost::shared_ptr< UpdateListEntry > TUpdateListEntry;
+ UpdateData( ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > const & aExt):
+ bIsShared(false), aInstalledPackage(aExt){};
+ //When entries added to the listbox then there can be one for the user update and one
+ //for the shared update. However, both list entries will contain the same UpdateData.
+ //isShared is used to indicate which one is used for the shared entry.
+ bool bIsShared;
-struct UpdateData
-{
+ //The currently installed extension which is going to be updated. If the extension exist in
+ //multiple repositories then it is the one with the highest version.
::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > aInstalledPackage;
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > aPackageManager;
- // The content of the update information
+ //The version of the update
+ ::rtl::OUString updateVersion;
+
+ //For online update
+ // ======================
+ // The content of the update information.
+ //Only if aUpdateInfo is set then there is an online update available with a better version
+ //than any of the currently installed extensions with the same identifier.
::com::sun::star::uno::Reference< ::com::sun::star::xml::dom::XNode > aUpdateInfo;
//The URL of the locally downloaded extension. It will only be set if there were no errors
//during the download
::rtl::OUString sLocalURL;
//The URL of the website wher the download can be obtained.
::rtl::OUString sWebsiteURL;
+
+ //For local update
+ //=====================
+ //The locale extension which is used as update for the user or shared repository.
+ //If set then the data for the online update (aUpdateInfo, sLocalURL, sWebsiteURL)
+ //are to be ignored.
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage >
+ aUpdateSource;
};
}
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
index 61479f799e6f..b27cd8da81fe 100644
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
@@ -54,7 +54,8 @@
#include "com/sun/star/deployment/DeploymentException.hpp"
#include "com/sun/star/deployment/UpdateInformationProvider.hpp"
#include "com/sun/star/deployment/XPackage.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
+#include "com/sun/star/deployment/XExtensionManager.hpp"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
#include "com/sun/star/deployment/XUpdateInformationProvider.hpp"
#include "com/sun/star/frame/XDesktop.hpp"
#include "com/sun/star/frame/XDispatch.hpp"
@@ -111,6 +112,7 @@
#include "dp_identifier.hxx"
#include "dp_version.hxx"
#include "dp_misc.h"
+#include "dp_update.hxx"
#include "dp_gui.h"
#include "dp_gui.hrc"
@@ -150,7 +152,6 @@ rtl::OUString confineToParagraph(rtl::OUString const & text) {
struct UpdateDialog::DisabledUpdate {
rtl::OUString name;
css::uno::Sequence< rtl::OUString > unsatisfiedDependencies;
- bool permission;
// We also want to show release notes and publisher for disabled updates
::com::sun::star::uno::Reference< ::com::sun::star::xml::dom::XNode > aUpdateInfo;
};
@@ -229,7 +230,7 @@ public:
Thread(
css::uno::Reference< css::uno::XComponentContext > const & context,
UpdateDialog & dialog,
- const std::vector< TUpdateListEntry > &vExtensionList);
+ const std::vector< css::uno::Reference< css::deployment::XPackage > > & vExtensionList);
void stop();
@@ -240,18 +241,21 @@ private:
struct Entry {
explicit Entry(
css::uno::Reference< css::deployment::XPackage > const & thePackage,
- css::uno::Reference< css::deployment::XPackageManager > const &
- thePackageManager,
rtl::OUString const & theVersion);
css::uno::Reference< css::deployment::XPackage > package;
- css::uno::Reference< css::deployment::XPackageManager > packageManager;
rtl::OUString version;
+ //Indicates that the extension provides its own update URLs.
+ //If this is true, then we must not use the default update
+ //URL to find the update information.
+ bool bProvidesOwnUpdate;
css::uno::Reference< css::xml::dom::XNode > info;
+ UpdateDialog::DisabledUpdate disableUpdate;
+ dp_gui::UpdateData updateData;
};
- // A multimap in case an extension is installed in both "user" and "shared":
- typedef std::multimap< rtl::OUString, Entry > Map;
+ // A multimap in case an extension is installed in "user", "shared" or "bundled"
+ typedef std::map< rtl::OUString, Entry > Map;
virtual ~Thread();
@@ -269,21 +273,25 @@ private:
css::uno::Sequence< rtl::OUString > const & urls,
rtl::OUString const & identifier) const;
- void handle(
+ void getOwnUpdateInformation(
css::uno::Reference< css::deployment::XPackage > const & package,
- css::uno::Reference< css::deployment::XPackageManager > const &
- packageManager,
Map * map);
+ ::rtl::OUString getUpdateDisplayString(
+ dp_gui::UpdateData const & data, ::rtl::OUString const & version = ::rtl::OUString()) const;
+
+ void prepareUpdateData(
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::dom::XNode > const & updateInfo,
+ UpdateDialog::DisabledUpdate & out_du,
+ dp_gui::UpdateData & out_data) const;
+
bool update(
- css::uno::Reference< css::deployment::XPackage > const & package,
- css::uno::Reference< css::deployment::XPackageManager > const &
- packageManager,
- css::uno::Reference< css::xml::dom::XNode > const & updateInfo) const;
+ UpdateDialog::DisabledUpdate const & du,
+ dp_gui::UpdateData const & data) const;
css::uno::Reference< css::uno::XComponentContext > m_context;
UpdateDialog & m_dialog;
- std::vector< dp_gui::TUpdateListEntry > m_vExtensionList;
+ std::vector< css::uno::Reference< css::deployment::XPackage > > m_vExtensionList;
css::uno::Reference< css::deployment::XUpdateInformationProvider > m_updateInformation;
css::uno::Reference< css::task::XInteractionHandler > m_xInteractionHdl;
@@ -295,7 +303,7 @@ private:
UpdateDialog::Thread::Thread(
css::uno::Reference< css::uno::XComponentContext > const & context,
UpdateDialog & dialog,
- const std::vector< dp_gui::TUpdateListEntry > &vExtensionList):
+ const std::vector< css::uno::Reference< css::deployment::XPackage > > &vExtensionList):
m_context(context),
m_dialog(dialog),
m_vExtensionList(vExtensionList),
@@ -333,13 +341,14 @@ void UpdateDialog::Thread::stop() {
UpdateDialog::Thread::Entry::Entry(
css::uno::Reference< css::deployment::XPackage > const & thePackage,
- css::uno::Reference< css::deployment::XPackageManager > const &
- thePackageManager,
rtl::OUString const & theVersion):
+
package(thePackage),
- packageManager(thePackageManager),
- version(theVersion)
-{}
+ version(theVersion),
+ bProvidesOwnUpdate(false),
+ updateData(thePackage)
+{
+}
UpdateDialog::Thread::~Thread()
{
@@ -349,65 +358,94 @@ UpdateDialog::Thread::~Thread()
void UpdateDialog::Thread::execute()
{
- OSL_ASSERT( ! m_vExtensionList.empty() );
- Map map;
+ {
+ vos::OGuard g( Application::GetSolarMutex() );
+ if ( m_stop ) {
+ return;
+ }
+ }
+ css::uno::Reference<css::deployment::XExtensionManager> extMgr =
+ css::deployment::ExtensionManager::get(m_context);
+
+ std::vector<std::pair<css::uno::Reference<css::deployment::XPackage>, css::uno::Any > > errors;
+
+ dp_misc::UpdateInfoMap updateInfoMap = dp_misc::getOnlineUpdateInfos(
+ m_context, extMgr, m_updateInformation, &m_vExtensionList, errors);
- typedef std::vector< TUpdateListEntry >::const_iterator ITER;
- for ( ITER iIndex = m_vExtensionList.begin(); iIndex < m_vExtensionList.end(); ++iIndex )
+ typedef std::vector<std::pair<css::uno::Reference<css::deployment::XPackage>,
+ css::uno::Any> >::const_iterator ITERROR;
+ for (ITERROR ite = errors.begin(); ite != errors.end(); ite ++)
+ handleSpecificError(ite->first, ite->second);
+
+ for (dp_misc::UpdateInfoMap::iterator i(updateInfoMap.begin()); i != updateInfoMap.end(); i++)
{
- css::uno::Reference< css::deployment::XPackage > p = (*iIndex)->m_xPackage;
- css::uno::Reference< css::deployment::XPackageManager > m = (*iIndex)->m_xPackageManager;
- if ( p.is() )
+ dp_misc::UpdateInfo const & info = i->second;
+ UpdateData updateData(info.extension);
+ DisabledUpdate disableUpdate;
+ //determine if online updates meet the requirements
+ prepareUpdateData(info.info, disableUpdate, updateData);
+
+ //determine if the update is installed in the user or shared repository
+ rtl::OUString sOnlineVersion;
+ if (info.info.is())
+ sOnlineVersion = info.version;
+ rtl::OUString sVersionUser;
+ rtl::OUString sVersionShared;
+ rtl::OUString sVersionBundled;
+ css::uno::Sequence< css::uno::Reference< css::deployment::XPackage> > extensions;
+ try {
+ extensions = extMgr->getExtensionsWithSameIdentifier(
+ dp_misc::getIdentifier(info.extension), info.extension->getName(),
+ css::uno::Reference<css::ucb::XCommandEnvironment>());
+ } catch (css::lang::IllegalArgumentException& ) {
+ OSL_ASSERT(0);
+ }
+ OSL_ASSERT(extensions.getLength() == 3);
+ if (extensions[0].is() )
+ sVersionUser = extensions[0]->getVersion();
+ if (extensions[1].is() )
+ sVersionShared = extensions[1]->getVersion();
+ if (extensions[2].is() )
+ sVersionBundled = extensions[2]->getVersion();
+
+ bool bSharedReadOnly = extMgr->isReadOnlyRepository(OUSTR("shared"));
+
+ dp_misc::UPDATE_SOURCE sourceUser = dp_misc::isUpdateUserExtension(
+ bSharedReadOnly, sVersionUser, sVersionShared, sVersionBundled, sOnlineVersion);
+ dp_misc::UPDATE_SOURCE sourceShared = dp_misc::isUpdateSharedExtension(
+ bSharedReadOnly, sVersionShared, sVersionBundled, sOnlineVersion);
+
+ css::uno::Reference<css::deployment::XPackage> updateSource;
+ if (sourceUser != dp_misc::UPDATE_SOURCE_NONE)
{
+ if (sourceUser == dp_misc::UPDATE_SOURCE_SHARED)
{
- vos::OGuard g( Application::GetSolarMutex() );
- if ( m_stop ) {
- return;
- }
+ updateData.aUpdateSource = extensions[1];
+ updateData.updateVersion = extensions[1]->getVersion();
}
- handle( p, m, &map );
+ else if (sourceUser == dp_misc::UPDATE_SOURCE_BUNDLED)
+ {
+ updateData.aUpdateSource = extensions[2];
+ updateData.updateVersion = extensions[2]->getVersion();
+ }
+ if (!update(disableUpdate, updateData))
+ return;
}
- }
- if (!map.empty()) {
- const rtl::OUString sDefaultURL(dp_misc::getExtensionDefaultUpdateURL());
- if (sDefaultURL.getLength())
+ if (sourceShared != dp_misc::UPDATE_SOURCE_NONE)
{
- css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > >
- infos(
- getUpdateInformation(
- css::uno::Reference< css::deployment::XPackage >(),
- css::uno::Sequence< rtl::OUString >(&sDefaultURL, 1), rtl::OUString()));
- for (sal_Int32 i = 0; i < infos.getLength(); ++i) {
- css::uno::Reference< css::xml::dom::XNode > node(
- infos[i], css::uno::UNO_QUERY_THROW);
- dp_misc::DescriptionInfoset infoset(m_context, node);
- boost::optional< rtl::OUString > id(infoset.getIdentifier());
- if (!id) {
- continue;
- }
- Map::iterator end(map.upper_bound(*id));
- for (Map::iterator j(map.lower_bound(*id)); j != end; ++j) {
- rtl::OUString v(infoset.getVersion());
- if (dp_misc::compareVersions(v, j->second.version) ==
- dp_misc::GREATER)
- {
- j->second.version = v;
- j->second.info = node;
- }
- }
- }
- for (Map::const_iterator i(map.begin()); i != map.end(); ++i) {
- if (i->second.info.is() &&
- !update(
- i->second.package, i->second.packageManager,
- i->second.info))
- {
- break;
- }
+ if (sourceShared == dp_misc::UPDATE_SOURCE_BUNDLED)
+ {
+ updateData.aUpdateSource = extensions[2];
+ updateData.updateVersion = extensions[2]->getVersion();
}
+ updateData.bIsShared = true;
+ if (!update(disableUpdate, updateData))
+ return;
}
}
+
+
vos::OGuard g(Application::GetSolarMutex());
if (!m_stop) {
m_dialog.checkingDone();
@@ -446,142 +484,95 @@ void UpdateDialog::Thread::handleSpecificError(
}
}
-css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > >
-UpdateDialog::Thread::getUpdateInformation(
- css::uno::Reference< css::deployment::XPackage > const & package,
- css::uno::Sequence< rtl::OUString > const & urls,
- rtl::OUString const & identifier) const
+::rtl::OUString UpdateDialog::Thread::getUpdateDisplayString(
+ dp_gui::UpdateData const & data, ::rtl::OUString const & version) const
{
- try {
- return m_updateInformation->getUpdateInformation(urls, identifier);
- } catch (css::uno::RuntimeException &) {
- throw;
- } catch (css::ucb::CommandFailedException & e) {
- handleSpecificError(package, e.Reason);
- } catch (css::ucb::CommandAbortedException &) {
- } catch (css::uno::Exception & e) {
- handleSpecificError(package, css::uno::makeAny(e));
+ OSL_ASSERT(data.aInstalledPackage.is());
+ rtl::OUStringBuffer b(data.aInstalledPackage->getDisplayName());
+ b.append(static_cast< sal_Unicode >(' '));
+ {
+ vos::OGuard g( Application::GetSolarMutex() );
+ if(!m_stop)
+ b.append(m_dialog.m_version);
}
- return
- css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > >();
-}
+ b.append(static_cast< sal_Unicode >(' '));
+ if (version.getLength())
+ b.append(version);
+ else
+ b.append(data.updateVersion);
-void UpdateDialog::Thread::handle(
- css::uno::Reference< css::deployment::XPackage > const & package,
- css::uno::Reference< css::deployment::XPackageManager > const &
- packageManager,
- Map * map)
-{
- rtl::OUString id(dp_misc::getIdentifier(package));
- css::uno::Sequence< rtl::OUString > urls(
- package->getUpdateInformationURLs());
- if (urls.getLength() == 0) {
- map->insert(
- Map::value_type(
- id, Entry(package, packageManager, package->getVersion())));
- } else {
- css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > >
- infos(getUpdateInformation(package, urls, id));
- rtl::OUString latestVersion(package->getVersion());
- sal_Int32 latestIndex = -1;
- for (sal_Int32 i = 0; i < infos.getLength(); ++i) {
- dp_misc::DescriptionInfoset infoset(
- m_context,
- css::uno::Reference< css::xml::dom::XNode >(
- infos[i], css::uno::UNO_QUERY_THROW));
- boost::optional< rtl::OUString > id2(infoset.getIdentifier());
- if (!id2) {
- continue;
- }
- if (*id2 == id) {
- rtl::OUString v(infoset.getVersion());
- if (dp_misc::compareVersions(v, latestVersion) ==
- dp_misc::GREATER)
- {
- latestVersion = v;
- latestIndex = i;
- }
- }
- }
- if (latestIndex != -1) {
- update(
- package, packageManager,
- css::uno::Reference< css::xml::dom::XNode >(
- infos[latestIndex], css::uno::UNO_QUERY_THROW));
+ if (data.sWebsiteURL.getLength())
+ {
+ b.append(static_cast< sal_Unicode >(' '));
+ {
+ vos::OGuard g( Application::GetSolarMutex() );
+ if(!m_stop)
+ b.append(m_dialog.m_browserbased);
}
}
+ return b.makeStringAndClear();
}
-bool UpdateDialog::Thread::update(
- css::uno::Reference< css::deployment::XPackage > const & package,
- css::uno::Reference< css::deployment::XPackageManager > const &
- packageManager,
- css::uno::Reference< css::xml::dom::XNode > const & updateInfo) const
+/** out_data will only be filled if all dependencies are ok.
+ */
+void UpdateDialog::Thread::prepareUpdateData(
+ css::uno::Reference< css::xml::dom::XNode > const & updateInfo,
+ UpdateDialog::DisabledUpdate & out_du,
+ dp_gui::UpdateData & out_data) const
{
+ if (!updateInfo.is())
+ return;
dp_misc::DescriptionInfoset infoset(m_context, updateInfo);
OSL_ASSERT(infoset.getVersion().getLength() != 0);
css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > > ds(
dp_misc::Dependencies::check(infoset));
- UpdateDialog::DisabledUpdate du;
- du.aUpdateInfo = updateInfo;
- du.unsatisfiedDependencies.realloc(ds.getLength());
+ out_du.aUpdateInfo = updateInfo;
+ out_du.unsatisfiedDependencies.realloc(ds.getLength());
for (sal_Int32 i = 0; i < ds.getLength(); ++i) {
- du.unsatisfiedDependencies[i] = dp_misc::Dependencies::getErrorText(ds[i]);
+ out_du.unsatisfiedDependencies[i] = dp_misc::Dependencies::getErrorText(ds[i]);
}
- du.permission = ! packageManager->isReadOnly();
+
const ::boost::optional< ::rtl::OUString> updateWebsiteURL(infoset.getLocalizedUpdateWebsiteURL());
- rtl::OUStringBuffer b(package->getDisplayName());
- b.append(static_cast< sal_Unicode >(' '));
- {
- vos::OGuard g( Application::GetSolarMutex() );
- if ( m_stop )
- return !m_stop;
- else
- b.append(m_dialog.m_version);
- }
- b.append(static_cast< sal_Unicode >(' '));
- b.append(infoset.getVersion());
- if (updateWebsiteURL)
+
+ out_du.name = getUpdateDisplayString(out_data, infoset.getVersion());
+
+ if (out_du.unsatisfiedDependencies.getLength() == 0)
{
- b.append(static_cast< sal_Unicode >(' '));
- {
- vos::OGuard g( Application::GetSolarMutex() );
- if ( m_stop )
- return !m_stop;
- else
- b.append(m_dialog.m_browserbased);
- }
+ out_data.aUpdateInfo = updateInfo;
+ out_data.updateVersion = infoset.getVersion();
+ if (updateWebsiteURL)
+ out_data.sWebsiteURL = *updateWebsiteURL;
}
- du.name = b.makeStringAndClear();
+}
- if (du.unsatisfiedDependencies.getLength() == 0 && du.permission)
+bool UpdateDialog::Thread::update(
+ UpdateDialog::DisabledUpdate const & du,
+ dp_gui::UpdateData const & data) const
+{
+ bool ret = false;
+ if (du.unsatisfiedDependencies.getLength() == 0)
{
- dp_gui::UpdateData data;
- data.aInstalledPackage = package;
- data.aPackageManager = packageManager;
- data.aUpdateInfo = updateInfo;
- if (updateWebsiteURL)
- data.sWebsiteURL = *updateWebsiteURL;
vos::OGuard g(Application::GetSolarMutex());
if (!m_stop) {
- m_dialog.addEnabledUpdate(du.name, data);
+ m_dialog.addEnabledUpdate(getUpdateDisplayString(data), data);
}
- return !m_stop;
+ ret = !m_stop;
} else {
vos::OGuard g(Application::GetSolarMutex());
if (!m_stop) {
- m_dialog.addDisabledUpdate(du);
+ m_dialog.addDisabledUpdate(du);
}
- return !m_stop;
+ ret = !m_stop;
}
+ return ret;
}
// UpdateDialog ----------------------------------------------------------
UpdateDialog::UpdateDialog(
css::uno::Reference< css::uno::XComponentContext > const & context,
Window * parent,
- const std::vector< dp_gui::TUpdateListEntry > &vExtensionList,
+ const std::vector<css::uno::Reference< css::deployment::XPackage > > &vExtensionList,
std::vector< dp_gui::UpdateData > * updateData):
ModalDialog(parent,DpGuiResId(RID_DLG_UPDATE)),
m_context(context),
@@ -611,8 +602,6 @@ UpdateDialog::UpdateDialog(
m_noInstall(String(DpGuiResId(RID_DLG_UPDATE_NOINSTALL))),
m_noDependency(String(DpGuiResId(RID_DLG_UPDATE_NODEPENDENCY))),
m_noDependencyCurVer(String(DpGuiResId(RID_DLG_UPDATE_NODEPENDENCY_CUR_VER))),
- m_noPermission(String(DpGuiResId(RID_DLG_UPDATE_NOPERMISSION))),
- m_noPermissionVista(String(DpGuiResId(RID_DLG_UPDATE_NOPERMISSION_VISTA))),
m_browserbased(String(DpGuiResId(RID_DLG_UPDATE_BROWSERBASED))),
m_version(String(DpGuiResId(RID_DLG_UPDATE_VERSION))),
m_updateData(*updateData),
@@ -626,6 +615,9 @@ UpdateDialog::UpdateDialog(
// m_extensionManagerDialog(extensionManagerDialog)
{
OSL_ASSERT(updateData != NULL);
+
+ m_xExtensionManager = css::deployment::ExtensionManager::get( context );
+
css::uno::Reference< css::awt::XToolkit > toolkit;
try {
toolkit = css::uno::Reference< css::awt::XToolkit >(
@@ -666,9 +658,6 @@ UpdateDialog::UpdateDialog(
if ( ! dp_misc::office_is_running())
m_help.Disable();
FreeResource();
- String sTemp(m_noPermissionVista);
- sTemp.SearchAndReplaceAllAscii( "%PRODUCTNAME", BrandName::get() );
- m_noPermissionVista = sTemp;
initDescription();
}
@@ -998,12 +987,25 @@ void UpdateDialog::clearDescription()
bool UpdateDialog::showDescription(css::uno::Reference< css::xml::dom::XNode > const & aUpdateInfo)
{
dp_misc::DescriptionInfoset infoset(m_context, aUpdateInfo);
- std::pair< rtl::OUString, rtl::OUString > pairPub = infoset.getLocalizedPublisherNameAndURL();
- rtl::OUString sPub = pairPub.first;
- rtl::OUString sURL = pairPub.second;
- rtl::OUString sRel = infoset.getLocalizedReleaseNotesURL();
+ return showDescription(infoset.getLocalizedPublisherNameAndURL(),
+ infoset.getLocalizedReleaseNotesURL());
+}
- if ( sPub.getLength() == 0 && sURL.getLength() == 0 && sRel.getLength() == 0 )
+bool UpdateDialog::showDescription(css::uno::Reference< css::deployment::XPackage > const & aExtension)
+{
+ OSL_ASSERT(aExtension.is());
+ css::beans::StringPair pubInfo = aExtension->getPublisherInfo();
+ return showDescription(std::make_pair(pubInfo.First, pubInfo.Second),
+ OUSTR(""));
+}
+
+bool UpdateDialog::showDescription(std::pair< rtl::OUString, rtl::OUString > const & pairPublisher,
+ rtl::OUString const & sReleaseNotes)
+{
+ rtl::OUString sPub = pairPublisher.first;
+ rtl::OUString sURL = pairPublisher.second;
+
+ if ( sPub.getLength() == 0 && sURL.getLength() == 0 && sReleaseNotes.getLength() == 0 )
// nothing to show
return false;
@@ -1017,7 +1019,7 @@ bool UpdateDialog::showDescription(css::uno::Reference< css::xml::dom::XNode > c
bPublisher = true;
}
- if ( sRel.getLength() > 0 )
+ if ( sReleaseNotes.getLength() > 0 )
{
if ( !bPublisher )
{
@@ -1026,7 +1028,7 @@ bool UpdateDialog::showDescription(css::uno::Reference< css::xml::dom::XNode > c
}
m_ReleaseNotesLabel.Show();
m_ReleaseNotesLink.Show();
- m_ReleaseNotesLink.SetURL( sRel );
+ m_ReleaseNotesLink.SetURL( sReleaseNotes );
}
return true;
}
@@ -1055,6 +1057,16 @@ bool UpdateDialog::showDescription( const String& rDescription, bool bWithPublis
return true;
}
+bool UpdateDialog::isReadOnly( const css::uno::Reference< css::deployment::XPackage > &xPackage ) const
+{
+ if ( m_xExtensionManager.is() && xPackage.is() )
+ {
+ return m_xExtensionManager->isReadOnlyRepository( xPackage->getRepositoryName() );
+ }
+ else
+ return true;
+}
+
IMPL_LINK(UpdateDialog, selectionHandler, void *, EMPTYARG)
{
rtl::OUStringBuffer b;
@@ -1074,7 +1086,12 @@ IMPL_LINK(UpdateDialog, selectionHandler, void *, EMPTYARG)
const std::vector< UpdateDialog::DisabledUpdate >::size_type sizeDisabled =
m_disabledUpdates.size();
if (pos < sizeEnabled)
- bInserted = showDescription(m_enabledUpdates[pos].aUpdateInfo);
+ {
+ if (m_enabledUpdates[pos].aUpdateSource.is())
+ bInserted = showDescription(m_enabledUpdates[pos].aUpdateSource);
+ else
+ bInserted = showDescription(m_enabledUpdates[pos].aUpdateInfo);
+ }
else if (pos >= sizeEnabled
&& pos < (sizeEnabled + sizeDisabled))
bInserted = showDescription(m_disabledUpdates[pos - sizeEnabled].aUpdateInfo);
@@ -1120,16 +1137,6 @@ IMPL_LINK(UpdateDialog, selectionHandler, void *, EMPTYARG)
b.appendAscii(RTL_CONSTASCII_STRINGPARAM(" "));
b.append(m_noDependencyCurVer);
}
- if (!data.permission) {
- if (b.getLength() == 0) {
- b.append(m_noInstall);
- }
- b.append(LF);
- if (isVista())
- b.append(m_noPermissionVista);
- else
- b.append(m_noPermission);
- }
break;
}
case GENERAL_ERROR:
@@ -1233,10 +1240,10 @@ IMPL_LINK(UpdateDialog, okHandler, void *, EMPTYARG)
typedef ::std::vector<UpdateData>::const_iterator CIT;
for (CIT i = m_enabledUpdates.begin(); i < m_enabledUpdates.end(); i++)
{
- OSL_ASSERT(i->aPackageManager.is());
+ OSL_ASSERT(i->aInstalledPackage.is());
//If the user has no write access to the shared folder then the update
//for a shared extension is disable, that is it cannot be in m_enabledUpdates
- OSL_ASSERT(i->aPackageManager->isReadOnly() == sal_False);
+// OSL_ASSERT(isReadOnly(i->aInstalledPackage) == sal_False);
#if 0
// TODO: check!
OSL_ASSERT(m_extensionManagerDialog.get());
@@ -1248,6 +1255,7 @@ IMPL_LINK(UpdateDialog, okHandler, void *, EMPTYARG)
#endif
}
+
for (USHORT i = 0; i < m_updates.getItemCount(); ++i) {
UpdateDialog::Index const * p =
static_cast< UpdateDialog::Index const * >(
@@ -1256,6 +1264,7 @@ IMPL_LINK(UpdateDialog, okHandler, void *, EMPTYARG)
m_updateData.push_back(m_enabledUpdates[p->index.enabledUpdate]);
}
}
+
EndDialog(RET_OK);
return 0;
}
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.hxx b/desktop/source/deployment/gui/dp_gui_updatedialog.hxx
index 1a8484e2c20f..32c317cb8735 100644
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.hxx
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.hxx
@@ -60,7 +60,8 @@ class Window;
namespace com { namespace sun { namespace star {
namespace awt { class XThrobber; }
- namespace deployment { class XPackageManager; }
+ namespace deployment { class XExtensionManager;
+ class XPackage; }
namespace uno { class XComponentContext; }
} } }
@@ -82,16 +83,17 @@ public:
@param parent
the parent window, may be null
- @param selectedPackages
- if non-null, only check for updates for the selected packages
-
- @param packageManagers
- if non-null, check for updates for all managed packages
+ @param vExtensionList
+ check for updates for the contained extensions. There must only be one extension with
+ a particular identifier. If one extension is installed in several repositories, then the
+ one with the highest version must be used, because it contains the latest known update
+ information.
*/
UpdateDialog(
com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > const & context,
Window * parent,
- const std::vector< dp_gui::TUpdateListEntry > &vExtensionList,
+ const std::vector< com::sun::star::uno::Reference<
+ com::sun::star::deployment::XPackage > > & vExtensionList,
std::vector< dp_gui::UpdateData > * updateData);
~UpdateDialog();
@@ -141,6 +143,7 @@ private:
UpdateDialog & m_dialog;
};
+
friend class CheckListBox;
void insertItem(
@@ -168,9 +171,14 @@ private:
void initDescription();
void clearDescription();
+ bool showDescription(::com::sun::star::uno::Reference<
+ ::com::sun::star::deployment::XPackage > const & aExtension);
+ bool showDescription(std::pair< rtl::OUString, rtl::OUString > const & pairPublisher,
+ rtl::OUString const & sReleaseNotes);
bool showDescription( ::com::sun::star::uno::Reference<
::com::sun::star::xml::dom::XNode > const & aUpdateInfo);
bool showDescription( const String& rDescription, bool bWithPublisher );
+ bool isReadOnly( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) const;
DECL_LINK(selectionHandler, void *);
DECL_LINK(allHandler, void *);
@@ -204,8 +212,6 @@ private:
rtl::OUString m_noInstall;
rtl::OUString m_noDependency;
rtl::OUString m_noDependencyCurVer;
- rtl::OUString m_noPermission;
- rtl::OUString m_noPermissionVista;
rtl::OUString m_browserbased;
rtl::OUString m_version;
std::vector< dp_gui::UpdateData > m_enabledUpdates;
@@ -214,6 +220,7 @@ private:
std::vector< UpdateDialog::SpecificError > m_specificErrors;
std::vector< dp_gui::UpdateData > & m_updateData;
rtl::Reference< UpdateDialog::Thread > m_thread;
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > m_xExtensionManager;
Point m_aFirstLinePos;
Size m_aFirstLineSize;
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.src b/desktop/source/deployment/gui/dp_gui_updatedialog.src
index b86a8ad66f08..325d98c88d48 100644
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.src
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.src
@@ -244,18 +244,6 @@ ModalDialog RID_DLG_UPDATE {
String RID_DLG_UPDATE_NODEPENDENCY_CUR_VER {
Text[en-US] = "You have OpenOffice.org %VERSION";
};
- String RID_DLG_UPDATE_NOPERMISSION {
- Text[en-US] = "No write permission (shared extension).";
- };
- String RID_DLG_UPDATE_NOPERMISSION_VISTA {
- Text[en-US] = "No write permission. %PRODUCTNAME needs to run as administrator.\n"
- "Please follow these steps to update this shared extension:\n"
- "1. Close Extension Manager dialog.\n"
- "2. Exit %PRODUCTNAME.\n"
- "3. Exit %PRODUCTNAME Quickstarter located in the tray area of Windows.\n"
- "4. Run %PRODUCTNAME as administrator. In order to do this call the context menu of the %PRODUCTNAME program icon and choose \'Run as administrator\'.\n"
- "5. Call the Extension Manager dialog and update this shared extension.\n";
- };
String RID_DLG_UPDATE_BROWSERBASED {
Text[en-US] = "browser based update";
};
diff --git a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx
index 113e6d2069ac..067a703ec413 100644
--- a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx
+++ b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx
@@ -46,6 +46,7 @@
#include "cppuhelper/implbase3.hxx"
#include "com/sun/star/beans/PropertyValue.hpp"
+#include "com/sun/star/beans/NamedValue.hpp"
#include "com/sun/star/xml/dom/XElement.hpp"
#include "com/sun/star/xml/dom/XNode.hpp"
#include "com/sun/star/xml/dom/XNodeList.hpp"
@@ -53,7 +54,8 @@
#include "com/sun/star/ucb/InteractiveAugmentedIOException.hpp"
#include "com/sun/star/ucb/XCommandEnvironment.hpp"
#include "com/sun/star/ucb/XProgressHandler.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
+#include "com/sun/star/deployment/XExtensionManager.hpp"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
#include "com/sun/star/deployment/XUpdateInformationProvider.hpp"
#include "com/sun/star/deployment/DependencyException.hpp"
#include "com/sun/star/deployment/LicenseException.hpp"
@@ -256,6 +258,8 @@ UpdateInstallDialog::UpdateInstallDialog(
{
FreeResource();
+ m_xExtensionManager = css::deployment::ExtensionManager::get( xCtx );
+
m_cancel.SetClickHdl(LINK(this, UpdateInstallDialog, cancelHandler));
m_mle_info.EnableCursor(FALSE);
if ( ! dp_misc::office_is_running())
@@ -376,13 +380,12 @@ void UpdateInstallDialog::Thread::downloadExtensions()
{
UpdateData & curData = *i;
- OSL_ASSERT(curData.aUpdateInfo.is());
+ if (!curData.aUpdateInfo.is() || curData.aUpdateSource.is())
+ continue;
//We assume that m_aVecUpdateData contains only information about extensions which
//can be downloaded directly.
OSL_ASSERT(curData.sWebsiteURL.getLength() == 0);
- if (!curData.aUpdateInfo.is())
- continue;
//update the name of the extension which is to be downloaded
{
::vos::OGuard g(Application::GetSolarMutex());
@@ -487,15 +490,13 @@ void UpdateInstallDialog::Thread::installExtensions()
// osl::Thread::wait(v);
bool bError = false;
bool bLicenseDeclined = false;
- cssu::Reference<css::deployment::XPackage> xPackage;
+ cssu::Reference<css::deployment::XPackage> xExtension;
UpdateData & curData = *i;
cssu::Exception exc;
try
{
- if (curData.sLocalURL.getLength() == 0)
- continue;
cssu::Reference< css::task::XAbortChannel > xAbortChannel(
- curData.aPackageManager->createAbortChannel() );
+ curData.aInstalledPackage->createAbortChannel() );
{
vos::OGuard g(Application::GetSolarMutex());
if (m_stop) {
@@ -503,8 +504,35 @@ void UpdateInstallDialog::Thread::installExtensions()
}
m_abort = xAbortChannel;
}
- xPackage = curData.aPackageManager->addPackage(
- curData.sLocalURL, OUString(), xAbortChannel, m_updateCmdEnv.get());
+ if (!curData.aUpdateSource.is() && curData.sLocalURL.getLength())
+ {
+ css::beans::NamedValue prop(OUSTR("EXTENSION_UPDATE"), css::uno::makeAny(OUSTR("1")));
+ if (!curData.bIsShared)
+ xExtension = m_dialog.getExtensionManager()->addExtension(
+ curData.sLocalURL, css::uno::Sequence<css::beans::NamedValue>(&prop, 1),
+ OUSTR("user"), xAbortChannel, m_updateCmdEnv.get());
+ else
+ xExtension = m_dialog.getExtensionManager()->addExtension(
+ curData.sLocalURL, css::uno::Sequence<css::beans::NamedValue>(&prop, 1),
+ OUSTR("shared"), xAbortChannel, m_updateCmdEnv.get());
+ }
+ else if (curData.aUpdateSource.is())
+ {
+ OSL_ASSERT(curData.aUpdateSource.is());
+ //I am not sure if we should obtain the install properties and pass them into
+ //add extension. Currently it contains only "SUPPRESS_LICENSE". So it it could happen
+ //that a license is displayed when updating from the shared repository, although the
+ //shared extension was installed using "SUPPRESS_LICENSE".
+ css::beans::NamedValue prop(OUSTR("EXTENSION_UPDATE"), css::uno::makeAny(OUSTR("1")));
+ if (!curData.bIsShared)
+ xExtension = m_dialog.getExtensionManager()->addExtension(
+ curData.aUpdateSource->getURL(), css::uno::Sequence<css::beans::NamedValue>(&prop, 1),
+ OUSTR("user"), xAbortChannel, m_updateCmdEnv.get());
+ else
+ xExtension = m_dialog.getExtensionManager()->addExtension(
+ curData.aUpdateSource->getURL(), css::uno::Sequence<css::beans::NamedValue>(&prop, 1),
+ OUSTR("shared"), xAbortChannel, m_updateCmdEnv.get());
+ }
}
catch (css::deployment::DeploymentException & de)
{
@@ -533,7 +561,7 @@ void UpdateInstallDialog::Thread::installExtensions()
m_dialog.setError(UpdateInstallDialog::ERROR_LICENSE_DECLINED,
curData.aInstalledPackage->getDisplayName(), OUString());
}
- else if (!xPackage.is() || bError)
+ else if (!xExtension.is() || bError)
{
::vos::OGuard g(Application::GetSolarMutex());
if (m_stop) {
diff --git a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx
index c3d01c8ee6d9..c0e64a8028e8 100644
--- a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx
+++ b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx
@@ -41,6 +41,9 @@
#include "dp_gui_autoscrolledit.hxx"
/// @HTML
+namespace com { namespace sun { namespace star { namespace deployment {
+ class XExtensionManager;
+}}}}
namespace com { namespace sun { namespace star { namespace uno {
class XComponentContext;
}}}}
@@ -102,9 +105,12 @@ private:
};
void setError(INSTALL_ERROR err, ::rtl::OUString const & sExtension, ::rtl::OUString const & exceptionMessage);
void setError(::rtl::OUString const & exceptionMessage);
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > getExtensionManager() const
+ { return m_xExtensionManager; }
rtl::Reference< Thread > m_thread;
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xComponentContext;
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > m_xExtensionManager;
//Signals that an error occurred during download and installation
bool m_bError;
bool m_bNoEntry;
diff --git a/desktop/source/deployment/gui/license_dialog.cxx b/desktop/source/deployment/gui/license_dialog.cxx
index 50992eb07a97..9698e257b953 100644
--- a/desktop/source/deployment/gui/license_dialog.cxx
+++ b/desktop/source/deployment/gui/license_dialog.cxx
@@ -116,6 +116,7 @@ struct LicenseDialogImpl : public ModalDialog
LicenseDialogImpl(
Window * pParent,
css::uno::Reference< css::uno::XComponentContext > const & xContext,
+ const ::rtl::OUString & sExtensionName,
const ::rtl::OUString & sLicenseText);
virtual void Activate();
@@ -193,6 +194,7 @@ void LicenseView::Notify( SfxBroadcaster&, const SfxHint& rHint )
LicenseDialogImpl::LicenseDialogImpl(
Window * pParent,
cssu::Reference< cssu::XComponentContext > const & xContext,
+ const ::rtl::OUString & sExtensionName,
const ::rtl::OUString & sLicenseText):
ModalDialog(pParent, DpGuiResId(RID_DLG_LICENSE))
,m_xComponentContext(xContext)
@@ -225,6 +227,7 @@ LicenseDialogImpl::LicenseDialogImpl(
m_fiArrow1.Show(true);
m_fiArrow2.Show(false);
m_mlLicense.SetText(sLicenseText);
+ m_ftHead.SetText(m_ftHead.GetText() + OUString('\n') + sExtensionName);
m_mlLicense.SetEndReachedHdl( LINK(this, LicenseDialogImpl, EndReachedHdl) );
m_mlLicense.SetScrolledHdl( LINK(this, LicenseDialogImpl, ScrolledHdl) );
@@ -296,7 +299,7 @@ LicenseDialog::LicenseDialog( Sequence<Any> const& args,
Reference<XComponentContext> const& xComponentContext)
: m_xComponentContext(xComponentContext)
{
- comphelper::unwrapArgs( args, m_parent, m_sLicenseText );
+ comphelper::unwrapArgs( args, m_parent, m_sExtensionName, m_sLicenseText );
}
// XExecutableDialog
@@ -315,8 +318,10 @@ sal_Int16 LicenseDialog::execute() throw (RuntimeException)
sal_Int16 LicenseDialog::solar_execute()
{
- std::auto_ptr<LicenseDialogImpl> dlg(new LicenseDialogImpl(
- VCLUnoHelper::GetWindow(m_parent), m_xComponentContext, m_sLicenseText));
+ std::auto_ptr<LicenseDialogImpl> dlg(
+ new LicenseDialogImpl(
+ VCLUnoHelper::GetWindow(m_parent),
+ m_xComponentContext, m_sExtensionName, m_sLicenseText));
return dlg->Execute();
}
diff --git a/desktop/source/deployment/gui/license_dialog.hxx b/desktop/source/deployment/gui/license_dialog.hxx
index 4733922dc607..bb4a6b6646c8 100644
--- a/desktop/source/deployment/gui/license_dialog.hxx
+++ b/desktop/source/deployment/gui/license_dialog.hxx
@@ -48,6 +48,7 @@ class LicenseDialog
{
Reference<XComponentContext> const m_xComponentContext;
Reference<awt::XWindow> /* const */ m_parent;
+ OUString m_sExtensionName;
OUString /* const */ m_sLicenseText;
OUString m_initialTitle;