evolution/sharepoint-account-setup.patch

533 lines
16 KiB
Diff
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

diff --git a/plugins/mono/mono-plugin.c b/plugins/mono/mono-plugin.c
index 5c5182e..542e6f0 100644
--- a/plugins/mono/mono-plugin.c
+++ b/plugins/mono/mono-plugin.c
@@ -79,9 +79,14 @@ epm_invoke(EPlugin *ep, const char *name, void *data)
MonoObject *x = NULL, *res;
void **params;
- g_print ("\n\a epm_invoke in mono-plugin.c in mono plugin loader is called \n\a");
+ g_print ("\n\a epm_invoke in mono-plugin.c in mono plugin loader is called %s \n\a", epm->location);
/* we need to do this every time since we may be called from any thread for some uses */
+ if (!domain) {
+ mono_config_parse (NULL);
+ domain = mono_jit_init (epm->location);
+ }
+
mono_thread_attach(domain);
if (p->assembly == NULL) {
@@ -230,8 +235,6 @@ load_plugin_type_register_function (void *a, void *b)
type = g_type_register_static(e_plugin_get_type(), "EPluginMono", &info, 0);
e_plugin_register_type (type);
d(printf("\nType EPluginMono registered from the mono-plugin-loader\n"));
- domain = mono_jit_init("Evolution");
- mono_thread_attach(domain);
}
return GUINT_TO_POINTER(type);
diff --git a/plugins/sharepoint-account-setup/Makefile.am b/plugins/sharepoint-account-setup/Makefile.am
new file mode 100644
index 0000000..b01f3df
--- /dev/null
+++ b/plugins/sharepoint-account-setup/Makefile.am
@@ -0,0 +1,37 @@
+CSC = gmcs
+
+ASSEMBLY_NAME = SharepointAccountSetup
+TARGET = $(ASSEMBLY)
+ASSEMBLY = $(ASSEMBLY_NAME).dll
+
+@EVO_PLUGIN_RULE@
+
+CSFILES = SharepointSource.cs SharepointAccount.cs SharepointAccountSetup.cs
+
+EXTRA_DIST = org-gnome-sharepoint-account-setup.eplug.xml \
+ org-gnome-sharepoint-ui.xml \
+ org-gnome-sharepoint-disconnect-ui.xml \
+ $(CSFILES)
+
+ASSEMBLIES = \
+ -r:System \
+ -r:Mono.Posix \
+ $(ICE_DESKTOP_LIBS) \
+ $(MONO_PLATFORM_LIBS)
+
+CSFLAGS = -noconfig -codepage:utf8 -warn:4 -debug -d:DEBUG $(ASSEMBLIES)
+
+#endif
+#if ENABLE_RELEASE
+#CSFLAGS = -noconfig -codepage:utf8 -warn:4
+#endif
+$(ASSEMBLY): $(CSCFILES)
+ $(CSC) -unsafe /out:$(ASSEMBLY) $(CSFLAGS) /target:library $(ASSEMBLIES) $(CSFILES)
+
+plugin_DATA = $(ASSEMBLY) org-gnome-sharepoint-account-setup.eplug org-gnome-sharepoint-ui.xml org-gnome-sharepoint-disconnect-ui.xml
+
+BUILT_SOURCES = $(ASSEMBLY) org-gnome-sharepoint-account-setup.eplug
+
+all: $(ASSEMBLY)
+
+CLEANFILES = org-gnome-sharepoint-account-setup.eplug $(ASSEMBLY) $(ASSEMBLY).mdb
diff --git a/plugins/sharepoint-account-setup/SharepointAccount.cs b/plugins/sharepoint-account-setup/SharepointAccount.cs
new file mode 100644
index 0000000..5009e98
--- /dev/null
+++ b/plugins/sharepoint-account-setup/SharepointAccount.cs
@@ -0,0 +1,165 @@
+// SharepointAccount.cs created with MonoDevelop
+// User: chen at 12:30 PM 10/21/2008
+//
+// To change standard headers go to Edit->Preferences->Coding->Standard Headers
+//
+
+using System;
+using Evolution;
+using NDesk.DBus;
+using Gtk;
+using System.Threading;
+using GLib;
+using Novell.IceDesktop;
+
+namespace Sharepoint
+{
+
+
+ public class SharepointAccount
+ {
+ static Novell.IceDesktop.IDaemon deskIceDaemon = null;
+ static org.freedesktop.DBus.IBus sessionBus = null;
+ static ObjectPath DaemonPath = new ObjectPath (Novell.IceDesktop.ServiceName.DaemonPath);
+ static string DaemonNamespace = Novell.IceDesktop.ServiceName.DaemonNamespace;
+ static bool initialized = false;
+ static System.Threading.Thread backgroundThread = null;
+
+ public SharepointAccount()
+ {
+ }
+
+ public void CreateAccount ()
+ {
+ try
+ {
+ if (initialized == false) {
+ BusG.Init ();
+ initialized = true;
+ }
+
+
+ sessionBus = Bus.Session.GetObject<org.freedesktop.DBus.IBus> ("org.freedesktop.DBus",
+ new ObjectPath ("/org/freedesktop/DBus"));
+ sessionBus.NameOwnerChanged += OnDBusNameOwnerChanged;
+
+ // Force the daemon to start up if it's not already running
+ if (Bus.Session.NameHasOwner (DaemonNamespace) == false)
+ {
+ Bus.Session.StartServiceByName (DaemonNamespace);
+ }
+
+ ConnectToICEcoreDaemon ();
+ try { deskIceDaemon.CheckAuthentication (String.Empty); }
+ catch (NotAuthenticatedException)
+ { return; }
+
+ Console.WriteLine ("****** Authenticated");
+ StartFetchingFolder ();
+
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine ("Error creating account: {0}", ex.Message);
+ Console.WriteLine (ex.StackTrace);
+ // Change the status text in the AuthDialog
+ return;
+ }
+ }
+
+ public void DeleteAccount ()
+ {
+ // we remove all share calendars. We currently support creating only one sharepoint account
+ SharepointSource spSource = new SharepointSource (CalSourceType.Event, null, null);
+ spSource.DeleteSources ();
+ spSource.Sync ();
+ }
+
+ private static void StartFetchingFolder ()
+ {
+ if (backgroundThread == null)
+ {
+ backgroundThread = new System.Threading.Thread (new ThreadStart (SetupFolders));
+ backgroundThread.IsBackground = true;
+ backgroundThread.Start ();
+ }
+ }
+
+ private static void SetupFolders ()
+ {
+ Console.WriteLine ("Getting folders ");
+ AccountInfo accountInfo = deskIceDaemon.GetDefaultAccountInfo ();
+ SharepointSource spSource = new SharepointSource (CalSourceType.Event, accountInfo.username,
+ accountInfo.hostUrl);
+
+ if (spSource.AccountExists) {
+ Console.WriteLine ("Account already exists");
+ return;
+ }
+
+ FileInfo [] workspaces = deskIceDaemon.EnumerateWorkspaces ();
+ foreach (FileInfo workspace in workspaces)
+ {
+ FileInfo[] folders = null;
+
+ if (spSource.srcType == CalSourceType.Event)
+ folders = deskIceDaemon.GetCalendarFolders (string.Empty, workspace.Id);
+ // else get task folders
+
+
+ if (folders.Length == 0)
+ continue;
+
+ spSource.CreateSources (workspace, folders);
+ }
+ spSource.Sync ();
+ Console.WriteLine ("******* Got folders ");
+ backgroundThread = null;
+ RemoveHandlers ();
+ }
+
+ private static void RemoveHandlers ()
+ {
+ sessionBus.NameOwnerChanged -= OnDBusNameOwnerChanged;
+ deskIceDaemon.Authenticated -= OnAuthenticated;
+ }
+
+ static void OnAuthenticated (string server, string username)
+ {
+ Console.WriteLine ("Auth done\n");
+ StartFetchingFolder ();
+ }
+
+ static void OnDBusNameOwnerChanged (string serviceName, string oldOwner, string newOwner)
+ {
+
+ Console.WriteLine ("O/p {0} {1}", serviceName, DaemonNamespace);
+ if (serviceName == null)
+ return;
+ if (serviceName.CompareTo (DaemonNamespace) != 0)
+ return;
+
+ if (oldOwner != null && oldOwner.Length > 0) {
+ // The daemon just went away
+ // TODO: What should the Navigator do if the ICEcore Daemon suddenly exits?
+ Console.WriteLine ("TODO: What should the Navigator do if the ICEcore Daemon suddenly exits?");
+ } else {
+ // Connect to the new instance of the daemon
+ ConnectToICEcoreDaemon ();
+ }
+ }
+
+ /// <summary>
+ /// Connect with the ICEcore Daemon and register event handlers.
+ /// </summary>
+ static void ConnectToICEcoreDaemon ()
+ {
+ Console.WriteLine ("Connecting the navigator to the ICEcore Daemon");
+ // Check DBus to see if the Daemon is currently running
+ deskIceDaemon =
+ Bus.Session.GetObject<IDaemon> (DaemonNamespace, DaemonPath);
+ // Set up the daemon event handlers
+ deskIceDaemon.Authenticated += OnAuthenticated;
+ }
+ }
+}
diff --git a/plugins/sharepoint-account-setup/SharepointAccountSetup.cs b/plugins/sharepoint-account-setup/SharepointAccountSetup.cs
new file mode 100644
index 0000000..70d6b15
--- /dev/null
+++ b/plugins/sharepoint-account-setup/SharepointAccountSetup.cs
@@ -0,0 +1,22 @@
+using System;
+using Sharepoint;
+using Evolution;
+using GLib;
+using Gtk;
+
+public class SharePointAccountSetup
+{
+ public static IntPtr SetupAccount (IntPtr pluginPtr)
+ {
+ SharepointAccount account = new SharepointAccount ();
+ account.CreateAccount ();
+ return (IntPtr) 0;
+ }
+
+ public static IntPtr RemoveAccount (IntPtr pluginPtr)
+ {
+ SharepointAccount account = new SharepointAccount ();
+ account.DeleteAccount ();
+ return (IntPtr) 0;
+ }
+}
diff --git a/plugins/sharepoint-account-setup/SharepointSource.cs b/plugins/sharepoint-account-setup/SharepointSource.cs
new file mode 100644
index 0000000..c61fcf0
--- /dev/null
+++ b/plugins/sharepoint-account-setup/SharepointSource.cs
@@ -0,0 +1,97 @@
+// SharepointSource.cs created with MonoDevelop
+// User: chen at 1:38 AM 10/21/2008
+//
+// To change standard headers go to Edit->Preferences->Coding->Standard Headers
+//
+
+using System;
+using Evolution;
+using Novell.IceDesktop;
+using GConf;
+using System.Collections.Generic;
+
+namespace Sharepoint
+{
+
+
+ public class SharepointSource
+ {
+ public CalSourceType srcType;
+ readonly string calPath = "/apps/evolution/calendar/sources";
+ readonly string taskPath = "/apps/evolution/tasks/sources";
+ static Client client;
+ SourceList srcList;
+ readonly string baseUri = "sharepoint://";
+ string username;
+ string hostUrl;
+
+ public SharepointSource(CalSourceType type, string userName, string hosturl)
+ {
+ srcType = type;
+ client = new Client ();
+ username = userName;
+ hostUrl = hosturl;
+
+ if (type == CalSourceType.Event)
+ srcList = new SourceList (calPath);
+ else
+ srcList = new SourceList (taskPath);
+ }
+
+ public bool AccountExists
+ {
+ get
+ {
+ foreach (SourceGroup group in srcList.Groups)
+ {
+ if (group.BaseUri == baseUri)
+ return true;
+ }
+
+ return false;
+ }
+ }
+
+ public void CreateSources (FileInfo workspace, FileInfo [] folders)
+ {
+ SourceGroup group = new SourceGroup (workspace.DisplayName, baseUri);
+
+ foreach (FileInfo folder in folders)
+ {
+ Console.WriteLine (workspace.DisplayName + " folder " + folder.DisplayName);
+ string relativeUri = hostUrl + ":" + folder.Id;
+ Source source= new Source (folder.DisplayName, relativeUri);
+ source.SetProperty ("username", username);
+ source.SetProperty ("workspaceid", workspace.Id);
+ source.SetProperty ("Id", folder.Id);
+ source.SetProperty ("Auth","True");
+ group.AddSource (source, -1);
+ }
+ group.SetProperty ("username", username);
+ srcList.AddGroup (group, -1);
+ }
+
+ public void Sync ()
+ {
+ srcList.Sync ();
+ }
+
+ public void DeleteSources ()
+ {
+ List<SourceGroup> groupsToRemove = new List<SourceGroup> ();
+ foreach (SourceGroup group in srcList.Groups)
+ {
+ if (group.BaseUri.StartsWith (baseUri))
+ {
+ /// Currently we remove all sharepoint calendars
+ groupsToRemove.Add (group);
+ }
+ }
+
+ foreach (SourceGroup group in groupsToRemove)
+ {
+ srcList.RemoveGroup (group);
+ }
+ }
+ }
+}
diff --git a/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml b/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml
new file mode 100644
index 0000000..80cdeb8
--- /dev/null
+++ b/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<e-plugin-list>
+ <e-plugin id="org.gnome.evolution.sharepoint.account.setup" type="mono"
+ _name="Sharepoint account setup"
+ location="@PLUGINDIR@/SharepointAccountSetup.dll" handler="SharePointAccountSetup">
+ <author name="Chenthill Palanisamy" email="pchenthill@novell.com"/>
+ <_description>Create a sharepoint account for calendar and tasks</_description>
+
+ <hook class="org.gnome.evolution.shell.bonobomenu:1.0">
+ <menu id="org.gnome.evolution.shell" target="shell">
+ <!-- the path to the bonobo menu description -->
+ <ui file="@PLUGINDIR@/org-gnome-sharepoint-ui.xml"/>
+ <item
+ type="item"
+ verb="SharepointSetup"
+ path="/commands/SharepointSetup"
+ enable="all"
+ activate="SetupAccount"/>
+ </menu>
+ </hook>
+
+ <hook class="org.gnome.evolution.shell.bonobomenu:1.0">
+ <menu id="org.gnome.evolution.shell" target="shell">
+ <!-- the path to the bonobo menu description -->
+ <ui file="@PLUGINDIR@/org-gnome-sharepoint-disconnect-ui.xml"/>
+ <item
+ type="item"
+ verb="SharepointDisconnect"
+ path="/commands/SharepointDisconnect"
+ enable="all"
+ activate="RemoveAccount"/>
+ </menu>
+ </hook>
+
+ </e-plugin>
+</e-plugin-list>
diff --git a/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml b/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml
new file mode 100644
index 0000000..d2545f8
--- /dev/null
+++ b/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml
@@ -0,0 +1,16 @@
+<Root>
+ <commands>
+ <cmd name="SharepointDisconnect" _label="Disconnect SharePoint"
+ _tip="Remove sharepoint account"
+ pixtype="stock"
+ pixname="gtk-disconnect"/>
+ </commands>
+
+ <menu>
+ <placeholder name="ActionsPlaceholder">
+ <submenu name="Actions">
+ <menuitem name="SharepointDisconnect" verb="" />
+ </submenu>
+ </placeholder>
+ </menu>
+</Root>
diff --git a/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml b/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml
new file mode 100644
index 0000000..f92e097
--- /dev/null
+++ b/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml
@@ -0,0 +1,16 @@
+<Root>
+ <commands>
+ <cmd name="SharepointSetup" _label="Connect to SharePoint"
+ _tip="Setup sharepoint account"
+ pixtype="stock"
+ pixname="gtk-connect"/>
+ </commands>
+
+ <menu>
+ <placeholder name="ActionsPlaceholder">
+ <submenu name="Actions">
+ <menuitem name="SharepointSetup" verb="" />
+ </submenu>
+ </placeholder>
+ </menu>
+</Root>
diff --git a/ui/evolution.xml b/ui/evolution.xml
index 9b4231e..4008c95 100644
--- a/ui/evolution.xml
+++ b/ui/evolution.xml
@@ -66,6 +66,8 @@
<placeholder name="ComponentItems"/>
</submenu>
+ <placeholder name="FileNewItems"/>
+
<menuitem name="OpenNewWindow" verb="" pixtype="pixbuf"/>
<separator f="" name="eshell4"/>
--- a/configure.in 2008-11-05 16:29:35.000000000 +0530
+++ b/configure.in 2008-11-06 18:48:19.000000000 +0530
@@ -900,7 +900,27 @@ if test "x${enable_mono}" = "xyes"; then
AC_DEFINE(ENABLE_MONO,1,[Define if Mono embedding should be enabled])
mono_package="mono"
MONO_PLUGIN="mono"
+ PKG_CHECK_MODULES(MONO_PLATFORM,
+ [glib-sharp-2.0, gtk-sharp-2.0, gconf-sharp-2.0, gnome-sharp-2.0,
+ evolution-sharp, ndesk-dbus-1.0, ndesk-dbus-glib-1.0, solvent])
+ AC_SUBST(MONO_PLATFORM_CFLAGS)
+ AC_SUBST(MONO_PLATFORM_LIBS)
+ MONO_BASED_PLUGINS=""
+
+ dnl Sharepoint account setup
+ AC_ARG_ENABLE([icedesktop],
+ AC_HELP_STRING([--enable-icedesktop],
+ [Build sharepoint provider]),
+ [enable_icedesktop=$enableval],[enable_icedesktop=no])
+ if test "x${enable_icedesktop}" = "xyes"; then
+ PKG_CHECK_MODULES(ICE_DESKTOP, [Novell.IceDesktop])
+ AC_SUBST(ICE_DESKTOP_CFLAGS)
+ AC_SUBST(ICE_DESKTOP_LIBS)
+ MONO_BASED_PLUGINS="$MONO_BASED_PLUGINS sharepoint-account-setup"
+ fi
fi
+AC_SUBST(MONO_CFLAGS)
+AC_SUBST(MONO_LIBS)
dnl Python hooks
dnl This should just define python CFLAGS etc here, it is used later to
@@ -1732,7 +1752,7 @@ AC_ARG_ENABLE([plugins],
dnl Add any new plugins here
plugins_base_always="calendar-file calendar-http calendar-weather itip-formatter plugin-manager default-source addressbook-file startup-wizard mark-all-read groupwise-features groupwise-account-setup mail-account-disable publish-calendar caldav imap-features google-account-setup webdav-account-setup"
-plugins_base="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN $EXCHANGE_PLUGIN $MONO_PLUGIN "
+plugins_base="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN $EXCHANGE_PLUGIN $MONO_PLUGIN $MONO_BASED_PLUGINS"
all_plugins_base="$plugins_base_always sa-junk-plugin bogo-junk-plugin exchange-operations mono"
plugins_standard_always="bbdb subject-thread save-calendar select-one-source copy-tool mail-to-task mark-calendar-offline audio-inline mailing-list-actions default-mailer import-ics-attachments prefer-plain mail-notification attachment-reminder face backup-restore email-custom-header templates pst-import"
@@ -1784,6 +1804,11 @@ if test "x${enable_mono}" = "xyes"; then
msg_plugins="$msg_plugins (and mono)"
fi
+if test "x${enable_icedesktop}" = "xyes"; then
+ plugins_enabled="$plugins_enabled sharepoint-account-setup"
+ msg_plugins="$msg_plugins (and sharepoint)"
+fi
+
if test "x${enable_python}" = "xyes"; then
plugins_enabled="$plugins_enabled python"
@@ -2072,6 +2097,7 @@ plugins/pst-import/Makefile
plugins/face/Makefile
plugins/external-editor/Makefile
plugins/webdav-account-setup/Makefile
+plugins/sharepoint-account-setup/Makefile
smime/Makefile
smime/lib/Makefile
smime/gui/Makefile