summaryrefslogtreecommitdiff
path: root/extensions/source/update/check/updatecheckconfig.cxx
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2012-01-28 20:52:45 +0100
committerMichael Stahl <mstahl@redhat.com>2012-01-28 20:52:45 +0100
commit2e626373db2412ac22e8c5c27a60d11cd29e875b (patch)
tree9e9f67205cd5b72f1031721273e1534a3a1e5b0f /extensions/source/update/check/updatecheckconfig.cxx
parentf7ee7bbd5174b084f018c2ec94d8c70c98ee04da (diff)
replace obsolete "master" branch with README that points at new repoHEADmaster-deletedmaster
Diffstat (limited to 'extensions/source/update/check/updatecheckconfig.cxx')
-rw-r--r--extensions/source/update/check/updatecheckconfig.cxx812
1 files changed, 0 insertions, 812 deletions
diff --git a/extensions/source/update/check/updatecheckconfig.cxx b/extensions/source/update/check/updatecheckconfig.cxx
deleted file mode 100644
index 99dab40e0..000000000
--- a/extensions/source/update/check/updatecheckconfig.cxx
+++ /dev/null
@@ -1,812 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_extensions.hxx"
-
-
-#include "updatecheckconfig.hxx"
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/beans/XPropertyState.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include <osl/security.hxx>
-#include <osl/time.h>
-#include <osl/file.hxx>
-#include <sal/macros.h>
-
-#ifdef WNT
-#ifdef _MSC_VER
-#pragma warning(push,1) // disable warnings within system headers
-#pragma warning(disable: 4917)
-#endif
-#include <shlobj.h>
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-#endif
-
-namespace container = com::sun::star::container ;
-namespace beans = com::sun::star::beans ;
-namespace lang = com::sun::star::lang ;
-namespace util = com::sun::star::util ;
-namespace uno = com::sun::star::uno ;
-
-#define UNISTRING(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
-
-#define LAST_CHECK "LastCheck"
-#define VERSION_FOUND "UpdateVersionFound"
-#define UPDATE_VERSION "UpdateVersion"
-#define UPDATE_BUILDID "UpdateBuildId"
-#define UPDATE_DESCRIPTION "UpdateDescription"
-#define DOWNLOAD_URL "DownloadURL"
-#define IS_DIRECT_DOWNLOAD "IsDirectDownload"
-#define OLD_VERSION "UpdateFoundFor"
-#define AUTOCHECK_ENABLED "AutoCheckEnabled"
-#define AUTODOWNLOAD_ENABLED "AutoDownloadEnabled"
-#define CHECK_INTERVAL "CheckInterval"
-#define LOCAL_FILE "LocalFile"
-#define DOWNLOAD_SIZE "DownloadSize"
-#define DOWNLOAD_PAUSED "DownloadPaused"
-#define DOWNLOAD_DESTINATION "DownloadDestination"
-#define RELEASE_NOTE "ReleaseNote"
-#define EXTENSION_PREFIX "Extension_"
-
-#define PROPERTY_VERSION UNISTRING("Version")
-
-static const sal_Char * const aUpdateEntryProperties[] = {
- UPDATE_VERSION,
- UPDATE_BUILDID,
- UPDATE_DESCRIPTION,
- DOWNLOAD_URL,
- IS_DIRECT_DOWNLOAD,
- RELEASE_NOTE"1",
- RELEASE_NOTE"2",
- RELEASE_NOTE"3",
- RELEASE_NOTE"4",
- RELEASE_NOTE"5",
- OLD_VERSION
-};
-
-static const sal_uInt32 nUpdateEntryProperties = SAL_N_ELEMENTS(aUpdateEntryProperties);
-
-//------------------------------------------------------------------------------
-
-NamedValueByNameAccess::~NamedValueByNameAccess()
-{
-}
-
-//------------------------------------------------------------------------------
-
-::com::sun::star::uno::Any
-NamedValueByNameAccess::getValue(const sal_Char * pName)
-{
- const sal_Int32 nLen = m_rValues.getLength();
- for( sal_Int32 n=0; n < nLen; ++n )
- {
- if( m_rValues[n].Name.equalsAscii( pName ) )
- return m_rValues[n].Value;
- }
- return ::com::sun::star::uno::Any();
-}
-
-
-//------------------------------------------------------------------------------
-
-bool
-UpdateCheckROModel::isAutoCheckEnabled() const
-{
- return sal_True == m_aNameAccess.getValue(AUTOCHECK_ENABLED).get< sal_Bool >();
-}
-
-//------------------------------------------------------------------------------
-
-bool
-UpdateCheckROModel::isDownloadPaused() const
-{
- return sal_True == m_aNameAccess.getValue(DOWNLOAD_PAUSED).get< sal_Bool >();
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString
-UpdateCheckROModel::getStringValue(const sal_Char * pStr) const
-{
- uno::Any aAny( m_aNameAccess.getValue(pStr) );
- rtl::OUString aRet;
-
- aAny >>= aRet;
-
- return aRet;
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString UpdateCheckROModel::getLocalFileName() const
-{
- return getStringValue(LOCAL_FILE);
-};
-
-//------------------------------------------------------------------------------
-
-sal_Int64 UpdateCheckROModel::getDownloadSize() const
-{
- uno::Any aAny( m_aNameAccess.getValue(DOWNLOAD_SIZE) );
- sal_Int64 nRet = -1;
-
- aAny >>= nRet;
- return nRet;
-};
-
-//------------------------------------------------------------------------------
-
-rtl::OUString
-UpdateCheckROModel::getUpdateEntryVersion() const
-{
- return getStringValue(OLD_VERSION);
-}
-
-//------------------------------------------------------------------------------
-
-void
-UpdateCheckROModel::getUpdateEntry(UpdateInfo& rInfo) const
-{
- rInfo.BuildId = getStringValue(UPDATE_BUILDID);
- rInfo.Version = getStringValue(UPDATE_VERSION);
- rInfo.Description = getStringValue(UPDATE_DESCRIPTION);
-
- sal_Bool isDirectDownload = sal_False;
- m_aNameAccess.getValue(IS_DIRECT_DOWNLOAD) >>= isDirectDownload;
-
- rInfo.Sources.push_back( DownloadSource( isDirectDownload, getStringValue(DOWNLOAD_URL) ) );
-
- rtl::OString aStr(RELEASE_NOTE);
- for(sal_Int32 n=1; n < 6; ++n )
- {
- rtl::OUString aUStr = getStringValue(aStr + rtl::OString::valueOf(n));
- if( aUStr.getLength() > 0 )
- rInfo.ReleaseNotes.push_back(ReleaseNote((sal_Int8) n, aUStr));
- }
-}
-
-
-//------------------------------------------------------------------------------
-
-rtl::OUString UpdateCheckConfig::getDesktopDirectory()
-{
- rtl::OUString aRet;
-
-#ifdef WNT
- WCHAR szPath[MAX_PATH];
-
- if( ! FAILED( SHGetSpecialFolderPathW( NULL, szPath, CSIDL_DESKTOPDIRECTORY, true ) ) )
- {
- aRet = rtl::OUString( reinterpret_cast< sal_Unicode * >(szPath) );
- osl::FileBase::getFileURLFromSystemPath( aRet, aRet );
- }
-#else
- // This should become a desktop specific setting in some system backend ..
- rtl::OUString aHomeDir;
- osl::Security().getHomeDir( aHomeDir );
- aRet = aHomeDir + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/Desktop"));
-
- // Set path to home directory when there is no /Desktop directory
- osl::Directory aDocumentsDir( aRet );
- if( osl::FileBase::E_None != aDocumentsDir.open() )
- aRet = aHomeDir;
-#endif
-
- return aRet;
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString UpdateCheckConfig::getAllUsersDirectory()
-{
- rtl::OUString aRet;
-
-#ifdef WNT
- WCHAR szPath[MAX_PATH];
-
- if( ! FAILED( SHGetSpecialFolderPathW( NULL, szPath, CSIDL_COMMON_DOCUMENTS, true ) ) )
- {
- aRet = rtl::OUString( reinterpret_cast< sal_Unicode * >(szPath) );
- osl::FileBase::RC rc;
- rc = osl::FileBase::getFileURLFromSystemPath( aRet, aRet );
- }
-#else
- osl::FileBase::getTempDirURL(aRet);
-#endif
-
- return aRet;
-}
-
-//------------------------------------------------------------------------------
-UpdateCheckConfig::UpdateCheckConfig( const uno::Reference<container::XNameContainer>& xContainer,
- const uno::Reference<container::XNameContainer>& xAvailableUpdates,
- const uno::Reference<container::XNameContainer>& xIgnoredUpdates,
- const ::rtl::Reference< UpdateCheckConfigListener >& rListener ) :
- m_xContainer( xContainer ),
- m_xAvailableUpdates( xAvailableUpdates ),
- m_xIgnoredUpdates( xIgnoredUpdates ),
- m_rListener( rListener )
-{}
-
-//------------------------------------------------------------------------------
-UpdateCheckConfig::~UpdateCheckConfig()
-{}
-
-//------------------------------------------------------------------------------
-
-::rtl::Reference< UpdateCheckConfig >
-UpdateCheckConfig::get(
- const uno::Reference<uno::XComponentContext>& xContext,
- const ::rtl::Reference< UpdateCheckConfigListener >& rListener)
-{
- if( !xContext.is() )
- throw uno::RuntimeException(
- UNISTRING( "UpdateCheckConfig: empty component context" ),
- uno::Reference< uno::XInterface >() );
-
- uno::Reference< lang::XMultiComponentFactory > xServiceManager(xContext->getServiceManager());
-
- if( !xServiceManager.is() )
- throw uno::RuntimeException(
- UNISTRING( "UpdateCheckConfig: unable to obtain service manager from component context" ),
- uno::Reference< uno::XInterface >() );
-
- uno::Reference< lang::XMultiServiceFactory > xConfigProvider(
- xServiceManager->createInstanceWithContext( UNISTRING( "com.sun.star.configuration.ConfigurationProvider" ), xContext ),
- uno::UNO_QUERY_THROW);
-
- beans::PropertyValue aProperty;
- aProperty.Name = UNISTRING( "nodepath" );
- aProperty.Value = uno::makeAny( UNISTRING("org.openoffice.Office.Jobs/Jobs/UpdateCheck/Arguments") );
-
- uno::Sequence< uno::Any > aArgumentList( 1 );
- aArgumentList[0] = uno::makeAny( aProperty );
-
- uno::Reference< container::XNameContainer > xContainer(
- xConfigProvider->createInstanceWithArguments(
- UNISTRING("com.sun.star.configuration.ConfigurationUpdateAccess"), aArgumentList ),
- uno::UNO_QUERY_THROW );
-
- aProperty.Value = uno::makeAny( UNISTRING("/org.openoffice.Office.ExtensionManager/ExtensionUpdateData/IgnoredUpdates") );
- aArgumentList[0] = uno::makeAny( aProperty );
- uno::Reference< container::XNameContainer > xIgnoredExt( xConfigProvider->createInstanceWithArguments( UNISTRING("com.sun.star.configuration.ConfigurationUpdateAccess"), aArgumentList ), uno::UNO_QUERY_THROW );
-
- aProperty.Value = uno::makeAny( UNISTRING("/org.openoffice.Office.ExtensionManager/ExtensionUpdateData/AvailableUpdates") );
- aArgumentList[0] = uno::makeAny( aProperty );
- uno::Reference< container::XNameContainer > xUpdateAvail( xConfigProvider->createInstanceWithArguments( UNISTRING("com.sun.star.configuration.ConfigurationUpdateAccess"), aArgumentList ), uno::UNO_QUERY_THROW );
-
- return new UpdateCheckConfig( xContainer, xUpdateAvail, xIgnoredExt, rListener );
-}
-
-//------------------------------------------------------------------------------
-
-bool
-UpdateCheckConfig::isAutoCheckEnabled() const
-{
- sal_Bool nValue = sal_False;
- const_cast < UpdateCheckConfig *> (this)->getByName( UNISTRING( AUTOCHECK_ENABLED ) ) >>= nValue;
- return nValue;
-}
-
-//------------------------------------------------------------------------------
-
-bool
-UpdateCheckConfig::isAutoDownloadEnabled() const
-{
- sal_Bool nValue = sal_False;
- const_cast < UpdateCheckConfig *> (this)->getByName( UNISTRING( AUTODOWNLOAD_ENABLED ) ) >>= nValue;
- return nValue;
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString
-UpdateCheckConfig::getUpdateEntryVersion() const
-{
- rtl::OUString aValue;
-
- // getByName is defined as non const in XNameAccess
- const_cast < UpdateCheckConfig *> (this)->getByName( UNISTRING( OLD_VERSION ) ) >>= aValue;
-
- return aValue;
-}
-
-//------------------------------------------------------------------------------
-
-sal_Int64
-UpdateCheckConfig::getLastChecked() const
-{
- sal_Int64 nValue = 0;
-
- // getByName is defined as non const in XNameAccess
- const_cast < UpdateCheckConfig *> (this)->getByName( UNISTRING( LAST_CHECK ) ) >>= nValue;
-
- return nValue;
-}
-
-//------------------------------------------------------------------------------
-
-sal_Int64
-UpdateCheckConfig::getCheckInterval() const
-{
- sal_Int64 nValue = 0;
-
- // getByName is defined as non const in XNameAccess
- const_cast < UpdateCheckConfig *> (this)->getByName( UNISTRING( CHECK_INTERVAL ) ) >>= nValue;
-
- return nValue;
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString
-UpdateCheckConfig::getLocalFileName() const
-{
- rtl::OUString aName = UNISTRING(LOCAL_FILE);
- rtl::OUString aRet;
-
- if( m_xContainer->hasByName(aName) )
- m_xContainer->getByName(aName) >>= aRet;
-
- return aRet;
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString
-UpdateCheckConfig::getDownloadDestination() const
-{
- rtl::OUString aName = UNISTRING(DOWNLOAD_DESTINATION);
- rtl::OUString aRet;
-
- const_cast <UpdateCheckConfig *> (this)->getByName(aName) >>= aRet;
-
- return aRet;
-}
-
-//------------------------------------------------------------------------------
-
-void
-UpdateCheckConfig::storeLocalFileName(const rtl::OUString& rLocalFileName, sal_Int64 nFileSize)
-{
- const sal_uInt8 nItems = 2;
- const rtl::OUString aNameList[nItems] = { UNISTRING(LOCAL_FILE), UNISTRING(DOWNLOAD_SIZE) };
- const uno::Any aValueList[nItems] = { uno::makeAny(rLocalFileName), uno::makeAny(nFileSize) };
-
- for( sal_uInt8 i=0; i < nItems; ++i )
- {
- if( m_xContainer->hasByName(aNameList[i]) )
- m_xContainer->replaceByName(aNameList[i], aValueList[i]);
- else
- m_xContainer->insertByName(aNameList[i], aValueList[i]);
- }
-
- commitChanges();
-}
-
-//------------------------------------------------------------------------------
-
-void
-UpdateCheckConfig::clearLocalFileName()
-{
- const sal_uInt8 nItems = 2;
- const rtl::OUString aNameList[nItems] = { UNISTRING(LOCAL_FILE), UNISTRING(DOWNLOAD_SIZE) };
-
- for( sal_uInt8 i=0; i < nItems; ++i )
- {
- if( m_xContainer->hasByName(aNameList[i]) )
- m_xContainer->removeByName(aNameList[i]);
- }
-
- commitChanges();
-}
-
-//------------------------------------------------------------------------------
-
-void
-UpdateCheckConfig::storeDownloadPaused(bool paused)
-{
- replaceByName(UNISTRING(DOWNLOAD_PAUSED) , uno::makeAny(paused));
- commitChanges();
-}
-
-//------------------------------------------------------------------------------
-
-void
-UpdateCheckConfig::updateLastChecked()
-{
- TimeValue systime;
- osl_getSystemTime(&systime);
-
- sal_Int64 lastCheck = systime.Seconds;
-
- replaceByName(UNISTRING(LAST_CHECK), uno::makeAny(lastCheck));
-}
-
-//------------------------------------------------------------------------------
-
-void
-UpdateCheckConfig::storeUpdateFound( const UpdateInfo& rInfo, const rtl::OUString& aCurrentBuild)
-
-{
- bool autoDownloadEnabled = isAutoDownloadEnabled();
-
- uno::Any aValues[nUpdateEntryProperties] =
- {
- uno::makeAny(rInfo.Version),
- uno::makeAny(rInfo.BuildId),
- uno::makeAny(rInfo.Description),
- uno::makeAny(rInfo.Sources[0].URL),
- uno::makeAny(rInfo.Sources[0].IsDirect ? sal_True : sal_False),
- uno::makeAny(getReleaseNote(rInfo, 1, autoDownloadEnabled) ),
- uno::makeAny(getReleaseNote(rInfo, 2, autoDownloadEnabled) ),
- uno::makeAny(getReleaseNote(rInfo, 3, autoDownloadEnabled) ),
- uno::makeAny(getReleaseNote(rInfo, 4, autoDownloadEnabled) ),
- uno::makeAny(getReleaseNote(rInfo, 5, autoDownloadEnabled) ),
- uno::makeAny(aCurrentBuild)
- };
-
- rtl::OUString aName;
- for( sal_uInt32 n=0; n < nUpdateEntryProperties; ++n )
- {
- aName = rtl::OUString::createFromAscii(aUpdateEntryProperties[n]);
-
- if( m_xContainer->hasByName(aName) )
- m_xContainer->replaceByName(aName, aValues[n]);
- else
- m_xContainer->insertByName(aName,aValues[n]);
- }
-
- commitChanges();
-}
-
-//------------------------------------------------------------------------------
-
-void
-UpdateCheckConfig::clearUpdateFound()
-{
- rtl::OUString aName;
-
- for( sal_uInt32 n=0; n < nUpdateEntryProperties; ++n )
- {
- aName = rtl::OUString::createFromAscii(aUpdateEntryProperties[n]);
-
- try {
- if( m_xContainer->hasByName(aName) )
- m_xContainer->removeByName(aName);
- } catch(const lang::WrappedTargetException& ) {
- // Can not remove value, probably in share layer
- OSL_ASSERT(false);
- m_xContainer->replaceByName(aName, uno::makeAny(rtl::OUString()));
- }
- }
-
- /* As we have removed UpdateVersionFound from the shared configuration
- * existing entries in the user layer do not have a oor operation and
- * thus are completly ignored (which also means they can not be removed).
- */
-
- commitChanges();
-}
-
-//------------------------------------------------------------------------------
-
-uno::Sequence< rtl::OUString >
-UpdateCheckConfig::getServiceNames()
-{
- uno::Sequence< rtl::OUString > aServiceList(1);
- aServiceList[0] = UNISTRING( "com.sun.star.setup.UpdateCheckConfig");
- return aServiceList;
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString
-UpdateCheckConfig::getImplName()
-{
- return UNISTRING( "vnd.sun.UpdateCheckConfig");
-}
-
-//------------------------------------------------------------------------------
-
-uno::Type SAL_CALL
-UpdateCheckConfig::getElementType() throw (uno::RuntimeException)
-{
- return m_xContainer->getElementType();
-}
-
-//------------------------------------------------------------------------------
-
-sal_Bool SAL_CALL
-UpdateCheckConfig::hasElements() throw (uno::RuntimeException)
-{
- return m_xContainer->hasElements();
-}
-
-//------------------------------------------------------------------------------
-
-uno::Any SAL_CALL
-UpdateCheckConfig::getByName( const ::rtl::OUString& aName )
- throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
-{
- uno::Any aValue = m_xContainer->getByName( aName );
-
- // Provide dynamic default value
- if( aName.equalsAscii(DOWNLOAD_DESTINATION) )
- {
- rtl::OUString aStr;
- aValue >>= aStr;
-
- if( aStr.getLength() == 0 )
- aValue = uno::makeAny(getDesktopDirectory());
- }
-
- return aValue;
-}
-
-//------------------------------------------------------------------------------
-
-uno::Sequence< ::rtl::OUString > SAL_CALL
-UpdateCheckConfig::getElementNames( ) throw (uno::RuntimeException)
-{
- return m_xContainer->getElementNames();
-}
-
-//------------------------------------------------------------------------------
-
-sal_Bool SAL_CALL
-UpdateCheckConfig::hasByName( const ::rtl::OUString& aName ) throw (uno::RuntimeException)
-{
- return m_xContainer->hasByName( aName );
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL
-UpdateCheckConfig::replaceByName( const ::rtl::OUString& aName, const uno::Any& aElement )
- throw (lang::IllegalArgumentException, container::NoSuchElementException,
- lang::WrappedTargetException, uno::RuntimeException)
-{
- return m_xContainer->replaceByName( aName, aElement );
-}
-
-//------------------------------------------------------------------------------
-// XChangesBatch
-
-void SAL_CALL
-UpdateCheckConfig::commitChanges()
- throw (lang::WrappedTargetException, uno::RuntimeException)
-{
- uno::Reference< util::XChangesBatch > xChangesBatch(m_xContainer, uno::UNO_QUERY);
- if( xChangesBatch.is() && xChangesBatch->hasPendingChanges() )
- {
- util::ChangesSet aChangesSet = xChangesBatch->getPendingChanges();
- xChangesBatch->commitChanges();
-
- if( m_rListener.is() )
- {
- const sal_Int32 nChanges = aChangesSet.getLength();
- rtl::OUString aString;
-
- for( sal_Int32 i=0; i<nChanges; ++i )
- {
- aChangesSet[i].Accessor >>= aString;
-
- // FIXME: use non IgnoreAsciiCase version as soon as it becomes available
- if( aString.endsWithIgnoreAsciiCaseAsciiL(AUTOCHECK_ENABLED "']", sizeof(AUTOCHECK_ENABLED)+1) )
- {
- sal_Bool bEnabled = sal_False;
- aChangesSet[i].Element >>= bEnabled;
- m_rListener->autoCheckStatusChanged(sal_True == bEnabled);
- }
- // FIXME: use non IgnoreAsciiCase version as soon as it becomes available
- else if( aString.endsWithIgnoreAsciiCaseAsciiL(CHECK_INTERVAL "']", sizeof(CHECK_INTERVAL)+1) )
- {
- m_rListener->autoCheckIntervalChanged();
- }
- }
- }
- }
-
- xChangesBatch = uno::Reference< util::XChangesBatch > ( m_xAvailableUpdates, uno::UNO_QUERY );
- if( xChangesBatch.is() && xChangesBatch->hasPendingChanges() )
- {
- util::ChangesSet aChangesSet = xChangesBatch->getPendingChanges();
- xChangesBatch->commitChanges();
- }
- xChangesBatch = uno::Reference< util::XChangesBatch > ( m_xIgnoredUpdates, uno::UNO_QUERY );
- if( xChangesBatch.is() && xChangesBatch->hasPendingChanges() )
- {
- util::ChangesSet aChangesSet = xChangesBatch->getPendingChanges();
- xChangesBatch->commitChanges();
- }
-}
-
-//------------------------------------------------------------------------------
-
-sal_Bool SAL_CALL
-UpdateCheckConfig::hasPendingChanges( ) throw (uno::RuntimeException)
-{
- uno::Reference< util::XChangesBatch > xChangesBatch(m_xContainer, uno::UNO_QUERY);
- if( xChangesBatch.is() )
- return xChangesBatch->hasPendingChanges();
-
- return sal_False;
-}
-
-//------------------------------------------------------------------------------
-
-uno::Sequence< util::ElementChange > SAL_CALL
-UpdateCheckConfig::getPendingChanges( ) throw (uno::RuntimeException)
-{
- uno::Reference< util::XChangesBatch > xChangesBatch(m_xContainer, uno::UNO_QUERY);
- if( xChangesBatch.is() )
- return xChangesBatch->getPendingChanges();
-
- return uno::Sequence< util::ElementChange >();
-}
-
-//------------------------------------------------------------------------------
-bool UpdateCheckConfig::storeExtensionVersion( const rtl::OUString& rExtensionName,
- const rtl::OUString& rVersion )
-{
- bool bNotify = true;
-
- if ( m_xAvailableUpdates->hasByName( rExtensionName ) )
- uno::Reference< beans::XPropertySet >( m_xAvailableUpdates->getByName( rExtensionName ), uno::UNO_QUERY_THROW )->setPropertyValue( PROPERTY_VERSION, uno::Any( rVersion ) );
- else
- {
- uno::Reference< beans::XPropertySet > elem( uno::Reference< lang::XSingleServiceFactory >( m_xAvailableUpdates, uno::UNO_QUERY_THROW )->createInstance(), uno::UNO_QUERY_THROW );
- elem->setPropertyValue( PROPERTY_VERSION, uno::Any( rVersion ) );
- m_xAvailableUpdates->insertByName( rExtensionName, uno::Any( elem ) );
- }
-
- if ( m_xIgnoredUpdates->hasByName( rExtensionName ) )
- {
- ::rtl::OUString aIgnoredVersion;
- uno::Any aValue( uno::Reference< beans::XPropertySet >( m_xIgnoredUpdates->getByName( rExtensionName ), uno::UNO_QUERY_THROW )->getPropertyValue( PROPERTY_VERSION ) );
- aValue >>= aIgnoredVersion;
- if ( aIgnoredVersion.getLength() == 0 ) // no version means ignore all updates
- bNotify = false;
- else if ( aIgnoredVersion == rVersion ) // the user wanted to ignore this update
- bNotify = false;
- }
-
- commitChanges();
-
- return bNotify;
-}
-
-//------------------------------------------------------------------------------
-bool UpdateCheckConfig::checkExtensionVersion( const rtl::OUString& rExtensionName,
- const rtl::OUString& rVersion )
-{
- if ( m_xAvailableUpdates->hasByName( rExtensionName ) )
- {
- ::rtl::OUString aStoredVersion;
- uno::Any aValue( uno::Reference< beans::XPropertySet >( m_xAvailableUpdates->getByName( rExtensionName ), uno::UNO_QUERY_THROW )->getPropertyValue( PROPERTY_VERSION ) );
- aValue >>= aStoredVersion;
-
- if ( m_xIgnoredUpdates->hasByName( rExtensionName ) )
- {
- ::rtl::OUString aIgnoredVersion;
- uno::Any aValue2( uno::Reference< beans::XPropertySet >( m_xIgnoredUpdates->getByName( rExtensionName ), uno::UNO_QUERY_THROW )->getPropertyValue( PROPERTY_VERSION ) );
- aValue2 >>= aIgnoredVersion;
- if ( aIgnoredVersion.getLength() == 0 ) // no version means ignore all updates
- return false;
- else if ( aIgnoredVersion == aStoredVersion ) // the user wanted to ignore this update
- return false;
- // TODO: else delete ignored entry?
- }
- if ( isVersionGreater( rVersion, aStoredVersion ) )
- return true;
- else
- {
- m_xAvailableUpdates->removeByName( rExtensionName );
- commitChanges();
- }
- }
-
- return false;
-}
-
-//------------------------------------------------------------------------------
-rtl::OUString UpdateCheckConfig::getSubVersion( const rtl::OUString& rVersion,
- sal_Int32 *nIndex )
-{
- while ( *nIndex < rVersion.getLength() && rVersion[*nIndex] == '0')
- {
- ++*nIndex;
- }
-
- return rVersion.getToken( 0, '.', *nIndex );
-}
-
-//------------------------------------------------------------------------------
-// checks if the second version string is greater than the first one
-
-bool UpdateCheckConfig::isVersionGreater( const rtl::OUString& rVersion1,
- const rtl::OUString& rVersion2 )
-{
- for ( sal_Int32 i1 = 0, i2 = 0; i1 >= 0 || i2 >= 0; )
- {
- ::rtl::OUString sSub1( getSubVersion( rVersion1, &i1 ) );
- ::rtl::OUString sSub2( getSubVersion( rVersion2, &i2 ) );
-
- if ( sSub1.getLength() < sSub2.getLength() ) {
- return true;
- } else if ( sSub1.getLength() > sSub2.getLength() ) {
- return false;
- } else if ( sSub1 < sSub2 ) {
- return true;
- } else if ( sSub1 > sSub2 ) {
- return false;
- }
- }
- return false;
-}
-
-//------------------------------------------------------------------------------
-//------------------------------------------------------------------------------
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL
-UpdateCheckConfig::getImplementationName() throw (uno::RuntimeException)
-{
- return getImplName();
-}
-
-//------------------------------------------------------------------------------
-
-sal_Bool SAL_CALL
-UpdateCheckConfig::supportsService(rtl::OUString const & serviceName)
- throw (uno::RuntimeException)
-{
- uno::Sequence< rtl::OUString > aServiceNameList = getServiceNames();
-
- for( sal_Int32 n=0; n < aServiceNameList.getLength(); n++ )
- if( aServiceNameList[n].equals(serviceName) )
- return sal_True;
-
- return sal_False;
-}
-
-//------------------------------------------------------------------------------
-
-uno::Sequence< rtl::OUString > SAL_CALL
-UpdateCheckConfig::getSupportedServiceNames() throw (uno::RuntimeException)
-{
- return getServiceNames();
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */