Do

Merge lp:~alexlauni/do/package-manager-service into lp:do

Proposed by Alex Launi
Status: Merged
Merged at revision: not available
Proposed branch: lp:~alexlauni/do/package-manager-service
Merge into: lp:do
Diff against target: None lines
To merge this branch: bzr merge lp:~alexlauni/do/package-manager-service
Reviewer Review Type Date Requested Status
Jason Smith (community) Approve
Chris Halse Rogers Needs Fixing
Review via email: mp+7852@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Alex Launi (alexlauni) wrote :

Interface for hooking into the package manager, and a reference implementation for JoliCloud.

Revision history for this message
Chris Halse Rogers (raof) wrote :

 review needsfixing

Is this a merge for both PluginManagerService and PackageManagerService?
If so, could we merge PluginManagerService separately, and then merge
PackageManagerService after that has landed?

You've added Do.Linux.JoliCloud/Makefile.in to bzr. That's not very
useful :).

In
Do.Platform.Linux.JoliCloud/src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/PackageManagerService.cs:

I don't much like the magical Daemon property, particularly since you
need to document it with the comment
"""
// this call will instantiate the daemon, as well as make sure we also
got a DBus object
"""
in Initialize (). Is there any particular reason that Initialise can't
initialise the daemon explicitly?

In MaybeStartDaemon (), is it possibly to ask DBus to wait for an owner
of BusName rather than just sleeping for 5 seconds? I'm not sure if it
is, but I'd find it cleaner.

In Do.Platform/src/Do.Platform/AbstractPackageManagerService.cs:
MaybePluginForPackage (string): It might be worthwhile extending the
plugin API to allow a plugin itself to provide a list of packages that
it supports, as well as this magic name/description matching.

What happens if multiple addins support a new package?

This comment from PluginManagerService.cs seems wrong?
/// If this class loads, we have a serious plugin because that probably
means we have no plugin manager.

review: Needs Fixing
Revision history for this message
Alex Launi (alexlauni) wrote :

> review needsfixing
>
> Is this a merge for both PluginManagerService and PackageManagerService?
> If so, could we merge PluginManagerService separately, and then merge
> PackageManagerService after that has landed?

There is already a pending merge for PluginManagerService, this merge depends on it.

> You've added Do.Linux.JoliCloud/Makefile.in to bzr. That's not very
> useful :).

Whoops. Removed.

> In Do.Platform.Linux.JoliCloud/src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/PackageManagerService.cs:
>
> I don't much like the magical Daemon property, particularly since you
> need to document it with the comment
> """
> // this call will instantiate the daemon, as well as make sure we also
> got a DBus object
> """
> in Initialize (). Is there any particular reason that Initialise can't
> initialise the daemon explicitly?

I did it this way to avoid the duplication of adding the event, etc. It seems cleaner to me.

> In MaybeStartDaemon (), is it possibly to ask DBus to wait for an owner
> of BusName rather than just sleeping for 5 seconds? I'm not sure if it
> is, but I'd find it cleaner.

I don't think it's possible, this is how Banshee does it, but I'm pretty sure I can safely remove that sleep call if it'd make you feel better.

> In Do.Platform/src/Do.Platform/AbstractPackageManagerService.cs:
> MaybePluginForPackage (string): It might be worthwhile extending the
> plugin API to allow a plugin itself to provide a list of packages that
> it supports, as well as this magic name/description matching.

I had mentioned this in irc, perhaps in the plugin manifest adding an element/attribute of keywords that could be used. This could also be handy in the search.

> What happens if multiple addins support a new package?

We take the first.

> This comment from PluginManagerService.cs seems wrong?
> /// If this class loads, we have a serious plugin because that probably
> means we have no plugin manager.

This is a comment for the Plugin Manager merge, but I'll fix it there

1266. By Alex Launi

merge trunk

1267. By Alex Launi

add makefile.am

1268. By Alex Launi

remove Makefile.in

1269. By Alex Launi

removed Sleep and exception if no service found

1270. By Alex Launi

merge plugin manager changes

1271. By Alex Launi

fix a logic error that lead to an NRE

1272. By Alex Launi

added package->plugin map for jolicloud

1273. By Alex Launi

edit comment

1274. By Alex Launi

umm...

1275. By Alex Launi

merge trunk

1276. By Alex Launi

merge trunk

1277. By Alex Launi

merge updates from plugin-manager

1278. By Alex Launi

Show distributor logo on plugin-available dialog to help user associate the reason for the popup

1279. By Alex Launi

Only subscribe to package installed event once

1280. By Alex Launi

add cleanup routine for PackageManagerService

1281. By Alex Launi

merge trunk

