Kaydet (Commit) 8cd6a947 authored tarafından Bjoern Michaelsen's avatar Bjoern Michaelsen

making org.freedesktop.PackageKit.Query and .Modify available

 - partial implementation of the SessionInstaller interfaces
 - accessable via service:
   org.freedesktop.PackageKit.SyncDbusSessionHelper

Change-Id: Ica91f481d041a066215fba3e808bf587e1271f1b
üst 81205206
......@@ -558,6 +558,7 @@ $(eval $(call gb_Helper_register_libraries,UNOLIBS_OOO, \
ldapbe2 \
localebe1 \
lomenubar \
losessioninstall \
macbe1 \
migrationoo2 \
migrationoo3 \
......
......@@ -4292,4 +4292,10 @@ $(eval $(call gb_UnoApi_add_idlfiles,offapi,offapi/com/sun/star/xsd,\
XDataType \
))
$(eval $(call gb_UnoApi_add_idlfiles,offapi,offapi/org/freedesktop/PackageKit,\
XSyncDbusSessionHelper \
XModify \
XQuery \
))
# vim: set noet sw=4 ts=4:
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* 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/.
*/
#ifndef org_freedesktop_PackageKit_XModify_idl
#define org_freedesktop_PackageKit_XModify_idl
#include <com/sun/star/uno/XInterface.idl>
module org
{
module freedesktop
{
module PackageKit
{
/**
* The interface used for modifying the package database.
*/
interface XModify : com::sun::star::uno::XInterface
{
/**
* Installs local package sequence< string > files or service packs.
* @since LibreOffice 3.7
*/
void InstallPackageFiles( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction);
/**
* Installs sequence< string > packages to provide sequence< string > files.
* @since LibreOffice 3.7
*/
void InstallProvideFiles( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction);
/**
* Installs sequence< string > packages to provide sequence< string > files.
* @since LibreOffice 3.7
*/
void InstallCatalogs( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction);
/**
* Installs sequence< string > packages from a configured software source.
* @since LibreOffice 3.7
*/
void InstallPackageNames( [in] unsigned long xid, [in] sequence< string > packages, [in] string interaction);
/**
* Installs mimetype handlers from a configured software source.
* @since LibreOffice 3.7
*/
void InstallMimeTypes( [in] unsigned long xid, [in] sequence< string > mime_types, [in] string interaction);
/**
* Installs fontconfig resources ( [in] usually fonts) from a configured software source.
* @since LibreOffice 3.7
*/
void InstallFontconfigRessources( [in] unsigned long xid, [in] sequence< string > resources, [in] string interaction);
/**
* Installs GStreamer resources ( [in] usually codecs) from a configured software source.
* @since LibreOffice 3.7
*/
void InstalliGStreamerRessources( [in] unsigned long xid, [in] sequence< string > resources, [in] string interaction);
/**
* Installs resources of a given type from a configured software source.
* @since LibreOffice 3.7
*/
void InstallRessources( [in] unsigned long xid, [in] sequence< string > types, [in] sequence< string > resources, [in] string interaction);
/**
* Removes sequence< string > packages that provide the given local sequence< string > files.
* @since LibreOffice 3.7
*/
void RemovePackageByFiles( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction);
/**
* Installs printer drivers from a configured software source.
* @since LibreOffice 3.7
*/
void InstallPrinterDrivers( [in] unsigned long xid, [in] sequence< string > files, [in] string interaction);
};
} ; // PackageKit
} ; // freedesktop
} ; // org
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* 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/.
*/
#ifndef org_freedesktop_PakageKit_XQuery_idl
#define org_freedesktop_PakageKit_XQuery_idl
#include <com/sun/star/uno/XInterface.idl>
module org
{
module freedesktop
{
module PackageKit
{
/**
* The interface used for quering the package database.
*/
interface XQuery : com::sun::star::uno::XInterface
{
/**
* Installs local package files or service packs.
* @since LibreOffice 3.7
*/
void IsInstalled([in] string package_name, [in] string interaction, [out] boolean installed);
/**
* Installs packages to provide files.
* @since LibreOffice 3.7
*/
void SearchFile([in] string file_name, [in] string interaction, [out] boolean installed, [out] string package_name);
};
} ; // PackageKit
} ; // freedesktop
} ; // org
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* 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/.
*/
#ifndef org_freedesktop_PackageKit_XSyncDbusSessionHelper_idl
#define org_freedesktop_PackageKit_XSyncDbusSessionHelper_idl
#include <org/freedesktop/PackageKit/XModify.idl>
#include <org/freedesktop/PackageKit/XQuery.idl>
module org {
module freedesktop {
module PackageKit {
interface XSyncDbusSessionHelper
{
interface XModify;
interface XQuery;
};
} ; // PackageKit
} ; // freedesktop
} ; // org
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -93,6 +93,7 @@ my_components = \
component/sot/util/sot \
component/starmath/util/sm \
component/starmath/util/smd \
component/shell/source/sessioninstall/losessioninstall \
component/svl/source/fsstor/fsstorage \
component/svl/source/passwordcontainer/passwordcontainer \
component/svl/util/svl \
......
......@@ -94,6 +94,7 @@ End
#endif
SPECIAL_COMPONENT_LIB_FILE(gid_File_Lib_Configmgr, configmgr.uno)
SPECIAL_COMPONENT_LIB_FILE(gid_File_Lib_Losessioninstall, losessioninstall.uno )
File gid_File_Lib_Ldapbe2
LIB_FILE_BODY;
......
......@@ -312,6 +312,7 @@ Module gid_Module_Root_Files_5
gid_File_Lib_Textconv_Dict,
gid_File_Lib_Basprov,
gid_File_Lib_Configmgr,
gid_File_Lib_Losessioninstall,
gid_File_Lib_Crypto,
gid_File_Lib_Dlgprov,
gid_File_Lib_Stringresource,
......
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# 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/.
#
$(eval $(call gb_Library_Library,losessioninstall))
$(eval $(call gb_Library_set_componentfile,losessioninstall,shell/source/sessioninstall/losessioninstall))
$(eval $(call gb_Library_use_api,losessioninstall,\
offapi \
udkapi \
))
$(eval $(call gb_Library_use_libraries,losessioninstall,\
comphelper \
cppu \
cppuhelper \
sal \
$(gb_STDLIBS) \
))
ifeq ($(RTL_OS),Linux)
ifeq ($(ENABLE_GIO),TRUE)
$(eval $(call gb_Library_use_externals,losessioninstall,\
dbus \
gio \
))
$(eval $(call gb_Library_add_exception_objects,losessioninstall,\
shell/source/sessioninstall/SyncDbusSessionHelper \
shell/source/sessioninstall/services \
))
endif
endif
# vim:set shiftwidth=4 softtabstop=4 expandtab:
......@@ -30,6 +30,7 @@ $(eval $(call gb_Module_Module,shell))
$(eval $(call gb_Module_add_targets,shell,\
Library_desktopbe \
Library_localebe \
Library_losessioninstall \
))
ifeq ($(ENABLE_GCONF),TRUE)
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* 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/.
*/
#include <SyncDbusSessionHelper.hxx>
#include <comphelper/stlunosequence.hxx>
#include <gio/gio.h>
#include <vector>
#include <boost/shared_ptr.hpp>
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::uno;
using namespace ::comphelper;
using namespace ::std;;
using namespace ::rtl;;
namespace
{
struct GVariantDeleter { void operator()(GVariant* pV) { g_variant_unref(pV); } };
struct GVariantBuilderDeleter { void operator()(GVariantBuilder* pVB) { g_variant_builder_unref(pVB); } };
template <typename T> struct GObjectDeleter { void operator()(T* pO) { g_object_unref(pO); } };
class GErrorWrapper
{
GError* m_pError;
public:
GErrorWrapper(GError* pError) : m_pError(pError) {};
~GErrorWrapper()
{
if(!m_pError)
return;
OUString sMsg = OUString::createFromAscii(m_pError->message);
g_error_free(m_pError);
throw RuntimeException(sMsg, NULL);
}
GError** getRef() { return &m_pError; }
};
static inline GDBusProxy* lcl_GetPackageKitProxy(const OUString sInterface)
{
const OString sFullInterface = rtl::OUStringToOString("org.freedesktop.PackageKit." + sInterface, RTL_TEXTENCODING_ASCII_US);
GErrorWrapper error(NULL);
GDBusProxy* proxy = NULL;
proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE, NULL,
"org.freedesktop.PackageKit",
"/org/freedesktop/PackageKit",
reinterpret_cast<const gchar*>(sFullInterface.getStr()),
NULL,
error.getRef());
if(!proxy)
throw RuntimeException(OUString("couldnt get a proxy!"),NULL);
return proxy;
};
}
namespace shell { namespace sessioninstall
{
SyncDbusSessionHelper::SyncDbusSessionHelper(Reference<XComponentContext> const&)
{
g_type_init ();
}
void SAL_CALL SyncDbusSessionHelper::InstallPackageNames( const ::sal_uInt32 nXid, const Sequence< OUString >& vPackages, const OUString& sInteraction ) throw (RuntimeException)
{
vector< OString > vPackagesOString;
vPackagesOString.reserve(vPackages.getLength());
boost::shared_ptr<GVariantBuilder> pBuilder(g_variant_builder_new(G_VARIANT_TYPE ("as")), GVariantBuilderDeleter());
for( const OUString* pPackage = stl_begin(vPackages); pPackage != stl_end(vPackages); ++pPackage)
{
vPackagesOString.push_back(rtl::OUStringToOString(*pPackage, RTL_TEXTENCODING_ASCII_US));
g_variant_builder_add(pBuilder.get(), "s", vPackagesOString.back().getStr());
}
const OString sInteractionAscii = OUStringToOString(sInteraction, RTL_TEXTENCODING_ASCII_US);
boost::shared_ptr<GDBusProxy> proxy(lcl_GetPackageKitProxy("Modify"), GObjectDeleter<GDBusProxy>());
GErrorWrapper error(NULL);
g_dbus_proxy_call_sync (proxy.get(),
"InstallPackageNames",
g_variant_new ("(uass)",
sal::static_int_cast<guint32>(nXid),
pBuilder.get(),
sInteractionAscii.getStr()),
G_DBUS_CALL_FLAGS_NONE,
-1, /* timeout */
NULL, /* cancellable */
error.getRef());
}
void SAL_CALL SyncDbusSessionHelper::IsInstalled( const OUString& sPackagename, const OUString& sInteraction, ::sal_Bool& o_isInstalled ) throw (RuntimeException)
{
const OString sPackagenameAscii = OUStringToOString(sPackagename, RTL_TEXTENCODING_ASCII_US);
const OString sInteractionAscii = OUStringToOString(sInteraction, RTL_TEXTENCODING_ASCII_US);
boost::shared_ptr<GDBusProxy> proxy(lcl_GetPackageKitProxy("Query"), GObjectDeleter<GDBusProxy>());
GErrorWrapper error(NULL);
boost::shared_ptr<GVariant> result(g_dbus_proxy_call_sync (proxy.get(),
"IsInstalled",
g_variant_new ("(ss)",
sPackagenameAscii.getStr(),
sInteractionAscii.getStr()),
G_DBUS_CALL_FLAGS_NONE,
-1, /* timeout */
NULL, /* cancellable */
error.getRef()),GVariantDeleter());
if(result.get())
o_isInstalled = g_variant_get_boolean(g_variant_get_child_value(result.get(),0)) ? sal_True : sal_False;
}
}}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* 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/.
*/
#ifndef SHELL_SESSIONINSTALL_SYNCDBUSSESSIONHELPER_HXX
#define SHELL_SESSIONINSTALL_SYNCDBUSSESSIONHELPER_HXX
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <org/freedesktop/PackageKit/XSyncDbusSessionHelper.hpp>
#include <cppuhelper/implbase1.hxx>
namespace shell { namespace sessioninstall
{
class SyncDbusSessionHelper : public ::cppu::WeakImplHelper1< ::org::freedesktop::PackageKit::XSyncDbusSessionHelper >
{
public:
SyncDbusSessionHelper(::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext> const&);
virtual ~SyncDbusSessionHelper() {};
// XModify Methods
virtual void SAL_CALL InstallPackageNames( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& packages, const ::rtl::OUString& interaction ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL InstallPackageFiles( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& files, const ::rtl::OUString& interaction ) throw (::com::sun::star::uno::RuntimeException)
{ throw ::com::sun::star::uno::RuntimeException(); }; // not implemented
virtual void SAL_CALL InstallProvideFiles( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& files, const ::rtl::OUString& interaction ) throw (::com::sun::star::uno::RuntimeException)
{ throw ::com::sun::star::uno::RuntimeException(); }; // not implemented
virtual void SAL_CALL InstallCatalogs( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& files, const ::rtl::OUString& interaction ) throw (::com::sun::star::uno::RuntimeException)
{ throw ::com::sun::star::uno::RuntimeException(); }; // not implemented
virtual void SAL_CALL InstallMimeTypes( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& mime_types, const ::rtl::OUString& interaction ) throw (::com::sun::star::uno::RuntimeException)
{ throw ::com::sun::star::uno::RuntimeException(); }; // not implemented
virtual void SAL_CALL InstallFontconfigRessources( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& resources, const ::rtl::OUString& interaction ) throw (::com::sun::star::uno::RuntimeException)
{ throw ::com::sun::star::uno::RuntimeException(); }; // not implemented
virtual void SAL_CALL InstalliGStreamerRessources( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& resources, const ::rtl::OUString& interaction ) throw (::com::sun::star::uno::RuntimeException)
{ throw ::com::sun::star::uno::RuntimeException(); }; // not implemented
virtual void SAL_CALL InstallRessources( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& types, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& resources, const ::rtl::OUString& interaction ) throw (::com::sun::star::uno::RuntimeException)
{ throw ::com::sun::star::uno::RuntimeException(); }; // not implemented
virtual void SAL_CALL RemovePackageByFiles( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& files, const ::rtl::OUString& interaction ) throw (::com::sun::star::uno::RuntimeException)
{ throw ::com::sun::star::uno::RuntimeException(); }; // not implemented
virtual void SAL_CALL InstallPrinterDrivers( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& files, const ::rtl::OUString& interaction ) throw (::com::sun::star::uno::RuntimeException)
{ throw ::com::sun::star::uno::RuntimeException(); }; // not implemented
// XQuery Methods
virtual void SAL_CALL IsInstalled( const ::rtl::OUString& package_name, const ::rtl::OUString& interaction, ::sal_Bool& installed ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL SearchFile( const ::rtl::OUString& file_name, const ::rtl::OUString& interaction, ::sal_Bool& installed, ::rtl::OUString& package_name ) throw (::com::sun::star::uno::RuntimeException)
{ throw ::com::sun::star::uno::RuntimeException(); }; // not implemented
private:
SyncDbusSessionHelper(); // never implemented
SyncDbusSessionHelper( const SyncDbusSessionHelper& ); // never implemented
SyncDbusSessionHelper& operator=( const SyncDbusSessionHelper& ); // never implemented
};
}}
#endif // SHELL_SESSIONINSTALL_SYNCDBUSSESSIONHELPER_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
<?xml version="1.0" encoding="UTF-8"?>
<!--
* 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/.
*
-->
<component loader="com.sun.star.loader.SharedLibrary"
xmlns="http://openoffice.org/2010/uno-components">
<implementation name="org.libreoffice.comp.shell.sessioninstall.SyncDbusSessionHelper">
<service name="org.freedesktop.PackageKit.SyncDbusSessionHelper"/>
</implementation>
</component>
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* 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/.
*/
#include <SyncDbusSessionHelper.hxx>
#include <comphelper/servicedecl.hxx>
#include <uno/environment.h>
namespace sdecl = ::comphelper::service_decl;
sdecl::class_< ::shell::sessioninstall::SyncDbusSessionHelper> SyncDbusSessionHelperServiceImpl;
const sdecl::ServiceDecl SyncDbusSessionHelperServiceDecl(
SyncDbusSessionHelperServiceImpl,
"org.libreoffice.comp.shell.sessioninstall.SyncDbusSessionHelper",
"org.freedesktop.PackageKit.SyncDbusSessionHelper");
COMPHELPER_SERVICEDECL_EXPORTS1(losessioninstall, SyncDbusSessionHelperServiceDecl);
extern "C"
{
SAL_DLLPUBLIC_EXPORT void* SAL_CALL component_getFactory( sal_Char const* pImplName, ::com::sun::star::lang::XMultiServiceFactory* pServiceManager, ::com::sun::star::registry::XRegistryKey* pRegistryKey )
{ return losessioninstall_component_getFactory(pImplName, pServiceManager, pRegistryKey); }
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment