2010-10-12 15:57:08 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
re-base on ALv2 code. Includes (at least) relevant parts of:
linecap: Reintegrating finished LineCap feature
Patch contributed by Regina Henschel
http://svn.apache.org/viewvc?view=revision&revision=1232507
Patches contributed by Sven Jacobi
impress212: #i81610# fixed animation export
http://svn.apache.org/viewvc?view=revision&revision=1167620
impress212: drawinglayer gbuild environment changes
http://svn.apache.org/viewvc?view=revision&revision=1167627
http://svn.apache.org/viewvc?view=revision&revision=1167628
impress212: DffPropSet -> minor code improvements, removing table
http://svn.apache.org/viewvc?view=revision&revision=1167634
impress212: #158494# fixed excel import (text rotation)
http://svn.apache.org/viewvc?view=revision&revision=1167638
Patches contributed by Armin Le Grand
Svg: Reintegrated Svg replacement from /branches/alg/svgreplavement
http://svn.apache.org/viewvc?view=revision&revision=1220836
#118728# changed indentifying definitions for Svg file detection
http://svn.apache.org/viewvc?view=revision&revision=1229961
#118838# LineGeometry creation for complicated cases optimized to
create single Polygons
http://svn.apache.org/viewvc?view=revision&revision=1236232
#119176# corrected file type detection for SVG for svg files
without xml header
http://svn.apache.org/viewvc?view=revision&revision=1309445
#118728# Extended Svg file detection
http://svn.apache.org/viewvc?view=revision&revision=1230531
#118529# solve break converters and convert commands for OLEs and images
http://svn.apache.org/viewvc?view=revision&revision=1186168
svg: added WaE changes from branch svgreplacement to trunc
http://svn.apache.org/viewvc?view=revision&revision=1222974
svg: corrected missing member initialization
http://svn.apache.org/viewvc?view=revision&revision=1226134
fix for #118525#: Using primitives for chart sub-geometry visualisation
http://svn.apache.org/viewvc?view=revision&revision=1226879
#118898# Adapted ImpGraphic::ImplGetBitmap to correctly convert
metafiles to bitmapEx ...
http://svn.apache.org/viewvc?view=revision&revision=1293316
fix for #118525#: removed no longer used variable maOriginalMapMode, one
more exception eliminated
http://svn.apache.org/viewvc?view=revision&revision=1227097
#16758# Added buffering to the VDev usages of the VclProcessor2D derivates...
http://svn.apache.org/viewvc?view=revision&revision=1229521
#116758# Secured VDev buffer device to Vcl deinit
http://svn.apache.org/viewvc?view=revision&revision=1230574
#116758# added remembering allocated VDevs for VDevBuffer to be able to also
delete these when vcl goes down; it should never happen, but You never know
http://svn.apache.org/viewvc?view=revision&revision=1230927
#118730# Changed SvgClipPathNode to use MaskPrimitive2D for primitive
representation instead of TransparencePrimitive2D
http://svn.apache.org/viewvc?view=revision&revision=1231198
#118822# secured 3D geometry creation (slices) by subdividing the 2D
source polyPolygon early
http://svn.apache.org/viewvc?view=revision&revision=1234749
#118829# enhanced Svg gradient quality, obstacles avoided
http://svn.apache.org/viewvc?view=revision&revision=1235361
#118834# Unified usage of TextBreakupHelper as single tooling class
for i18n text primitive breakup
http://svn.apache.org/viewvc?view=revision&revision=1236110
#118853# added square pixel size limit to conversion of
TransparencePrimitive2D to Metafile action
http://svn.apache.org/viewvc?view=revision&revision=1237656
#118824# coreccted mirroring and boundrect when the graphicmanager
is used for bitmap output
http://svn.apache.org/viewvc?view=revision&revision=1240097
#115092# Corrected VclProcessor2D::RenderPolygonStrokePrimitive2D for
various optimization scenarios
http://svn.apache.org/viewvc?view=revision&revision=1241434
#118783# Corrected errors in ID strings, corrected Svg line/fill export,
corrected polygon close state
http://svn.apache.org/viewvc?view=revision&revision=1232006
#118796# corrected null-pointer usage in SVG text exporter
http://svn.apache.org/viewvc?view=revision&revision=1240262
#118729# Use GraphicStreamUrl and GraphicUrl to allow multi image
import with linked graphics, too
http://svn.apache.org/viewvc?view=revision&revision=1229962
#118898# corrected error in GDIMetaFile::GetBoundRect in handling
MetaFloatTransparentAction
http://svn.apache.org/viewvc?view=revision&revision=1293349
#118855# Corrected handling of possibly created empty clipRegions
after PolyPolygon clipping
http://svn.apache.org/viewvc?view=revision&revision=1237725
#115962# Better (but not yet optimal, see comments in task) handling
of MetaFloatTransparentAction in PDF export
http://svn.apache.org/viewvc?view=revision&revision=1241078
IP clearance: #118466# This patch removes librsvg, libcroco, libgsf, ...
http://svn.apache.org/viewvc?view=revision&revision=1200879
118779# Added svg content streaming in/out to ImpGraphic stream operators
http://svn.apache.org/viewvc?view=revision&revision=1231908
linecap: correctons for WaE and mac drawing
http://svn.apache.org/viewvc?view=revision&revision=1232793
svg: uses current system Dpi for Svg replacement image creation
http://svn.apache.org/viewvc?view=revision&revision=1233948
Patches contributed by Mathias Bauer (and others)
gnumake4 work variously
http://svn.apache.org/viewvc?view=revision&revision=1394326
http://svn.apache.org/viewvc?view=revision&revision=1396797
http://svn.apache.org/viewvc?view=revision&revision=1397315
http://svn.apache.org/viewvc?view=revision&revision=1394326
Remove duplicate header includes.
cws mba34issues01: #i117720#: convert assertion into warning
http://svn.apache.org/viewvc?view=revision&revision=1172352
118485 - Styles for OLEs are not saved. Submitted by Armin Le Grand.
http://svn.apache.org/viewvc?view=revision&revision=1182166
cws mba34issues01: #i117714#: remove assertion
http://svn.apache.org/viewvc?view=revision&revision=1172357
Patch contributed by Jurgen Schmidt
add some additional checks to ensure proper reading operations
http://svn.apache.org/viewvc?view=revision&revision=1209022
mostly prefer our stream / bounds checking work.
Patches contributed by Herbert Duerr
#i118816# add clarifying comment regarding Font::*Color*() methods
http://svn.apache.org/viewvc?view=revision&revision=1233833
extend macro->string handling for empty strings
http://svn.apache.org/viewvc?view=revision&revision=1175801
avoid magic constants for SALCOLOR_NONE
http://svn.apache.org/viewvc?view=revision&revision=1177543
initialize slant properly in ImplFontMetricData constructor (author=iorsh)
http://svn.apache.org/viewvc?view=revision&revision=1177551
#i118675# make check for extension updates more stable
http://svn.apache.org/viewvc?view=revision&revision=1214797
#a118617# remove VBasicEventListener.dll binary
There are no known users depending on its CLSID
http://svn.apache.org/viewvc?view=revision&revision=1203697
Patches contributed by Ariel Constenla-Haile
Fix build breaker on Linux/gcc
http://svn.apache.org/viewvc?view=revision&revision=1221104
Fix crash when trying to instantiate css.graphic.GraphicRasterizer_RSVG
http://svn.apache.org/viewvc?view=revision&revision=1215559
Patches contributed by Oliver-Rainer Wittmann
sw34bf06: #i117962# - method <SwFlyFrm::IsPaint(..)> - consider
instances of <SwFlyDrawObj>
http://svn.apache.org/viewvc?view=revision&revision=1172120
sw34bf06: #i117783# - Writer's implementation of XPagePrintable -
apply print settings to new printing routines
http://svn.apache.org/viewvc?view=revision&revision=1172115
gnumake4 work variously from Hans-Joachim Lankenau
http://svn.apache.org/viewvc?view=revision&revision=1397315
http://svn.apache.org/viewvc?view=revision&revision=1396797
http://svn.apache.org/viewvc?view=revision&revision=1396782
http://svn.apache.org/viewvc?view=revision&revision=1394707
plus some amount of re-splitting of legacy headers.
Patch contributed by Pavel Janik
WaE: Remove unused variables.
http://svn.apache.org/viewvc?view=revision&revision=1230697
Patches contributed by Takashi Ono
mingwport35: i#117795: MinGW port fix for vcl2gnumake
http://svn.apache.org/viewvc?view=revision&revision=1172091
mingwport35: i#117795: MinGW port fix for vcl2gnumake
http://svn.apache.org/viewvc?view=revision&revision=1172091
Patch contributed by Christian Lippka
impress212: #i98044# re enable Text menu for outline and title shapes
http://svn.apache.org/viewvc?view=revision&revision=1167639
Patch contributed by Andre Fischer
118674: Made category B code optional and disabled by default.
http://svn.apache.org/viewvc?view=revision&revision=1215131
118881: Ignore empty paragraphs after bullets.
http://svn.apache.org/viewvc?view=revision&revision=1296205
Patches contributed by Philipp Lohmann
ooo340fixes: #i117780# use rtl allocator
http://svn.apache.org/viewvc?view=revision&revision=1172087
ooo34gsl02: #i117807# fix an off by one error (index actually
inside the pfb section header)
http://svn.apache.org/viewvc?view=revision&revision=1167576
various cleanups, related compilation fixes, warning cleanups, re-working
of obsolete stl template pieces to use boost instead, changed string
classes, re-adapt KDE about data, about dialog, fixing warnings,
and other fixes & improvements.
Disable svg import / render for about/ branding code-paths for now.
Restore full icon theme set.
Remove OS/2 conditionals and sources.
Remove conflicting gtk/full-screen monitors support.
Retain existing svg rasterizer files - temporarily disabled.
Standardize stringificaiton and fixup dllpostfix issues.
Rename SvgGradientHelper::== to equalTo to avoid overloading issues.
Use the flat GdiPlus API for LineCaps calls.
2012-10-09 12:22:23 +01:00
|
|
|
/*
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*
|
|
|
|
* This file incorporates work covered by the following license notice:
|
|
|
|
*
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
|
|
* with this work for additional information regarding copyright
|
|
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
|
|
*/
|
2006-08-04 08:56:38 +00:00
|
|
|
|
|
|
|
#include "updatecheckconfig.hxx"
|
|
|
|
#include <com/sun/star/beans/PropertyValue.hpp>
|
2007-07-06 13:37:01 +00:00
|
|
|
#include <com/sun/star/beans/XPropertyState.hpp>
|
2010-10-28 11:15:18 +02:00
|
|
|
#include <com/sun/star/beans/XPropertySet.hpp>
|
2011-11-14 22:07:23 +01:00
|
|
|
#include <com/sun/star/configuration/theDefaultProvider.hpp>
|
2010-10-28 11:15:18 +02:00
|
|
|
#include <com/sun/star/lang/XSingleServiceFactory.hpp>
|
2006-08-04 08:56:38 +00:00
|
|
|
#include <osl/security.hxx>
|
2007-07-06 13:37:01 +00:00
|
|
|
#include <osl/time.h>
|
|
|
|
#include <osl/file.hxx>
|
2010-12-03 13:59:47 +00:00
|
|
|
#include <sal/macros.h>
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
#ifdef WNT
|
2007-09-06 12:38:19 +00:00
|
|
|
#ifdef _MSC_VER
|
2007-07-06 13:37:01 +00:00
|
|
|
#pragma warning(push,1) // disable warnings within system headers
|
|
|
|
#pragma warning(disable: 4917)
|
2007-09-06 12:38:19 +00:00
|
|
|
#endif
|
2007-07-06 13:37:01 +00:00
|
|
|
#include <shlobj.h>
|
2007-09-06 12:38:19 +00:00
|
|
|
#ifdef _MSC_VER
|
2007-07-06 13:37:01 +00:00
|
|
|
#pragma warning(pop)
|
|
|
|
#endif
|
2007-09-06 12:38:19 +00:00
|
|
|
#endif
|
2006-08-04 08:56:38 +00:00
|
|
|
|
|
|
|
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 ;
|
|
|
|
|
2007-07-06 13:37:01 +00:00
|
|
|
#define LAST_CHECK "LastCheck"
|
|
|
|
#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"
|
2007-07-31 14:57:08 +00:00
|
|
|
#define DOWNLOAD_SIZE "DownloadSize"
|
2007-07-06 13:37:01 +00:00
|
|
|
#define DOWNLOAD_PAUSED "DownloadPaused"
|
|
|
|
#define DOWNLOAD_DESTINATION "DownloadDestination"
|
|
|
|
#define RELEASE_NOTE "ReleaseNote"
|
|
|
|
|
2013-02-01 09:33:19 +01:00
|
|
|
#define PROPERTY_VERSION "Version"
|
2010-10-28 11:15:18 +02:00
|
|
|
|
2007-07-06 13:37:01 +00:00
|
|
|
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
|
|
|
|
};
|
|
|
|
|
2010-12-03 13:59:47 +00:00
|
|
|
static const sal_uInt32 nUpdateEntryProperties = SAL_N_ELEMENTS(aUpdateEntryProperties);
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
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 >();
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString
|
2007-07-06 13:37:01 +00:00
|
|
|
UpdateCheckROModel::getStringValue(const sal_Char * pStr) const
|
|
|
|
{
|
|
|
|
uno::Any aAny( m_aNameAccess.getValue(pStr) );
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aRet;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
aAny >>= aRet;
|
|
|
|
|
|
|
|
return aRet;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString UpdateCheckROModel::getLocalFileName() const
|
2007-07-06 13:37:01 +00:00
|
|
|
{
|
2007-07-31 14:57:08 +00:00
|
|
|
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;
|
2007-07-06 13:37:01 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString
|
2007-07-06 13:37:01 +00:00
|
|
|
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) ) );
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OString aStr(RELEASE_NOTE);
|
2007-07-06 13:37:01 +00:00
|
|
|
for(sal_Int32 n=1; n < 6; ++n )
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aUStr = getStringValue(
|
2013-08-21 15:37:12 +02:00
|
|
|
OString(aStr + OString::number(n)).getStr());
|
2011-12-22 15:35:41 -02:00
|
|
|
if( !aUStr.isEmpty() )
|
2007-07-06 13:37:01 +00:00
|
|
|
rInfo.ReleaseNotes.push_back(ReleaseNote((sal_Int8) n, aUStr));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString UpdateCheckConfig::getDesktopDirectory()
|
2007-07-06 13:37:01 +00:00
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aRet;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
#ifdef WNT
|
|
|
|
WCHAR szPath[MAX_PATH];
|
|
|
|
|
|
|
|
if( ! FAILED( SHGetSpecialFolderPathW( NULL, szPath, CSIDL_DESKTOPDIRECTORY, true ) ) )
|
2007-07-31 14:57:08 +00:00
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
aRet = OUString( reinterpret_cast< sal_Unicode * >(szPath) );
|
2007-07-31 14:57:08 +00:00
|
|
|
osl::FileBase::getFileURLFromSystemPath( aRet, aRet );
|
|
|
|
}
|
2007-07-06 13:37:01 +00:00
|
|
|
#else
|
|
|
|
// This should become a desktop specific setting in some system backend ..
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aHomeDir;
|
2009-05-15 14:12:42 +00:00
|
|
|
osl::Security().getHomeDir( aHomeDir );
|
2013-04-07 12:06:47 +02:00
|
|
|
aRet = aHomeDir + OUString("/Desktop");
|
2009-05-15 14:12:42 +00:00
|
|
|
|
|
|
|
// Set path to home directory when there is no /Desktop directory
|
|
|
|
osl::Directory aDocumentsDir( aRet );
|
|
|
|
if( osl::FileBase::E_None != aDocumentsDir.open() )
|
|
|
|
aRet = aHomeDir;
|
2007-07-06 13:37:01 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
return aRet;
|
|
|
|
}
|
2006-08-04 08:56:38 +00:00
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString UpdateCheckConfig::getAllUsersDirectory()
|
2007-07-06 13:37:01 +00:00
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aRet;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
#ifdef WNT
|
|
|
|
WCHAR szPath[MAX_PATH];
|
|
|
|
|
|
|
|
if( ! FAILED( SHGetSpecialFolderPathW( NULL, szPath, CSIDL_COMMON_DOCUMENTS, true ) ) )
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
aRet = OUString( reinterpret_cast< sal_Unicode * >(szPath) );
|
2012-01-02 20:56:04 +01:00
|
|
|
osl::FileBase::getFileURLFromSystemPath( aRet, aRet );
|
2007-07-06 13:37:01 +00:00
|
|
|
}
|
|
|
|
#else
|
|
|
|
osl::FileBase::getTempDirURL(aRet);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return aRet;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
2010-10-28 11:15:18 +02:00
|
|
|
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 )
|
|
|
|
{}
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
UpdateCheckConfig::~UpdateCheckConfig()
|
2010-10-28 11:15:18 +02:00
|
|
|
{}
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
::rtl::Reference< UpdateCheckConfig >
|
|
|
|
UpdateCheckConfig::get(
|
|
|
|
const uno::Reference<uno::XComponentContext>& xContext,
|
|
|
|
const ::rtl::Reference< UpdateCheckConfigListener >& rListener)
|
2006-08-04 08:56:38 +00:00
|
|
|
{
|
|
|
|
uno::Reference< lang::XMultiServiceFactory > xConfigProvider(
|
2011-11-14 22:07:23 +01:00
|
|
|
com::sun::star::configuration::theDefaultProvider::get( xContext ) );
|
2006-08-04 08:56:38 +00:00
|
|
|
|
|
|
|
beans::PropertyValue aProperty;
|
2013-02-01 09:33:19 +01:00
|
|
|
aProperty.Name = "nodepath";
|
|
|
|
aProperty.Value = uno::makeAny( OUString("org.openoffice.Office.Jobs/Jobs/UpdateCheck/Arguments") );
|
2006-08-04 08:56:38 +00:00
|
|
|
|
|
|
|
uno::Sequence< uno::Any > aArgumentList( 1 );
|
|
|
|
aArgumentList[0] = uno::makeAny( aProperty );
|
|
|
|
|
2007-07-06 13:37:01 +00:00
|
|
|
uno::Reference< container::XNameContainer > xContainer(
|
2006-08-04 08:56:38 +00:00
|
|
|
xConfigProvider->createInstanceWithArguments(
|
2013-02-01 09:33:19 +01:00
|
|
|
"com.sun.star.configuration.ConfigurationUpdateAccess", aArgumentList ),
|
2006-08-04 08:56:38 +00:00
|
|
|
uno::UNO_QUERY_THROW );
|
2007-07-06 13:37:01 +00:00
|
|
|
|
2013-02-01 09:33:19 +01:00
|
|
|
aProperty.Value = uno::makeAny( OUString("/org.openoffice.Office.ExtensionManager/ExtensionUpdateData/IgnoredUpdates") );
|
2010-10-28 11:15:18 +02:00
|
|
|
aArgumentList[0] = uno::makeAny( aProperty );
|
2013-02-01 09:33:19 +01:00
|
|
|
uno::Reference< container::XNameContainer > xIgnoredExt( xConfigProvider->createInstanceWithArguments( "com.sun.star.configuration.ConfigurationUpdateAccess", aArgumentList ), uno::UNO_QUERY_THROW );
|
2010-10-28 11:15:18 +02:00
|
|
|
|
2013-02-01 09:33:19 +01:00
|
|
|
aProperty.Value = uno::makeAny( OUString("/org.openoffice.Office.ExtensionManager/ExtensionUpdateData/AvailableUpdates") );
|
2010-10-28 11:15:18 +02:00
|
|
|
aArgumentList[0] = uno::makeAny( aProperty );
|
2013-02-01 09:33:19 +01:00
|
|
|
uno::Reference< container::XNameContainer > xUpdateAvail( xConfigProvider->createInstanceWithArguments( "com.sun.star.configuration.ConfigurationUpdateAccess", aArgumentList ), uno::UNO_QUERY_THROW );
|
2010-10-28 11:15:18 +02:00
|
|
|
|
|
|
|
return new UpdateCheckConfig( xContainer, xUpdateAvail, xIgnoredExt, rListener );
|
2006-08-04 08:56:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2007-07-06 13:37:01 +00:00
|
|
|
bool
|
|
|
|
UpdateCheckConfig::isAutoCheckEnabled() const
|
|
|
|
{
|
2008-01-14 14:05:29 +00:00
|
|
|
sal_Bool nValue = sal_False;
|
2013-02-01 09:33:19 +01:00
|
|
|
const_cast < UpdateCheckConfig *> (this)->getByName( AUTOCHECK_ENABLED ) >>= nValue;
|
2007-07-06 13:37:01 +00:00
|
|
|
return nValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
bool
|
|
|
|
UpdateCheckConfig::isAutoDownloadEnabled() const
|
2006-08-04 08:56:38 +00:00
|
|
|
{
|
2008-01-14 14:05:29 +00:00
|
|
|
sal_Bool nValue = sal_False;
|
2013-02-01 09:33:19 +01:00
|
|
|
const_cast < UpdateCheckConfig *> (this)->getByName( AUTODOWNLOAD_ENABLED ) >>= nValue;
|
2007-07-06 13:37:01 +00:00
|
|
|
return nValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString
|
2007-07-06 13:37:01 +00:00
|
|
|
UpdateCheckConfig::getUpdateEntryVersion() const
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aValue;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
// getByName is defined as non const in XNameAccess
|
2013-02-01 09:33:19 +01:00
|
|
|
const_cast < UpdateCheckConfig *> (this)->getByName( OLD_VERSION ) >>= aValue;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
return aValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
sal_Int64
|
|
|
|
UpdateCheckConfig::getLastChecked() const
|
|
|
|
{
|
2008-01-14 14:05:29 +00:00
|
|
|
sal_Int64 nValue = 0;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
// getByName is defined as non const in XNameAccess
|
2013-02-01 09:33:19 +01:00
|
|
|
const_cast < UpdateCheckConfig *> (this)->getByName( LAST_CHECK ) >>= nValue;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
return nValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
sal_Int64
|
|
|
|
UpdateCheckConfig::getCheckInterval() const
|
|
|
|
{
|
2008-01-14 14:05:29 +00:00
|
|
|
sal_Int64 nValue = 0;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
// getByName is defined as non const in XNameAccess
|
2013-02-01 09:33:19 +01:00
|
|
|
const_cast < UpdateCheckConfig *> (this)->getByName( CHECK_INTERVAL ) >>= nValue;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
return nValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString
|
2007-07-06 13:37:01 +00:00
|
|
|
UpdateCheckConfig::getLocalFileName() const
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aName = LOCAL_FILE;
|
|
|
|
OUString aRet;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
if( m_xContainer->hasByName(aName) )
|
|
|
|
m_xContainer->getByName(aName) >>= aRet;
|
|
|
|
|
|
|
|
return aRet;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString
|
2007-07-06 13:37:01 +00:00
|
|
|
UpdateCheckConfig::getDownloadDestination() const
|
|
|
|
{
|
2013-02-01 09:33:19 +01:00
|
|
|
OUString aName = DOWNLOAD_DESTINATION;
|
|
|
|
OUString aRet;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
const_cast <UpdateCheckConfig *> (this)->getByName(aName) >>= aRet;
|
|
|
|
|
|
|
|
return aRet;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
void
|
2013-04-07 12:06:47 +02:00
|
|
|
UpdateCheckConfig::storeLocalFileName(const OUString& rLocalFileName, sal_Int64 nFileSize)
|
2007-07-06 13:37:01 +00:00
|
|
|
{
|
2007-07-31 14:57:08 +00:00
|
|
|
const sal_uInt8 nItems = 2;
|
2013-02-14 22:01:08 +01:00
|
|
|
const OUString aNameList[nItems] = { OUString(LOCAL_FILE), OUString(DOWNLOAD_SIZE) };
|
2007-07-31 14:57:08 +00:00
|
|
|
const uno::Any aValueList[nItems] = { uno::makeAny(rLocalFileName), uno::makeAny(nFileSize) };
|
2007-07-06 13:37:01 +00:00
|
|
|
|
2007-07-31 14:57:08 +00:00
|
|
|
for( sal_uInt8 i=0; i < nItems; ++i )
|
|
|
|
{
|
|
|
|
if( m_xContainer->hasByName(aNameList[i]) )
|
|
|
|
m_xContainer->replaceByName(aNameList[i], aValueList[i]);
|
|
|
|
else
|
2010-05-06 11:15:51 +02:00
|
|
|
m_xContainer->insertByName(aNameList[i], aValueList[i]);
|
2007-07-31 14:57:08 +00:00
|
|
|
}
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
commitChanges();
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
void
|
|
|
|
UpdateCheckConfig::clearLocalFileName()
|
|
|
|
{
|
2007-07-31 14:57:08 +00:00
|
|
|
const sal_uInt8 nItems = 2;
|
2013-02-14 22:01:08 +01:00
|
|
|
const OUString aNameList[nItems] = { OUString(LOCAL_FILE), OUString(DOWNLOAD_SIZE) };
|
2007-07-06 13:37:01 +00:00
|
|
|
|
2007-07-31 14:57:08 +00:00
|
|
|
for( sal_uInt8 i=0; i < nItems; ++i )
|
|
|
|
{
|
|
|
|
if( m_xContainer->hasByName(aNameList[i]) )
|
|
|
|
m_xContainer->removeByName(aNameList[i]);
|
|
|
|
}
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
commitChanges();
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
void
|
|
|
|
UpdateCheckConfig::storeDownloadPaused(bool paused)
|
|
|
|
{
|
2013-02-01 09:33:19 +01:00
|
|
|
replaceByName(DOWNLOAD_PAUSED , uno::makeAny(paused));
|
2007-07-06 13:37:01 +00:00
|
|
|
commitChanges();
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
void
|
|
|
|
UpdateCheckConfig::updateLastChecked()
|
|
|
|
{
|
|
|
|
TimeValue systime;
|
|
|
|
osl_getSystemTime(&systime);
|
|
|
|
|
|
|
|
sal_Int64 lastCheck = systime.Seconds;
|
|
|
|
|
2013-02-01 09:33:19 +01:00
|
|
|
replaceByName(LAST_CHECK, uno::makeAny(lastCheck));
|
2007-07-06 13:37:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
void
|
2013-04-07 12:06:47 +02:00
|
|
|
UpdateCheckConfig::storeUpdateFound( const UpdateInfo& rInfo, const OUString& aCurrentBuild)
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
{
|
|
|
|
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)
|
|
|
|
};
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aName;
|
2007-07-06 13:37:01 +00:00
|
|
|
for( sal_uInt32 n=0; n < nUpdateEntryProperties; ++n )
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
aName = OUString::createFromAscii(aUpdateEntryProperties[n]);
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
if( m_xContainer->hasByName(aName) )
|
|
|
|
m_xContainer->replaceByName(aName, aValues[n]);
|
|
|
|
else
|
|
|
|
m_xContainer->insertByName(aName,aValues[n]);
|
|
|
|
}
|
|
|
|
|
|
|
|
commitChanges();
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
void
|
|
|
|
UpdateCheckConfig::clearUpdateFound()
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aName;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
for( sal_uInt32 n=0; n < nUpdateEntryProperties; ++n )
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
aName = OUString::createFromAscii(aUpdateEntryProperties[n]);
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
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);
|
2013-04-07 12:06:47 +02:00
|
|
|
m_xContainer->replaceByName(aName, uno::makeAny(OUString()));
|
2007-07-06 13:37:01 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* As we have removed UpdateVersionFound from the shared configuration
|
|
|
|
* existing entries in the user layer do not have a oor operation and
|
2013-04-15 05:10:29 +02:00
|
|
|
* thus are completely ignored (which also means they can not be removed).
|
2007-07-06 13:37:01 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
commitChanges();
|
2006-08-04 08:56:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
uno::Sequence< OUString >
|
2006-08-04 08:56:38 +00:00
|
|
|
UpdateCheckConfig::getServiceNames()
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
uno::Sequence< OUString > aServiceList(1);
|
2013-02-01 09:33:19 +01:00
|
|
|
aServiceList[0] = "com.sun.star.setup.UpdateCheckConfig";
|
2006-08-04 08:56:38 +00:00
|
|
|
return aServiceList;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString
|
2006-08-04 08:56:38 +00:00
|
|
|
UpdateCheckConfig::getImplName()
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
return OUString("vnd.sun.UpdateCheckConfig");
|
2006-08-04 08:56:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
uno::Type SAL_CALL
|
|
|
|
UpdateCheckConfig::getElementType() throw (uno::RuntimeException)
|
|
|
|
{
|
2007-07-06 13:37:01 +00:00
|
|
|
return m_xContainer->getElementType();
|
2006-08-04 08:56:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
sal_Bool SAL_CALL
|
|
|
|
UpdateCheckConfig::hasElements() throw (uno::RuntimeException)
|
|
|
|
{
|
2007-07-06 13:37:01 +00:00
|
|
|
return m_xContainer->hasElements();
|
2006-08-04 08:56:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
uno::Any SAL_CALL
|
2013-04-07 12:06:47 +02:00
|
|
|
UpdateCheckConfig::getByName( const OUString& aName )
|
2006-08-04 08:56:38 +00:00
|
|
|
throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
|
|
|
|
{
|
2007-07-06 13:37:01 +00:00
|
|
|
uno::Any aValue = m_xContainer->getByName( aName );
|
2006-08-04 08:56:38 +00:00
|
|
|
|
|
|
|
// Provide dynamic default value
|
2007-07-06 13:37:01 +00:00
|
|
|
if( aName.equalsAscii(DOWNLOAD_DESTINATION) )
|
2006-08-04 08:56:38 +00:00
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aStr;
|
2006-08-04 08:56:38 +00:00
|
|
|
aValue >>= aStr;
|
|
|
|
|
2011-12-22 15:35:41 -02:00
|
|
|
if( aStr.isEmpty() )
|
2007-07-06 13:37:01 +00:00
|
|
|
aValue = uno::makeAny(getDesktopDirectory());
|
2006-08-04 08:56:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return aValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
uno::Sequence< OUString > SAL_CALL
|
2006-08-04 08:56:38 +00:00
|
|
|
UpdateCheckConfig::getElementNames( ) throw (uno::RuntimeException)
|
|
|
|
{
|
2007-07-06 13:37:01 +00:00
|
|
|
return m_xContainer->getElementNames();
|
2006-08-04 08:56:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
sal_Bool SAL_CALL
|
2013-04-07 12:06:47 +02:00
|
|
|
UpdateCheckConfig::hasByName( const OUString& aName ) throw (uno::RuntimeException)
|
2006-08-04 08:56:38 +00:00
|
|
|
{
|
2007-07-06 13:37:01 +00:00
|
|
|
return m_xContainer->hasByName( aName );
|
2006-08-04 08:56:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
void SAL_CALL
|
2013-04-07 12:06:47 +02:00
|
|
|
UpdateCheckConfig::replaceByName( const OUString& aName, const uno::Any& aElement )
|
2006-08-04 08:56:38 +00:00
|
|
|
throw (lang::IllegalArgumentException, container::NoSuchElementException,
|
|
|
|
lang::WrappedTargetException, uno::RuntimeException)
|
|
|
|
{
|
2007-07-06 13:37:01 +00:00
|
|
|
return m_xContainer->replaceByName( aName, aElement );
|
2006-08-04 08:56:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
2007-07-06 13:37:01 +00:00
|
|
|
// XChangesBatch
|
2006-08-04 08:56:38 +00:00
|
|
|
|
|
|
|
void SAL_CALL
|
2007-07-06 13:37:01 +00:00
|
|
|
UpdateCheckConfig::commitChanges()
|
2006-08-04 08:56:38 +00:00
|
|
|
throw (lang::WrappedTargetException, uno::RuntimeException)
|
|
|
|
{
|
2007-07-06 13:37:01 +00:00
|
|
|
uno::Reference< util::XChangesBatch > xChangesBatch(m_xContainer, uno::UNO_QUERY);
|
2006-11-01 09:12:50 +00:00
|
|
|
if( xChangesBatch.is() && xChangesBatch->hasPendingChanges() )
|
|
|
|
{
|
2007-07-06 13:37:01 +00:00
|
|
|
util::ChangesSet aChangesSet = xChangesBatch->getPendingChanges();
|
2006-08-04 08:56:38 +00:00
|
|
|
xChangesBatch->commitChanges();
|
2006-11-01 09:12:50 +00:00
|
|
|
|
2007-07-06 13:37:01 +00:00
|
|
|
if( m_rListener.is() )
|
2006-11-01 09:12:50 +00:00
|
|
|
{
|
2007-07-06 13:37:01 +00:00
|
|
|
const sal_Int32 nChanges = aChangesSet.getLength();
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aString;
|
2007-07-06 13:37:01 +00:00
|
|
|
|
|
|
|
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) )
|
|
|
|
{
|
2008-01-14 14:05:29 +00:00
|
|
|
sal_Bool bEnabled = sal_False;
|
2007-07-06 13:37:01 +00:00
|
|
|
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();
|
|
|
|
}
|
|
|
|
}
|
2006-11-01 09:12:50 +00:00
|
|
|
}
|
|
|
|
}
|
2010-10-28 11:15:18 +02:00
|
|
|
|
|
|
|
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();
|
|
|
|
}
|
2006-08-04 08:56:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
sal_Bool SAL_CALL
|
|
|
|
UpdateCheckConfig::hasPendingChanges( ) throw (uno::RuntimeException)
|
|
|
|
{
|
2007-07-06 13:37:01 +00:00
|
|
|
uno::Reference< util::XChangesBatch > xChangesBatch(m_xContainer, uno::UNO_QUERY);
|
2006-08-04 08:56:38 +00:00
|
|
|
if( xChangesBatch.is() )
|
|
|
|
return xChangesBatch->hasPendingChanges();
|
|
|
|
|
|
|
|
return sal_False;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
uno::Sequence< util::ElementChange > SAL_CALL
|
|
|
|
UpdateCheckConfig::getPendingChanges( ) throw (uno::RuntimeException)
|
|
|
|
{
|
2007-07-06 13:37:01 +00:00
|
|
|
uno::Reference< util::XChangesBatch > xChangesBatch(m_xContainer, uno::UNO_QUERY);
|
2006-08-04 08:56:38 +00:00
|
|
|
if( xChangesBatch.is() )
|
|
|
|
return xChangesBatch->getPendingChanges();
|
|
|
|
|
|
|
|
return uno::Sequence< util::ElementChange >();
|
|
|
|
}
|
|
|
|
|
2007-11-19 15:48:28 +00:00
|
|
|
//------------------------------------------------------------------------------
|
2013-04-07 12:06:47 +02:00
|
|
|
bool UpdateCheckConfig::storeExtensionVersion( const OUString& rExtensionName,
|
|
|
|
const OUString& rVersion )
|
2007-11-19 15:48:28 +00:00
|
|
|
{
|
2010-10-28 11:15:18 +02:00
|
|
|
bool bNotify = true;
|
2007-11-19 15:48:28 +00:00
|
|
|
|
2010-10-28 11:15:18 +02:00
|
|
|
if ( m_xAvailableUpdates->hasByName( rExtensionName ) )
|
|
|
|
uno::Reference< beans::XPropertySet >( m_xAvailableUpdates->getByName( rExtensionName ), uno::UNO_QUERY_THROW )->setPropertyValue( PROPERTY_VERSION, uno::Any( rVersion ) );
|
2007-11-19 15:48:28 +00:00
|
|
|
else
|
2010-10-28 11:15:18 +02:00
|
|
|
{
|
|
|
|
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 ) )
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aIgnoredVersion;
|
2010-10-28 11:15:18 +02:00
|
|
|
uno::Any aValue( uno::Reference< beans::XPropertySet >( m_xIgnoredUpdates->getByName( rExtensionName ), uno::UNO_QUERY_THROW )->getPropertyValue( PROPERTY_VERSION ) );
|
|
|
|
aValue >>= aIgnoredVersion;
|
2011-12-22 15:35:41 -02:00
|
|
|
if ( aIgnoredVersion.isEmpty() ) // no version means ignore all updates
|
2010-10-28 11:15:18 +02:00
|
|
|
bNotify = false;
|
|
|
|
else if ( aIgnoredVersion == rVersion ) // the user wanted to ignore this update
|
|
|
|
bNotify = false;
|
|
|
|
}
|
2007-11-19 15:48:28 +00:00
|
|
|
|
|
|
|
commitChanges();
|
2010-10-28 11:15:18 +02:00
|
|
|
|
|
|
|
return bNotify;
|
2007-11-19 15:48:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
2013-04-07 12:06:47 +02:00
|
|
|
bool UpdateCheckConfig::checkExtensionVersion( const OUString& rExtensionName,
|
|
|
|
const OUString& rVersion )
|
2007-11-19 15:48:28 +00:00
|
|
|
{
|
2010-10-28 11:15:18 +02:00
|
|
|
if ( m_xAvailableUpdates->hasByName( rExtensionName ) )
|
2007-11-19 15:48:28 +00:00
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aStoredVersion;
|
2010-10-28 11:15:18 +02:00
|
|
|
uno::Any aValue( uno::Reference< beans::XPropertySet >( m_xAvailableUpdates->getByName( rExtensionName ), uno::UNO_QUERY_THROW )->getPropertyValue( PROPERTY_VERSION ) );
|
2007-11-19 15:48:28 +00:00
|
|
|
aValue >>= aStoredVersion;
|
|
|
|
|
2010-10-28 11:15:18 +02:00
|
|
|
if ( m_xIgnoredUpdates->hasByName( rExtensionName ) )
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString aIgnoredVersion;
|
2010-10-28 11:15:18 +02:00
|
|
|
uno::Any aValue2( uno::Reference< beans::XPropertySet >( m_xIgnoredUpdates->getByName( rExtensionName ), uno::UNO_QUERY_THROW )->getPropertyValue( PROPERTY_VERSION ) );
|
|
|
|
aValue2 >>= aIgnoredVersion;
|
2011-12-22 15:35:41 -02:00
|
|
|
if ( aIgnoredVersion.isEmpty() ) // no version means ignore all updates
|
2010-10-28 11:15:18 +02:00
|
|
|
return false;
|
|
|
|
else if ( aIgnoredVersion == aStoredVersion ) // the user wanted to ignore this update
|
|
|
|
return false;
|
|
|
|
// TODO: else delete ignored entry?
|
|
|
|
}
|
2007-11-19 15:48:28 +00:00
|
|
|
if ( isVersionGreater( rVersion, aStoredVersion ) )
|
|
|
|
return true;
|
|
|
|
else
|
|
|
|
{
|
2010-10-28 11:15:18 +02:00
|
|
|
m_xAvailableUpdates->removeByName( rExtensionName );
|
2007-11-19 15:48:28 +00:00
|
|
|
commitChanges();
|
|
|
|
}
|
|
|
|
}
|
2010-10-28 11:15:18 +02:00
|
|
|
|
2007-11-19 15:48:28 +00:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString UpdateCheckConfig::getSubVersion( const OUString& rVersion,
|
2007-11-19 15:48:28 +00:00
|
|
|
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
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
bool UpdateCheckConfig::isVersionGreater( const OUString& rVersion1,
|
|
|
|
const OUString& rVersion2 )
|
2007-11-19 15:48:28 +00:00
|
|
|
{
|
|
|
|
for ( sal_Int32 i1 = 0, i2 = 0; i1 >= 0 || i2 >= 0; )
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString sSub1( getSubVersion( rVersion1, &i1 ) );
|
|
|
|
OUString sSub2( getSubVersion( rVersion2, &i2 ) );
|
2007-11-19 15:48:28 +00:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2006-11-01 09:12:50 +00:00
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
//------------------------------------------------------------------------------
|
2006-08-04 08:56:38 +00:00
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString SAL_CALL
|
2006-08-04 08:56:38 +00:00
|
|
|
UpdateCheckConfig::getImplementationName() throw (uno::RuntimeException)
|
|
|
|
{
|
|
|
|
return getImplName();
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
sal_Bool SAL_CALL
|
2013-04-07 12:06:47 +02:00
|
|
|
UpdateCheckConfig::supportsService(OUString const & serviceName)
|
2006-08-04 08:56:38 +00:00
|
|
|
throw (uno::RuntimeException)
|
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
uno::Sequence< OUString > aServiceNameList = getServiceNames();
|
2006-08-04 08:56:38 +00:00
|
|
|
|
|
|
|
for( sal_Int32 n=0; n < aServiceNameList.getLength(); n++ )
|
|
|
|
if( aServiceNameList[n].equals(serviceName) )
|
|
|
|
return sal_True;
|
|
|
|
|
|
|
|
return sal_False;
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
uno::Sequence< OUString > SAL_CALL
|
2006-08-04 08:56:38 +00:00
|
|
|
UpdateCheckConfig::getSupportedServiceNames() throw (uno::RuntimeException)
|
|
|
|
{
|
|
|
|
return getServiceNames();
|
|
|
|
}
|
|
|
|
|
2007-11-19 15:48:28 +00:00
|
|
|
|
2010-10-12 15:57:08 +02:00
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|