Revision history for this message
Jason Smith (jassmith) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory 'Do.Platform.Linux.JoliCloud'
2=== added file 'Do.Platform.Linux.JoliCloud/Do.Platform.Linux.JoliCloud.mdp'
3--- Do.Platform.Linux.JoliCloud/Do.Platform.Linux.JoliCloud.mdp 1970-01-01 00:00:00 +0000
4+++ Do.Platform.Linux.JoliCloud/Do.Platform.Linux.JoliCloud.mdp 2009-06-23 16:27:37 +0000
5@@ -0,0 +1,33 @@
6+<Project name="Do.Platform.Linux.JoliCloud" fileversion="2.0" language="C#" targetFramework="2.0" ctype="DotNetProject">
7+ <Configurations active="Debug">
8+ <Configuration name="Debug" ctype="DotNetProjectConfiguration">
9+ <Output directory="bin/Debug" assembly="Do.Platform.Linux.JoliCloud" />
10+ <Build debugmode="True" target="Exe" />
11+ <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" />
12+ <CodeGeneration compiler="Mcs" warninglevel="4" optimize="False" unsafecodeallowed="False" generateoverflowchecks="False" definesymbols="DEBUG" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
13+ </Configuration>
14+ <Configuration name="Release" ctype="DotNetProjectConfiguration">
15+ <Output directory="bin/Release" assembly="Do.Platform.Linux.JoliCloud" />
16+ <Build debugmode="False" target="Exe" />
17+ <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" />
18+ <CodeGeneration compiler="Mcs" warninglevel="4" optimize="False" unsafecodeallowed="False" generateoverflowchecks="False" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
19+ </Configuration>
20+ </Configurations>
21+ <Contents>
22+ <File name="Resources" subtype="Directory" buildaction="Compile" />
23+ <File name="src" subtype="Directory" buildaction="Compile" />
24+ <File name="src/Do.Platform" subtype="Directory" buildaction="Compile" />
25+ <File name="src/Do.Platform/Do.Platform.Linux" subtype="Directory" buildaction="Compile" />
26+ <File name="src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud" subtype="Directory" buildaction="Compile" />
27+ <File name="Resources/Do.Platform.Linux.JoliCloud.addin.xml" subtype="Code" buildaction="EmbedAsResource" />
28+ <File name="src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/PackageManagerService.cs" subtype="Code" buildaction="Compile" />
29+ <File name="src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/Tests" subtype="Directory" buildaction="Compile" />
30+ <File name="src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/Tests/PackageManagerServiceTests.cs" subtype="Code" buildaction="Compile" />
31+ </Contents>
32+ <References>
33+ <ProjectReference type="Assembly" localcopy="True" specificVersion="False" refto="../../../../../../usr/local/lib/gnome-do/Do.Platform.dll" />
34+ <ProjectReference type="Gac" localcopy="True" refto="NDesk.DBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f6716e4f9b2ed099" />
35+ <ProjectReference type="Assembly" localcopy="True" specificVersion="False" refto="../../../../../../usr/local/lib/gnome-do/Do.Platform.Linux.dll" />
36+ <ProjectReference type="Gac" localcopy="True" refto="Mono.Addins, Version=0.4.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
37+ </References>
38+</Project>
39\ No newline at end of file
40
41=== added file 'Do.Platform.Linux.JoliCloud/Makefile.in'
42--- Do.Platform.Linux.JoliCloud/Makefile.in 1970-01-01 00:00:00 +0000
43+++ Do.Platform.Linux.JoliCloud/Makefile.in 2009-06-23 16:49:14 +0000
44@@ -0,0 +1,588 @@
45+# Makefile.in generated by automake 1.10.2 from Makefile.am.
46+# @configure_input@
47+
48+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
49+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
50+# This Makefile.in is free software; the Free Software Foundation
51+# gives unlimited permission to copy and/or distribute it,
52+# with or without modifications, as long as this notice is preserved.
53+
54+# This program is distributed in the hope that it will be useful,
55+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
56+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
57+# PARTICULAR PURPOSE.
58+
59+@SET_MAKE@
60+
61+# Rules to more easily specify a C# build for automake.
62+#
63+# Inspired and adapted from Banshee's build system
64+
65+
66+VPATH = @srcdir@
67+pkgdatadir = $(datadir)/@PACKAGE@
68+pkglibdir = $(libdir)/@PACKAGE@
69+pkgincludedir = $(includedir)/@PACKAGE@
70+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
71+install_sh_DATA = $(install_sh) -c -m 644
72+install_sh_PROGRAM = $(install_sh) -c
73+install_sh_SCRIPT = $(install_sh) -c
74+INSTALL_HEADER = $(INSTALL_DATA)
75+transform = $(program_transform_name)
76+NORMAL_INSTALL = :
77+PRE_INSTALL = :
78+POST_INSTALL = :
79+NORMAL_UNINSTALL = :
80+PRE_UNINSTALL = :
81+POST_UNINSTALL = :
82+build_triplet = @build@
83+host_triplet = @host@
84+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
85+ $(top_srcdir)/build.rules.mk
86+@ENABLE_DEBUG_TRUE@am__append_1 = -debug -d:DEBUG
87+@HAVE_NUNIT_TRUE@am__append_2 = \
88+@HAVE_NUNIT_TRUE@ src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/Tests/PackageManagerServiceTests.cs
89+
90+subdir = Do.Platform.Linux.JoliCloud
91+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
92+am__aclocal_m4_deps = $(top_srcdir)/m4/shamrock/expansions.m4 \
93+ $(top_srcdir)/m4/shamrock/i18n.m4 \
94+ $(top_srcdir)/m4/shamrock/mono.m4 \
95+ $(top_srcdir)/m4/shamrock/programs.m4 \
96+ $(top_srcdir)/configure.ac
97+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
98+ $(ACLOCAL_M4)
99+mkinstalldirs = $(install_sh) -d
100+CONFIG_CLEAN_FILES =
101+am__installdirs = "$(DESTDIR)$(moduledir)" "$(DESTDIR)$(moduledir)" \
102+ "$(DESTDIR)$(pkgconfigdir)"
103+moduleSCRIPT_INSTALL = $(INSTALL_SCRIPT)
104+SCRIPTS = $(module_SCRIPTS)
105+SOURCES =
106+DIST_SOURCES =
107+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
108+am__vpath_adj = case $$p in \
109+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
110+ *) f=$$p;; \
111+ esac;
112+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
113+moduleDATA_INSTALL = $(INSTALL_DATA)
114+pkgconfigDATA_INSTALL = $(INSTALL_DATA)
115+DATA = $(module_DATA) $(pkgconfig_DATA)
116+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
117+ABI_VERSION = @ABI_VERSION@
118+ACLOCAL = @ACLOCAL@
119+ALL_LINGUAS = @ALL_LINGUAS@
120+AMTAR = @AMTAR@
121+AR = @AR@
122+AUTOCONF = @AUTOCONF@
123+AUTOHEADER = @AUTOHEADER@
124+AUTOMAKE = @AUTOMAKE@
125+AWK = @AWK@
126+CATALOGS = @CATALOGS@
127+CATOBJEXT = @CATOBJEXT@
128+CC = @CC@
129+CCDEPMODE = @CCDEPMODE@
130+CFLAGS = @CFLAGS@
131+CONFIG_STATUS_DEPENDENCIES = @CONFIG_STATUS_DEPENDENCIES@
132+CPP = @CPP@
133+CPPFLAGS = @CPPFLAGS@
134+CYGPATH_W = @CYGPATH_W@
135+DATADIRNAME = @DATADIRNAME@
136+DEFS = @DEFS@
137+DEPDIR = @DEPDIR@
138+DSYMUTIL = @DSYMUTIL@
139+DUMPBIN = @DUMPBIN@
140+ECHO_C = @ECHO_C@
141+ECHO_N = @ECHO_N@
142+ECHO_T = @ECHO_T@
143+EGREP = @EGREP@
144+EXEEXT = @EXEEXT@
145+FGREP = @FGREP@
146+GCONFTOOL = @GCONFTOOL@
147+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
148+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
149+GCONF_SHARP_20_CFLAGS = @GCONF_SHARP_20_CFLAGS@
150+GCONF_SHARP_20_LIBS = @GCONF_SHARP_20_LIBS@
151+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
152+GLADE_SHARP_20_CFLAGS = @GLADE_SHARP_20_CFLAGS@
153+GLADE_SHARP_20_LIBS = @GLADE_SHARP_20_LIBS@
154+GLIB_SHARP_20_CFLAGS = @GLIB_SHARP_20_CFLAGS@
155+GLIB_SHARP_20_LIBS = @GLIB_SHARP_20_LIBS@
156+GMOFILES = @GMOFILES@
157+GMSGFMT = @GMSGFMT@
158+GNOME_DESKTOP_SHARP_20_CFLAGS = @GNOME_DESKTOP_SHARP_20_CFLAGS@
159+GNOME_DESKTOP_SHARP_20_LIBS = @GNOME_DESKTOP_SHARP_20_LIBS@
160+GNOME_KEYRING_SHARP_CFLAGS = @GNOME_KEYRING_SHARP_CFLAGS@
161+GNOME_KEYRING_SHARP_LIBS = @GNOME_KEYRING_SHARP_LIBS@
162+GNOME_SHARP_20_CFLAGS = @GNOME_SHARP_20_CFLAGS@
163+GNOME_SHARP_20_LIBS = @GNOME_SHARP_20_LIBS@
164+GNOME_VFS_SHARP_20_CFLAGS = @GNOME_VFS_SHARP_20_CFLAGS@
165+GNOME_VFS_SHARP_20_LIBS = @GNOME_VFS_SHARP_20_LIBS@
166+GREP = @GREP@
167+GTK_SHARP_20_CFLAGS = @GTK_SHARP_20_CFLAGS@
168+GTK_SHARP_20_LIBS = @GTK_SHARP_20_LIBS@
169+INSTALL = @INSTALL@
170+INSTALL_DATA = @INSTALL_DATA@
171+INSTALL_PROGRAM = @INSTALL_PROGRAM@
172+INSTALL_SCRIPT = @INSTALL_SCRIPT@
173+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
174+INSTOBJEXT = @INSTOBJEXT@
175+INTLLIBS = @INTLLIBS@
176+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
177+INTLTOOL_MERGE = @INTLTOOL_MERGE@
178+INTLTOOL_PERL = @INTLTOOL_PERL@
179+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
180+LD = @LD@
181+LDFLAGS = @LDFLAGS@
182+LIBDO_CFLAGS = @LIBDO_CFLAGS@
183+LIBDO_LIBS = @LIBDO_LIBS@
184+LIBOBJS = @LIBOBJS@
185+LIBRSVG_SHARP_CFLAGS = @LIBRSVG_SHARP_CFLAGS@
186+LIBRSVG_SHARP_LIBS = @LIBRSVG_SHARP_LIBS@
187+LIBS = @LIBS@
188+LIBTOOL = @LIBTOOL@
189+LIPO = @LIPO@
190+LN_S = @LN_S@
191+LTLIBOBJS = @LTLIBOBJS@
192+MAKEINFO = @MAKEINFO@
193+MCS = @MCS@
194+MKDIR_P = @MKDIR_P@
195+MKINSTALLDIRS = @MKINSTALLDIRS@
196+MONO = @MONO@
197+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
198+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
199+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
200+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
201+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
202+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
203+MSGFMT = @MSGFMT@
204+MSGFMT_OPTS = @MSGFMT_OPTS@
205+MSGMERGE = @MSGMERGE@
206+NDESK_DBUS_10_CFLAGS = @NDESK_DBUS_10_CFLAGS@
207+NDESK_DBUS_10_LIBS = @NDESK_DBUS_10_LIBS@
208+NDESK_DBUS_GLIB_10_CFLAGS = @NDESK_DBUS_GLIB_10_CFLAGS@
209+NDESK_DBUS_GLIB_10_LIBS = @NDESK_DBUS_GLIB_10_LIBS@
210+NM = @NM@
211+NMEDIT = @NMEDIT@
212+NOTIFY_SHARP_CFLAGS = @NOTIFY_SHARP_CFLAGS@
213+NOTIFY_SHARP_LIBS = @NOTIFY_SHARP_LIBS@
214+NUNIT_CFLAGS = @NUNIT_CFLAGS@
215+NUNIT_LIBS = @NUNIT_LIBS@
216+OBJDUMP = @OBJDUMP@
217+OBJEXT = @OBJEXT@
218+OTOOL = @OTOOL@
219+OTOOL64 = @OTOOL64@
220+PACKAGE = @PACKAGE@
221+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
222+PACKAGE_NAME = @PACKAGE_NAME@
223+PACKAGE_STRING = @PACKAGE_STRING@
224+PACKAGE_TARNAME = @PACKAGE_TARNAME@
225+PACKAGE_VERSION = @PACKAGE_VERSION@
226+PATH_SEPARATOR = @PATH_SEPARATOR@
227+PKG_CONFIG = @PKG_CONFIG@
228+POFILES = @POFILES@
229+POSUB = @POSUB@
230+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
231+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
232+RANLIB = @RANLIB@
233+SED = @SED@
234+SET_MAKE = @SET_MAKE@
235+SHELL = @SHELL@
236+STRIP = @STRIP@
237+USE_NLS = @USE_NLS@
238+VERSION = @VERSION@
239+VERSION_INFO = @VERSION_INFO@
240+WNCK_SHARP_10_CFLAGS = @WNCK_SHARP_10_CFLAGS@
241+WNCK_SHARP_10_LIBS = @WNCK_SHARP_10_LIBS@
242+XGETTEXT = @XGETTEXT@
243+abs_builddir = @abs_builddir@
244+abs_srcdir = @abs_srcdir@
245+abs_top_builddir = @abs_top_builddir@
246+abs_top_srcdir = @abs_top_srcdir@
247+ac_ct_CC = @ac_ct_CC@
248+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
249+am__include = @am__include@
250+am__leading_dot = @am__leading_dot@
251+am__quote = @am__quote@
252+am__tar = @am__tar@
253+am__untar = @am__untar@
254+bindir = @bindir@
255+build = @build@
256+build_alias = @build_alias@
257+build_cpu = @build_cpu@
258+build_os = @build_os@
259+build_vendor = @build_vendor@
260+builddir = @builddir@
261+datadir = @datadir@
262+datarootdir = @datarootdir@
263+docdir = @docdir@
264+dvidir = @dvidir@
265+exec_prefix = @exec_prefix@
266+expanded_bindir = @expanded_bindir@
267+expanded_datadir = @expanded_datadir@
268+expanded_libdir = @expanded_libdir@
269+host = @host@
270+host_alias = @host_alias@
271+host_cpu = @host_cpu@
272+host_os = @host_os@
273+host_vendor = @host_vendor@
274+htmldir = @htmldir@
275+includedir = @includedir@
276+infodir = @infodir@
277+install_sh = @install_sh@
278+libdir = @libdir@
279+libexecdir = @libexecdir@
280+localedir = @localedir@
281+localstatedir = @localstatedir@
282+lt_ECHO = @lt_ECHO@
283+mandir = @mandir@
284+mkdir_p = @mkdir_p@
285+oldincludedir = @oldincludedir@
286+pdfdir = @pdfdir@
287+prefix = @prefix@
288+program_transform_name = @program_transform_name@
289+psdir = @psdir@
290+sbindir = @sbindir@
291+sharedstatedir = @sharedstatedir@
292+srcdir = @srcdir@
293+sysconfdir = @sysconfdir@
294+target_alias = @target_alias@
295+top_build_prefix = @top_build_prefix@
296+top_builddir = @top_builddir@
297+top_srcdir = @top_srcdir@
298+SOURCES_BUILD = $(addprefix $(srcdir)/, $(FILES))
299+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
300+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
301+ -resource:$(resource),$(notdir $(resource)))
302+
303+BUILD_DIR = $(top_builddir)/build
304+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
305+ASSEMBLY_FILE = $(BUILD_DIR)/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
306+STD_REFERENCES = $(foreach ref,$(filter-out -r:%,$(REFERENCES)),-r:$(ref))
307+BUILD_REFERENCES = $(filter -r:%,$(REFERENCES) $(STD_REFERENCES))
308+COMPONENT_REFERENCES = $(foreach ref, $(PROJECT_REFERENCES),-r:$(BUILD_DIR)/$(ref).dll)
309+COMPONENT_DEPS = $(foreach ref,$(PROJECT_REFERENCES),$(BUILD_DIR)/$(ref).dll)
310+OUTPUT_FILES = \
311+ $(ASSEMBLY_FILE) \
312+ $(ASSEMBLY_FILE).mdb
313+
314+moduledir = $(pkglibdir)
315+# Install libraries as data; there's no need for them to be excutable
316+module_DATA = $(foreach file,$(filter %.dll,$(OUTPUT_FILES)),$(file) $(file).mdb) $(foreach file,$(filter %.exe,$(OUTPUT_FILES)),$(file).mdb)
317+# Install executables as scripts
318+module_SCRIPTS = $(filter %.exe,$(OUTPUT_FILES))
319+MCS_FLAGS = $(MCS_LINQ_FLAG) -noconfig -codepage:utf8 -warn:4 \
320+ $(am__append_1)
321+
322+#
323+# pkg-config handling
324+#
325+pkgconfigdir = $(libdir)/pkgconfig
326+pkgconfig_DATA = $(PKG_CONFIG_FILES)
327+
328+#
329+# Clean and dist targets
330+#
331+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE) \
332+ $(foreach pkgcfg_file, $(PKG_CONFIG_FILES), $(pkgcfg_file).in)
333+
334+CLEANFILES = $(OUTPUT_FILES) $(pkgconfig_DATA)
335+DISTCLEANFILES = *.pidb
336+MAINTAINERCLEANFILES = Makefile.in
337+
338+# Simple component buildsystem
339+ASSEMBLY = Do.Platform.Linux.JoliCloud
340+TARGET = library
341+FILES = src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/PackageManagerService.cs \
342+ $(am__append_2)
343+RESOURCES = \
344+ Resources/Do.Platform.Linux.JoliCloud.addin.xml
345+
346+PKG_CONFIG_FILES = do.platform.linux.jolicloud.pc
347+REFERENCES = \
348+ System \
349+ System.Core \
350+ Mono.Posix \
351+ $(MONO_ADDINS_LIBS) \
352+ $(NDESK_DBUS_10_LIBS) \
353+ $(NUNIT_LIBS)
354+
355+PROJECT_REFERENCES = \
356+ Do.Platform \
357+ Do.Platform.Linux
358+
359+all: all-am
360+
361+.SUFFIXES:
362+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/build.rules.mk $(am__configure_deps)
363+ @for dep in $?; do \
364+ case '$(am__configure_deps)' in \
365+ *$$dep*) \
366+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
367+ && { if test -f $@; then exit 0; else break; fi; }; \
368+ exit 1;; \
369+ esac; \
370+ done; \
371+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Do.Platform.Linux.JoliCloud/Makefile'; \
372+ cd $(top_srcdir) && \
373+ $(AUTOMAKE) --foreign Do.Platform.Linux.JoliCloud/Makefile
374+.PRECIOUS: Makefile
375+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
376+ @case '$?' in \
377+ *config.status*) \
378+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
379+ *) \
380+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
381+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
382+ esac;
383+
384+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
385+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
386+
387+$(top_srcdir)/configure: $(am__configure_deps)
388+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
389+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
390+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
391+install-moduleSCRIPTS: $(module_SCRIPTS)
392+ @$(NORMAL_INSTALL)
393+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
394+ @list='$(module_SCRIPTS)'; for p in $$list; do \
395+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
396+ if test -f $$d$$p; then \
397+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
398+ echo " $(moduleSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(moduledir)/$$f'"; \
399+ $(moduleSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(moduledir)/$$f"; \
400+ else :; fi; \
401+ done
402+
403+uninstall-moduleSCRIPTS:
404+ @$(NORMAL_UNINSTALL)
405+ @list='$(module_SCRIPTS)'; for p in $$list; do \
406+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
407+ echo " rm -f '$(DESTDIR)$(moduledir)/$$f'"; \
408+ rm -f "$(DESTDIR)$(moduledir)/$$f"; \
409+ done
410+
411+mostlyclean-libtool:
412+ -rm -f *.lo
413+
414+clean-libtool:
415+ -rm -rf .libs _libs
416+install-moduleDATA: $(module_DATA)
417+ @$(NORMAL_INSTALL)
418+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
419+ @list='$(module_DATA)'; for p in $$list; do \
420+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
421+ f=$(am__strip_dir) \
422+ echo " $(moduleDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(moduledir)/$$f'"; \
423+ $(moduleDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(moduledir)/$$f"; \
424+ done
425+
426+uninstall-moduleDATA:
427+ @$(NORMAL_UNINSTALL)
428+ @list='$(module_DATA)'; for p in $$list; do \
429+ f=$(am__strip_dir) \
430+ echo " rm -f '$(DESTDIR)$(moduledir)/$$f'"; \
431+ rm -f "$(DESTDIR)$(moduledir)/$$f"; \
432+ done
433+install-pkgconfigDATA: $(pkgconfig_DATA)
434+ @$(NORMAL_INSTALL)
435+ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
436+ @list='$(pkgconfig_DATA)'; for p in $$list; do \
437+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
438+ f=$(am__strip_dir) \
439+ echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
440+ $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
441+ done
442+
443+uninstall-pkgconfigDATA:
444+ @$(NORMAL_UNINSTALL)
445+ @list='$(pkgconfig_DATA)'; for p in $$list; do \
446+ f=$(am__strip_dir) \
447+ echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
448+ rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
449+ done
450+tags: TAGS
451+TAGS:
452+
453+ctags: CTAGS
454+CTAGS:
455+
456+
457+distdir: $(DISTFILES)
458+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
459+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
460+ list='$(DISTFILES)'; \
461+ dist_files=`for file in $$list; do echo $$file; done | \
462+ sed -e "s|^$$srcdirstrip/||;t" \
463+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
464+ case $$dist_files in \
465+ */*) $(MKDIR_P) `echo "$$dist_files" | \
466+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
467+ sort -u` ;; \
468+ esac; \
469+ for file in $$dist_files; do \
470+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
471+ if test -d $$d/$$file; then \
472+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
473+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
474+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
475+ fi; \
476+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
477+ else \
478+ test -f $(distdir)/$$file \
479+ || cp -p $$d/$$file $(distdir)/$$file \
480+ || exit 1; \
481+ fi; \
482+ done
483+check-am: all-am
484+check: check-am
485+all-am: Makefile $(SCRIPTS) $(DATA)
486+installdirs:
487+ for dir in "$(DESTDIR)$(moduledir)" "$(DESTDIR)$(moduledir)" "$(DESTDIR)$(pkgconfigdir)"; do \
488+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
489+ done
490+install: install-am
491+install-exec: install-exec-am
492+install-data: install-data-am
493+uninstall: uninstall-am
494+
495+install-am: all-am
496+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
497+
498+installcheck: installcheck-am
499+install-strip:
500+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
501+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
502+ `test -z '$(STRIP)' || \
503+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
504+mostlyclean-generic:
505+
506+clean-generic:
507+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
508+
509+distclean-generic:
510+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
511+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
512+
513+maintainer-clean-generic:
514+ @echo "This command is intended for maintainers to use"
515+ @echo "it deletes files that may require special tools to rebuild."
516+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
517+clean: clean-am
518+
519+clean-am: clean-generic clean-libtool mostlyclean-am
520+
521+distclean: distclean-am
522+ -rm -f Makefile
523+distclean-am: clean-am distclean-generic
524+
525+dvi: dvi-am
526+
527+dvi-am:
528+
529+html: html-am
530+
531+info: info-am
532+
533+info-am:
534+
535+install-data-am: install-moduleDATA install-moduleSCRIPTS \
536+ install-pkgconfigDATA
537+
538+install-dvi: install-dvi-am
539+
540+install-exec-am:
541+
542+install-html: install-html-am
543+
544+install-info: install-info-am
545+
546+install-man:
547+
548+install-pdf: install-pdf-am
549+
550+install-ps: install-ps-am
551+
552+installcheck-am:
553+
554+maintainer-clean: maintainer-clean-am
555+ -rm -f Makefile
556+maintainer-clean-am: distclean-am maintainer-clean-generic
557+
558+mostlyclean: mostlyclean-am
559+
560+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
561+
562+pdf: pdf-am
563+
564+pdf-am:
565+
566+ps: ps-am
567+
568+ps-am:
569+
570+uninstall-am: uninstall-moduleDATA uninstall-moduleSCRIPTS \
571+ uninstall-pkgconfigDATA
572+
573+.MAKE: install-am install-strip
574+
575+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
576+ distclean distclean-generic distclean-libtool distdir dvi \
577+ dvi-am html html-am info info-am install install-am \
578+ install-data install-data-am install-dvi install-dvi-am \
579+ install-exec install-exec-am install-html install-html-am \
580+ install-info install-info-am install-man install-moduleDATA \
581+ install-moduleSCRIPTS install-pdf install-pdf-am \
582+ install-pkgconfigDATA install-ps install-ps-am install-strip \
583+ installcheck installcheck-am installdirs maintainer-clean \
584+ maintainer-clean-generic mostlyclean mostlyclean-generic \
585+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
586+ uninstall-moduleDATA uninstall-moduleSCRIPTS \
587+ uninstall-pkgconfigDATA
588+
589+
590+all: $(ASSEMBLY_FILE)
591+
592+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
593+
594+build-debug :
595+ @echo $(COMPONENT_REFERENCES)
596+
597+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(COMPONENT_DEPS)
598+ @mkdir -p $(BUILD_DIR)
599+ @colors=no; \
600+ case $$TERM in \
601+ "xterm" | "rxvt" | "rxvt-unicode") \
602+ test "x$$COLORTERM" != "x" && colors=yes ;; \
603+ "xterm-color") colors=yes ;; \
604+ esac; \
605+ if [ "x$$colors" = "xyes" ]; then \
606+ tty -s && true || { colors=no; true; } \
607+ fi; \
608+ test "x$$colors" = "xyes" && \
609+ echo -e "\033[1mCompiling $(notdir $@)...\033[0m" || \
610+ echo "Compiling $(notdir $@)...";
611+ @$(MCS) $(MCS_FLAGS) -target:$(TARGET) -out:$@ $(BUILD_DEFINES) $(BUILD_REFERENCES) $(COMPONENT_REFERENCES) $(RESOURCES_BUILD) $(SOURCES_BUILD)
612+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
613+ cp $(srcdir)/$(notdir $@.config) $(BUILD_DIR) ; \
614+ fi;
615+
616+%.pc : %.pc.in
617+ @colors=no; \
618+ case $$TERM in \
619+ "xterm" | "rxvt" | "rxvt-unicode") \
620+ test "x$$COLORTERM" != "x" && colors=yes ;; \
621+ "xterm-color") colors=yes ;; \
622+ esac; \
623+ if [ "x$$colors" = "xyes" ]; then \
624+ tty -s && true || { colors=no; true; } \
625+ fi; \
626+ test "x$$colors" = "xyes" && \
627+ echo -e "\033[1mGenerating $(notdir $@)...\033[0m" || \
628+ echo "Generating $(notdir $@)...";
629+ @sed "s,\@ABI_VERSION\@,$(ABI_VERSION),g; s,\@expanded_libdir\@,$(expanded_libdir),g; s,\@PACKAGE\@,$(PACKAGE),g" < $< > $@
630+# Tell versions [3.59,3.63) of GNU make to not export all variables.
631+# Otherwise a system limit (for SysV at least) may be exceeded.
632+.NOEXPORT:
633
634=== added directory 'Do.Platform.Linux.JoliCloud/Resources'
635=== added file 'Do.Platform.Linux.JoliCloud/Resources/Do.Platform.Linux.JoliCloud.addin.xml'
636--- Do.Platform.Linux.JoliCloud/Resources/Do.Platform.Linux.JoliCloud.addin.xml 1970-01-01 00:00:00 +0000
637+++ Do.Platform.Linux.JoliCloud/Resources/Do.Platform.Linux.JoliCloud.addin.xml 2009-06-22 15:51:57 +0000
638@@ -0,0 +1,16 @@
639+<Addin id="Platform.Linux.JoliCloud" namespace="Do" version="1.0" category="Hidden">
640+
641+ <Runtime>
642+ <Import assembly="Do.Platform.Linux.JoliCloud.dll" />
643+ </Runtime>
644+
645+ <Dependencies>
646+ <Addin id="Platform" version="1.0" />
647+ <Addin id="Universe" version="1.0" />
648+ </Dependencies>
649+
650+ <Extension path="/Do/Service">
651+ <Service type="Do.Platform.Linux.JoliCloud.PackageManagerService" />
652+ </Extension>
653+
654+</Addin>
655
656=== added file 'Do.Platform.Linux.JoliCloud/do.platform.linux.jolicloud.pc.in'
657--- Do.Platform.Linux.JoliCloud/do.platform.linux.jolicloud.pc.in 1970-01-01 00:00:00 +0000
658+++ Do.Platform.Linux.JoliCloud/do.platform.linux.jolicloud.pc.in 2009-06-22 15:51:57 +0000
659@@ -0,0 +1,6 @@
660+Name: Do.Platform.Linux.JoliCloud
661+Description: JoliCloud-specific functionality
662+Version: @ABI_VERSION@
663+
664+Requires: do.platform
665+Libs: -r:@expanded_libdir@/@PACKAGE@/Do.Platform.Linux.JoliCloud.dll
666
667=== added directory 'Do.Platform.Linux.JoliCloud/src'
668=== added file 'Do.Platform.Linux.JoliCloud/src/AssemblyInfo.cs.in'
669--- Do.Platform.Linux.JoliCloud/src/AssemblyInfo.cs.in 1970-01-01 00:00:00 +0000
670+++ Do.Platform.Linux.JoliCloud/src/AssemblyInfo.cs.in 2009-06-24 14:55:58 +0000
671@@ -0,0 +1,45 @@
672+// AssemblyInfo.cs
673+//
674+// GNOME Do is the legal property of its developers. Please refer to the
675+// COPYRIGHT file distributed with this source distribution.
676+//
677+// This program is free software: you can redistribute it and/or modify
678+// it under the terms of the GNU General Public License as published by
679+// the Free Software Foundation, either version 3 of the License, or
680+// (at your option) any later version.
681+//
682+// This program is distributed in the hope that it will be useful,
683+// but WITHOUT ANY WARRANTY; without even the implied warranty of
684+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
685+// GNU General Public License for more details.
686+//
687+// You should have received a copy of the GNU General Public License
688+// along with this program. If not, see <http://www.gnu.org/licenses/>.
689+//
690+
691+using System.Reflection;
692+using System.Runtime.CompilerServices;
693+
694+// Information about this assembly is defined by the following attributes.
695+// Change them to the values specific to your project.
696+
697+[assembly: AssemblyTitle("Do.Platform.Linux.JoliCloud")]
698+[assembly: AssemblyDescription("")]
699+[assembly: AssemblyConfiguration("")]
700+[assembly: AssemblyCompany("")]
701+[assembly: AssemblyProduct("")]
702+[assembly: AssemblyCopyright("")]
703+[assembly: AssemblyTrademark("")]
704+[assembly: AssemblyCulture("")]
705+
706+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
707+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
708+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
709+
710+[assembly: AssemblyVersion("@ABI_VERSION@.0.0")]
711+
712+// The following attributes are used to specify the signing key for the assembly,
713+// if desired. See the Mono documentation for more information about signing.
714+
715+[assembly: AssemblyDelaySign(false)]
716+[assembly: AssemblyKeyFile("")]
717
718=== added directory 'Do.Platform.Linux.JoliCloud/src/Do.Platform'
719=== added directory 'Do.Platform.Linux.JoliCloud/src/Do.Platform/Do.Platform.Linux'
720=== added directory 'Do.Platform.Linux.JoliCloud/src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud'
721=== added file 'Do.Platform.Linux.JoliCloud/src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/PackageManagerService.cs'
722--- Do.Platform.Linux.JoliCloud/src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/PackageManagerService.cs 1970-01-01 00:00:00 +0000
723+++ Do.Platform.Linux.JoliCloud/src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/PackageManagerService.cs 2009-06-24 10:37:14 +0000
724@@ -0,0 +1,164 @@
725+// PackageManagerService.cs
726+//
727+// GNOME Do is the legal property of its developers. Please refer to the
728+// COPYRIGHT file distributed with this source distribution.
729+//
730+// This program is free software: you can redistribute it and/or modify
731+// it under the terms of the GNU General Public License as published by
732+// the Free Software Foundation, either version 3 of the License, or
733+// (at your option) any later version.
734+//
735+// This program is distributed in the hope that it will be useful,
736+// but WITHOUT ANY WARRANTY; without even the implied warranty of
737+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
738+// GNU General Public License for more details.
739+//
740+// You should have received a copy of the GNU General Public License
741+// along with this program. If not, see <http://www.gnu.org/licenses/>.
742+
743+using System;
744+using System.Threading;
745+
746+using NDesk.DBus;
747+using org.freedesktop.DBus;
748+
749+using Mono.Addins;
750+
751+using Do.Platform;
752+using Do.Platform.Linux;
753+using Do.Platform.ServiceStack;
754+
755+namespace Do.Platform.Linux.JoliCloud
756+{
757+
758+ [Interface ("org.jolicloud.JolicloudDaemon")]
759+ interface IJolicloudDaemon
760+ {
761+ event ActionProcessedEventHandler ActionProcessed;
762+ }
763+
764+ delegate void ActionProcessedEventHandler (string action, string [] packages, bool success, string error);
765+
766+ /// <summary>
767+ /// Listens to the JoliCloud daemon for package install events, and offers to install an appropriate
768+ /// plugin if one is found.
769+ /// </summary>
770+ public class PackageManagerService : AbstractPackageManagerService, IStrictService
771+ {
772+ const string ObjectPath = "/SoftwareManager";
773+ const string BusName = "org.jolicloud.JolicloudDaemon";
774+
775+ IBus session_bus;
776+ IJolicloudDaemon daemon;
777+
778+ /// <summary>
779+ /// Find jolicloud on the bus
780+ /// </summary>
781+ public override void Initialize ()
782+ {
783+ session_bus = Bus.Session.GetObject<IBus> ("org.freedeskop.DBus", new ObjectPath ("/org/freedesktop/DBus"));
784+ session_bus.NameOwnerChanged += HandleNameOwnerChanged;
785+
786+ // this call will instaniate the daemon, as well as make sure we also got a DBus object
787+ if (Daemon == null)
788+ Log<PackageManagerService>.Debug ("Failed to locate JoliCloud daemon on DBus.");
789+
790+ base.Initialize ();
791+ }
792+
793+ IJolicloudDaemon Daemon {
794+ get {
795+ if (daemon == null) {
796+ daemon = GetIJoliCloudDaemonObject (ObjectPath);
797+ daemon.ActionProcessed += HandleActionProcessed;
798+ Log<PackageManagerService>.Debug ("Aquired instance of JolicloudDaemon");
799+ }
800+ return daemon;
801+ }
802+ }
803+
804+ /// <summary>
805+ /// When a package manager action is performed we receive a signal, this method processes the signal
806+ /// and decides how to act.
807+ /// </summary>
808+ /// <param name="action">
809+ /// A <see cref="System.String"/> the action performed by the package manager
810+ /// </param>
811+ /// <param name="packages">
812+ /// A <see cref="System.String"/> the packages touched by the action
813+ /// </param>
814+ /// <param name="success">
815+ /// A <see cref="System.Boolean"/> did the action succeed
816+ /// </param>
817+ /// <param name="error">
818+ /// A <see cref="System.String"/> errors
819+ /// </param>
820+ void HandleActionProcessed (string action, string[] packages, bool success, string error)
821+ {
822+ Addin addin;
823+ string cleanName;
824+
825+ if (action != "install" || packages.Length < 1 || DontShowPluginAvailableDialog)
826+ return;
827+
828+ cleanName = HumanNameFromPackageName (packages [0]);
829+ if ((addin = MaybePluginForPackage (cleanName)) == null && !addin.Enabled)
830+ return;
831+
832+ new PluginAvailableDialog (cleanName, addin);
833+ }
834+
835+ /// <summary>
836+ /// Attempts to clean up a package name into something a little bit more friendly.
837+ /// </summary>
838+ /// <param name="package">
839+ /// A <see cref="System.String"/>
840+ /// </param>
841+ /// <returns>
842+ /// A <see cref="System.String"/>
843+ /// </returns>
844+ string HumanNameFromPackageName (string package)
845+ {
846+ if (package.Contains ("prism-webapp"))
847+ package = package.Substring ("prism-webapp".Length + 1);
848+
849+ package.Replace ('-', ' ');
850+
851+ return package.ToLower ();
852+ }
853+
854+#region DBus handling
855+ void HandleNameOwnerChanged (string name, string old_owner, string new_owner)
856+ {
857+ // if the jolicloud daemon gets released, we should drop our object
858+ if (Daemon != null && name == BusName) {
859+ Daemon.ActionProcessed -= HandleActionProcessed;
860+ daemon = null;
861+ }
862+ }
863+
864+ IJolicloudDaemon GetIJoliCloudDaemonObject (string objectPath)
865+ {
866+ MaybeStartDaemon ();
867+ return Bus.Session.GetObject<IJolicloudDaemon> (BusName, new ObjectPath (objectPath));
868+ }
869+
870+ bool DaemonIsRunning {
871+ get { return Bus.Session.NameHasOwner (BusName); }
872+ }
873+
874+ void MaybeStartDaemon ()
875+ {
876+ if (DaemonIsRunning)
877+ return;
878+
879+ Bus.Session.StartServiceByName (BusName);
880+ Thread.Sleep (5000);
881+
882+ if (!DaemonIsRunning)
883+ throw new Exception (string.Format("Name {0} has no owner.", BusName));
884+ }
885+#endregion
886+ }
887+}
888+
889\ No newline at end of file
890
891=== added directory 'Do.Platform.Linux.JoliCloud/src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/Tests'
892=== added file 'Do.Platform.Linux.JoliCloud/src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/Tests/PackageManagerServiceTests.cs'
893--- Do.Platform.Linux.JoliCloud/src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/Tests/PackageManagerServiceTests.cs 1970-01-01 00:00:00 +0000
894+++ Do.Platform.Linux.JoliCloud/src/Do.Platform/Do.Platform.Linux/Do.Platform.Linux.JoliCloud/Tests/PackageManagerServiceTests.cs 2009-06-22 15:51:57 +0000
895@@ -0,0 +1,32 @@
896+// %filename
897+//
898+// GNOME Do is the legal property of its developers. Please refer to the
899+// COPYRIGHT file distributed with this source distribution.
900+//
901+// This program is free software: you can redistribute it and/or modify
902+// it under the terms of the GNU General Public License as published by
903+// the Free Software Foundation, either version 3 of the License, or
904+// (at your option) any later version.
905+//
906+// This program is distributed in the hope that it will be useful,
907+// but WITHOUT ANY WARRANTY; without even the implied warranty of
908+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
909+// GNU General Public License for more details.
910+//
911+// You should have received a copy of the GNU General Public License
912+// along with this program. If not, see <http://www.gnu.org/licenses/>.
913+
914+using System;
915+
916+namespace Do.Platform.Linux.JoliCloud
917+{
918+
919+
920+ public class PackageManagerServiceTests
921+ {
922+
923+ public PackageManagerServiceTests()
924+ {
925+ }
926+ }
927+}
928
929=== modified file 'Do.Platform.Linux/Do.Platform.Linux.mdp'
930--- Do.Platform.Linux/Do.Platform.Linux.mdp 2009-06-19 07:41:21 +0000
931+++ Do.Platform.Linux/Do.Platform.Linux.mdp 2009-06-23 16:27:37 +0000
932@@ -51,6 +51,8 @@
933 <File name="src/Do.Universe/NullApplicationItem.cs" subtype="Code" buildaction="Compile" />
934 <File name="src/Do.Universe/CategoryItem.cs" subtype="Code" buildaction="Compile" />
935 <File name="src/Do.Platform/Do.Platform.Linux/NetworkService.cs" subtype="Code" buildaction="Compile" />
936+ <File name="src/Do.Widgets/PluginAvailableDialog.cs" subtype="Code" buildaction="Compile" />
937+ <File name="gtk-gui/Do.Platform.Linux.PluginAvailableDialog.cs" subtype="Code" buildaction="Compile" />
938 </Contents>
939 <References>
940 <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
941@@ -71,5 +73,6 @@
942 <ProjectReference type="Gac" localcopy="True" refto="gnome-vfs-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
943 <ProjectReference type="Gac" localcopy="True" refto="gnome-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
944 <ProjectReference type="Gac" localcopy="True" refto="nunit.framework, Version=2.2.0.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77" />
945+ <ProjectReference type="Gac" localcopy="True" refto="Mono.Addins, Version=0.4.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
946 </References>
947 </Project>
948\ No newline at end of file
949
950=== modified file 'Do.Platform.Linux/Makefile.am'
951--- Do.Platform.Linux/Makefile.am 2009-06-10 05:30:30 +0000
952+++ Do.Platform.Linux/Makefile.am 2009-06-23 16:49:14 +0000
953@@ -6,6 +6,7 @@
954
955 FILES = \
956 gtk-gui/Do.Platform.Linux.AbstractLoginWidget.cs \
957+ gtk-gui/Do.Platform.Linux.PluginAvailableDialog.cs \
958 gtk-gui/generated.cs \
959 src/AssemblyInfo.cs \
960 src/Do.Platform/ConsoleCrayon.cs \
961@@ -29,7 +30,8 @@
962 src/Do.Universe/ApplicationItemSource.cs \
963 src/Do.Universe/CopyToClipboardAction.cs \
964 src/Do.Universe/GNOMESpecialLocationsItemSource.cs \
965- src/Do.Widgets/AbstractLoginWidget.cs
966+ src/Do.Widgets/AbstractLoginWidget.cs \
967+ src/Do.Widgets/PluginAvailableDialog.cs
968
969 if HAVE_NUNIT
970 FILES += \
971@@ -47,15 +49,16 @@
972 System \
973 System.Core \
974 Mono.Posix \
975- $(NUNIT_LIBS) \
976 $(GTK_SHARP_20_LIBS) \
977 $(GNOME_KEYRING_SHARP_LIBS) \
978 $(GNOME_SHARP_20_LIBS) \
979 $(GNOME_DESKTOP_SHARP_20_LIBS) \
980 $(GCONF_SHARP_20_LIBS) \
981+ $(MONO_ADDINS_LIBS) \
982 $(NDESK_DBUS_10_LIBS) \
983 $(NDESK_DBUS_GLIB_10_LIBS) \
984- $(NOTIFY_SHARP_LIBS)
985+ $(NOTIFY_SHARP_LIBS) \
986+ $(NUNIT_LIBS)
987
988 PROJECT_REFERENCES = \
989 Do.Universe \
990
991=== modified file 'Do.Platform.Linux/gtk-gui/Do.Platform.Linux.AbstractLoginWidget.cs'
992--- Do.Platform.Linux/gtk-gui/Do.Platform.Linux.AbstractLoginWidget.cs 2009-06-19 04:30:03 +0000
993+++ Do.Platform.Linux/gtk-gui/Do.Platform.Linux.AbstractLoginWidget.cs 2009-06-23 09:39:36 +0000
994@@ -130,7 +130,6 @@
995 w6.Fill = false;
996 // Container child account_vbox.Gtk.Box+BoxChild
997 this.hbuttonbox1 = new Gtk.HButtonBox();
998- this.hbuttonbox1.Name = "hbuttonbox1";
999 this.hbuttonbox1.LayoutStyle = ((Gtk.ButtonBoxStyle)(4));
1000 // Container child hbuttonbox1.Gtk.ButtonBox+ButtonBoxChild
1001 this.validate_btn = new Gtk.Button();
1002
1003=== added file 'Do.Platform.Linux/gtk-gui/Do.Platform.Linux.PluginAvailableDialog.cs'
1004--- Do.Platform.Linux/gtk-gui/Do.Platform.Linux.PluginAvailableDialog.cs 1970-01-01 00:00:00 +0000
1005+++ Do.Platform.Linux/gtk-gui/Do.Platform.Linux.PluginAvailableDialog.cs 2009-06-23 17:17:33 +0000
1006@@ -0,0 +1,193 @@
1007+// ------------------------------------------------------------------------------
1008+// <autogenerated>
1009+// This code was generated by a tool.
1010+//
1011+//
1012+// Changes to this file may cause incorrect behavior and will be lost if
1013+// the code is regenerated.
1014+// </autogenerated>
1015+// ------------------------------------------------------------------------------
1016+
1017+namespace Do.Platform.Linux {
1018+
1019+
1020+ public partial class PluginAvailableDialog {
1021+
1022+ private Gtk.VBox vbox2;
1023+
1024+ private Gtk.HBox hbox1;
1025+
1026+ private Gtk.Image title_img;
1027+
1028+ private Gtk.Alignment title_align;
1029+
1030+ private Gtk.Label title_lbl;
1031+
1032+ private Gtk.Alignment body_align;
1033+
1034+ private Gtk.Label body_lbl;
1035+
1036+ private Gtk.Alignment link_align;
1037+
1038+ private Gtk.VBox link_vbox;
1039+
1040+ private Gtk.Alignment ask_align;
1041+
1042+ private Gtk.CheckButton ask_chk;
1043+
1044+ private Gtk.Button buttonCancel;
1045+
1046+ private Gtk.Button install_btn;
1047+
1048+ protected virtual void Build() {
1049+ Stetic.Gui.Initialize(this);
1050+ // Widget Do.Platform.Linux.PluginAvailableDialog
1051+ this.Name = "Do.Platform.Linux.PluginAvailableDialog";
1052+ this.WindowPosition = ((Gtk.WindowPosition)(4));
1053+ this.BorderWidth = ((uint)(5));
1054+ this.HasSeparator = false;
1055+ // Internal child Do.Platform.Linux.PluginAvailableDialog.VBox
1056+ Gtk.VBox w1 = this.VBox;
1057+ w1.Name = "dialog1_VBox";
1058+ w1.BorderWidth = ((uint)(2));
1059+ // Container child dialog1_VBox.Gtk.Box+BoxChild
1060+ this.vbox2 = new Gtk.VBox();
1061+ this.vbox2.Name = "vbox2";
1062+ this.vbox2.Spacing = 6;
1063+ // Container child vbox2.Gtk.Box+BoxChild
1064+ this.hbox1 = new Gtk.HBox();
1065+ this.hbox1.Name = "hbox1";
1066+ this.hbox1.Spacing = 6;
1067+ // Container child hbox1.Gtk.Box+BoxChild
1068+ this.title_img = new Gtk.Image();
1069+ this.title_img.Name = "title_img";
1070+ this.title_img.Pixbuf = Stetic.IconLoader.LoadIcon(this, "gnome-do", Gtk.IconSize.Dialog, 48);
1071+ this.hbox1.Add(this.title_img);
1072+ Gtk.Box.BoxChild w2 = ((Gtk.Box.BoxChild)(this.hbox1[this.title_img]));
1073+ w2.Position = 0;
1074+ w2.Expand = false;
1075+ w2.Fill = false;
1076+ // Container child hbox1.Gtk.Box+BoxChild
1077+ this.title_align = new Gtk.Alignment(0.5F, 0.5F, 1F, 1F);
1078+ this.title_align.Name = "title_align";
1079+ this.title_align.LeftPadding = ((uint)(7));
1080+ // Container child title_align.Gtk.Container+ContainerChild
1081+ this.title_lbl = new Gtk.Label();
1082+ this.title_lbl.Name = "title_lbl";
1083+ this.title_lbl.LabelProp = Mono.Unix.Catalog.GetString("<b><span size=\"x-large\">There's a Do plugin for that!</span></b>");
1084+ this.title_lbl.UseMarkup = true;
1085+ this.title_align.Add(this.title_lbl);
1086+ this.hbox1.Add(this.title_align);
1087+ Gtk.Box.BoxChild w4 = ((Gtk.Box.BoxChild)(this.hbox1[this.title_align]));
1088+ w4.Position = 1;
1089+ w4.Expand = false;
1090+ w4.Fill = false;
1091+ this.vbox2.Add(this.hbox1);
1092+ Gtk.Box.BoxChild w5 = ((Gtk.Box.BoxChild)(this.vbox2[this.hbox1]));
1093+ w5.Position = 0;
1094+ w5.Expand = false;
1095+ w5.Fill = false;
1096+ // Container child vbox2.Gtk.Box+BoxChild
1097+ this.body_align = new Gtk.Alignment(0.5F, 0.5F, 1F, 1F);
1098+ this.body_align.Name = "body_align";
1099+ this.body_align.LeftPadding = ((uint)(62));
1100+ // Container child body_align.Gtk.Container+ContainerChild
1101+ this.body_lbl = new Gtk.Label();
1102+ this.body_lbl.Name = "body_lbl";
1103+ this.body_lbl.Xalign = 0F;
1104+ this.body_lbl.LabelProp = Mono.Unix.Catalog.GetString("A Do plugin for {0} is available for installation. Would you like us to enable it for you?");
1105+ this.body_lbl.Wrap = true;
1106+ this.body_align.Add(this.body_lbl);
1107+ this.vbox2.Add(this.body_align);
1108+ Gtk.Box.BoxChild w7 = ((Gtk.Box.BoxChild)(this.vbox2[this.body_align]));
1109+ w7.Position = 1;
1110+ w7.Expand = false;
1111+ w7.Fill = false;
1112+ // Container child vbox2.Gtk.Box+BoxChild
1113+ this.link_align = new Gtk.Alignment(0.5F, 0.5F, 1F, 1F);
1114+ this.link_align.Name = "link_align";
1115+ this.link_align.LeftPadding = ((uint)(55));
1116+ // Container child link_align.Gtk.Container+ContainerChild
1117+ this.link_vbox = new Gtk.VBox();
1118+ this.link_vbox.Name = "link_vbox";
1119+ this.link_align.Add(this.link_vbox);
1120+ this.vbox2.Add(this.link_align);
1121+ Gtk.Box.BoxChild w9 = ((Gtk.Box.BoxChild)(this.vbox2[this.link_align]));
1122+ w9.Position = 2;
1123+ // Container child vbox2.Gtk.Box+BoxChild
1124+ this.ask_align = new Gtk.Alignment(0.5F, 0.5F, 1F, 1F);
1125+ this.ask_align.Name = "ask_align";
1126+ this.ask_align.LeftPadding = ((uint)(57));
1127+ // Container child ask_align.Gtk.Container+ContainerChild
1128+ this.ask_chk = new Gtk.CheckButton();
1129+ this.ask_chk.CanFocus = true;
1130+ this.ask_chk.Name = "ask_chk";
1131+ this.ask_chk.Label = Mono.Unix.Catalog.GetString("Don't ask me about Do plugins again.");
1132+ this.ask_chk.DrawIndicator = true;
1133+ this.ask_chk.UseUnderline = true;
1134+ this.ask_align.Add(this.ask_chk);
1135+ this.vbox2.Add(this.ask_align);
1136+ Gtk.Box.BoxChild w11 = ((Gtk.Box.BoxChild)(this.vbox2[this.ask_align]));
1137+ w11.Position = 3;
1138+ w11.Expand = false;
1139+ w11.Fill = false;
1140+ w1.Add(this.vbox2);
1141+ Gtk.Box.BoxChild w12 = ((Gtk.Box.BoxChild)(w1[this.vbox2]));
1142+ w12.Position = 0;
1143+ // Internal child Do.Platform.Linux.PluginAvailableDialog.ActionArea
1144+ Gtk.HButtonBox w13 = this.ActionArea;
1145+ w13.Name = "dialog1_ActionArea";
1146+ w13.Spacing = 6;
1147+ w13.BorderWidth = ((uint)(5));
1148+ w13.LayoutStyle = ((Gtk.ButtonBoxStyle)(4));
1149+ // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
1150+ this.buttonCancel = new Gtk.Button();
1151+ this.buttonCancel.CanDefault = true;
1152+ this.buttonCancel.CanFocus = true;
1153+ this.buttonCancel.Name = "buttonCancel";
1154+ this.buttonCancel.UseStock = true;
1155+ this.buttonCancel.UseUnderline = true;
1156+ this.buttonCancel.Label = "gtk-cancel";
1157+ this.AddActionWidget(this.buttonCancel, -6);
1158+ Gtk.ButtonBox.ButtonBoxChild w14 = ((Gtk.ButtonBox.ButtonBoxChild)(w13[this.buttonCancel]));
1159+ w14.Expand = false;
1160+ w14.Fill = false;
1161+ // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
1162+ this.install_btn = new Gtk.Button();
1163+ this.install_btn.CanDefault = true;
1164+ this.install_btn.CanFocus = true;
1165+ this.install_btn.Name = "install_btn";
1166+ this.install_btn.UseUnderline = true;
1167+ // Container child install_btn.Gtk.Container+ContainerChild
1168+ Gtk.Alignment w15 = new Gtk.Alignment(0.5F, 0.5F, 0F, 0F);
1169+ // Container child GtkAlignment1.Gtk.Container+ContainerChild
1170+ Gtk.HBox w16 = new Gtk.HBox();
1171+ w16.Spacing = 2;
1172+ // Container child GtkHBox1.Gtk.Container+ContainerChild
1173+ Gtk.Image w17 = new Gtk.Image();
1174+ w17.Pixbuf = Stetic.IconLoader.LoadIcon(this, "gtk-ok", Gtk.IconSize.Button, 20);
1175+ w16.Add(w17);
1176+ // Container child GtkHBox1.Gtk.Container+ContainerChild
1177+ Gtk.Label w19 = new Gtk.Label();
1178+ w19.LabelProp = Mono.Unix.Catalog.GetString("_Install");
1179+ w19.UseUnderline = true;
1180+ w16.Add(w19);
1181+ w15.Add(w16);
1182+ this.install_btn.Add(w15);
1183+ this.AddActionWidget(this.install_btn, -5);
1184+ Gtk.ButtonBox.ButtonBoxChild w23 = ((Gtk.ButtonBox.ButtonBoxChild)(w13[this.install_btn]));
1185+ w23.Position = 1;
1186+ w23.Expand = false;
1187+ w23.Fill = false;
1188+ if ((this.Child != null)) {
1189+ this.Child.ShowAll();
1190+ }
1191+ this.DefaultWidth = 486;
1192+ this.DefaultHeight = 218;
1193+ this.Show();
1194+ this.ask_chk.Toggled += new System.EventHandler(this.OnAskChkToggled);
1195+ this.buttonCancel.Clicked += new System.EventHandler(this.OnButtonCancelClicked);
1196+ this.install_btn.Clicked += new System.EventHandler(this.OnInstallBtnClicked);
1197+ }
1198+ }
1199+}
1200
1201=== modified file 'Do.Platform.Linux/gtk-gui/generated.cs'
1202--- Do.Platform.Linux/gtk-gui/generated.cs 2009-01-19 23:59:12 +0000
1203+++ Do.Platform.Linux/gtk-gui/generated.cs 2009-06-22 18:04:05 +0000
1204@@ -69,6 +69,39 @@
1205 }
1206 }
1207
1208+ internal class IconLoader {
1209+
1210+ public static Gdk.Pixbuf LoadIcon(Gtk.Widget widget, string name, Gtk.IconSize size, int sz) {
1211+ Gdk.Pixbuf res = widget.RenderIcon(name, size, null);
1212+ if ((res != null)) {
1213+ return res;
1214+ }
1215+ else {
1216+ try {
1217+ return Gtk.IconTheme.Default.LoadIcon(name, sz, 0);
1218+ }
1219+ catch (System.Exception ) {
1220+ if ((name != "gtk-missing-image")) {
1221+ return Stetic.IconLoader.LoadIcon(widget, "gtk-missing-image", size, sz);
1222+ }
1223+ else {
1224+ Gdk.Pixmap pmap = new Gdk.Pixmap(Gdk.Screen.Default.RootWindow, sz, sz);
1225+ Gdk.GC gc = new Gdk.GC(pmap);
1226+ gc.RgbFgColor = new Gdk.Color(255, 255, 255);
1227+ pmap.DrawRectangle(gc, true, 0, 0, sz, sz);
1228+ gc.RgbFgColor = new Gdk.Color(0, 0, 0);
1229+ pmap.DrawRectangle(gc, false, 0, 0, (sz - 1), (sz - 1));
1230+ gc.SetLineAttributes(3, Gdk.LineStyle.Solid, Gdk.CapStyle.Round, Gdk.JoinStyle.Round);
1231+ gc.RgbFgColor = new Gdk.Color(255, 0, 0);
1232+ pmap.DrawLine(gc, (sz / 4), (sz / 4), ((sz - 1) - (sz / 4)), ((sz - 1) - (sz / 4)));
1233+ pmap.DrawLine(gc, ((sz - 1) - (sz / 4)), (sz / 4), (sz / 4), ((sz - 1) - (sz / 4)));
1234+ return Gdk.Pixbuf.FromDrawable(pmap, pmap.Colormap, 0, 0, 0, 0, sz, sz);
1235+ }
1236+ }
1237+ }
1238+ }
1239+ }
1240+
1241 internal class ActionGroups {
1242
1243 public static Gtk.ActionGroup GetActionGroup(System.Type type) {
1244
1245=== modified file 'Do.Platform.Linux/gtk-gui/gui.stetic'
1246--- Do.Platform.Linux/gtk-gui/gui.stetic 2009-05-29 10:26:49 +0000
1247+++ Do.Platform.Linux/gtk-gui/gui.stetic 2009-06-24 15:08:47 +0000
1248@@ -7,7 +7,6 @@
1249 <import>
1250 <widget-library name="gnomedesktop-sharp, Version=2.20.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
1251 <widget-library name="notify-sharp, Version=0.4.0.0, Culture=neutral, PublicKeyToken=2df29c54e245917a" />
1252- <widget-library name="../../Do.Interface.Linux/bin/Debug/Do.Interface.Linux.dll" />
1253 <widget-library name="gnome-sharp, Version=2.24.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
1254 <widget-library name="../bin/Debug/Do.Platform.Linux.dll" internal="true" />
1255 </import>
1256@@ -245,4 +244,179 @@
1257 </widget>
1258 </child>
1259 </widget>
1260+ <widget class="Gtk.Dialog" id="Do.Platform.Linux.PluginAvailableDialog" design-size="486 218">
1261+ <property name="MemberName" />
1262+ <property name="WindowPosition">CenterOnParent</property>
1263+ <property name="BorderWidth">5</property>
1264+ <property name="Buttons">2</property>
1265+ <property name="HelpButton">False</property>
1266+ <property name="HasSeparator">False</property>
1267+ <child internal-child="VBox">
1268+ <widget class="Gtk.VBox" id="dialog1_VBox">
1269+ <property name="MemberName" />
1270+ <property name="BorderWidth">2</property>
1271+ <child>
1272+ <widget class="Gtk.VBox" id="vbox2">
1273+ <property name="MemberName" />
1274+ <property name="Spacing">6</property>
1275+ <child>
1276+ <widget class="Gtk.HBox" id="hbox1">
1277+ <property name="MemberName" />
1278+ <property name="Spacing">6</property>
1279+ <child>
1280+ <widget class="Gtk.Image" id="title_img">
1281+ <property name="MemberName" />
1282+ <property name="Pixbuf">stock:gnome-do Dialog</property>
1283+ </widget>
1284+ <packing>
1285+ <property name="Position">0</property>
1286+ <property name="AutoSize">True</property>
1287+ <property name="Expand">False</property>
1288+ <property name="Fill">False</property>
1289+ </packing>
1290+ </child>
1291+ <child>
1292+ <widget class="Gtk.Alignment" id="title_align">
1293+ <property name="MemberName" />
1294+ <property name="LeftPadding">7</property>
1295+ <child>
1296+ <widget class="Gtk.Label" id="title_lbl">
1297+ <property name="MemberName" />
1298+ <property name="LabelProp" translatable="yes">&lt;b&gt;&lt;span size="x-large"&gt;There's a Do plugin for that!&lt;/span&gt;&lt;/b&gt;</property>
1299+ <property name="UseMarkup">True</property>
1300+ </widget>
1301+ </child>
1302+ </widget>
1303+ <packing>
1304+ <property name="Position">1</property>
1305+ <property name="AutoSize">True</property>
1306+ <property name="Expand">False</property>
1307+ <property name="Fill">False</property>
1308+ </packing>
1309+ </child>
1310+ </widget>
1311+ <packing>
1312+ <property name="Position">0</property>
1313+ <property name="AutoSize">True</property>
1314+ <property name="Expand">False</property>
1315+ <property name="Fill">False</property>
1316+ </packing>
1317+ </child>
1318+ <child>
1319+ <widget class="Gtk.Alignment" id="body_align">
1320+ <property name="MemberName" />
1321+ <property name="LeftPadding">62</property>
1322+ <child>
1323+ <widget class="Gtk.Label" id="body_lbl">
1324+ <property name="MemberName" />
1325+ <property name="Xalign">0</property>
1326+ <property name="LabelProp" translatable="yes">A Do plugin for {0} is available for installation. Would you like us to enable it for you?</property>
1327+ <property name="Wrap">True</property>
1328+ </widget>
1329+ </child>
1330+ </widget>
1331+ <packing>
1332+ <property name="Position">1</property>
1333+ <property name="AutoSize">True</property>
1334+ <property name="Expand">False</property>
1335+ <property name="Fill">False</property>
1336+ </packing>
1337+ </child>
1338+ <child>
1339+ <widget class="Gtk.Alignment" id="link_align">
1340+ <property name="MemberName" />
1341+ <property name="LeftPadding">55</property>
1342+ <child>
1343+ <widget class="Gtk.VBox" id="link_vbox">
1344+ <property name="MemberName" />
1345+ <child>
1346+ <placeholder />
1347+ </child>
1348+ <child>
1349+ <placeholder />
1350+ </child>
1351+ </widget>
1352+ </child>
1353+ </widget>
1354+ <packing>
1355+ <property name="Position">2</property>
1356+ <property name="AutoSize">True</property>
1357+ </packing>
1358+ </child>
1359+ <child>
1360+ <widget class="Gtk.Alignment" id="ask_align">
1361+ <property name="MemberName" />
1362+ <property name="LeftPadding">57</property>
1363+ <child>
1364+ <widget class="Gtk.CheckButton" id="ask_chk">
1365+ <property name="MemberName" />
1366+ <property name="CanFocus">True</property>
1367+ <property name="Label" translatable="yes">Don't ask me about Do plugins again.</property>
1368+ <property name="DrawIndicator">True</property>
1369+ <property name="HasLabel">True</property>
1370+ <property name="UseUnderline">True</property>
1371+ <signal name="Toggled" handler="OnAskChkToggled" />
1372+ </widget>
1373+ </child>
1374+ </widget>
1375+ <packing>
1376+ <property name="Position">3</property>
1377+ <property name="AutoSize">True</property>
1378+ <property name="Expand">False</property>
1379+ <property name="Fill">False</property>
1380+ </packing>
1381+ </child>
1382+ </widget>
1383+ <packing>
1384+ <property name="Position">0</property>
1385+ <property name="AutoSize">True</property>
1386+ </packing>
1387+ </child>
1388+ </widget>
1389+ </child>
1390+ <child internal-child="ActionArea">
1391+ <widget class="Gtk.HButtonBox" id="dialog1_ActionArea">
1392+ <property name="MemberName" />
1393+ <property name="Spacing">6</property>
1394+ <property name="BorderWidth">5</property>
1395+ <property name="Size">2</property>
1396+ <property name="LayoutStyle">End</property>
1397+ <child>
1398+ <widget class="Gtk.Button" id="buttonCancel">
1399+ <property name="MemberName" />
1400+ <property name="CanDefault">True</property>
1401+ <property name="CanFocus">True</property>
1402+ <property name="UseStock">True</property>
1403+ <property name="Type">StockItem</property>
1404+ <property name="StockId">gtk-cancel</property>
1405+ <property name="ResponseId">-6</property>
1406+ <signal name="Clicked" handler="OnButtonCancelClicked" />
1407+ <property name="label">gtk-cancel</property>
1408+ </widget>
1409+ <packing>
1410+ <property name="Expand">False</property>
1411+ <property name="Fill">False</property>
1412+ </packing>
1413+ </child>
1414+ <child>
1415+ <widget class="Gtk.Button" id="install_btn">
1416+ <property name="MemberName" />
1417+ <property name="CanDefault">True</property>
1418+ <property name="CanFocus">True</property>
1419+ <property name="Type">TextAndIcon</property>
1420+ <property name="Icon">stock:gtk-ok Button</property>
1421+ <property name="Label" translatable="yes">_Install</property>
1422+ <property name="UseUnderline">True</property>
1423+ <property name="ResponseId">-5</property>
1424+ <signal name="Clicked" handler="OnInstallBtnClicked" />
1425+ </widget>
1426+ <packing>
1427+ <property name="Position">1</property>
1428+ <property name="Expand">False</property>
1429+ <property name="Fill">False</property>
1430+ </packing>
1431+ </child>
1432+ </widget>
1433+ </child>
1434+ </widget>
1435 </stetic-interface>
1436\ No newline at end of file
1437
1438=== added file 'Do.Platform.Linux/src/Do.Widgets/PluginAvailableDialog.cs'
1439--- Do.Platform.Linux/src/Do.Widgets/PluginAvailableDialog.cs 1970-01-01 00:00:00 +0000
1440+++ Do.Platform.Linux/src/Do.Widgets/PluginAvailableDialog.cs 2009-06-24 15:08:47 +0000
1441@@ -0,0 +1,78 @@
1442+// %filename
1443+//
1444+// GNOME Do is the legal property of its developers. Please refer to the
1445+// COPYRIGHT file distributed with this source distribution.
1446+//
1447+// This program is free software: you can redistribute it and/or modify
1448+// it under the terms of the GNU General Public License as published by
1449+// the Free Software Foundation, either version 3 of the License, or
1450+// (at your option) any later version.
1451+//
1452+// This program is distributed in the hope that it will be useful,
1453+// but WITHOUT ANY WARRANTY; without even the implied warranty of
1454+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1455+// GNU General Public License for more details.
1456+//
1457+// You should have received a copy of the GNU General Public License
1458+// along with this program. If not, see <http://www.gnu.org/licenses/>.
1459+
1460+using System;
1461+
1462+using Gtk;
1463+using Mono.Unix;
1464+using Mono.Addins;
1465+
1466+using Do.Platform;
1467+
1468+namespace Do.Platform.Linux
1469+{
1470+
1471+ public partial class PluginAvailableDialog : Gtk.Dialog
1472+ {
1473+ const string WhatIsDoUrl = "http://do.davebsd.com/wiki/index.php?title=Main_Page#What_is_GNOME_Do.3F";
1474+
1475+ Addin addin;
1476+
1477+ public PluginAvailableDialog (string package, Addin addin)
1478+ {
1479+ this.Build();
1480+
1481+ LinkButton wiki_btn, plugin_desc_btn;
1482+
1483+ this.addin = addin;
1484+
1485+ body_lbl.Text = string.Format (body_lbl.Text, package);
1486+
1487+ wiki_btn = new LinkButton (WhatIsDoUrl, Catalog.GetString ("What is Do?"));
1488+ wiki_btn.Xalign = 0F;
1489+ link_vbox.Add (wiki_btn);
1490+
1491+ // if the URL attribute is set, then we show a link to the plugin help
1492+ if (!string.IsNullOrEmpty (addin.Description.Url)) {
1493+ plugin_desc_btn = new LinkButton (addin.Description.Url,
1494+ string.Format (Catalog.GetString ("What does the {0} plugin do?"), package));
1495+ plugin_desc_btn.Xalign = 0F;
1496+ link_vbox.Add (plugin_desc_btn);
1497+ }
1498+
1499+ ShowAll ();
1500+ }
1501+
1502+ protected virtual void OnButtonCancelClicked (object sender, System.EventArgs e)
1503+ {
1504+ Destroy ();
1505+ }
1506+
1507+ protected virtual void OnInstallBtnClicked (object sender, System.EventArgs e)
1508+ {
1509+ Services.PluginManager.Install (addin);
1510+ Destroy ();
1511+ }
1512+
1513+ protected virtual void OnAskChkToggled (object sender, System.EventArgs e)
1514+ {
1515+ IPreferences prefs = Services.Preferences.Get<AbstractPackageManagerService> ();
1516+ prefs.Set (AbstractPackageManagerService.PluginAvailableKey, ask_chk.Active);
1517+ }
1518+ }
1519+}
1520
1521=== modified file 'Do.Platform/Do.Platform.mdp'
1522--- Do.Platform/Do.Platform.mdp 2009-06-10 05:30:30 +0000
1523+++ Do.Platform/Do.Platform.mdp 2009-06-23 16:27:37 +0000
1524@@ -79,16 +79,21 @@
1525 <File name="src/Do.Platform/INetworkService.cs" subtype="Code" buildaction="Compile" />
1526 <File name="src/Do.Platform/NetworkStateChangedEventArgs.cs" subtype="Code" buildaction="Compile" />
1527 <File name="src/Do.Platform/Do.Platform.Default/NetworkService.cs" subtype="Code" buildaction="Compile" />
1528+ <File name="src/Do.Platform/AbstractPackageManagerService.cs" subtype="Code" buildaction="Compile" />
1529+ <File name="src/Do.Platform/Do.Platform.Default/DefaultPackageManagerService.cs" subtype="Code" buildaction="Compile" />
1530+ <File name="src/Do.Platform/Do.Platform.ServiceStack/IStrictService.cs" subtype="Code" buildaction="Compile" />
1531+ <File name="src/Do.Platform/IPluginManagerService.cs" subtype="Code" buildaction="Compile" />
1532+ <File name="src/Do.Platform/Do.Platform.Default/PluginManagerService.cs" subtype="Code" buildaction="Compile" />
1533 </Contents>
1534 <References>
1535 <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
1536 <ProjectReference type="Gac" localcopy="True" refto="Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
1537 <ProjectReference type="Gac" localcopy="True" refto="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
1538- <ProjectReference type="Gac" localcopy="True" refto="Mono.Addins, Version=0.3.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
1539 <ProjectReference type="Project" localcopy="True" refto="Do.Universe" />
1540 <ProjectReference type="Gac" localcopy="True" refto="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
1541 <ProjectReference type="Gac" localcopy="True" refto="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
1542 <ProjectReference type="Gac" localcopy="True" refto="gnome-vfs-sharp, Version=2.24.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
1543 <ProjectReference type="Gac" localcopy="True" refto="nunit.framework, Version=2.2.0.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77" />
1544+ <ProjectReference type="Gac" localcopy="True" refto="Mono.Addins, Version=0.4.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
1545 </References>
1546-</Project>
1547\ No newline at end of file
1548+</Project>
1549
1550=== modified file 'Do.Platform/Makefile.am'
1551--- Do.Platform/Makefile.am 2009-06-10 05:30:30 +0000
1552+++ Do.Platform/Makefile.am 2009-06-23 16:27:37 +0000
1553@@ -17,10 +17,12 @@
1554 src/Do.Platform/Do.Platform.Default/CoreService.cs \
1555 src/Do.Platform/Do.Platform.Default/DefaultApplicationService.cs \
1556 src/Do.Platform/Do.Platform.Default/DefaultSystemService.cs \
1557+ src/Do.Platform/Do.Platform.Default/DefaultPackageManagerService.cs \
1558 src/Do.Platform/Do.Platform.Default/DefaultPathsService.cs \
1559 src/Do.Platform/Do.Platform.Default/EnvironmentService.cs \
1560 src/Do.Platform/Do.Platform.Default/LogService.cs \
1561 src/Do.Platform/Do.Platform.Default/NotificationsService.cs \
1562+ src/Do.Platform/Do.Platform.Default/PluginManagerService.cs \
1563 src/Do.Platform/Do.Platform.Default/PreferencesService.cs \
1564 src/Do.Platform/Do.Platform.Default/SecurePreferencesService.cs \
1565 src/Do.Platform/Do.Platform.Default/UniverseFactoryService.cs \
1566@@ -30,10 +32,12 @@
1567 src/Do.Platform/Do.Platform.Preferences/PreferencesImplementation.cs \
1568 src/Do.Platform/Do.Platform.ServiceStack/IInitializedService.cs \
1569 src/Do.Platform/Do.Platform.ServiceStack/IService.cs \
1570+ src/Do.Platform/Do.Platform.ServiceStack/IStrictService.cs \
1571 src/Do.Platform/ICoreService.cs \
1572 src/Do.Platform/IEnvironmentService.cs \
1573 src/Do.Platform/ILogService.cs \
1574 src/Do.Platform/INotificationsService.cs \
1575+ src/Do.Platform/IPluginManagerService.cs \
1576 src/Do.Platform/IPreferences.cs \
1577 src/Do.Platform/IPreferencesService.cs \
1578 src/Do.Platform/ISecurePreferencesService.cs \
1579@@ -45,6 +49,7 @@
1580 src/Do.Platform/Notification.cs \
1581 src/Do.Platform/NotificationEventArgs.cs \
1582 src/Do.Platform/AbstractApplicationService.cs \
1583+ src/Do.Platform/AbstractPackageManagerService.cs \
1584 src/Do.Platform/AbstractSystemService.cs \
1585 src/Do.Platform/PathsService.cs \
1586 src/Do.Platform/PreferencesChangedEventArgs.cs \
1587
1588=== added file 'Do.Platform/src/Do.Platform/AbstractPackageManagerService.cs'
1589--- Do.Platform/src/Do.Platform/AbstractPackageManagerService.cs 1970-01-01 00:00:00 +0000
1590+++ Do.Platform/src/Do.Platform/AbstractPackageManagerService.cs 2009-06-23 17:17:33 +0000
1591@@ -0,0 +1,74 @@
1592+/* AbstractPackageManagerService.cs
1593+ *
1594+ * GNOME Do is the legal property of its developers. Please refer to the
1595+ * COPYRIGHT file distributed with this source distribution.
1596+ *
1597+ * This program is free software: you can redistribute it and/or modify
1598+ * it under the terms of the GNU General Public License as published by
1599+ * the Free Software Foundation, either version 3 of the License, or
1600+ * (at your option) any later version.
1601+ *
1602+ * This program is distributed in the hope that it will be useful,
1603+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1604+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1605+ * GNU General Public License for more details.
1606+ *
1607+ * You should have received a copy of the GNU General Public License
1608+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
1609+ */
1610+
1611+using System;
1612+
1613+using Mono.Addins;
1614+
1615+using Do.Platform.ServiceStack;
1616+
1617+namespace Do.Platform
1618+{
1619+
1620+ /// <summary>
1621+ /// The package manager service is a service that runs and listens for events from a package backend. The idea is
1622+ /// that when you install a package that has a corresponding Do plugin, Do will see this and ask you if you want to
1623+ /// enable the corresponding plugin. This architecture allows us to write backends for whatever package manager is in
1624+ /// use be it apt, rpm, packagekit, or whatever.
1625+ /// </summary>
1626+ public abstract class AbstractPackageManagerService : IService, IInitializedService
1627+ {
1628+ public const string PluginAvailableKey = "DontShowPluginAvailableDialog";
1629+ public const bool PluginAvailableDefault = false;
1630+
1631+ public virtual void Initialize ()
1632+ {
1633+ Preferences = Services.Preferences.Get<AbstractPackageManagerService> ();
1634+ }
1635+
1636+ IPreferences Preferences { get; set; }
1637+
1638+ protected bool DontShowPluginAvailableDialog {
1639+ get { return Preferences.Get (PluginAvailableKey, PluginAvailableDefault); }
1640+ set { Preferences.Get (PluginAvailableKey, value); }
1641+ }
1642+
1643+ /// <summary>
1644+ /// Tries to find a plugin that is appropriate for the packge given.
1645+ /// i.e. if the package is a twitter prism app, it would give the Microblogging plugin
1646+ /// </summary>
1647+ /// <param name="package">
1648+ /// A <see cref="System.String"/>
1649+ /// </param>
1650+ /// <returns>
1651+ /// A <see cref="Addin"/>
1652+ /// </returns>
1653+ protected Addin MaybePluginForPackage (string package)
1654+ {
1655+ package = package.ToLower ();
1656+
1657+ foreach (Addin addin in Services.PluginManager.GetAddins ()) {
1658+ if (addin.Name.ToLower ().Contains (package) || addin.Description.Description.Contains (package))
1659+ return addin;
1660+ }
1661+
1662+ return null;
1663+ }
1664+ }
1665+}
1666
1667=== modified file 'Do.Platform/src/Do.Platform/Do.Platform.Default/DefaultApplicationService.cs'
1668--- Do.Platform/src/Do.Platform/Do.Platform.Default/DefaultApplicationService.cs 2009-01-17 22:35:46 +0000
1669+++ Do.Platform/src/Do.Platform/Do.Platform.Default/DefaultApplicationService.cs 2009-06-22 15:51:57 +0000
1670@@ -51,6 +51,5 @@
1671 {
1672 Log<DefaultApplicationService>.Debug ("Cannot flush main thread queue.");
1673 }
1674-
1675 }
1676 }
1677
1678=== added file 'Do.Platform/src/Do.Platform/Do.Platform.Default/DefaultPackageManagerService.cs'
1679--- Do.Platform/src/Do.Platform/Do.Platform.Default/DefaultPackageManagerService.cs 1970-01-01 00:00:00 +0000
1680+++ Do.Platform/src/Do.Platform/Do.Platform.Default/DefaultPackageManagerService.cs 2009-06-22 15:51:57 +0000
1681@@ -0,0 +1,33 @@
1682+// PackageManagerService.cs
1683+//
1684+// GNOME Do is the legal property of its developers. Please refer to the
1685+// COPYRIGHT file distributed with this source distribution.
1686+//
1687+// This program is free software: you can redistribute it and/or modify
1688+// it under the terms of the GNU General Public License as published by
1689+// the Free Software Foundation, either version 3 of the License, or
1690+// (at your option) any later version.
1691+//
1692+// This program is distributed in the hope that it will be useful,
1693+// but WITHOUT ANY WARRANTY; without even the implied warranty of
1694+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1695+// GNU General Public License for more details.
1696+//
1697+// You should have received a copy of the GNU General Public License
1698+// along with this program. If not, see <http://www.gnu.org/licenses/>.
1699+
1700+using System;
1701+
1702+using Do.Platform;
1703+
1704+namespace Do.Platform.Default
1705+{
1706+
1707+ public class DefaultPackageManagerService : AbstractPackageManagerService
1708+ {
1709+ public DefaultPackageManagerService ()
1710+ {
1711+ Log<DefaultPackageManagerService>.Warn ("Default service loaded, no package management available");
1712+ }
1713+ }
1714+}
1715
1716=== added file 'Do.Platform/src/Do.Platform/Do.Platform.Default/PluginManagerService.cs'
1717--- Do.Platform/src/Do.Platform/Do.Platform.Default/PluginManagerService.cs 1970-01-01 00:00:00 +0000
1718+++ Do.Platform/src/Do.Platform/Do.Platform.Default/PluginManagerService.cs 2009-06-23 16:25:39 +0000
1719@@ -0,0 +1,44 @@
1720+// PluginManagerService.cs
1721+//
1722+// GNOME Do is the legal property of its developers. Please refer to the
1723+// COPYRIGHT file distributed with this source distribution.
1724+//
1725+// This program is free software: you can redistribute it and/or modify
1726+// it under the terms of the GNU General Public License as published by
1727+// the Free Software Foundation, either version 3 of the License, or
1728+// (at your option) any later version.
1729+//
1730+// This program is distributed in the hope that it will be useful,
1731+// but WITHOUT ANY WARRANTY; without even the implied warranty of
1732+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1733+// GNU General Public License for more details.
1734+//
1735+// You should have received a copy of the GNU General Public License
1736+// along with this program. If not, see <http://www.gnu.org/licenses/>.
1737+
1738+using System;
1739+
1740+using Mono.Addins;
1741+
1742+using Do.Platform.ServiceStack;
1743+
1744+namespace Do.Platform.Default
1745+{
1746+ /// <summary>
1747+ /// If this class loads, we have a serious plugin because that probably means we have no plugin manager.
1748+ /// </summary>
1749+ public class PluginManagerService : IPluginManagerService
1750+ {
1751+ public Addin [] GetAddins ()
1752+ {
1753+ Log<PluginManagerService>.Error ("Using default service, could not locate any addins");
1754+ return new Addin [] { };
1755+ }
1756+
1757+ public void Install (Addin addin)
1758+ {
1759+ Log<PluginManagerService>.Error ("Using default service, could not install addin.");
1760+ return;
1761+ }
1762+ }
1763+}
1764
1765=== added file 'Do.Platform/src/Do.Platform/Do.Platform.ServiceStack/IStrictService.cs'
1766--- Do.Platform/src/Do.Platform/Do.Platform.ServiceStack/IStrictService.cs 1970-01-01 00:00:00 +0000
1767+++ Do.Platform/src/Do.Platform/Do.Platform.ServiceStack/IStrictService.cs 2009-06-22 15:41:57 +0000
1768@@ -0,0 +1,31 @@
1769+// %filename
1770+//
1771+// GNOME Do is the legal property of its developers. Please refer to the
1772+// COPYRIGHT file distributed with this source distribution.
1773+//
1774+// This program is free software: you can redistribute it and/or modify
1775+// it under the terms of the GNU General Public License as published by
1776+// the Free Software Foundation, either version 3 of the License, or
1777+// (at your option) any later version.
1778+//
1779+// This program is distributed in the hope that it will be useful,
1780+// but WITHOUT ANY WARRANTY; without even the implied warranty of
1781+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1782+// GNU General Public License for more details.
1783+//
1784+// You should have received a copy of the GNU General Public License
1785+// along with this program. If not, see <http://www.gnu.org/licenses/>.
1786+
1787+using System;
1788+
1789+namespace Do.Platform
1790+{
1791+
1792+ /// <summary>
1793+ /// If your service cannot be lazy loaded, and need initialization use this interface.
1794+ /// This will cause your service to be initialized with the Service manager.
1795+ /// </summary>
1796+ public interface IStrictService
1797+ {
1798+ }
1799+}
1800
1801=== added file 'Do.Platform/src/Do.Platform/IPluginManagerService.cs'
1802--- Do.Platform/src/Do.Platform/IPluginManagerService.cs 1970-01-01 00:00:00 +0000
1803+++ Do.Platform/src/Do.Platform/IPluginManagerService.cs 2009-06-23 16:25:39 +0000
1804@@ -0,0 +1,33 @@
1805+// %filename
1806+//
1807+// GNOME Do is the legal property of its developers. Please refer to the
1808+// COPYRIGHT file distributed with this source distribution.
1809+//
1810+// This program is free software: you can redistribute it and/or modify
1811+// it under the terms of the GNU General Public License as published by
1812+// the Free Software Foundation, either version 3 of the License, or
1813+// (at your option) any later version.
1814+//
1815+// This program is distributed in the hope that it will be useful,
1816+// but WITHOUT ANY WARRANTY; without even the implied warranty of
1817+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1818+// GNU General Public License for more details.
1819+//
1820+// You should have received a copy of the GNU General Public License
1821+// along with this program. If not, see <http://www.gnu.org/licenses/>.
1822+
1823+using System;
1824+
1825+using Mono.Addins;
1826+
1827+using Do.Platform.ServiceStack;
1828+
1829+namespace Do.Platform
1830+{
1831+
1832+ public interface IPluginManagerService : IService
1833+ {
1834+ Addin [] GetAddins ();
1835+ void Install (Addin addin);
1836+ }
1837+}
1838
1839=== modified file 'Do.Platform/src/Do.Platform/Services.cs'
1840--- Do.Platform/src/Do.Platform/Services.cs 2009-06-10 05:30:30 +0000
1841+++ Do.Platform/src/Do.Platform/Services.cs 2009-06-23 16:27:37 +0000
1842@@ -19,6 +19,7 @@
1843
1844 using System;
1845 using System.Linq;
1846+using System.Reflection;
1847 using System.Collections.Generic;
1848
1849 using Mono.Addins;
1850@@ -32,18 +33,19 @@
1851
1852 public class Services
1853 {
1854-
1855 static ICoreService core;
1856 static PathsService paths;
1857+ static INetworkService network;
1858 static IWindowingService windowing;
1859 static AbstractSystemService system;
1860 static IEnumerable<ILogService> logs;
1861 static PreferencesFactory preferences;
1862- static AbstractApplicationService application;
1863 static IEnvironmentService environment;
1864 static INotificationsService notifications;
1865+ static IPluginManagerService plugin_manager;
1866+ static AbstractApplicationService application;
1867 static IUniverseFactoryService universe_factory;
1868- static INetworkService network;
1869+ static AbstractPackageManagerService package_manager;
1870
1871 /// <summary>
1872 /// Initializes the class. Must be called after Mono.Addins is initialized; if this is
1873@@ -59,14 +61,16 @@
1874 // TODO find a better exception to throw.
1875 throw new Exception ("AddinManager was initialized before Services.");
1876 }
1877+
1878 AddinManager.AddExtensionNodeHandler ("/Do/Service", OnServiceChanged);
1879+ InitializeStrictServices ();
1880 }
1881-
1882+
1883 /// <summary>
1884 /// When a service is changed, we "dirty the cache".
1885 /// </summary>
1886 static void OnServiceChanged (object sender, ExtensionNodeEventArgs e)
1887- {
1888+ {
1889 IService service = e.ExtensionObject as IService;
1890
1891 switch (e.Change) {
1892@@ -79,29 +83,29 @@
1893 }
1894
1895 // Dirty the appropriate cache.
1896+ if (service is ILogService)
1897+ logs = null;
1898 if (service is ICoreService)
1899 core = null;
1900- if (service is IEnvironmentService)
1901- environment = null;
1902+ if (service is PathsService)
1903+ paths = null;
1904+ if (service is INetworkService)
1905+ network = null;
1906+ if (service is IWindowingService)
1907+ windowing = null;
1908 // Although it is not obvious, this also takes care of the ISecurePreferences service.
1909 if (service is IPreferencesService)
1910 preferences = null;
1911- if (service is ILogService)
1912- logs = null;
1913- if (service is IUniverseFactoryService)
1914- universe_factory = null;
1915+ if (service is IEnvironmentService)
1916+ environment = null;
1917+ if (service is AbstractSystemService)
1918+ system = null;
1919 if (service is INotificationsService)
1920 notifications = null;
1921- if (service is IWindowingService)
1922- windowing = null;
1923- if (service is PathsService)
1924- paths = null;
1925+ if (service is IUniverseFactoryService)
1926+ universe_factory = null;
1927 if (service is AbstractApplicationService)
1928 application = null;
1929- if (service is AbstractSystemService)
1930- system = null;
1931- if (service is INetworkService)
1932- network = null;
1933 }
1934
1935 /// <summary>
1936@@ -185,9 +189,25 @@
1937 network = LocateService<INetworkService, Default.NetworkService> ();
1938 return network;
1939 }
1940- }
1941-
1942+ }
1943+
1944+ public static AbstractPackageManagerService PackageManager {
1945+ get {
1946+ if (package_manager == null)
1947+ package_manager = LocateService<AbstractPackageManagerService, Default.DefaultPackageManagerService> ();
1948+ return package_manager;
1949+ }
1950+ }
1951+ public static IPluginManagerService PluginManager {
1952+ get {
1953+ if (plugin_manager == null)
1954+ plugin_manager = LocateService<IPluginManagerService, Default.PluginManagerService> ();
1955+ return plugin_manager;
1956+ }
1957+ }
1958+
1959 public static PreferencesFactory Preferences {
1960+
1961 get {
1962 if (preferences == null) {
1963 IPreferencesService service = LocateService<IPreferencesService, Default.PreferencesService> ();
1964@@ -229,5 +249,20 @@
1965 return Enumerable.Empty<TService> ();
1966 }
1967 }
1968+
1969+ /// <summary>
1970+ /// loops through the Property members of this class, and if it's a strict service gets it's value.
1971+ /// This will in turn cause a LocateService call, and the appropriate service will be loaded.
1972+ /// </summary>
1973+ static void InitializeStrictServices ()
1974+ {
1975+ foreach (PropertyInfo property in typeof (Services).GetProperties ()) {
1976+ Type returnType = property.PropertyType;
1977+ if (returnType.GetInterface ("Do.Platform.IStrictService") != null) {
1978+ // this looks stupid, but this is how you call the method on static classes.
1979+ property.GetValue (null, null);
1980+ }
1981+ }
1982+ }
1983 }
1984 }
1985
1986=== modified file 'Do.mds'
1987--- Do.mds 2009-04-22 04:42:48 +0000
1988+++ Do.mds 2009-06-22 15:51:57 +0000
1989@@ -15,6 +15,7 @@
1990 <Entry build="True" name="Do.Interface.Linux.HUD" configuration="Debug" />
1991 <Entry build="True" name="Do.Interface.Wink" configuration="Debug" />
1992 <Entry build="True" name="Do.Interface.Linux.AnimationBase" configuration="Debug" />
1993+ <Entry build="True" name="Do.Platform.Linux.JoliCloud" configuration="Debug" />
1994 </Configuration>
1995 <Configuration name="Release" ctype="CombineConfiguration">
1996 <Entry build="True" name="Do" configuration="Release" />
1997@@ -31,6 +32,7 @@
1998 <Entry build="True" name="Do.Interface.Linux.HUD" configuration="Release" />
1999 <Entry build="True" name="Do.Interface.Wink" configuration="Release" />
2000 <Entry build="True" name="Do.Interface.Linux.AnimationBase" configuration="Release" />
2001+ <Entry build="True" name="Do.Platform.Linux.JoliCloud" configuration="Release" />
2002 <CustomCommands>
2003 <Command type="BeforeBuild" command="autogen.sh --enable-release=YES" workingdir="${CombineDir}" />
2004 </CustomCommands>
2005@@ -51,6 +53,7 @@
2006 <Execute type="None" entry="Do.Interface.Linux.HUD" />
2007 <Execute type="None" entry="Do.Interface.Wink" />
2008 <Execute type="None" entry="Do.Interface.Linux.AnimationBase" />
2009+ <Execute type="None" entry="Do.Platform.Linux.JoliCloud" />
2010 </StartMode>
2011 <Entries>
2012 <Entry filename="Do/Do.mdp" />
2013@@ -67,5 +70,6 @@
2014 <Entry filename="Do.Interface.Linux.HUD/Do.Interface.Linux.HUD.mdp" />
2015 <Entry filename="Do.Interface.Wink/Do.Interface.Wink.mdp" />
2016 <Entry filename="Do.Interface.Linux.AnimationBase/Do.Interface.Linux.AnimationBase.mdp" />
2017+ <Entry filename="Do.Platform.Linux.JoliCloud/Do.Platform.Linux.JoliCloud.mdp" />
2018 </Entries>
2019 </Combine>
2020\ No newline at end of file
2021
2022=== modified file 'Do/Do.mdp'
2023--- Do/Do.mdp 2009-06-17 01:44:57 +0000
2024+++ Do/Do.mdp 2009-06-23 16:25:39 +0000
2025@@ -89,13 +89,11 @@
2026 <File name="src/Do.Core/Shortcut.cs" subtype="Code" buildaction="Compile" />
2027 <File name="src/Do.Core/ShortcutCallback.cs" subtype="Code" buildaction="Compile" />
2028 <File name="src/Do.Core/Do.Core.Addins/DockletAddinClassifier.cs" subtype="Code" buildaction="Compile" />
2029+ <File name="src/Do.Platform/PluginManagerService.cs" subtype="Code" buildaction="Compile" />
2030 </Contents>
2031 <References>
2032 <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
2033 <ProjectReference type="Gac" localcopy="True" refto="Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
2034- <ProjectReference type="Gac" localcopy="True" refto="Mono.Addins, Version=0.2.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
2035- <ProjectReference type="Gac" localcopy="True" refto="Mono.Addins.Gui, Version=0.3.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
2036- <ProjectReference type="Gac" localcopy="True" refto="Mono.Addins.Setup, Version=0.3.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
2037 <ProjectReference type="Gac" localcopy="True" refto="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
2038 <ProjectReference type="Gac" localcopy="True" refto="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
2039 <ProjectReference type="Gac" localcopy="True" refto="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
2040@@ -107,6 +105,9 @@
2041 <ProjectReference type="Gac" localcopy="True" refto="System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
2042 <ProjectReference type="Project" localcopy="True" refto="Do.Interface.Linux.AnimationBase" />
2043 <ProjectReference type="Gac" localcopy="True" refto="pango-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
2044+ <ProjectReference type="Gac" localcopy="True" refto="Mono.Addins, Version=0.4.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
2045+ <ProjectReference type="Gac" localcopy="True" refto="Mono.Addins.Gui, Version=0.4.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
2046+ <ProjectReference type="Gac" localcopy="True" refto="Mono.Addins.Setup, Version=0.4.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
2047 </References>
2048 <LanguageParameters ApplicationIcon="../../../../../jason/do/trunk-merge/Do" ctype="CSharpProjectParameters" />
2049 <Deployment.LinuxDeployData scriptName="gnome-do" />
2050
2051=== modified file 'Do/Makefile.am'
2052--- Do/Makefile.am 2009-06-17 01:44:57 +0000
2053+++ Do/Makefile.am 2009-06-23 15:35:41 +0000
2054@@ -41,6 +41,7 @@
2055 src/Do.Platform/CoreService.cs \
2056 src/Do.Platform/ApplicationService.cs \
2057 src/Do.Platform/WindowingService.cs \
2058+ src/Do.Platform/PluginManagerService.cs \
2059 src/Do.UI/ColorConfigurationWidget.cs \
2060 src/Do.UI/DoAddinInstallerDialog.cs \
2061 src/Do.UI/GeneralPreferencesWidget.cs \
2062
2063=== modified file 'Do/Resources/Do.addin.xml'
2064--- Do/Resources/Do.addin.xml 2009-01-15 07:05:51 +0000
2065+++ Do/Resources/Do.addin.xml 2009-06-23 15:35:41 +0000
2066@@ -11,8 +11,9 @@
2067
2068 <Extension path="/Do/Service">
2069 <Service type="Do.Platform.CoreService" />
2070+ <Service type="Do.Platform.WindowingService" />
2071 <Service type="Do.Platform.ApplicationService" />
2072- <Service type="Do.Platform.WindowingService" />
2073+ <Service type="Do.Platform.PluginManagerService" />
2074 </Extension>
2075
2076 <Extension path="/Do/ItemSource">
2077
2078=== modified file 'Do/gtk-gui/Do.UI.DoAddinInstallerDialog.cs'
2079--- Do/gtk-gui/Do.UI.DoAddinInstallerDialog.cs 2009-05-27 14:56:37 +0000
2080+++ Do/gtk-gui/Do.UI.DoAddinInstallerDialog.cs 2009-06-23 16:25:39 +0000
2081@@ -122,7 +122,7 @@
2082 w11.Spacing = 2;
2083 // Container child GtkHBox1.Gtk.Container+ContainerChild
2084 Gtk.Image w12 = new Gtk.Image();
2085- w12.Pixbuf = Stetic.IconLoader.LoadIcon(this, "gtk-ok", Gtk.IconSize.Button, 16);
2086+ w12.Pixbuf = Stetic.IconLoader.LoadIcon(this, "gtk-ok", Gtk.IconSize.Button, 20);
2087 w11.Add(w12);
2088 // Container child GtkHBox1.Gtk.Container+ContainerChild
2089 Gtk.Label w14 = new Gtk.Label();
2090
2091=== modified file 'Do/gtk-gui/Do.UI.ManagePluginsPreferencesWidget.cs'
2092--- Do/gtk-gui/Do.UI.ManagePluginsPreferencesWidget.cs 2009-05-27 14:56:37 +0000
2093+++ Do/gtk-gui/Do.UI.ManagePluginsPreferencesWidget.cs 2009-06-23 16:25:39 +0000
2094@@ -124,7 +124,7 @@
2095 w9.Spacing = 2;
2096 // Container child GtkHBox.Gtk.Container+ContainerChild
2097 Gtk.Image w10 = new Gtk.Image();
2098- w10.Pixbuf = Stetic.IconLoader.LoadIcon(this, "gtk-preferences", Gtk.IconSize.Button, 16);
2099+ w10.Pixbuf = Stetic.IconLoader.LoadIcon(this, "gtk-preferences", Gtk.IconSize.Button, 20);
2100 w9.Add(w10);
2101 // Container child GtkHBox.Gtk.Container+ContainerChild
2102 Gtk.Label w12 = new Gtk.Label();
2103
2104=== modified file 'Do/gtk-gui/gui.stetic'
2105--- Do/gtk-gui/gui.stetic 2009-06-21 02:20:30 +0000
2106+++ Do/gtk-gui/gui.stetic 2009-06-23 16:48:52 +0000
2107@@ -5,10 +5,10 @@
2108 <target-gtk-version>2.12</target-gtk-version>
2109 </configuration>
2110 <import>
2111- <widget-library name="Mono.Addins.Gui, Version=0.4.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
2112 <widget-library name="../../Do.Platform.Linux/bin/Debug/Do.Platform.Linux.dll" />
2113 <widget-library name="../../Do.Interface.Linux/bin/Debug/Do.Interface.Linux.dll" />
2114 <widget-library name="../../Do.Interface.Linux.AnimationBase/bin/Debug/Do.Interface.Linux.AnimationBase.dll" />
2115+ <widget-library name="Mono.Addins.Gui, Version=0.4.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
2116 <widget-library name="../bin/Debug/Do.exe" internal="true" />
2117 </import>
2118 <widget class="Gtk.Window" id="Do.UI.PreferencesWindow" design-size="450 470">
2119
2120=== modified file 'Do/src/Do.Core/PluginManager.cs'
2121--- Do/src/Do.Core/PluginManager.cs 2009-06-05 19:45:45 +0000
2122+++ Do/src/Do.Core/PluginManager.cs 2009-06-23 15:35:41 +0000
2123@@ -42,7 +42,7 @@
2124 /// <summary>
2125 /// PluginManager serves as Do's primary interface to Mono.Addins.
2126 /// </summary>
2127- internal class PluginManager
2128+ public class PluginManager
2129 {
2130 const string DefaultPluginIcon = "folder_tar";
2131
2132@@ -103,6 +103,11 @@
2133 manual.ForEach (dll => File.Delete (dll));
2134 }
2135
2136+ public static IEnumerable<Addin> GetAddins ()
2137+ {
2138+ return AddinManager.Registry.GetAddins ();
2139+ }
2140+
2141 public static bool PluginClassifiesAs (AddinRepositoryEntry entry, string className)
2142 {
2143 AddinClassifier classifier = Classifiers.FirstOrDefault (c => c.Name == className);
2144
2145=== added file 'Do/src/Do.Platform/PluginManagerService.cs'
2146--- Do/src/Do.Platform/PluginManagerService.cs 1970-01-01 00:00:00 +0000
2147+++ Do/src/Do.Platform/PluginManagerService.cs 2009-06-23 16:48:52 +0000
2148@@ -0,0 +1,45 @@
2149+// PluginManagerService.cs
2150+//
2151+// GNOME Do is the legal property of its developers. Please refer to the
2152+// COPYRIGHT file distributed with this source distribution.
2153+//
2154+// This program is free software: you can redistribute it and/or modify
2155+// it under the terms of the GNU General Public License as published by
2156+// the Free Software Foundation, either version 3 of the License, or
2157+// (at your option) any later version.
2158+//
2159+// This program is distributed in the hope that it will be useful,
2160+// but WITHOUT ANY WARRANTY; without even the implied warranty of
2161+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2162+// GNU General Public License for more details.
2163+//
2164+// You should have received a copy of the GNU General Public License
2165+// along with this program. If not, see <http://www.gnu.org/licenses/>.
2166+
2167+using System;
2168+using System.Linq;
2169+using System.Collections.Generic;
2170+
2171+using Mono.Addins;
2172+
2173+using Do.Core;
2174+
2175+namespace Do.Platform
2176+{
2177+
2178+ public class PluginManagerService : IPluginManagerService
2179+ {
2180+#region IPluginManagerService Implementation
2181+ public Addin [] GetAddins ()
2182+ {
2183+ return PluginManager.GetAddins ().ToArray ();
2184+ }
2185+
2186+ public void Install (Addin addin)
2187+ {
2188+ addin.Enabled = true;
2189+ Do.UniverseManager.Reload ();
2190+ }
2191+#endregion
2192+ }
2193+}
2194
2195=== modified file 'Makefile.am'
2196--- Makefile.am 2009-04-21 03:00:56 +0000
2197+++ Makefile.am 2009-06-22 15:51:57 +0000
2198@@ -11,6 +11,7 @@
2199 Do.Interface.Wink \
2200 Do.Interface.Linux \
2201 Do.Platform.Linux \
2202+ Do.Platform.Linux.JoliCloud \
2203 Do.Interface.Linux.AnimationBase \
2204 Do.Interface.Linux.Classic \
2205 Do.Interface.Linux.Docky \
2206
2207=== modified file 'configure.ac'
2208--- configure.ac 2009-05-15 05:51:40 +0000
2209+++ configure.ac 2009-06-22 15:51:57 +0000
2210@@ -141,6 +141,8 @@
2211 Do.Platform/src/AssemblyInfo.cs
2212 Do.Platform.Linux/Makefile
2213 Do.Platform.Linux/src/AssemblyInfo.cs
2214+Do.Platform.Linux.JoliCloud/Makefile
2215+Do.Platform.Linux.JoliCloud/src/AssemblyInfo.cs
2216 Do.Platform.OSX/AssemblyInfo.cs
2217 Do.Platform.Windows/AssemblyInfo.cs
2218 Do.Universe/Makefile