From 724342eafc5d89cecf2aaad3d296f79daa37f0a0e7b57c1a0cb4b7128267052c Mon Sep 17 00:00:00 2001 From: Dominique Leuenberger Date: Sun, 15 Aug 2010 14:33:53 +0000 Subject: [PATCH 1/5] Accepting request 45529 from home:dimstar:branches:GNOME:Factory Copy from home:dimstar:branches:GNOME:Factory/evolution via accept of submit request 45529 revision 2. Request was accepted with message: Sharepoint support in Evo has been dead for a long time... nobody wants to work on it. OBS-URL: https://build.opensuse.org/request/show/45529 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/evolution?expand=0&rev=88 --- evolution.changes | 9 + evolution.spec | 16 - sharepoint-account-setup.patch | 514 ------------------ sp-meetingworkspace-ui.patch | 945 --------------------------------- sp-process-meetings.diff | 440 --------------- sp-tasks-setup.diff | 236 -------- 6 files changed, 9 insertions(+), 2151 deletions(-) delete mode 100644 sharepoint-account-setup.patch delete mode 100644 sp-meetingworkspace-ui.patch delete mode 100644 sp-process-meetings.diff delete mode 100644 sp-tasks-setup.diff diff --git a/evolution.changes b/evolution.changes index d7eac94..7eb1bab 100644 --- a/evolution.changes +++ b/evolution.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Thu Aug 12 21:23:59 UTC 2010 - dimstar@opensuse.org + +- Finally drop unmaintained sharepoint patches (came from SLE) + + sharepoint-account-setup.patch + + sp-meetingworkspace-ui.patch + + sp-process-meetings.diff + + sp-tasks-setup.diff + ------------------------------------------------------------------- Fri Aug 6 02:11:42 CEST 2010 - vuntz@opensuse.org diff --git a/evolution.spec b/evolution.spec index 947c8b1..2a8da4c 100644 --- a/evolution.spec +++ b/evolution.spec @@ -72,24 +72,16 @@ Patch15: evolution-custom-openldap-includes.patch Patch18: bnc-435668-hide-accept.patch # PATCH-FIX-UPSTREAM bnc-435722-book-uri-long.patch bnc#435722 abharath@suse.de -- Book URI: Spills Into Second Column. Patch19: bnc-435722-book-uri-long.patch -# NEEDS-REBASE sharepoint-account-setup.patch pchenthill@suse.de -- This patch allows you to connect to sharepoint servers (WAS: PATCH-FIX-UPSTREAM) -Patch23: sharepoint-account-setup.patch # PATCH-FIX-OPENSUSE bnc-433448-backup-restore-fails.patch bnc433448 abharath@suse.de -- Not required upstream. Patch25: bnc-433448-backup-restore-fails.patch # PATCH-FIX-UPSTREAM bnc-210959-evo-accept-ics.patch bnc210959 pchenthill@novell.com -- Patch yet to be pushed upstream. Patch35: bnc-210959-evo-accept-ics.patch -# PATCH-NEEDS-REBASE sp-tasks-setup.diff pchenthill@suse.de -- Patch needs to be upstreamed. (WAS: PATCH-FIX-UPSTREAM) -Patch36: sp-tasks-setup.diff -# PATCH-NEEDS-REBASE sp-meetingworkspace-ui.patch pchenthill@suse.de -- Patch needs to be upstreamed. (WAS: PATCH-FIX-UPSTREAM) -Patch41: sp-meetingworkspace-ui.patch # PATCH-NEEDS-REBASE bnc-449888-handle-no-workspace.patch bnc449888 pchenthill@suse.de -- Patch needs to be upstreamed. (WAS: PATCH-FIX-UPSTREAM) Patch42: bnc-449888-handle-no-workspace.patch # PATCH-NEEDS-REBASE bnc-440634-forwarded-hide-accept-decline.patch bnc440634 abharath@suse.de -- Make GW understand folders better. (WAS: PATCH-FIX-SLED) Patch53: bnc-440634-forwarded-hide-accept-decline.patch # PATCH-NEEDS-REBASE bnc-445996-address-conflict.patch bnc445996 shashish@suse.de -- Needs to be moved out of glade files. (was PATCH-FIX-SLED) Patch54: bnc-445996-address-conflict.patch -# PATCH-NEEDS-REBASE: sp-process-meetings.diff pchenthill@suse.de -- Fix for bug 449899 (bnc) (WAS: PATCH-FIX-SLED) -Patch101: sp-process-meetings.diff Url: http://gnome.org/projects/evolution/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Recommends: bogofilter @@ -161,21 +153,13 @@ translation-update-upstream # NEEDS REBASE #%patch18 %patch19 -# NEEDS-REBASE -#%patch23 -p1 %patch25 %patch35 # NEEDS-REBASE -#%patch36 -p1 -# NEEDS-REBASE -#%patch41 -p1 -# NEEDS-REBASE #%patch42 -p1 # NEEDS REBASE #%patch53 #%patch54 -# NEEDS-REBASE -#%patch101 -p1 %build autoreconf -f -i diff --git a/sharepoint-account-setup.patch b/sharepoint-account-setup.patch deleted file mode 100644 index 1b850b5..0000000 --- a/sharepoint-account-setup.patch +++ /dev/null @@ -1,514 +0,0 @@ -diff -ruN evolution-2.27.4.1/configure.ac evolution-2.27.4.1.patched//configure.ac ---- evolution-2.27.4.1/configure.ac 2009-07-15 11:25:24.000000000 +0200 -+++ evolution-2.27.4.1.patched//configure.ac 2009-07-22 13:21:18.000000000 +0200 -@@ -903,6 +903,24 @@ - PKG_CHECK_MODULES([MONO], ["mono"]) - AC_DEFINE(ENABLE_MONO,1,[Define if Mono embedding should be enabled]) - 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]) -+ 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, solvent]) -+ 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) -@@ -1714,7 +1732,7 @@ - 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 audio-inline mailing-list-actions default-mailer prefer-plain mail-notification attachment-reminder backup-restore email-custom-header templates pst-import vcard-inline" -@@ -1767,6 +1785,11 @@ - 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" -@@ -2021,6 +2044,7 @@ - plugins/tnef-attachments/Makefile - plugins/vcard-inline/Makefile - plugins/webdav-account-setup/Makefile -+plugins/sharepoint-account-setup/Makefile - smime/Makefile - smime/lib/Makefile - smime/gui/Makefile -diff -ruN evolution-2.27.4.1/plugins/mono/mono-plugin.c evolution-2.27.4.1.patched//plugins/mono/mono-plugin.c ---- evolution-2.27.4.1/plugins/mono/mono-plugin.c 2009-07-13 09:45:13.000000000 +0200 -+++ evolution-2.27.4.1.patched//plugins/mono/mono-plugin.c 2009-07-22 13:20:43.000000000 +0200 -@@ -81,9 +81,14 @@ - MonoObject *x = NULL, *res; - gpointer *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) { -@@ -232,8 +237,6 @@ - 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 -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/Makefile.am evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/Makefile.am ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/Makefile.am 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/Makefile.am 2009-07-22 13:20:43.000000000 +0200 -@@ -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 -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml 2009-07-22 13:20:43.000000000 +0200 -@@ -0,0 +1,36 @@ -+ -+ -+ -+ -+ <_description>Create a sharepoint account for calendar and tasks -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml 2009-07-22 13:20:43.000000000 +0200 -@@ -0,0 +1,16 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml 2009-07-22 13:20:43.000000000 +0200 -@@ -0,0 +1,16 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointAccount.cs evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointAccount.cs ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointAccount.cs 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointAccount.cs 2009-07-22 13:20:43.000000000 +0200 -@@ -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", -+ 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 (); -+ } -+ } -+ -+ /// -+ /// Connect with the ICEcore Daemon and register event handlers. -+ /// -+ 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 (DaemonNamespace, DaemonPath); -+ // Set up the daemon event handlers -+ deskIceDaemon.Authenticated += OnAuthenticated; -+ } -+ } -+} -diff -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointAccountSetup.cs evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointAccountSetup.cs ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointAccountSetup.cs 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointAccountSetup.cs 2009-07-22 13:20:43.000000000 +0200 -@@ -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 -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointSource.cs evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointSource.cs ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointSource.cs 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointSource.cs 2009-07-22 13:20:43.000000000 +0200 -@@ -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 groupsToRemove = new List (); -+ 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 -ruN evolution-2.27.4.1/ui/evolution.xml evolution-2.27.4.1.patched//ui/evolution.xml ---- evolution-2.27.4.1/ui/evolution.xml 2009-07-13 09:45:14.000000000 +0200 -+++ evolution-2.27.4.1.patched//ui/evolution.xml 2009-07-22 13:20:43.000000000 +0200 -@@ -66,6 +66,8 @@ - - - -+ -+ - - - diff --git a/sp-meetingworkspace-ui.patch b/sp-meetingworkspace-ui.patch deleted file mode 100644 index 932dbfc..0000000 --- a/sp-meetingworkspace-ui.patch +++ /dev/null @@ -1,945 +0,0 @@ -Index: evolution-2.27.2/calendar/gui/dialogs/comp-editor.c -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/dialogs/comp-editor.c -+++ evolution-2.27.2/calendar/gui/dialogs/comp-editor.c -@@ -63,6 +63,7 @@ - #include "../e-cal-popup.h" - #include "../calendar-config-keys.h" - #include "cal-attachment-select-file.h" -+#include "../e-cal-event.h" - #include "widgets/misc/e-attachment-view.h" - #include "widgets/misc/e-attachment-paned.h" - -@@ -100,6 +101,7 @@ struct _CompEditorPrivate { - /* Manages menus and toolbars */ - GtkUIManager *ui_manager; - -+ GtkWidget *vbox; - gchar *summary; - - guint32 attachment_bar_visible : 1; -@@ -1606,11 +1608,11 @@ comp_editor_init (CompEditor *editor) - - container = GTK_WIDGET (editor); - -- widget = gtk_vbox_new (FALSE, 0); -- gtk_container_add (GTK_CONTAINER (container), widget); -- gtk_widget_show (widget); -+ priv->vbox = gtk_vbox_new (FALSE, 0); -+ gtk_container_add (GTK_CONTAINER (editor), priv->vbox); -+ gtk_widget_show (priv->vbox); - -- container = widget; -+ container = priv->vbox; - - widget = comp_editor_get_managed_widget (editor, "/main-menu"); - gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0); -@@ -1955,6 +1957,22 @@ comp_editor_get_ui_manager (CompEditor * - return editor->priv->ui_manager; - } - -+GtkWidget * -+comp_editor_get_vbox (CompEditor *editor) -+{ -+ g_return_val_if_fail (IS_COMP_EDITOR (editor), NULL); -+ -+ return editor->priv->vbox; -+} -+ -+GtkNotebook * -+comp_editor_get_notebook (CompEditor *editor) -+{ -+ g_return_val_if_fail (IS_COMP_EDITOR (editor), NULL); -+ -+ return editor->priv->notebook; -+} -+ - GtkAction * - comp_editor_get_action (CompEditor *editor, - const gchar *action_name) -@@ -2112,9 +2130,15 @@ comp_editor_append_page (CompEditor *edi - - priv->pages = g_list_append (priv->pages, page); - -- if (add) -+ if (add){ - gtk_notebook_append_page (priv->notebook, page_widget, label_widget); - -+ ECalEvent *ec_event = e_cal_event_peek (); -+ ECalEventTargetCompEditor *target; -+ target = e_cal_event_target_comp_editor (ec_event, editor); -+ e_event_emit ((EEvent *) ec_event, "editor.append", (EEventTarget *) target); -+ } -+ - /* Listen for things happening on the page */ - g_signal_connect_swapped ( - page, "dates_changed", -Index: evolution-2.27.2/calendar/gui/dialogs/event-editor.c -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/dialogs/event-editor.c -+++ evolution-2.27.2/calendar/gui/dialogs/event-editor.c -@@ -38,6 +38,7 @@ - #include - #include - -+#include "../e-cal-event.h" - #include "event-page.h" - #include "recurrence-page.h" - #include "schedule-page.h" -@@ -65,7 +66,7 @@ static const gchar *ui = - "" - " " - " " --" " -+" " - " " - " " - " " -@@ -103,6 +104,17 @@ static gboolean event_editor_send_comp ( - - G_DEFINE_TYPE (EventEditor, event_editor, TYPE_COMP_EDITOR) - -+ -+CompEditorPage* -+event_editor_get_event_page (CompEditor *editor) -+{ -+ EventEditorPrivate *priv; -+ -+ priv = EVENT_EDITOR_GET_PRIVATE (editor); -+ -+ return priv->event_page; -+} -+ - static void - create_schedule_page (CompEditor *editor) - { -@@ -334,6 +346,11 @@ event_editor_constructor (GType type, - event_page_set_meeting (priv->event_page, TRUE); - priv->meeting_shown=TRUE; - } -+ -+ ECalEvent *ec_event = e_cal_event_peek (); -+ ECalEventTargetCompEditor *target; -+ target = e_cal_event_target_comp_editor (ec_event, editor); -+ e_event_emit ((EEvent *) ec_event, "editor.inited", (EEventTarget *) target); - - return object; - } -@@ -496,7 +513,6 @@ event_editor_init (EventEditor *ee) - } - - /* Hide send options. */ -- action = comp_editor_get_action (editor, "send-options"); - gtk_action_set_visible (action, FALSE); - - g_signal_connect ( -Index: evolution-2.27.2/calendar/gui/dialogs/event-editor.h -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/dialogs/event-editor.h -+++ evolution-2.27.2/calendar/gui/dialogs/event-editor.h -@@ -68,6 +68,7 @@ GType event_editor_get_type (void); - CompEditor * event_editor_new (ECal *client, - CompEditorFlags flags); - void event_editor_show_meeting (EventEditor *ee); -+CompEditorPage* event_editor_get_event_page (CompEditor *editor); - - G_END_DECLS - -Index: evolution-2.27.2/calendar/gui/dialogs/event-page.c -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/dialogs/event-page.c -+++ evolution-2.27.2/calendar/gui/dialogs/event-page.c -@@ -714,6 +714,26 @@ create_image_event_box (const char *imag - return box; - } - -+GtkWidget * -+event_page_get_toplevel_widget (CompEditorPage *page) -+{ -+ EventPagePrivate *priv; -+ -+ priv = EVENT_PAGE_GET_PRIVATE (page); -+ -+ return priv->main; -+} -+ -+GtkWidget * -+get_event_page_widget (EventPage *epage) -+{ -+ EventPagePrivate *priv; -+ -+ priv = EVENT_PAGE_GET_PRIVATE (epage); -+ -+ return priv->hour_selector; -+} -+ - static void - sensitize_widgets (EventPage *epage) - { -Index: evolution-2.27.2/calendar/gui/dialogs/event-page.h -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/dialogs/event-page.h -+++ evolution-2.27.2/calendar/gui/dialogs/event-page.h -@@ -110,6 +110,8 @@ void event_page_add_attendee (EventPag - EMeetingAttendee *attendee); - void event_page_remove_all_attendees (EventPage *epage); - -+GtkWidget * get_event_page_widget (EventPage *epage); -+ - G_END_DECLS - - #endif -Index: evolution-2.27.2/calendar/gui/e-cal-event.c -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/e-cal-event.c -+++ evolution-2.27.2/calendar/gui/e-cal-event.c -@@ -103,6 +103,16 @@ e_cal_event_target_new_component (ECalEv - return t; - } - -+ECalEventTargetCompEditor * -+e_cal_event_target_comp_editor (ECalEvent *ec_event, struct _CompEditor *editor) -+{ -+ ECalEventTargetCompEditor *t = e_event_target_new (&ec_event->event, E_CAL_EVENT_TARGET_COMP_EDITOR, sizeof (*t)); -+ -+ t->editor = g_object_ref (editor); -+ -+ return t; -+} -+ - /* ********************************************************************** */ - - static void *eceh_parent_class; -@@ -112,11 +122,18 @@ static const EEventHookTargetMask eceh_c - { NULL }, - }; - -+static const EEventHookTargetMask eceh_compeditor_masks[] = { -+ { "inited", E_CAL_EVENT_COMPEDITOR_INITED }, -+ { NULL }, -+}; -+ - static const EEventHookTargetMap eceh_targets[] = { - { "component", E_CAL_EVENT_TARGET_COMPONENT, eceh_component_masks }, -+ { "compeditor", E_CAL_EVENT_TARGET_COMP_EDITOR, eceh_compeditor_masks }, - { NULL }, - }; - -+ - static void - eceh_finalize (GObject *o) - { -Index: evolution-2.27.2/calendar/gui/e-cal-event.h -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/e-cal-event.h -+++ evolution-2.27.2/calendar/gui/e-cal-event.h -@@ -37,7 +37,8 @@ typedef struct _ECalEvent ECalEvent; - typedef struct _ECalEventClass ECalEventClass; - - enum _e_cal_event_target_t { -- E_CAL_EVENT_TARGET_COMPONENT -+ E_CAL_EVENT_TARGET_COMPONENT, -+ E_CAL_EVENT_TARGET_COMP_EDITOR - }; - - /* Flags that describe TARGET_COMPONENT */ -@@ -45,6 +46,11 @@ enum { - E_CAL_EVENT_COMPONENT_MIGRATION = 1 << 0 - }; - -+ -+enum { -+ E_CAL_EVENT_COMPEDITOR_INITED = 1 << 0, -+}; -+ - typedef struct _ECalEventTargetComponent ECalEventTargetComponent; - - struct _ECalEventTargetComponent { -@@ -53,6 +59,14 @@ struct _ECalEventTargetComponent { - struct _CalendarComponent *component; - }; - -+ -+typedef struct _ECalEventTargetCompEditor ECalEventTargetCompEditor; -+ -+struct _ECalEventTargetCompEditor { -+ EEventTarget target; -+ struct _CompEditor *editor; -+}; -+ - struct _ECalEvent { - EEvent event; - -@@ -66,6 +80,7 @@ struct _ECalEventClass { - GType e_cal_event_get_type (void); - ECalEvent* e_cal_event_peek (void); - ECalEventTargetComponent* e_cal_event_target_new_component (ECalEvent *ece, struct _CalendarComponent *component, guint32 flags); -+ECalEventTargetCompEditor * e_cal_event_target_comp_editor (ECalEvent *ec_event, struct _CompEditor *editor); - - /* ********************************************************************** */ - -Index: evolution-2.27.2/plugins/sharepoint-features/Makefile.am -=================================================================== ---- /dev/null -+++ evolution-2.27.2/plugins/sharepoint-features/Makefile.am -@@ -0,0 +1,40 @@ -+INCLUDES = \ -+ -I$(top_srcdir) \ -+ -I$(top_builddir)/shell \ -+ -I$(top_srcdir)/widgets \ -+ -I$(top_srcdir)/widgets/misc \ -+ -I$(top_builddir)/calendar/gui \ -+ -I$(top_builddir)/calendar/gui/dialogs \ -+ $(EVOLUTION_CALENDAR_CFLAGS) \ -+ -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ -+ -DCONNECTOR_GLADEDIR=\""$(gladedir)"\" \ -+ $(SOURCE_SEL_CFLAGS) -+ -+ -+@EVO_PLUGIN_RULE@ -+ -+plugin_DATA = \ -+ org-gnome-sharepoint-features.eplug -+ -+plugin_LTLIBRARIES = liborg-gnome-sharepoint-features.la -+ -+liborg_gnome_sharepoint_features_la_SOURCES = \ -+ meeting-workspace.c -+ -+liborg_gnome_sharepoint_features_la_LIBADD = \ -+ $(top_builddir)/e-util/libeutil.la \ -+ $(top_builddir)/calendar/gui/libevolution-calendar.la \ -+ $(top_builddir)/widgets/misc/libemiscwidgets.la \ -+ $(NO_UNDEFINED_REQUIRED_LIBS) \ -+ $(EVOLUTION_CALENDAR_LIBS) -+liborg_gnome_sharepoint_features_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED) -+ -+glade_DATA = meetingworkspaces.glade -+ -+EXTRA_DIST = \ -+ org-gnome-sharepoint-features.eplug.xml \ -+ $(glade_DATA) -+ -+BUILT_SOURCES = org-gnome-sharepoint-features.eplug -+ -+CLEANFILES = $(BUILT_SOURCES) -Index: evolution-2.27.2/plugins/sharepoint-features/meetingworkspaces.glade -=================================================================== ---- /dev/null -+++ evolution-2.27.2/plugins/sharepoint-features/meetingworkspaces.glade -@@ -0,0 +1,324 @@ -+ -+ -+ -+ -+ -+ -+ True -+ Meeting Workspace -+ GTK_WINDOW_TOPLEVEL -+ GTK_WIN_POS_NONE -+ False -+ True -+ False -+ True -+ False -+ False -+ GDK_WINDOW_TYPE_HINT_DIALOG -+ GDK_GRAVITY_NORTH_WEST -+ True -+ False -+ True -+ -+ -+ -+ True -+ False -+ 0 -+ -+ -+ -+ True -+ GTK_BUTTONBOX_END -+ -+ -+ -+ True -+ True -+ True -+ gtk-cancel -+ True -+ GTK_RELIEF_NORMAL -+ True -+ -6 -+ -+ -+ -+ -+ -+ True -+ True -+ True -+ gtk-ok -+ True -+ GTK_RELIEF_NORMAL -+ True -+ -5 -+ -+ -+ -+ -+ 0 -+ False -+ True -+ GTK_PACK_END -+ -+ -+ -+ -+ -+ 12 -+ True -+ False -+ 12 -+ -+ -+ -+ True -+ True -+ C_reate meeting workspace -+ True -+ GTK_RELIEF_NORMAL -+ True -+ False -+ False -+ True -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ 12 -+ True -+ 2 -+ 2 -+ False -+ 12 -+ 12 -+ -+ -+ -+ True -+ T_itle: -+ True -+ False -+ GTK_JUSTIFY_LEFT -+ False -+ False -+ 0 -+ 0.5 -+ 0 -+ 0 -+ title-entry -+ PANGO_ELLIPSIZE_NONE -+ -1 -+ False -+ 0 -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 0 -+ 1 -+ fill -+ -+ -+ -+ -+ -+ -+ True -+ T_emplate: -+ True -+ False -+ GTK_JUSTIFY_LEFT -+ False -+ False -+ 0 -+ 0.5 -+ 0 -+ 0 -+ PANGO_ELLIPSIZE_NONE -+ -1 -+ False -+ 0 -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 2 -+ fill -+ -+ -+ -+ -+ -+ -+ True -+ True -+ True -+ True -+ 0 -+ -+ True -+ -+ False -+ -+ -+ -+ -+ -+ 1 -+ 2 -+ 0 -+ 1 -+ -+ -+ -+ -+ -+ -+ True -+ Basic Meeting Workspace -+Blank Meeting Workspace -+Decision Meeting Workspace -+Social Meeting Workspace -+Multipage Meeting Workspace -+ False -+ True -+ True -+ -+ -+ -+ -+ -+ 1 -+ 2 -+ 1 -+ 2 -+ fill -+ fill -+ -+ -+ -+ -+ 0 -+ True -+ True -+ -+ -+ -+ -+ -+ True -+ True -+ _Link to existing workspace -+ True -+ GTK_RELIEF_NORMAL -+ True -+ False -+ False -+ True -+ create-radio -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ 12 -+ True -+ False -+ 12 -+ -+ -+ -+ True -+ Wo_rkspaces: -+ True -+ False -+ GTK_JUSTIFY_LEFT -+ False -+ False -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ PANGO_ELLIPSIZE_NONE -+ -1 -+ False -+ 0 -+ -+ -+ -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ True -+ False -+ True -+ True -+ -+ -+ -+ -+ -+ 0 -+ True -+ True -+ -+ -+ -+ -+ 0 -+ True -+ True -+ -+ -+ -+ -+ 0 -+ True -+ True -+ -+ -+ -+ -+ -+ True -+ True -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ -+ -Index: evolution-2.27.2/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml -=================================================================== ---- /dev/null -+++ evolution-2.27.2/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml -@@ -0,0 +1,20 @@ -+ -+ -+ -+ <_description>Plugin to create or link to a meeting workspace -+ -+ -+ -+ -+ -+ -+ -+ -Index: evolution-2.27.2/plugins/sharepoint-features/meeting-workspace.c -=================================================================== ---- /dev/null -+++ evolution-2.27.2/plugins/sharepoint-features/meeting-workspace.c -@@ -0,0 +1,230 @@ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+static void action_meeting_workspace (GtkAction *action, EventEditor *editor); -+void org_gnome_meeting_workspace (EPlugin *ep, ECalEventTargetCompEditor *target); -+ -+static const gchar *ui = -+"" -+" " -+" " -+" " -+""; -+ -+static GtkActionEntry meeting_entries[] = { -+ { "meeting-workspace", -+ "stock_people", -+ N_("Meeting Workspace"), -+ NULL, -+ N_("Create or Link to Meeting Workspaces"), -+ G_CALLBACK (action_meeting_workspace) } -+}; -+ -+typedef struct { -+ GtkWidget *dialog; -+ GtkWidget *title_entry; -+ GtkWidget *template_label; -+ GtkWidget *template_combo; -+ GtkWidget *create_radio; -+ GtkWidget *link_radio; -+ GtkWidget *workspace_label; -+ GtkWidget *workspace_combo; -+ GtkWidget *statusbar; -+ gboolean got_workspaces; -+ guint contextid; -+ -+ EventEditor *editor; -+} MeetingWorkspaceWidget; -+ -+static DBusGProxy * -+get_dice_dbus_proxy () -+{ -+ GError *err = NULL; -+ DBusGConnection *conn = dbus_g_bus_get (DBUS_BUS_SESSION, &err); -+ if (!conn) { -+ g_printerr ("Failed to connect: %s\n", err->message); -+ g_error_free (err); -+ return NULL; -+ } -+ -+ return dbus_g_proxy_new_for_name (conn, "Novell.ICEDesktop.Daemon", "/Novell/ICEDesktop/Daemon", -+ "Novell.ICEDesktop.Daemon"); -+} -+ -+static MeetingWorkspaceWidget * -+setup_widgets (void) -+{ -+ char *gladefile; -+ GladeXML *xml; -+ MeetingWorkspaceWidget *mws; -+ -+ gladefile = g_build_filename (EVOLUTION_GLADEDIR, "meetingworkspaces.glade", NULL); -+ xml = glade_xml_new (gladefile, NULL, NULL); -+#define GW(name) glade_xml_get_widget (xml, name) -+ -+ mws = g_new0 (MeetingWorkspaceWidget, 1); -+ mws->dialog = GW("meeting-workspace-dialog"); -+ mws->title_entry = GW("title-entry"); -+ mws->template_label = GW("template-label"); -+ mws->template_combo = GW("template-combo"); -+ mws->create_radio = GW("create-radio"); -+ mws->link_radio = GW("link-radio"); -+ mws->workspace_label = GW("workspaces-label"); -+ mws->workspace_combo = GW("workspaces-combo"); -+ mws->statusbar = GW("statusbar"); -+ -+ return mws; -+} -+ -+static void -+create_toggled_cb (GtkToggleButton *create_radio, gpointer user_data) -+{ -+ gboolean active; -+ MeetingWorkspaceWidget *mws = user_data; -+ -+ active = gtk_toggle_button_get_active (create_radio); -+ -+ gtk_entry_set_editable ((GtkEntry *)mws->title_entry, active); -+ gtk_widget_set_sensitive (mws->template_combo, active); -+} -+ -+static void -+link_toggled_cb (GtkToggleButton *link_radio, gpointer user_data) -+{ -+ gboolean active; -+ MeetingWorkspaceWidget *mws = user_data; -+ -+ active = gtk_toggle_button_get_active (link_radio); -+ gtk_widget_set_sensitive (mws->workspace_combo, active); -+ -+ if (active && !mws->got_workspaces) { -+ gtk_statusbar_push ((GtkStatusbar *)mws->statusbar, mws->contextid, -+ _("Loading Meeting workspaces...")); -+ -+ // Get the meeting workspaces and set them -+ -+ mws->got_workspaces = TRUE; -+ } -+} -+ -+static void -+release_memory (MeetingWorkspaceWidget *mws) -+{ -+ -+} -+ -+static void -+dialog_response_cb (GtkDialog *dialog, int response_id, gpointer user_data) -+{ -+ MeetingWorkspaceWidget *mws = user_data; -+ -+ if (response_id == GTK_RESPONSE_OK) { -+ gboolean active; -+ const char *workspace_url = NULL; -+ ECalComponent *comp; -+ -+ active = gtk_toggle_button_get_active ((GtkToggleButton *) mws->link_radio); -+ -+ if (active) { -+ // Get the workspace from combo box selection -+ } else { -+ // Create the meeting workspace -+ const char *title; -+ -+ title = gtk_entry_get_text ((GtkEntry *) mws->title_entry); -+ -+ if (!title || !*title) { -+ gtk_statusbar_push ((GtkStatusbar *) mws->statusbar, mws->contextid, -+ _("Please set a title and press OK.")); -+ return; -+ } -+ -+ gtk_statusbar_push ((GtkStatusbar *) mws->statusbar, mws->contextid, -+ _("Creating Meeting Workspace. Please wait...")); -+ // Create Meeting Workspace -+ } -+ -+ // Set the workspace url to component -+ comp = comp_editor_get_comp ((CompEditor *) mws->editor); -+ } -+ -+ gtk_widget_destroy (mws->dialog); -+ release_memory (mws); -+} -+ -+static void -+init_widgets (MeetingWorkspaceWidget *mws) -+{ -+ g_signal_connect((mws->create_radio), "toggled", -+ G_CALLBACK (create_toggled_cb), mws); -+ -+ g_signal_connect((mws->link_radio), "toggled", -+ G_CALLBACK (link_toggled_cb), mws); -+ -+ g_signal_connect((mws->dialog), "response", -+ G_CALLBACK (dialog_response_cb), mws); -+ -+ gtk_widget_set_sensitive (mws->workspace_combo, FALSE); -+ -+ gtk_combo_box_set_active ((GtkComboBox *) mws->template_combo, 0); -+ -+ mws->contextid = gtk_statusbar_get_context_id ((GtkStatusbar *)mws->statusbar, "Meeting workspace status"); -+} -+ -+static void -+action_meeting_workspace (GtkAction *action, EventEditor *editor) -+{ -+ MeetingWorkspaceWidget *mws; -+ -+ mws = setup_widgets (); -+ init_widgets (mws); -+ mws->editor = editor; -+ -+ gtk_dialog_run ((GtkDialog *) mws->dialog); -+ g_print ("Clicked meeting workspace \n"); -+} -+ -+void -+org_gnome_meeting_workspace (EPlugin *ep, ECalEventTargetCompEditor *target) -+{ -+ GtkActionGroup *action_group; -+ GtkUIManager *manager; -+ GError *error = NULL; -+ CompEditor *editor = target->editor; -+ CompEditorFlags flags; -+ ECal *client; -+ const char *uri; -+ -+ client = comp_editor_get_client (editor); -+ uri = e_cal_get_uri (client); -+ flags = comp_editor_get_flags (editor); -+ -+ if (!g_str_has_prefix (uri, "sharepoint://")) -+ return; -+ -+ if (!(flags & COMP_EDITOR_MEETING && flags & COMP_EDITOR_NEW_ITEM)) -+ return; -+ -+ action_group = comp_editor_get_action_group (editor, "coordinated"); -+ gtk_action_group_add_actions (action_group, meeting_entries, -+ G_N_ELEMENTS (meeting_entries), editor); -+ -+ manager = comp_editor_get_ui_manager (editor); -+ gtk_ui_manager_add_ui_from_string (manager, ui, -1, &error); -+ if (error != NULL) { -+ g_critical ("%s: %s", G_STRFUNC, error->message); -+ g_error_free (error); -+ } -+} -Index: evolution-2.27.2/configure.ac -=================================================================== ---- evolution-2.27.2.orig/configure.ac -+++ evolution-2.27.2/configure.ac -@@ -965,6 +965,9 @@ if test "x${enable_mono}" = "xyes"; then - evolution-sharp, ndesk-dbus-1.0, ndesk-dbus-glib-1.0]) - AC_SUBST(MONO_PLATFORM_CFLAGS) - AC_SUBST(MONO_PLATFORM_LIBS) -+ PKG_CHECK_MODULES(DBUS, dbus-glib-1) -+ AC_SUBST(DBUS_CFLAGS) -+ AC_SUBST(DBUS_LIBS) - MONO_BASED_PLUGINS="" - - dnl Sharepoint account setup -@@ -976,7 +979,7 @@ if test "x${enable_mono}" = "xyes"; then - PKG_CHECK_MODULES(ICE_DESKTOP, [Novell.IceDesktop, solvent]) - AC_SUBST(ICE_DESKTOP_CFLAGS) - AC_SUBST(ICE_DESKTOP_LIBS) -- MONO_BASED_PLUGINS="$MONO_BASED_PLUGINS sharepoint-account-setup" -+ MONO_BASED_PLUGINS="$MONO_BASED_PLUGINS sharepoint-account-setup sharepoint-features" - fi - fi - AC_SUBST(MONO_CFLAGS) -@@ -2161,6 +2164,7 @@ plugins/tnef-attachments/Makefile - plugins/vcard-inline/Makefile - plugins/webdav-account-setup/Makefile - plugins/sharepoint-account-setup/Makefile -+plugins/sharepoint-features/Makefile - smime/Makefile - smime/lib/Makefile - smime/gui/Makefile diff --git a/sp-process-meetings.diff b/sp-process-meetings.diff deleted file mode 100644 index 36df3b8..0000000 --- a/sp-process-meetings.diff +++ /dev/null @@ -1,440 +0,0 @@ -commit 18a2f5f1206e7a7583db2b8c47862f79abf13e50 -Author: chenthill -Date: Tue Dec 30 05:00:06 2008 +0530 - - process meetings. - -diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c -index 8d889bd..e1555d8 100644 ---- a/calendar/gui/dialogs/comp-editor.c -+++ b/calendar/gui/dialogs/comp-editor.c -@@ -792,6 +792,13 @@ save_comp (CompEditor *editor) - - e_cal_component_set_attachment_list (priv->comp, - get_attachment_list (editor)); -+ -+ /* Give a chance for plugins to act on the component */ -+ ECalEvent *ec_event = e_cal_event_peek (); -+ ECalEventTargetCompEditor *target; -+ target = e_cal_event_target_comp_editor (ec_event, editor); -+ e_event_emit ((EEvent *) ec_event, "editor.commit", (EEventTarget *) target); -+ - icalcomp = e_cal_component_get_icalcomponent (priv->comp); - /* send the component to the server */ - if (!cal_comp_is_on_server (priv->comp, priv->client)) { -diff --git a/plugins/sharepoint-features/Makefile.am b/plugins/sharepoint-features/Makefile.am -index f101059..9123b66 100644 ---- a/plugins/sharepoint-features/Makefile.am -+++ b/plugins/sharepoint-features/Makefile.am -@@ -19,7 +19,9 @@ plugin_DATA = \ - plugin_LTLIBRARIES = liborg-gnome-sharepoint-features.la - - liborg_gnome_sharepoint_features_la_SOURCES = \ -- meeting-workspace.c -+ process-meeting.c \ -+ comp-commit.c \ -+ meeting-workspace.c - - liborg_gnome_sharepoint_features_la_LIBADD = \ - $(top_builddir)/e-util/libeutil.la \ -@@ -33,6 +35,7 @@ glade_DATA = meetingworkspaces.glade - - EXTRA_DIST = \ - org-gnome-sharepoint-features.eplug.xml \ -+ org-gnome-share-point.error.xml \ - $(glade_DATA) - - BUILT_SOURCES = org-gnome-sharepoint-features.eplug -diff --git a/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml b/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml -index d59db73..3e318fc 100644 ---- a/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml -+++ b/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml -@@ -16,5 +16,19 @@ - target="compeditor" - /> - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - diff --git a/plugins/sharepoint-features/comp-commit.c b/plugins/sharepoint-features/comp-commit.c -new file mode 100644 -index 0000000..b87df4f ---- /dev/null -+++ b/plugins/sharepoint-features/comp-commit.c -@@ -0,0 +1,88 @@ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+void org_gnome_comp_commit (EPlugin *ep, ECalEventTargetCompEditor *target); -+ -+static icaltimezone* -+resolve_tzid_cb (const char *tzid, gpointer data) -+{ -+ ECal *client; -+ icaltimezone *zone = NULL; -+ -+ g_return_val_if_fail (data != NULL, NULL); -+ g_return_val_if_fail (E_IS_CAL (data), NULL); -+ -+ client = E_CAL (data); -+ -+ /* Try to find the builtin timezone first. */ -+ zone = icaltimezone_get_builtin_timezone_from_tzid (tzid); -+ -+ if (!zone) { -+ /* FIXME: Handle errors. */ -+ e_cal_get_timezone (client, tzid, &zone, NULL); -+ } -+ -+ return zone; -+} -+ -+static gboolean -+recur_cb (ECalComponent *comp, time_t start, time_t end, gpointer data) -+{ -+ time_t *end_date = data; -+ -+ *end_date = end; -+ -+ return TRUE; -+} -+ -+void -+org_gnome_comp_commit (EPlugin *ep, ECalEventTargetCompEditor *target) -+{ -+ CompEditor *editor = target->editor; -+ CompEditorFlags flags; -+ ECal *client; -+ ECalComponent *comp; -+ ECalComponentDateTime cdt; -+ icaltimezone *zone = NULL; -+ const char *uri; -+ time_t end_date = -1; -+ -+ client = comp_editor_get_client (editor); -+ uri = e_cal_get_uri (client); -+ flags = comp_editor_get_flags (editor); -+ -+ if (!g_str_has_prefix (uri, "sharepoint://")) -+ return; -+ -+ comp = comp_editor_get_comp (editor); -+ -+ if (!e_cal_component_has_recurrences (comp)) -+ return; -+ -+ e_cal_component_get_dtstart (comp, &cdt); -+ if (cdt.tzid != NULL) { -+ /* FIXME Will e_cal_get_timezone really not return builtin zones? */ -+ if (!e_cal_get_timezone (client, cdt.tzid, &zone, NULL)) -+ zone = icaltimezone_get_builtin_timezone_from_tzid (cdt.tzid); -+ } -+ e_cal_component_free_datetime (&cdt); -+ -+ e_cal_recur_generate_instances (comp, -1, -1, -+ recur_cb, &end_date, -+ resolve_tzid_cb, -+ client, zone); -+ -+ char *end = g_strdup_printf ("%ld",end_date); -+ e_cal_component_set_x_prop (comp, "X-SP-RECUR-ENDDATE", end); -+ g_free (end); -+ g_print ("DEBUG: the component to be saved is %s \n", e_cal_component_get_as_string (comp)); -+} -diff --git a/plugins/sharepoint-features/org-gnome-share-point.error.xml b/plugins/sharepoint-features/org-gnome-share-point.error.xml -new file mode 100644 -index 0000000..d656dea ---- /dev/null -+++ b/plugins/sharepoint-features/org-gnome-share-point.error.xml -@@ -0,0 +1,5 @@ -+ -+ -+ -+ -+ -diff --git a/plugins/sharepoint-features/process-meeting.c b/plugins/sharepoint-features/process-meeting.c -new file mode 100644 -index 0000000..917166b ---- /dev/null -+++ b/plugins/sharepoint-features/process-meeting.c -@@ -0,0 +1,258 @@ -+/* -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) version 3. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with the program; if not, see -+ * -+ * -+ * Authors: -+ * Chenthill Palanisamy (pchenthill@novell.com) -+ * -+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) -+ * -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+ -+typedef struct { -+ ECal *ecal; -+ icalcomponent *icalcomp; -+} ReceiveData; -+ -+ECalendarView *c_view; -+ -+void org_gnome_process_meeting (EPlugin *ep, ECalPopupTargetSelect *target); -+static void on_accept_meeting (EPopup *ep, EPopupItem *pitem, void *data); -+static void on_accept_meeting_tentative (EPopup *ep, EPopupItem *pitem, void *data); -+static void on_decline_meeting (EPopup *ep, EPopupItem *pitem, void *data); -+ -+static EPopupItem popup_items[] = { -+{ E_POPUP_ITEM, "41.accept", N_("Accept"), on_accept_meeting, NULL, GTK_STOCK_APPLY, 0, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_MEETING}, -+{ E_POPUP_ITEM, "42.accept", N_("Accept Tentatively"), on_accept_meeting_tentative, NULL, GTK_STOCK_DIALOG_QUESTION, 0, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_MEETING}, -+{ E_POPUP_ITEM, "43.decline", N_("Decline"), on_decline_meeting, NULL, GTK_STOCK_CANCEL, 0, E_CAL_POPUP_SELECT_NOTEDITING} -+}; -+ -+static void -+popup_free (EPopup *ep, GSList *items, void *data) -+{ -+ g_slist_free (items); -+ items = NULL; -+} -+ -+void -+org_gnome_process_meeting (EPlugin *ep, ECalPopupTargetSelect *target) -+{ -+ GSList *menus = NULL; -+ GList *selected; -+ int i = 0; -+ static int first = 0; -+ const char *uri = NULL; -+ ECalendarView *cal_view = E_CALENDAR_VIEW (target->target.widget); -+ -+ c_view = cal_view; -+ selected = e_calendar_view_get_selected_events (cal_view); -+ if (selected) { -+ ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data; -+ -+ uri = e_cal_get_uri (event->comp_data->client); -+ } else -+ return; -+ -+ if (!uri) -+ return; -+ -+ if (! g_strrstr (uri, "sharepoint://")) -+ return ; -+ -+ /* for translation*/ -+ if (!first) { -+ popup_items[0].label = _(popup_items[0].label); -+ } -+ -+ first++; -+ -+ for (i = 0; i < sizeof (popup_items) / sizeof (popup_items[0]); i++) -+ menus = g_slist_prepend (menus, &popup_items[i]); -+ -+ e_popup_add_items (target->target.popup, menus, NULL, popup_free, NULL); -+} -+ -+static void -+finalize_receive_data (ReceiveData *r_data) -+{ -+ if (r_data->ecal) { -+ g_object_unref (r_data->ecal); -+ r_data->ecal = NULL; -+ } -+ -+ if (r_data->ecal) { -+ icalcomponent_free (r_data->icalcomp); -+ r_data->icalcomp = NULL; -+ } -+ -+ g_free (r_data); -+} -+ -+static gboolean -+receive_objects (gpointer data) -+{ -+ GError *error = NULL; -+ ReceiveData *r_data = data; -+ -+ -+ icalcomponent_set_method (r_data->icalcomp, ICAL_METHOD_REQUEST); -+ -+ if (!e_cal_receive_objects (r_data->ecal, r_data->icalcomp, &error)) { -+ /* FIXME show an error dialog */ -+ g_error_free (error); -+ } -+ -+ finalize_receive_data (r_data); -+ return TRUE; -+} -+ -+static icalproperty * -+find_attendee (icalcomponent *ical_comp, const char *address) -+{ -+ icalproperty *prop; -+ -+ if (address == NULL) -+ return NULL; -+ -+ for (prop = icalcomponent_get_first_property (ical_comp, ICAL_ATTENDEE_PROPERTY); -+ prop != NULL; -+ prop = icalcomponent_get_next_property (ical_comp, ICAL_ATTENDEE_PROPERTY)) { -+ icalvalue *value; -+ const char *attendee; -+ char *text; -+ -+ value = icalproperty_get_value (prop); -+ if (!value) -+ continue; -+ -+ attendee = icalvalue_get_string (value); -+ -+ text = g_strdup (itip_strip_mailto (attendee)); -+ text = g_strstrip (text); -+ if (!g_ascii_strcasecmp (address, text)) { -+ g_free (text); -+ break; -+ } -+ g_free (text); -+ } -+ -+ return prop; -+} -+static void -+change_status (icalcomponent *ical_comp, const char *address, icalparameter_partstat status) -+{ -+ icalproperty *prop; -+ -+ prop = find_attendee (ical_comp, address); -+ if (prop) { -+ icalparameter *param; -+ -+ icalproperty_remove_parameter (prop, ICAL_PARTSTAT_PARAMETER); -+ param = icalparameter_new_partstat (status); -+ icalproperty_add_parameter (prop, param); -+ } else { -+ icalparameter *param; -+ -+ prop = icalproperty_new_attendee (address); -+ icalcomponent_add_property (ical_comp, prop); -+ -+ param = icalparameter_new_role (ICAL_ROLE_OPTPARTICIPANT); -+ icalproperty_add_parameter (prop, param); -+ -+ param = icalparameter_new_partstat (status); -+ icalproperty_add_parameter (prop, param); -+ } -+} -+ -+static void -+process_meeting (ECalendarView *cal_view, icalparameter_partstat status) -+{ -+ GList *selected; -+ icalcomponent *clone; -+ -+ selected = e_calendar_view_get_selected_events (cal_view); -+ if (selected) { -+ ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data; -+ ECalComponent *comp = e_cal_component_new (); -+ ReceiveData *r_data = g_new0 (ReceiveData, 1); -+ gboolean recurring = FALSE; -+ GThread *thread = NULL; -+ GError *error = NULL; -+ char *address = NULL; -+ -+ e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp)); -+ address = itip_get_comp_attendee (comp, event->comp_data->client); -+ -+ if (e_cal_component_has_recurrences (comp) || e_cal_component_is_instance (comp)) -+ recurring = TRUE; -+ -+ /* Free comp */ -+ g_object_unref (comp); -+ comp = NULL; -+ -+ clone = icalcomponent_new_clone (event->comp_data->icalcomp); -+ change_status (clone, address, status); -+ -+ r_data->ecal = g_object_ref (event->comp_data->client); -+ r_data->icalcomp = clone; -+ -+ g_print ("The updated meeting is %s \n", icalcomponent_as_ical_string (clone)); -+ -+ thread = g_thread_create ((GThreadFunc) receive_objects, r_data , FALSE, &error); -+ if (!thread) { -+ g_warning (G_STRLOC ": %s", error->message); -+ g_error_free (error); -+ } -+ } -+} -+ -+/*FIXME the data does not give us the ECalendarView object. -+ we should remove the global c_view variable once we get it from the data*/ -+static void -+on_accept_meeting (EPopup *ep, EPopupItem *pitem, void *data) -+{ -+ ECalendarView *cal_view = c_view; -+ -+ process_meeting (cal_view, ICAL_PARTSTAT_ACCEPTED); -+} -+static void -+on_accept_meeting_tentative (EPopup *ep, EPopupItem *pitem, void *data) -+{ -+ ECalendarView *cal_view = c_view; -+ -+ process_meeting (cal_view, ICAL_PARTSTAT_TENTATIVE); -+} -+ -+static void -+on_decline_meeting (EPopup *ep, EPopupItem *pitem, void *data) -+{ -+ ECalendarView *cal_view = c_view; -+ -+ process_meeting (cal_view, ICAL_PARTSTAT_DECLINED); -+} diff --git a/sp-tasks-setup.diff b/sp-tasks-setup.diff deleted file mode 100644 index 5dc6a5b..0000000 --- a/sp-tasks-setup.diff +++ /dev/null @@ -1,236 +0,0 @@ -diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c -index c97f61c..16fa928 100644 ---- a/calendar/gui/e-cal-model.c -+++ b/calendar/gui/e-cal-model.c -@@ -1413,6 +1413,12 @@ ensure_dates_are_in_default_zone (icalcomponent *icalcomp) - dt = icaltime_convert_to_zone (dt, zone); - icalcomponent_set_dtend (icalcomp, dt); - } -+ -+ dt = icalcomponent_get_due (icalcomp); -+ if (dt.is_utc) { -+ dt = icaltime_convert_to_zone (dt, zone); -+ icalcomponent_set_due (icalcomp, dt); -+ } - } - - static void -diff --git a/plugins/sharepoint-account-setup/SharepointAccount.cs b/plugins/sharepoint-account-setup/SharepointAccount.cs -index 5009e98..61959ac 100644 ---- a/plugins/sharepoint-account-setup/SharepointAccount.cs -+++ b/plugins/sharepoint-account-setup/SharepointAccount.cs -@@ -38,10 +38,10 @@ namespace Sharepoint - initialized = true; - } - -+ ConnectToICEcoreDaemon (); - - sessionBus = Bus.Session.GetObject ("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) -@@ -49,7 +49,7 @@ namespace Sharepoint - Bus.Session.StartServiceByName (DaemonNamespace); - } - -- ConnectToICEcoreDaemon (); -+ sessionBus.NameOwnerChanged += OnDBusNameOwnerChanged; - try { deskIceDaemon.CheckAuthentication (String.Empty); } - catch (NotAuthenticatedException) - { return; } -@@ -70,7 +70,7 @@ namespace Sharepoint - public void DeleteAccount () - { - // we remove all share calendars. We currently support creating only one sharepoint account -- SharepointSource spSource = new SharepointSource (CalSourceType.Event, null, null); -+ SharepointSource spSource = new SharepointSource (null, null); - spSource.DeleteSources (); - spSource.Sync (); - } -@@ -89,7 +89,7 @@ namespace Sharepoint - { - Console.WriteLine ("Getting folders "); - AccountInfo accountInfo = deskIceDaemon.GetDefaultAccountInfo (); -- SharepointSource spSource = new SharepointSource (CalSourceType.Event, accountInfo.username, -+ SharepointSource spSource = new SharepointSource (accountInfo.username, - accountInfo.hostUrl); - - if (spSource.AccountExists) { -@@ -100,20 +100,17 @@ namespace Sharepoint - FileInfo [] workspaces = deskIceDaemon.EnumerateWorkspaces (); - foreach (FileInfo workspace in workspaces) - { -- FileInfo[] folders = null; -+ Folder[] folders = null; - -- if (spSource.srcType == CalSourceType.Event) -- folders = deskIceDaemon.GetCalendarFolders (string.Empty, workspace.Id); -- // else get task folders -+ folders = deskIceDaemon.GetCalendarFolders (string.Empty, workspace.Id); - -- - if (folders.Length == 0) - continue; - - spSource.CreateSources (workspace, folders); - } -+ - spSource.Sync (); -- Console.WriteLine ("******* Got folders "); - backgroundThread = null; - RemoveHandlers (); - } -diff --git a/plugins/sharepoint-account-setup/SharepointSource.cs b/plugins/sharepoint-account-setup/SharepointSource.cs -index c61fcf0..e9dad79 100644 ---- a/plugins/sharepoint-account-setup/SharepointSource.cs -+++ b/plugins/sharepoint-account-setup/SharepointSource.cs -@@ -16,33 +16,36 @@ 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; -+ SourceList CalsrcList; -+ SourceList TasksrcList; - readonly string baseUri = "sharepoint://"; - string username; - string hostUrl; - -- public SharepointSource(CalSourceType type, string userName, string hosturl) -+ public SharepointSource(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); -+ CalsrcList = new SourceList (calPath); -+ TasksrcList = new SourceList (taskPath); - } - - public bool AccountExists - { - get - { -- foreach (SourceGroup group in srcList.Groups) -+ foreach (SourceGroup group in CalsrcList.Groups) -+ { -+ if (group.BaseUri == baseUri) -+ return true; -+ } -+ -+ foreach (SourceGroup group in TasksrcList.Groups) - { - if (group.BaseUri == baseUri) - return true; -@@ -52,45 +55,85 @@ namespace Sharepoint - } - } - -- public void CreateSources (FileInfo workspace, FileInfo [] folders) -+ public void CreateSources (FileInfo workspace, Folder [] folders) - { -- SourceGroup group = new SourceGroup (workspace.DisplayName, baseUri); -+ SourceGroup calGroup = new SourceGroup (workspace.DisplayName, baseUri); -+ SourceGroup taskGroup = new SourceGroup (workspace.DisplayName, baseUri); -+ bool addCalGroup = false; -+ bool addTaskGroup = false; - -- foreach (FileInfo folder in folders) -+ foreach (Folder folder in folders) - { -- Console.WriteLine (workspace.DisplayName + " folder " + folder.DisplayName); -- string relativeUri = hostUrl + ":" + folder.Id; -- Source source= new Source (folder.DisplayName, relativeUri); -+ Console.WriteLine (workspace.DisplayName + " folder " + folder.Title + " " + folder.Type); -+ string relativeUri = hostUrl + ":" + folder.ID; -+ Source source= new Source (folder.Title, relativeUri); - source.SetProperty ("username", username); - source.SetProperty ("workspaceid", workspace.Id); -- source.SetProperty ("Id", folder.Id); -+ source.SetProperty ("Id", folder.ID); - source.SetProperty ("Auth","True"); -- group.AddSource (source, -1); -+ source.SetProperty ("delete","no"); -+ if (folder.Type == FolderType.Task) -+ { -+ taskGroup.AddSource (source, -1); -+ addTaskGroup = true; -+ } else if (folder.Type == FolderType.Calendar) -+ { -+ calGroup.AddSource (source, -1); -+ addCalGroup = true; -+ } -+ } -+ -+ -+ if (addCalGroup) -+ { -+ calGroup.SetProperty ("username", username); -+ CalsrcList.AddGroup (calGroup, -1); -+ } -+ -+ if (addTaskGroup) -+ { -+ taskGroup.SetProperty ("username", username); -+ TasksrcList.AddGroup (taskGroup, -1); - } -- group.SetProperty ("username", username); -- srcList.AddGroup (group, -1); - } - - public void Sync () - { -- srcList.Sync (); -+ CalsrcList.Sync (); -+ TasksrcList.Sync (); - } - - public void DeleteSources () - { -- List groupsToRemove = new List (); -- foreach (SourceGroup group in srcList.Groups) -+ List calGroupsToRemove = new List (); -+ foreach (SourceGroup group in CalsrcList.Groups) -+ { -+ if (group.BaseUri.StartsWith (baseUri)) -+ { -+ /// Currently we remove all sharepoint calendars -+ calGroupsToRemove.Add (group); -+ } -+ } -+ -+ foreach (SourceGroup group in calGroupsToRemove) -+ { -+ CalsrcList.RemoveGroup (group); -+ } -+ -+ List TaskGroupsToRemove = new List (); -+ -+ foreach (SourceGroup group in TasksrcList.Groups) - { - if (group.BaseUri.StartsWith (baseUri)) - { - /// Currently we remove all sharepoint calendars -- groupsToRemove.Add (group); -+ TaskGroupsToRemove.Add (group); - } - } - -- foreach (SourceGroup group in groupsToRemove) -+ foreach (SourceGroup group in TaskGroupsToRemove) - { -- srcList.RemoveGroup (group); -+ TasksrcList.RemoveGroup (group); - } - } - } From e8bf758eabf9d5558b4bf5aeefe1799ce05075f80a2ee730affb7522c2b30381 Mon Sep 17 00:00:00 2001 From: Vincent Untz Date: Tue, 24 Aug 2010 13:37:07 +0000 Subject: [PATCH 2/5] Accepting request 45692 from home:dimstar:branches:GNOME:Factory Copy from home:dimstar:branches:GNOME:Factory/evolution via accept of submit request 45692 revision 5. Request was accepted with message: thanks OBS-URL: https://build.opensuse.org/request/show/45692 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/evolution?expand=0&rev=89 --- evolution-2.31.6.tar.bz2 | 3 --- evolution-2.31.90.tar.bz2 | 3 +++ evolution-no-dbus-glib.patch | 42 ------------------------------------ evolution.changes | 38 ++++++++++++++++++++++++++++++++ evolution.spec | 7 ++---- 5 files changed, 43 insertions(+), 50 deletions(-) delete mode 100644 evolution-2.31.6.tar.bz2 create mode 100644 evolution-2.31.90.tar.bz2 delete mode 100644 evolution-no-dbus-glib.patch diff --git a/evolution-2.31.6.tar.bz2 b/evolution-2.31.6.tar.bz2 deleted file mode 100644 index 21901ed..0000000 --- a/evolution-2.31.6.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a4c36b0773d810cf234ba466904da180af4ea35f270a87d0f7091d938f141d0b -size 31567308 diff --git a/evolution-2.31.90.tar.bz2 b/evolution-2.31.90.tar.bz2 new file mode 100644 index 0000000..52aa35e --- /dev/null +++ b/evolution-2.31.90.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3a667c80cb616552cf67b32e81b5cbe4435a8e3d6de6ca07ae4f41370b6bc58 +size 31784062 diff --git a/evolution-no-dbus-glib.patch b/evolution-no-dbus-glib.patch deleted file mode 100644 index 922d835..0000000 --- a/evolution-no-dbus-glib.patch +++ /dev/null @@ -1,42 +0,0 @@ -commit 5c49c70d5568a9a68daa5facaa531ab317d1f005 -Author: Fridrich Štrba -Date: Thu Aug 5 01:01:19 2010 +0200 - - We are not using dbus-glib anymore, don't call dbus_g_thread_init - -diff --git a/calendar/gui/alarm-notify/notify-main.c b/calendar/gui/alarm-notify/notify-main.c -index 2696119..799229a 100644 ---- a/calendar/gui/alarm-notify/notify-main.c -+++ b/calendar/gui/alarm-notify/notify-main.c -@@ -57,7 +57,6 @@ main (gint argc, gchar **argv) - textdomain (GETTEXT_PACKAGE); - - g_thread_init (NULL); -- dbus_g_thread_init (); - - #ifdef G_OS_WIN32 - path = g_build_path (";", _e_get_bindir (), g_getenv ("PATH"), NULL); -diff --git a/capplet/anjal-settings-main.c b/capplet/anjal-settings-main.c -index e789f91..ec1019d 100644 ---- a/capplet/anjal-settings-main.c -+++ b/capplet/anjal-settings-main.c -@@ -225,7 +225,6 @@ main (gint argc, gchar *argv[]) - - if (!g_thread_get_initialized ()) - g_thread_init (NULL); -- dbus_g_thread_init (); - - client = gconf_client_get_default(); - -diff --git a/shell/main.c b/shell/main.c -index a525262..82d6e6a 100644 ---- a/shell/main.c -+++ b/shell/main.c -@@ -492,7 +492,6 @@ main (gint argc, gchar **argv) - g_type_init (); - if (!g_thread_get_initialized ()) - g_thread_init (NULL); -- dbus_g_thread_init (); - - #ifdef G_OS_WIN32 - path = g_build_path (";", _e_get_bindir (), g_getenv ("PATH"), NULL); diff --git a/evolution.changes b/evolution.changes index 7eb1bab..0f245c6 100644 --- a/evolution.changes +++ b/evolution.changes @@ -1,3 +1,41 @@ +------------------------------------------------------------------- +Tue Aug 17 10:58:11 CEST 2010 - dimstar@opensuse.org + +- Update to version 2.31.90: + + ESelectionModel, ECanvas, EMsgComposer, EMfolderTreeModel, + EMFormat cleanups. + + Pass an EShell to EMsgComposer instances. + + Pause timline instead of stop. It hides the search animation + texture. + + Add keybindings to tab. + + remove select-on-focus hack, and replace with new skip-a-parent + chaining hack + + Ensure widgets are registered, without relying on config dialog + setup at startup. + + build: Add libemformat to LDADD for evolution-settings + + Add Histogram of mail trend in clutter tab and enable DnD of + tabs + + Change em_format_redraw() to em_format_queue_redraw(). + + Defer the load / creation of configuration UI with changes to + e_preferences_window to take factory callbacks and store a + reference to the shell. + + Execute calendar search post startup, not + + Make the intention of /tmp more explicit, and rescue people who + happen to have evolution .po files in /tmp from a sad fate + + bgo#624896: Missing icons in table properties + + bgo#605737: Appointment reminder shows icons on buttons + + bgo#624913: Disallow drag-and-drop within the same attachment + bar + + bgo#323142: Signature missing when handling mailto: URI with + body part + + bgo#626724: Folder tree mistakes "mark as unread" as new mail + + bgo#271691: Add a way to view all attachments inline + + bgo#626453: Show attachments inline when printing + + bgo#626090: Only set -fno-strict-aliasing for GCC + + bgo#626059: Welcome messages has incorrect links + + bgo#625847: make signatures work again. +- Drop evolution-no-dbus-glib.patch, upstrea, fixed. + ------------------------------------------------------------------- Thu Aug 12 21:23:59 UTC 2010 - dimstar@opensuse.org diff --git a/evolution.spec b/evolution.spec index 2a8da4c..066c8ca 100644 --- a/evolution.spec +++ b/evolution.spec @@ -1,5 +1,5 @@ # -# spec file for package evolution (Version 2.31.6) +# spec file for package evolution (Version 2.31.90) # # Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -57,13 +57,11 @@ License: LGPLv2.0 ; LGPLv3 Group: Productivity/Networking/Email/Clients # This should be updated upon major version changes; it should match BASE_VERSION as defined in configure.in. %define evolution_base_version 2.32 -Version: 2.31.6 +Version: 2.31.90 Release: 1 # FIXME: check with upstream/meego if we want to enable clutter for express mode Summary: The Integrated GNOME Mail, Calendar, and Address Book Suite Source0: ftp://ftp.gnome.org/pub/gnome/sources/evolution/2.25/%{name}-%{version}.tar.bz2 -# PATCH-FIX-UPSTREAM evolution-no-dbus-glib.patch vuntz@opensuse.org -- Taken from upstream, there's no use of dbus-glib anymore, so no need to call init functions -Patch0: evolution-no-dbus-glib.patch # PATCH-NEEDS-REBASE calendar-sendbutton.patch -- It also needs a proper description and a bug number Patch7: calendar-sendbutton.patch # PATCH-FIX-OPENSUSE evolution-custom-openldap-includes.patch maw@novell.com -- look for ldap includes in %{_libdir}/evoldap/include @@ -145,7 +143,6 @@ Evolution or embed the existing ones in other applications. %prep %setup -q translation-update-upstream -%patch0 -p1 # %patch7 %if %USE_EVOLDAP %patch15 -p1 From 3870365981dfebb5dfbc04bf32a3e4a20c54a84aa768f90488caae169a6a3d36 Mon Sep 17 00:00:00 2001 From: Vincent Untz Date: Tue, 24 Aug 2010 13:38:52 +0000 Subject: [PATCH 3/5] Accepting request 46101 from home:vuntz:branches:GNOME:Factory Copy from home:vuntz:branches:GNOME:Factory/evolution via accept of submit request 46101 revision 2. Request was accepted with message: ok OBS-URL: https://build.opensuse.org/request/show/46101 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/evolution?expand=0&rev=90 --- evolution.changes | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/evolution.changes b/evolution.changes index 0f245c6..e437f21 100644 --- a/evolution.changes +++ b/evolution.changes @@ -8,7 +8,7 @@ Tue Aug 17 10:58:11 CEST 2010 - dimstar@opensuse.org + Pause timline instead of stop. It hides the search animation texture. + Add keybindings to tab. - + remove select-on-focus hack, and replace with new skip-a-parent + + Remove select-on-focus hack, and replace with new skip-a-parent chaining hack + Ensure widgets are registered, without relying on config dialog setup at startup. @@ -34,7 +34,7 @@ Tue Aug 17 10:58:11 CEST 2010 - dimstar@opensuse.org + bgo#626090: Only set -fno-strict-aliasing for GCC + bgo#626059: Welcome messages has incorrect links + bgo#625847: make signatures work again. -- Drop evolution-no-dbus-glib.patch, upstrea, fixed. +- Drop evolution-no-dbus-glib.patch: fixed upstream. ------------------------------------------------------------------- Thu Aug 12 21:23:59 UTC 2010 - dimstar@opensuse.org From 2db054edd13e807c85a614262f9647d69cc7f65d726e65f2e4815a5696cc591b Mon Sep 17 00:00:00 2001 From: OBS User autobuild Date: Fri, 27 Aug 2010 19:59:53 +0000 Subject: [PATCH 4/5] Accepting request 46443 from GNOME:Factory checked in (request 46443) OBS-URL: https://build.opensuse.org/request/show/46443 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/evolution?expand=0&rev=91 --- evolution-2.31.6.tar.bz2 | 3 + evolution-2.31.90.tar.bz2 | 3 - evolution-no-dbus-glib.patch | 42 ++ evolution.changes | 47 -- evolution.spec | 23 +- sharepoint-account-setup.patch | 514 ++++++++++++++++++ sp-meetingworkspace-ui.patch | 945 +++++++++++++++++++++++++++++++++ sp-process-meetings.diff | 440 +++++++++++++++ sp-tasks-setup.diff | 236 ++++++++ 9 files changed, 2201 insertions(+), 52 deletions(-) create mode 100644 evolution-2.31.6.tar.bz2 delete mode 100644 evolution-2.31.90.tar.bz2 create mode 100644 evolution-no-dbus-glib.patch create mode 100644 sharepoint-account-setup.patch create mode 100644 sp-meetingworkspace-ui.patch create mode 100644 sp-process-meetings.diff create mode 100644 sp-tasks-setup.diff diff --git a/evolution-2.31.6.tar.bz2 b/evolution-2.31.6.tar.bz2 new file mode 100644 index 0000000..21901ed --- /dev/null +++ b/evolution-2.31.6.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4c36b0773d810cf234ba466904da180af4ea35f270a87d0f7091d938f141d0b +size 31567308 diff --git a/evolution-2.31.90.tar.bz2 b/evolution-2.31.90.tar.bz2 deleted file mode 100644 index 52aa35e..0000000 --- a/evolution-2.31.90.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a3a667c80cb616552cf67b32e81b5cbe4435a8e3d6de6ca07ae4f41370b6bc58 -size 31784062 diff --git a/evolution-no-dbus-glib.patch b/evolution-no-dbus-glib.patch new file mode 100644 index 0000000..922d835 --- /dev/null +++ b/evolution-no-dbus-glib.patch @@ -0,0 +1,42 @@ +commit 5c49c70d5568a9a68daa5facaa531ab317d1f005 +Author: Fridrich Štrba +Date: Thu Aug 5 01:01:19 2010 +0200 + + We are not using dbus-glib anymore, don't call dbus_g_thread_init + +diff --git a/calendar/gui/alarm-notify/notify-main.c b/calendar/gui/alarm-notify/notify-main.c +index 2696119..799229a 100644 +--- a/calendar/gui/alarm-notify/notify-main.c ++++ b/calendar/gui/alarm-notify/notify-main.c +@@ -57,7 +57,6 @@ main (gint argc, gchar **argv) + textdomain (GETTEXT_PACKAGE); + + g_thread_init (NULL); +- dbus_g_thread_init (); + + #ifdef G_OS_WIN32 + path = g_build_path (";", _e_get_bindir (), g_getenv ("PATH"), NULL); +diff --git a/capplet/anjal-settings-main.c b/capplet/anjal-settings-main.c +index e789f91..ec1019d 100644 +--- a/capplet/anjal-settings-main.c ++++ b/capplet/anjal-settings-main.c +@@ -225,7 +225,6 @@ main (gint argc, gchar *argv[]) + + if (!g_thread_get_initialized ()) + g_thread_init (NULL); +- dbus_g_thread_init (); + + client = gconf_client_get_default(); + +diff --git a/shell/main.c b/shell/main.c +index a525262..82d6e6a 100644 +--- a/shell/main.c ++++ b/shell/main.c +@@ -492,7 +492,6 @@ main (gint argc, gchar **argv) + g_type_init (); + if (!g_thread_get_initialized ()) + g_thread_init (NULL); +- dbus_g_thread_init (); + + #ifdef G_OS_WIN32 + path = g_build_path (";", _e_get_bindir (), g_getenv ("PATH"), NULL); diff --git a/evolution.changes b/evolution.changes index e437f21..d7eac94 100644 --- a/evolution.changes +++ b/evolution.changes @@ -1,50 +1,3 @@ -------------------------------------------------------------------- -Tue Aug 17 10:58:11 CEST 2010 - dimstar@opensuse.org - -- Update to version 2.31.90: - + ESelectionModel, ECanvas, EMsgComposer, EMfolderTreeModel, - EMFormat cleanups. - + Pass an EShell to EMsgComposer instances. - + Pause timline instead of stop. It hides the search animation - texture. - + Add keybindings to tab. - + Remove select-on-focus hack, and replace with new skip-a-parent - chaining hack - + Ensure widgets are registered, without relying on config dialog - setup at startup. - + build: Add libemformat to LDADD for evolution-settings - + Add Histogram of mail trend in clutter tab and enable DnD of - tabs - + Change em_format_redraw() to em_format_queue_redraw(). - + Defer the load / creation of configuration UI with changes to - e_preferences_window to take factory callbacks and store a - reference to the shell. - + Execute calendar search post startup, not - + Make the intention of /tmp more explicit, and rescue people who - happen to have evolution .po files in /tmp from a sad fate - + bgo#624896: Missing icons in table properties - + bgo#605737: Appointment reminder shows icons on buttons - + bgo#624913: Disallow drag-and-drop within the same attachment - bar - + bgo#323142: Signature missing when handling mailto: URI with - body part - + bgo#626724: Folder tree mistakes "mark as unread" as new mail - + bgo#271691: Add a way to view all attachments inline - + bgo#626453: Show attachments inline when printing - + bgo#626090: Only set -fno-strict-aliasing for GCC - + bgo#626059: Welcome messages has incorrect links - + bgo#625847: make signatures work again. -- Drop evolution-no-dbus-glib.patch: fixed upstream. - -------------------------------------------------------------------- -Thu Aug 12 21:23:59 UTC 2010 - dimstar@opensuse.org - -- Finally drop unmaintained sharepoint patches (came from SLE) - + sharepoint-account-setup.patch - + sp-meetingworkspace-ui.patch - + sp-process-meetings.diff - + sp-tasks-setup.diff - ------------------------------------------------------------------- Fri Aug 6 02:11:42 CEST 2010 - vuntz@opensuse.org diff --git a/evolution.spec b/evolution.spec index 066c8ca..947c8b1 100644 --- a/evolution.spec +++ b/evolution.spec @@ -1,5 +1,5 @@ # -# spec file for package evolution (Version 2.31.90) +# spec file for package evolution (Version 2.31.6) # # Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -57,11 +57,13 @@ License: LGPLv2.0 ; LGPLv3 Group: Productivity/Networking/Email/Clients # This should be updated upon major version changes; it should match BASE_VERSION as defined in configure.in. %define evolution_base_version 2.32 -Version: 2.31.90 +Version: 2.31.6 Release: 1 # FIXME: check with upstream/meego if we want to enable clutter for express mode Summary: The Integrated GNOME Mail, Calendar, and Address Book Suite Source0: ftp://ftp.gnome.org/pub/gnome/sources/evolution/2.25/%{name}-%{version}.tar.bz2 +# PATCH-FIX-UPSTREAM evolution-no-dbus-glib.patch vuntz@opensuse.org -- Taken from upstream, there's no use of dbus-glib anymore, so no need to call init functions +Patch0: evolution-no-dbus-glib.patch # PATCH-NEEDS-REBASE calendar-sendbutton.patch -- It also needs a proper description and a bug number Patch7: calendar-sendbutton.patch # PATCH-FIX-OPENSUSE evolution-custom-openldap-includes.patch maw@novell.com -- look for ldap includes in %{_libdir}/evoldap/include @@ -70,16 +72,24 @@ Patch15: evolution-custom-openldap-includes.patch Patch18: bnc-435668-hide-accept.patch # PATCH-FIX-UPSTREAM bnc-435722-book-uri-long.patch bnc#435722 abharath@suse.de -- Book URI: Spills Into Second Column. Patch19: bnc-435722-book-uri-long.patch +# NEEDS-REBASE sharepoint-account-setup.patch pchenthill@suse.de -- This patch allows you to connect to sharepoint servers (WAS: PATCH-FIX-UPSTREAM) +Patch23: sharepoint-account-setup.patch # PATCH-FIX-OPENSUSE bnc-433448-backup-restore-fails.patch bnc433448 abharath@suse.de -- Not required upstream. Patch25: bnc-433448-backup-restore-fails.patch # PATCH-FIX-UPSTREAM bnc-210959-evo-accept-ics.patch bnc210959 pchenthill@novell.com -- Patch yet to be pushed upstream. Patch35: bnc-210959-evo-accept-ics.patch +# PATCH-NEEDS-REBASE sp-tasks-setup.diff pchenthill@suse.de -- Patch needs to be upstreamed. (WAS: PATCH-FIX-UPSTREAM) +Patch36: sp-tasks-setup.diff +# PATCH-NEEDS-REBASE sp-meetingworkspace-ui.patch pchenthill@suse.de -- Patch needs to be upstreamed. (WAS: PATCH-FIX-UPSTREAM) +Patch41: sp-meetingworkspace-ui.patch # PATCH-NEEDS-REBASE bnc-449888-handle-no-workspace.patch bnc449888 pchenthill@suse.de -- Patch needs to be upstreamed. (WAS: PATCH-FIX-UPSTREAM) Patch42: bnc-449888-handle-no-workspace.patch # PATCH-NEEDS-REBASE bnc-440634-forwarded-hide-accept-decline.patch bnc440634 abharath@suse.de -- Make GW understand folders better. (WAS: PATCH-FIX-SLED) Patch53: bnc-440634-forwarded-hide-accept-decline.patch # PATCH-NEEDS-REBASE bnc-445996-address-conflict.patch bnc445996 shashish@suse.de -- Needs to be moved out of glade files. (was PATCH-FIX-SLED) Patch54: bnc-445996-address-conflict.patch +# PATCH-NEEDS-REBASE: sp-process-meetings.diff pchenthill@suse.de -- Fix for bug 449899 (bnc) (WAS: PATCH-FIX-SLED) +Patch101: sp-process-meetings.diff Url: http://gnome.org/projects/evolution/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Recommends: bogofilter @@ -143,6 +153,7 @@ Evolution or embed the existing ones in other applications. %prep %setup -q translation-update-upstream +%patch0 -p1 # %patch7 %if %USE_EVOLDAP %patch15 -p1 @@ -150,13 +161,21 @@ translation-update-upstream # NEEDS REBASE #%patch18 %patch19 +# NEEDS-REBASE +#%patch23 -p1 %patch25 %patch35 # NEEDS-REBASE +#%patch36 -p1 +# NEEDS-REBASE +#%patch41 -p1 +# NEEDS-REBASE #%patch42 -p1 # NEEDS REBASE #%patch53 #%patch54 +# NEEDS-REBASE +#%patch101 -p1 %build autoreconf -f -i diff --git a/sharepoint-account-setup.patch b/sharepoint-account-setup.patch new file mode 100644 index 0000000..1b850b5 --- /dev/null +++ b/sharepoint-account-setup.patch @@ -0,0 +1,514 @@ +diff -ruN evolution-2.27.4.1/configure.ac evolution-2.27.4.1.patched//configure.ac +--- evolution-2.27.4.1/configure.ac 2009-07-15 11:25:24.000000000 +0200 ++++ evolution-2.27.4.1.patched//configure.ac 2009-07-22 13:21:18.000000000 +0200 +@@ -903,6 +903,24 @@ + PKG_CHECK_MODULES([MONO], ["mono"]) + AC_DEFINE(ENABLE_MONO,1,[Define if Mono embedding should be enabled]) + 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]) ++ 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, solvent]) ++ 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) +@@ -1714,7 +1732,7 @@ + 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 audio-inline mailing-list-actions default-mailer prefer-plain mail-notification attachment-reminder backup-restore email-custom-header templates pst-import vcard-inline" +@@ -1767,6 +1785,11 @@ + 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" +@@ -2021,6 +2044,7 @@ + plugins/tnef-attachments/Makefile + plugins/vcard-inline/Makefile + plugins/webdav-account-setup/Makefile ++plugins/sharepoint-account-setup/Makefile + smime/Makefile + smime/lib/Makefile + smime/gui/Makefile +diff -ruN evolution-2.27.4.1/plugins/mono/mono-plugin.c evolution-2.27.4.1.patched//plugins/mono/mono-plugin.c +--- evolution-2.27.4.1/plugins/mono/mono-plugin.c 2009-07-13 09:45:13.000000000 +0200 ++++ evolution-2.27.4.1.patched//plugins/mono/mono-plugin.c 2009-07-22 13:20:43.000000000 +0200 +@@ -81,9 +81,14 @@ + MonoObject *x = NULL, *res; + gpointer *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) { +@@ -232,8 +237,6 @@ + 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 -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/Makefile.am evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/Makefile.am +--- evolution-2.27.4.1/plugins/sharepoint-account-setup/Makefile.am 1970-01-01 01:00:00.000000000 +0100 ++++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/Makefile.am 2009-07-22 13:20:43.000000000 +0200 +@@ -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 -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml +--- evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml 1970-01-01 01:00:00.000000000 +0100 ++++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml 2009-07-22 13:20:43.000000000 +0200 +@@ -0,0 +1,36 @@ ++ ++ ++ ++ ++ <_description>Create a sharepoint account for calendar and tasks ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml +--- evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml 1970-01-01 01:00:00.000000000 +0100 ++++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml 2009-07-22 13:20:43.000000000 +0200 +@@ -0,0 +1,16 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml +--- evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml 1970-01-01 01:00:00.000000000 +0100 ++++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml 2009-07-22 13:20:43.000000000 +0200 +@@ -0,0 +1,16 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointAccount.cs evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointAccount.cs +--- evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointAccount.cs 1970-01-01 01:00:00.000000000 +0100 ++++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointAccount.cs 2009-07-22 13:20:43.000000000 +0200 +@@ -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", ++ 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 (); ++ } ++ } ++ ++ /// ++ /// Connect with the ICEcore Daemon and register event handlers. ++ /// ++ 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 (DaemonNamespace, DaemonPath); ++ // Set up the daemon event handlers ++ deskIceDaemon.Authenticated += OnAuthenticated; ++ } ++ } ++} +diff -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointAccountSetup.cs evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointAccountSetup.cs +--- evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointAccountSetup.cs 1970-01-01 01:00:00.000000000 +0100 ++++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointAccountSetup.cs 2009-07-22 13:20:43.000000000 +0200 +@@ -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 -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointSource.cs evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointSource.cs +--- evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointSource.cs 1970-01-01 01:00:00.000000000 +0100 ++++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointSource.cs 2009-07-22 13:20:43.000000000 +0200 +@@ -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 groupsToRemove = new List (); ++ 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 -ruN evolution-2.27.4.1/ui/evolution.xml evolution-2.27.4.1.patched//ui/evolution.xml +--- evolution-2.27.4.1/ui/evolution.xml 2009-07-13 09:45:14.000000000 +0200 ++++ evolution-2.27.4.1.patched//ui/evolution.xml 2009-07-22 13:20:43.000000000 +0200 +@@ -66,6 +66,8 @@ + + + ++ ++ + + + diff --git a/sp-meetingworkspace-ui.patch b/sp-meetingworkspace-ui.patch new file mode 100644 index 0000000..932dbfc --- /dev/null +++ b/sp-meetingworkspace-ui.patch @@ -0,0 +1,945 @@ +Index: evolution-2.27.2/calendar/gui/dialogs/comp-editor.c +=================================================================== +--- evolution-2.27.2.orig/calendar/gui/dialogs/comp-editor.c ++++ evolution-2.27.2/calendar/gui/dialogs/comp-editor.c +@@ -63,6 +63,7 @@ + #include "../e-cal-popup.h" + #include "../calendar-config-keys.h" + #include "cal-attachment-select-file.h" ++#include "../e-cal-event.h" + #include "widgets/misc/e-attachment-view.h" + #include "widgets/misc/e-attachment-paned.h" + +@@ -100,6 +101,7 @@ struct _CompEditorPrivate { + /* Manages menus and toolbars */ + GtkUIManager *ui_manager; + ++ GtkWidget *vbox; + gchar *summary; + + guint32 attachment_bar_visible : 1; +@@ -1606,11 +1608,11 @@ comp_editor_init (CompEditor *editor) + + container = GTK_WIDGET (editor); + +- widget = gtk_vbox_new (FALSE, 0); +- gtk_container_add (GTK_CONTAINER (container), widget); +- gtk_widget_show (widget); ++ priv->vbox = gtk_vbox_new (FALSE, 0); ++ gtk_container_add (GTK_CONTAINER (editor), priv->vbox); ++ gtk_widget_show (priv->vbox); + +- container = widget; ++ container = priv->vbox; + + widget = comp_editor_get_managed_widget (editor, "/main-menu"); + gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0); +@@ -1955,6 +1957,22 @@ comp_editor_get_ui_manager (CompEditor * + return editor->priv->ui_manager; + } + ++GtkWidget * ++comp_editor_get_vbox (CompEditor *editor) ++{ ++ g_return_val_if_fail (IS_COMP_EDITOR (editor), NULL); ++ ++ return editor->priv->vbox; ++} ++ ++GtkNotebook * ++comp_editor_get_notebook (CompEditor *editor) ++{ ++ g_return_val_if_fail (IS_COMP_EDITOR (editor), NULL); ++ ++ return editor->priv->notebook; ++} ++ + GtkAction * + comp_editor_get_action (CompEditor *editor, + const gchar *action_name) +@@ -2112,9 +2130,15 @@ comp_editor_append_page (CompEditor *edi + + priv->pages = g_list_append (priv->pages, page); + +- if (add) ++ if (add){ + gtk_notebook_append_page (priv->notebook, page_widget, label_widget); + ++ ECalEvent *ec_event = e_cal_event_peek (); ++ ECalEventTargetCompEditor *target; ++ target = e_cal_event_target_comp_editor (ec_event, editor); ++ e_event_emit ((EEvent *) ec_event, "editor.append", (EEventTarget *) target); ++ } ++ + /* Listen for things happening on the page */ + g_signal_connect_swapped ( + page, "dates_changed", +Index: evolution-2.27.2/calendar/gui/dialogs/event-editor.c +=================================================================== +--- evolution-2.27.2.orig/calendar/gui/dialogs/event-editor.c ++++ evolution-2.27.2/calendar/gui/dialogs/event-editor.c +@@ -38,6 +38,7 @@ + #include + #include + ++#include "../e-cal-event.h" + #include "event-page.h" + #include "recurrence-page.h" + #include "schedule-page.h" +@@ -65,7 +66,7 @@ static const gchar *ui = + "" + " " + " " +-" " ++" " + " " + " " + " " +@@ -103,6 +104,17 @@ static gboolean event_editor_send_comp ( + + G_DEFINE_TYPE (EventEditor, event_editor, TYPE_COMP_EDITOR) + ++ ++CompEditorPage* ++event_editor_get_event_page (CompEditor *editor) ++{ ++ EventEditorPrivate *priv; ++ ++ priv = EVENT_EDITOR_GET_PRIVATE (editor); ++ ++ return priv->event_page; ++} ++ + static void + create_schedule_page (CompEditor *editor) + { +@@ -334,6 +346,11 @@ event_editor_constructor (GType type, + event_page_set_meeting (priv->event_page, TRUE); + priv->meeting_shown=TRUE; + } ++ ++ ECalEvent *ec_event = e_cal_event_peek (); ++ ECalEventTargetCompEditor *target; ++ target = e_cal_event_target_comp_editor (ec_event, editor); ++ e_event_emit ((EEvent *) ec_event, "editor.inited", (EEventTarget *) target); + + return object; + } +@@ -496,7 +513,6 @@ event_editor_init (EventEditor *ee) + } + + /* Hide send options. */ +- action = comp_editor_get_action (editor, "send-options"); + gtk_action_set_visible (action, FALSE); + + g_signal_connect ( +Index: evolution-2.27.2/calendar/gui/dialogs/event-editor.h +=================================================================== +--- evolution-2.27.2.orig/calendar/gui/dialogs/event-editor.h ++++ evolution-2.27.2/calendar/gui/dialogs/event-editor.h +@@ -68,6 +68,7 @@ GType event_editor_get_type (void); + CompEditor * event_editor_new (ECal *client, + CompEditorFlags flags); + void event_editor_show_meeting (EventEditor *ee); ++CompEditorPage* event_editor_get_event_page (CompEditor *editor); + + G_END_DECLS + +Index: evolution-2.27.2/calendar/gui/dialogs/event-page.c +=================================================================== +--- evolution-2.27.2.orig/calendar/gui/dialogs/event-page.c ++++ evolution-2.27.2/calendar/gui/dialogs/event-page.c +@@ -714,6 +714,26 @@ create_image_event_box (const char *imag + return box; + } + ++GtkWidget * ++event_page_get_toplevel_widget (CompEditorPage *page) ++{ ++ EventPagePrivate *priv; ++ ++ priv = EVENT_PAGE_GET_PRIVATE (page); ++ ++ return priv->main; ++} ++ ++GtkWidget * ++get_event_page_widget (EventPage *epage) ++{ ++ EventPagePrivate *priv; ++ ++ priv = EVENT_PAGE_GET_PRIVATE (epage); ++ ++ return priv->hour_selector; ++} ++ + static void + sensitize_widgets (EventPage *epage) + { +Index: evolution-2.27.2/calendar/gui/dialogs/event-page.h +=================================================================== +--- evolution-2.27.2.orig/calendar/gui/dialogs/event-page.h ++++ evolution-2.27.2/calendar/gui/dialogs/event-page.h +@@ -110,6 +110,8 @@ void event_page_add_attendee (EventPag + EMeetingAttendee *attendee); + void event_page_remove_all_attendees (EventPage *epage); + ++GtkWidget * get_event_page_widget (EventPage *epage); ++ + G_END_DECLS + + #endif +Index: evolution-2.27.2/calendar/gui/e-cal-event.c +=================================================================== +--- evolution-2.27.2.orig/calendar/gui/e-cal-event.c ++++ evolution-2.27.2/calendar/gui/e-cal-event.c +@@ -103,6 +103,16 @@ e_cal_event_target_new_component (ECalEv + return t; + } + ++ECalEventTargetCompEditor * ++e_cal_event_target_comp_editor (ECalEvent *ec_event, struct _CompEditor *editor) ++{ ++ ECalEventTargetCompEditor *t = e_event_target_new (&ec_event->event, E_CAL_EVENT_TARGET_COMP_EDITOR, sizeof (*t)); ++ ++ t->editor = g_object_ref (editor); ++ ++ return t; ++} ++ + /* ********************************************************************** */ + + static void *eceh_parent_class; +@@ -112,11 +122,18 @@ static const EEventHookTargetMask eceh_c + { NULL }, + }; + ++static const EEventHookTargetMask eceh_compeditor_masks[] = { ++ { "inited", E_CAL_EVENT_COMPEDITOR_INITED }, ++ { NULL }, ++}; ++ + static const EEventHookTargetMap eceh_targets[] = { + { "component", E_CAL_EVENT_TARGET_COMPONENT, eceh_component_masks }, ++ { "compeditor", E_CAL_EVENT_TARGET_COMP_EDITOR, eceh_compeditor_masks }, + { NULL }, + }; + ++ + static void + eceh_finalize (GObject *o) + { +Index: evolution-2.27.2/calendar/gui/e-cal-event.h +=================================================================== +--- evolution-2.27.2.orig/calendar/gui/e-cal-event.h ++++ evolution-2.27.2/calendar/gui/e-cal-event.h +@@ -37,7 +37,8 @@ typedef struct _ECalEvent ECalEvent; + typedef struct _ECalEventClass ECalEventClass; + + enum _e_cal_event_target_t { +- E_CAL_EVENT_TARGET_COMPONENT ++ E_CAL_EVENT_TARGET_COMPONENT, ++ E_CAL_EVENT_TARGET_COMP_EDITOR + }; + + /* Flags that describe TARGET_COMPONENT */ +@@ -45,6 +46,11 @@ enum { + E_CAL_EVENT_COMPONENT_MIGRATION = 1 << 0 + }; + ++ ++enum { ++ E_CAL_EVENT_COMPEDITOR_INITED = 1 << 0, ++}; ++ + typedef struct _ECalEventTargetComponent ECalEventTargetComponent; + + struct _ECalEventTargetComponent { +@@ -53,6 +59,14 @@ struct _ECalEventTargetComponent { + struct _CalendarComponent *component; + }; + ++ ++typedef struct _ECalEventTargetCompEditor ECalEventTargetCompEditor; ++ ++struct _ECalEventTargetCompEditor { ++ EEventTarget target; ++ struct _CompEditor *editor; ++}; ++ + struct _ECalEvent { + EEvent event; + +@@ -66,6 +80,7 @@ struct _ECalEventClass { + GType e_cal_event_get_type (void); + ECalEvent* e_cal_event_peek (void); + ECalEventTargetComponent* e_cal_event_target_new_component (ECalEvent *ece, struct _CalendarComponent *component, guint32 flags); ++ECalEventTargetCompEditor * e_cal_event_target_comp_editor (ECalEvent *ec_event, struct _CompEditor *editor); + + /* ********************************************************************** */ + +Index: evolution-2.27.2/plugins/sharepoint-features/Makefile.am +=================================================================== +--- /dev/null ++++ evolution-2.27.2/plugins/sharepoint-features/Makefile.am +@@ -0,0 +1,40 @@ ++INCLUDES = \ ++ -I$(top_srcdir) \ ++ -I$(top_builddir)/shell \ ++ -I$(top_srcdir)/widgets \ ++ -I$(top_srcdir)/widgets/misc \ ++ -I$(top_builddir)/calendar/gui \ ++ -I$(top_builddir)/calendar/gui/dialogs \ ++ $(EVOLUTION_CALENDAR_CFLAGS) \ ++ -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ ++ -DCONNECTOR_GLADEDIR=\""$(gladedir)"\" \ ++ $(SOURCE_SEL_CFLAGS) ++ ++ ++@EVO_PLUGIN_RULE@ ++ ++plugin_DATA = \ ++ org-gnome-sharepoint-features.eplug ++ ++plugin_LTLIBRARIES = liborg-gnome-sharepoint-features.la ++ ++liborg_gnome_sharepoint_features_la_SOURCES = \ ++ meeting-workspace.c ++ ++liborg_gnome_sharepoint_features_la_LIBADD = \ ++ $(top_builddir)/e-util/libeutil.la \ ++ $(top_builddir)/calendar/gui/libevolution-calendar.la \ ++ $(top_builddir)/widgets/misc/libemiscwidgets.la \ ++ $(NO_UNDEFINED_REQUIRED_LIBS) \ ++ $(EVOLUTION_CALENDAR_LIBS) ++liborg_gnome_sharepoint_features_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED) ++ ++glade_DATA = meetingworkspaces.glade ++ ++EXTRA_DIST = \ ++ org-gnome-sharepoint-features.eplug.xml \ ++ $(glade_DATA) ++ ++BUILT_SOURCES = org-gnome-sharepoint-features.eplug ++ ++CLEANFILES = $(BUILT_SOURCES) +Index: evolution-2.27.2/plugins/sharepoint-features/meetingworkspaces.glade +=================================================================== +--- /dev/null ++++ evolution-2.27.2/plugins/sharepoint-features/meetingworkspaces.glade +@@ -0,0 +1,324 @@ ++ ++ ++ ++ ++ ++ ++ True ++ Meeting Workspace ++ GTK_WINDOW_TOPLEVEL ++ GTK_WIN_POS_NONE ++ False ++ True ++ False ++ True ++ False ++ False ++ GDK_WINDOW_TYPE_HINT_DIALOG ++ GDK_GRAVITY_NORTH_WEST ++ True ++ False ++ True ++ ++ ++ ++ True ++ False ++ 0 ++ ++ ++ ++ True ++ GTK_BUTTONBOX_END ++ ++ ++ ++ True ++ True ++ True ++ gtk-cancel ++ True ++ GTK_RELIEF_NORMAL ++ True ++ -6 ++ ++ ++ ++ ++ ++ True ++ True ++ True ++ gtk-ok ++ True ++ GTK_RELIEF_NORMAL ++ True ++ -5 ++ ++ ++ ++ ++ 0 ++ False ++ True ++ GTK_PACK_END ++ ++ ++ ++ ++ ++ 12 ++ True ++ False ++ 12 ++ ++ ++ ++ True ++ True ++ C_reate meeting workspace ++ True ++ GTK_RELIEF_NORMAL ++ True ++ False ++ False ++ True ++ ++ ++ 0 ++ False ++ False ++ ++ ++ ++ ++ ++ 12 ++ True ++ 2 ++ 2 ++ False ++ 12 ++ 12 ++ ++ ++ ++ True ++ T_itle: ++ True ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0 ++ 0.5 ++ 0 ++ 0 ++ title-entry ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ 0 ++ 1 ++ fill ++ ++ ++ ++ ++ ++ ++ True ++ T_emplate: ++ True ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ 1 ++ 1 ++ 2 ++ fill ++ ++ ++ ++ ++ ++ ++ True ++ True ++ True ++ True ++ 0 ++ ++ True ++ ++ False ++ ++ ++ ++ ++ ++ 1 ++ 2 ++ 0 ++ 1 ++ ++ ++ ++ ++ ++ ++ True ++ Basic Meeting Workspace ++Blank Meeting Workspace ++Decision Meeting Workspace ++Social Meeting Workspace ++Multipage Meeting Workspace ++ False ++ True ++ True ++ ++ ++ ++ ++ ++ 1 ++ 2 ++ 1 ++ 2 ++ fill ++ fill ++ ++ ++ ++ ++ 0 ++ True ++ True ++ ++ ++ ++ ++ ++ True ++ True ++ _Link to existing workspace ++ True ++ GTK_RELIEF_NORMAL ++ True ++ False ++ False ++ True ++ create-radio ++ ++ ++ 0 ++ False ++ False ++ ++ ++ ++ ++ ++ 12 ++ True ++ False ++ 12 ++ ++ ++ ++ True ++ Wo_rkspaces: ++ True ++ False ++ GTK_JUSTIFY_LEFT ++ False ++ False ++ 0.5 ++ 0.5 ++ 0 ++ 0 ++ PANGO_ELLIPSIZE_NONE ++ -1 ++ False ++ 0 ++ ++ ++ ++ ++ ++ 0 ++ False ++ False ++ ++ ++ ++ ++ ++ True ++ False ++ True ++ True ++ ++ ++ ++ ++ ++ 0 ++ True ++ True ++ ++ ++ ++ ++ 0 ++ True ++ True ++ ++ ++ ++ ++ 0 ++ True ++ True ++ ++ ++ ++ ++ ++ True ++ True ++ ++ ++ 0 ++ False ++ False ++ ++ ++ ++ ++ ++ ++ +Index: evolution-2.27.2/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml +=================================================================== +--- /dev/null ++++ evolution-2.27.2/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml +@@ -0,0 +1,20 @@ ++ ++ ++ ++ <_description>Plugin to create or link to a meeting workspace ++ ++ ++ ++ ++ ++ ++ ++ +Index: evolution-2.27.2/plugins/sharepoint-features/meeting-workspace.c +=================================================================== +--- /dev/null ++++ evolution-2.27.2/plugins/sharepoint-features/meeting-workspace.c +@@ -0,0 +1,230 @@ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static void action_meeting_workspace (GtkAction *action, EventEditor *editor); ++void org_gnome_meeting_workspace (EPlugin *ep, ECalEventTargetCompEditor *target); ++ ++static const gchar *ui = ++"" ++" " ++" " ++" " ++""; ++ ++static GtkActionEntry meeting_entries[] = { ++ { "meeting-workspace", ++ "stock_people", ++ N_("Meeting Workspace"), ++ NULL, ++ N_("Create or Link to Meeting Workspaces"), ++ G_CALLBACK (action_meeting_workspace) } ++}; ++ ++typedef struct { ++ GtkWidget *dialog; ++ GtkWidget *title_entry; ++ GtkWidget *template_label; ++ GtkWidget *template_combo; ++ GtkWidget *create_radio; ++ GtkWidget *link_radio; ++ GtkWidget *workspace_label; ++ GtkWidget *workspace_combo; ++ GtkWidget *statusbar; ++ gboolean got_workspaces; ++ guint contextid; ++ ++ EventEditor *editor; ++} MeetingWorkspaceWidget; ++ ++static DBusGProxy * ++get_dice_dbus_proxy () ++{ ++ GError *err = NULL; ++ DBusGConnection *conn = dbus_g_bus_get (DBUS_BUS_SESSION, &err); ++ if (!conn) { ++ g_printerr ("Failed to connect: %s\n", err->message); ++ g_error_free (err); ++ return NULL; ++ } ++ ++ return dbus_g_proxy_new_for_name (conn, "Novell.ICEDesktop.Daemon", "/Novell/ICEDesktop/Daemon", ++ "Novell.ICEDesktop.Daemon"); ++} ++ ++static MeetingWorkspaceWidget * ++setup_widgets (void) ++{ ++ char *gladefile; ++ GladeXML *xml; ++ MeetingWorkspaceWidget *mws; ++ ++ gladefile = g_build_filename (EVOLUTION_GLADEDIR, "meetingworkspaces.glade", NULL); ++ xml = glade_xml_new (gladefile, NULL, NULL); ++#define GW(name) glade_xml_get_widget (xml, name) ++ ++ mws = g_new0 (MeetingWorkspaceWidget, 1); ++ mws->dialog = GW("meeting-workspace-dialog"); ++ mws->title_entry = GW("title-entry"); ++ mws->template_label = GW("template-label"); ++ mws->template_combo = GW("template-combo"); ++ mws->create_radio = GW("create-radio"); ++ mws->link_radio = GW("link-radio"); ++ mws->workspace_label = GW("workspaces-label"); ++ mws->workspace_combo = GW("workspaces-combo"); ++ mws->statusbar = GW("statusbar"); ++ ++ return mws; ++} ++ ++static void ++create_toggled_cb (GtkToggleButton *create_radio, gpointer user_data) ++{ ++ gboolean active; ++ MeetingWorkspaceWidget *mws = user_data; ++ ++ active = gtk_toggle_button_get_active (create_radio); ++ ++ gtk_entry_set_editable ((GtkEntry *)mws->title_entry, active); ++ gtk_widget_set_sensitive (mws->template_combo, active); ++} ++ ++static void ++link_toggled_cb (GtkToggleButton *link_radio, gpointer user_data) ++{ ++ gboolean active; ++ MeetingWorkspaceWidget *mws = user_data; ++ ++ active = gtk_toggle_button_get_active (link_radio); ++ gtk_widget_set_sensitive (mws->workspace_combo, active); ++ ++ if (active && !mws->got_workspaces) { ++ gtk_statusbar_push ((GtkStatusbar *)mws->statusbar, mws->contextid, ++ _("Loading Meeting workspaces...")); ++ ++ // Get the meeting workspaces and set them ++ ++ mws->got_workspaces = TRUE; ++ } ++} ++ ++static void ++release_memory (MeetingWorkspaceWidget *mws) ++{ ++ ++} ++ ++static void ++dialog_response_cb (GtkDialog *dialog, int response_id, gpointer user_data) ++{ ++ MeetingWorkspaceWidget *mws = user_data; ++ ++ if (response_id == GTK_RESPONSE_OK) { ++ gboolean active; ++ const char *workspace_url = NULL; ++ ECalComponent *comp; ++ ++ active = gtk_toggle_button_get_active ((GtkToggleButton *) mws->link_radio); ++ ++ if (active) { ++ // Get the workspace from combo box selection ++ } else { ++ // Create the meeting workspace ++ const char *title; ++ ++ title = gtk_entry_get_text ((GtkEntry *) mws->title_entry); ++ ++ if (!title || !*title) { ++ gtk_statusbar_push ((GtkStatusbar *) mws->statusbar, mws->contextid, ++ _("Please set a title and press OK.")); ++ return; ++ } ++ ++ gtk_statusbar_push ((GtkStatusbar *) mws->statusbar, mws->contextid, ++ _("Creating Meeting Workspace. Please wait...")); ++ // Create Meeting Workspace ++ } ++ ++ // Set the workspace url to component ++ comp = comp_editor_get_comp ((CompEditor *) mws->editor); ++ } ++ ++ gtk_widget_destroy (mws->dialog); ++ release_memory (mws); ++} ++ ++static void ++init_widgets (MeetingWorkspaceWidget *mws) ++{ ++ g_signal_connect((mws->create_radio), "toggled", ++ G_CALLBACK (create_toggled_cb), mws); ++ ++ g_signal_connect((mws->link_radio), "toggled", ++ G_CALLBACK (link_toggled_cb), mws); ++ ++ g_signal_connect((mws->dialog), "response", ++ G_CALLBACK (dialog_response_cb), mws); ++ ++ gtk_widget_set_sensitive (mws->workspace_combo, FALSE); ++ ++ gtk_combo_box_set_active ((GtkComboBox *) mws->template_combo, 0); ++ ++ mws->contextid = gtk_statusbar_get_context_id ((GtkStatusbar *)mws->statusbar, "Meeting workspace status"); ++} ++ ++static void ++action_meeting_workspace (GtkAction *action, EventEditor *editor) ++{ ++ MeetingWorkspaceWidget *mws; ++ ++ mws = setup_widgets (); ++ init_widgets (mws); ++ mws->editor = editor; ++ ++ gtk_dialog_run ((GtkDialog *) mws->dialog); ++ g_print ("Clicked meeting workspace \n"); ++} ++ ++void ++org_gnome_meeting_workspace (EPlugin *ep, ECalEventTargetCompEditor *target) ++{ ++ GtkActionGroup *action_group; ++ GtkUIManager *manager; ++ GError *error = NULL; ++ CompEditor *editor = target->editor; ++ CompEditorFlags flags; ++ ECal *client; ++ const char *uri; ++ ++ client = comp_editor_get_client (editor); ++ uri = e_cal_get_uri (client); ++ flags = comp_editor_get_flags (editor); ++ ++ if (!g_str_has_prefix (uri, "sharepoint://")) ++ return; ++ ++ if (!(flags & COMP_EDITOR_MEETING && flags & COMP_EDITOR_NEW_ITEM)) ++ return; ++ ++ action_group = comp_editor_get_action_group (editor, "coordinated"); ++ gtk_action_group_add_actions (action_group, meeting_entries, ++ G_N_ELEMENTS (meeting_entries), editor); ++ ++ manager = comp_editor_get_ui_manager (editor); ++ gtk_ui_manager_add_ui_from_string (manager, ui, -1, &error); ++ if (error != NULL) { ++ g_critical ("%s: %s", G_STRFUNC, error->message); ++ g_error_free (error); ++ } ++} +Index: evolution-2.27.2/configure.ac +=================================================================== +--- evolution-2.27.2.orig/configure.ac ++++ evolution-2.27.2/configure.ac +@@ -965,6 +965,9 @@ if test "x${enable_mono}" = "xyes"; then + evolution-sharp, ndesk-dbus-1.0, ndesk-dbus-glib-1.0]) + AC_SUBST(MONO_PLATFORM_CFLAGS) + AC_SUBST(MONO_PLATFORM_LIBS) ++ PKG_CHECK_MODULES(DBUS, dbus-glib-1) ++ AC_SUBST(DBUS_CFLAGS) ++ AC_SUBST(DBUS_LIBS) + MONO_BASED_PLUGINS="" + + dnl Sharepoint account setup +@@ -976,7 +979,7 @@ if test "x${enable_mono}" = "xyes"; then + PKG_CHECK_MODULES(ICE_DESKTOP, [Novell.IceDesktop, solvent]) + AC_SUBST(ICE_DESKTOP_CFLAGS) + AC_SUBST(ICE_DESKTOP_LIBS) +- MONO_BASED_PLUGINS="$MONO_BASED_PLUGINS sharepoint-account-setup" ++ MONO_BASED_PLUGINS="$MONO_BASED_PLUGINS sharepoint-account-setup sharepoint-features" + fi + fi + AC_SUBST(MONO_CFLAGS) +@@ -2161,6 +2164,7 @@ plugins/tnef-attachments/Makefile + plugins/vcard-inline/Makefile + plugins/webdav-account-setup/Makefile + plugins/sharepoint-account-setup/Makefile ++plugins/sharepoint-features/Makefile + smime/Makefile + smime/lib/Makefile + smime/gui/Makefile diff --git a/sp-process-meetings.diff b/sp-process-meetings.diff new file mode 100644 index 0000000..36df3b8 --- /dev/null +++ b/sp-process-meetings.diff @@ -0,0 +1,440 @@ +commit 18a2f5f1206e7a7583db2b8c47862f79abf13e50 +Author: chenthill +Date: Tue Dec 30 05:00:06 2008 +0530 + + process meetings. + +diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c +index 8d889bd..e1555d8 100644 +--- a/calendar/gui/dialogs/comp-editor.c ++++ b/calendar/gui/dialogs/comp-editor.c +@@ -792,6 +792,13 @@ save_comp (CompEditor *editor) + + e_cal_component_set_attachment_list (priv->comp, + get_attachment_list (editor)); ++ ++ /* Give a chance for plugins to act on the component */ ++ ECalEvent *ec_event = e_cal_event_peek (); ++ ECalEventTargetCompEditor *target; ++ target = e_cal_event_target_comp_editor (ec_event, editor); ++ e_event_emit ((EEvent *) ec_event, "editor.commit", (EEventTarget *) target); ++ + icalcomp = e_cal_component_get_icalcomponent (priv->comp); + /* send the component to the server */ + if (!cal_comp_is_on_server (priv->comp, priv->client)) { +diff --git a/plugins/sharepoint-features/Makefile.am b/plugins/sharepoint-features/Makefile.am +index f101059..9123b66 100644 +--- a/plugins/sharepoint-features/Makefile.am ++++ b/plugins/sharepoint-features/Makefile.am +@@ -19,7 +19,9 @@ plugin_DATA = \ + plugin_LTLIBRARIES = liborg-gnome-sharepoint-features.la + + liborg_gnome_sharepoint_features_la_SOURCES = \ +- meeting-workspace.c ++ process-meeting.c \ ++ comp-commit.c \ ++ meeting-workspace.c + + liborg_gnome_sharepoint_features_la_LIBADD = \ + $(top_builddir)/e-util/libeutil.la \ +@@ -33,6 +35,7 @@ glade_DATA = meetingworkspaces.glade + + EXTRA_DIST = \ + org-gnome-sharepoint-features.eplug.xml \ ++ org-gnome-share-point.error.xml \ + $(glade_DATA) + + BUILT_SOURCES = org-gnome-sharepoint-features.eplug +diff --git a/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml b/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml +index d59db73..3e318fc 100644 +--- a/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml ++++ b/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml +@@ -16,5 +16,19 @@ + target="compeditor" + /> + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/plugins/sharepoint-features/comp-commit.c b/plugins/sharepoint-features/comp-commit.c +new file mode 100644 +index 0000000..b87df4f +--- /dev/null ++++ b/plugins/sharepoint-features/comp-commit.c +@@ -0,0 +1,88 @@ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++void org_gnome_comp_commit (EPlugin *ep, ECalEventTargetCompEditor *target); ++ ++static icaltimezone* ++resolve_tzid_cb (const char *tzid, gpointer data) ++{ ++ ECal *client; ++ icaltimezone *zone = NULL; ++ ++ g_return_val_if_fail (data != NULL, NULL); ++ g_return_val_if_fail (E_IS_CAL (data), NULL); ++ ++ client = E_CAL (data); ++ ++ /* Try to find the builtin timezone first. */ ++ zone = icaltimezone_get_builtin_timezone_from_tzid (tzid); ++ ++ if (!zone) { ++ /* FIXME: Handle errors. */ ++ e_cal_get_timezone (client, tzid, &zone, NULL); ++ } ++ ++ return zone; ++} ++ ++static gboolean ++recur_cb (ECalComponent *comp, time_t start, time_t end, gpointer data) ++{ ++ time_t *end_date = data; ++ ++ *end_date = end; ++ ++ return TRUE; ++} ++ ++void ++org_gnome_comp_commit (EPlugin *ep, ECalEventTargetCompEditor *target) ++{ ++ CompEditor *editor = target->editor; ++ CompEditorFlags flags; ++ ECal *client; ++ ECalComponent *comp; ++ ECalComponentDateTime cdt; ++ icaltimezone *zone = NULL; ++ const char *uri; ++ time_t end_date = -1; ++ ++ client = comp_editor_get_client (editor); ++ uri = e_cal_get_uri (client); ++ flags = comp_editor_get_flags (editor); ++ ++ if (!g_str_has_prefix (uri, "sharepoint://")) ++ return; ++ ++ comp = comp_editor_get_comp (editor); ++ ++ if (!e_cal_component_has_recurrences (comp)) ++ return; ++ ++ e_cal_component_get_dtstart (comp, &cdt); ++ if (cdt.tzid != NULL) { ++ /* FIXME Will e_cal_get_timezone really not return builtin zones? */ ++ if (!e_cal_get_timezone (client, cdt.tzid, &zone, NULL)) ++ zone = icaltimezone_get_builtin_timezone_from_tzid (cdt.tzid); ++ } ++ e_cal_component_free_datetime (&cdt); ++ ++ e_cal_recur_generate_instances (comp, -1, -1, ++ recur_cb, &end_date, ++ resolve_tzid_cb, ++ client, zone); ++ ++ char *end = g_strdup_printf ("%ld",end_date); ++ e_cal_component_set_x_prop (comp, "X-SP-RECUR-ENDDATE", end); ++ g_free (end); ++ g_print ("DEBUG: the component to be saved is %s \n", e_cal_component_get_as_string (comp)); ++} +diff --git a/plugins/sharepoint-features/org-gnome-share-point.error.xml b/plugins/sharepoint-features/org-gnome-share-point.error.xml +new file mode 100644 +index 0000000..d656dea +--- /dev/null ++++ b/plugins/sharepoint-features/org-gnome-share-point.error.xml +@@ -0,0 +1,5 @@ ++ ++ ++ ++ ++ +diff --git a/plugins/sharepoint-features/process-meeting.c b/plugins/sharepoint-features/process-meeting.c +new file mode 100644 +index 0000000..917166b +--- /dev/null ++++ b/plugins/sharepoint-features/process-meeting.c +@@ -0,0 +1,258 @@ ++/* ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) version 3. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with the program; if not, see ++ * ++ * ++ * Authors: ++ * Chenthill Palanisamy (pchenthill@novell.com) ++ * ++ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) ++ * ++ */ ++ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++ ++typedef struct { ++ ECal *ecal; ++ icalcomponent *icalcomp; ++} ReceiveData; ++ ++ECalendarView *c_view; ++ ++void org_gnome_process_meeting (EPlugin *ep, ECalPopupTargetSelect *target); ++static void on_accept_meeting (EPopup *ep, EPopupItem *pitem, void *data); ++static void on_accept_meeting_tentative (EPopup *ep, EPopupItem *pitem, void *data); ++static void on_decline_meeting (EPopup *ep, EPopupItem *pitem, void *data); ++ ++static EPopupItem popup_items[] = { ++{ E_POPUP_ITEM, "41.accept", N_("Accept"), on_accept_meeting, NULL, GTK_STOCK_APPLY, 0, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_MEETING}, ++{ E_POPUP_ITEM, "42.accept", N_("Accept Tentatively"), on_accept_meeting_tentative, NULL, GTK_STOCK_DIALOG_QUESTION, 0, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_MEETING}, ++{ E_POPUP_ITEM, "43.decline", N_("Decline"), on_decline_meeting, NULL, GTK_STOCK_CANCEL, 0, E_CAL_POPUP_SELECT_NOTEDITING} ++}; ++ ++static void ++popup_free (EPopup *ep, GSList *items, void *data) ++{ ++ g_slist_free (items); ++ items = NULL; ++} ++ ++void ++org_gnome_process_meeting (EPlugin *ep, ECalPopupTargetSelect *target) ++{ ++ GSList *menus = NULL; ++ GList *selected; ++ int i = 0; ++ static int first = 0; ++ const char *uri = NULL; ++ ECalendarView *cal_view = E_CALENDAR_VIEW (target->target.widget); ++ ++ c_view = cal_view; ++ selected = e_calendar_view_get_selected_events (cal_view); ++ if (selected) { ++ ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data; ++ ++ uri = e_cal_get_uri (event->comp_data->client); ++ } else ++ return; ++ ++ if (!uri) ++ return; ++ ++ if (! g_strrstr (uri, "sharepoint://")) ++ return ; ++ ++ /* for translation*/ ++ if (!first) { ++ popup_items[0].label = _(popup_items[0].label); ++ } ++ ++ first++; ++ ++ for (i = 0; i < sizeof (popup_items) / sizeof (popup_items[0]); i++) ++ menus = g_slist_prepend (menus, &popup_items[i]); ++ ++ e_popup_add_items (target->target.popup, menus, NULL, popup_free, NULL); ++} ++ ++static void ++finalize_receive_data (ReceiveData *r_data) ++{ ++ if (r_data->ecal) { ++ g_object_unref (r_data->ecal); ++ r_data->ecal = NULL; ++ } ++ ++ if (r_data->ecal) { ++ icalcomponent_free (r_data->icalcomp); ++ r_data->icalcomp = NULL; ++ } ++ ++ g_free (r_data); ++} ++ ++static gboolean ++receive_objects (gpointer data) ++{ ++ GError *error = NULL; ++ ReceiveData *r_data = data; ++ ++ ++ icalcomponent_set_method (r_data->icalcomp, ICAL_METHOD_REQUEST); ++ ++ if (!e_cal_receive_objects (r_data->ecal, r_data->icalcomp, &error)) { ++ /* FIXME show an error dialog */ ++ g_error_free (error); ++ } ++ ++ finalize_receive_data (r_data); ++ return TRUE; ++} ++ ++static icalproperty * ++find_attendee (icalcomponent *ical_comp, const char *address) ++{ ++ icalproperty *prop; ++ ++ if (address == NULL) ++ return NULL; ++ ++ for (prop = icalcomponent_get_first_property (ical_comp, ICAL_ATTENDEE_PROPERTY); ++ prop != NULL; ++ prop = icalcomponent_get_next_property (ical_comp, ICAL_ATTENDEE_PROPERTY)) { ++ icalvalue *value; ++ const char *attendee; ++ char *text; ++ ++ value = icalproperty_get_value (prop); ++ if (!value) ++ continue; ++ ++ attendee = icalvalue_get_string (value); ++ ++ text = g_strdup (itip_strip_mailto (attendee)); ++ text = g_strstrip (text); ++ if (!g_ascii_strcasecmp (address, text)) { ++ g_free (text); ++ break; ++ } ++ g_free (text); ++ } ++ ++ return prop; ++} ++static void ++change_status (icalcomponent *ical_comp, const char *address, icalparameter_partstat status) ++{ ++ icalproperty *prop; ++ ++ prop = find_attendee (ical_comp, address); ++ if (prop) { ++ icalparameter *param; ++ ++ icalproperty_remove_parameter (prop, ICAL_PARTSTAT_PARAMETER); ++ param = icalparameter_new_partstat (status); ++ icalproperty_add_parameter (prop, param); ++ } else { ++ icalparameter *param; ++ ++ prop = icalproperty_new_attendee (address); ++ icalcomponent_add_property (ical_comp, prop); ++ ++ param = icalparameter_new_role (ICAL_ROLE_OPTPARTICIPANT); ++ icalproperty_add_parameter (prop, param); ++ ++ param = icalparameter_new_partstat (status); ++ icalproperty_add_parameter (prop, param); ++ } ++} ++ ++static void ++process_meeting (ECalendarView *cal_view, icalparameter_partstat status) ++{ ++ GList *selected; ++ icalcomponent *clone; ++ ++ selected = e_calendar_view_get_selected_events (cal_view); ++ if (selected) { ++ ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data; ++ ECalComponent *comp = e_cal_component_new (); ++ ReceiveData *r_data = g_new0 (ReceiveData, 1); ++ gboolean recurring = FALSE; ++ GThread *thread = NULL; ++ GError *error = NULL; ++ char *address = NULL; ++ ++ e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp)); ++ address = itip_get_comp_attendee (comp, event->comp_data->client); ++ ++ if (e_cal_component_has_recurrences (comp) || e_cal_component_is_instance (comp)) ++ recurring = TRUE; ++ ++ /* Free comp */ ++ g_object_unref (comp); ++ comp = NULL; ++ ++ clone = icalcomponent_new_clone (event->comp_data->icalcomp); ++ change_status (clone, address, status); ++ ++ r_data->ecal = g_object_ref (event->comp_data->client); ++ r_data->icalcomp = clone; ++ ++ g_print ("The updated meeting is %s \n", icalcomponent_as_ical_string (clone)); ++ ++ thread = g_thread_create ((GThreadFunc) receive_objects, r_data , FALSE, &error); ++ if (!thread) { ++ g_warning (G_STRLOC ": %s", error->message); ++ g_error_free (error); ++ } ++ } ++} ++ ++/*FIXME the data does not give us the ECalendarView object. ++ we should remove the global c_view variable once we get it from the data*/ ++static void ++on_accept_meeting (EPopup *ep, EPopupItem *pitem, void *data) ++{ ++ ECalendarView *cal_view = c_view; ++ ++ process_meeting (cal_view, ICAL_PARTSTAT_ACCEPTED); ++} ++static void ++on_accept_meeting_tentative (EPopup *ep, EPopupItem *pitem, void *data) ++{ ++ ECalendarView *cal_view = c_view; ++ ++ process_meeting (cal_view, ICAL_PARTSTAT_TENTATIVE); ++} ++ ++static void ++on_decline_meeting (EPopup *ep, EPopupItem *pitem, void *data) ++{ ++ ECalendarView *cal_view = c_view; ++ ++ process_meeting (cal_view, ICAL_PARTSTAT_DECLINED); ++} diff --git a/sp-tasks-setup.diff b/sp-tasks-setup.diff new file mode 100644 index 0000000..5dc6a5b --- /dev/null +++ b/sp-tasks-setup.diff @@ -0,0 +1,236 @@ +diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c +index c97f61c..16fa928 100644 +--- a/calendar/gui/e-cal-model.c ++++ b/calendar/gui/e-cal-model.c +@@ -1413,6 +1413,12 @@ ensure_dates_are_in_default_zone (icalcomponent *icalcomp) + dt = icaltime_convert_to_zone (dt, zone); + icalcomponent_set_dtend (icalcomp, dt); + } ++ ++ dt = icalcomponent_get_due (icalcomp); ++ if (dt.is_utc) { ++ dt = icaltime_convert_to_zone (dt, zone); ++ icalcomponent_set_due (icalcomp, dt); ++ } + } + + static void +diff --git a/plugins/sharepoint-account-setup/SharepointAccount.cs b/plugins/sharepoint-account-setup/SharepointAccount.cs +index 5009e98..61959ac 100644 +--- a/plugins/sharepoint-account-setup/SharepointAccount.cs ++++ b/plugins/sharepoint-account-setup/SharepointAccount.cs +@@ -38,10 +38,10 @@ namespace Sharepoint + initialized = true; + } + ++ ConnectToICEcoreDaemon (); + + sessionBus = Bus.Session.GetObject ("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) +@@ -49,7 +49,7 @@ namespace Sharepoint + Bus.Session.StartServiceByName (DaemonNamespace); + } + +- ConnectToICEcoreDaemon (); ++ sessionBus.NameOwnerChanged += OnDBusNameOwnerChanged; + try { deskIceDaemon.CheckAuthentication (String.Empty); } + catch (NotAuthenticatedException) + { return; } +@@ -70,7 +70,7 @@ namespace Sharepoint + public void DeleteAccount () + { + // we remove all share calendars. We currently support creating only one sharepoint account +- SharepointSource spSource = new SharepointSource (CalSourceType.Event, null, null); ++ SharepointSource spSource = new SharepointSource (null, null); + spSource.DeleteSources (); + spSource.Sync (); + } +@@ -89,7 +89,7 @@ namespace Sharepoint + { + Console.WriteLine ("Getting folders "); + AccountInfo accountInfo = deskIceDaemon.GetDefaultAccountInfo (); +- SharepointSource spSource = new SharepointSource (CalSourceType.Event, accountInfo.username, ++ SharepointSource spSource = new SharepointSource (accountInfo.username, + accountInfo.hostUrl); + + if (spSource.AccountExists) { +@@ -100,20 +100,17 @@ namespace Sharepoint + FileInfo [] workspaces = deskIceDaemon.EnumerateWorkspaces (); + foreach (FileInfo workspace in workspaces) + { +- FileInfo[] folders = null; ++ Folder[] folders = null; + +- if (spSource.srcType == CalSourceType.Event) +- folders = deskIceDaemon.GetCalendarFolders (string.Empty, workspace.Id); +- // else get task folders ++ folders = deskIceDaemon.GetCalendarFolders (string.Empty, workspace.Id); + +- + if (folders.Length == 0) + continue; + + spSource.CreateSources (workspace, folders); + } ++ + spSource.Sync (); +- Console.WriteLine ("******* Got folders "); + backgroundThread = null; + RemoveHandlers (); + } +diff --git a/plugins/sharepoint-account-setup/SharepointSource.cs b/plugins/sharepoint-account-setup/SharepointSource.cs +index c61fcf0..e9dad79 100644 +--- a/plugins/sharepoint-account-setup/SharepointSource.cs ++++ b/plugins/sharepoint-account-setup/SharepointSource.cs +@@ -16,33 +16,36 @@ 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; ++ SourceList CalsrcList; ++ SourceList TasksrcList; + readonly string baseUri = "sharepoint://"; + string username; + string hostUrl; + +- public SharepointSource(CalSourceType type, string userName, string hosturl) ++ public SharepointSource(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); ++ CalsrcList = new SourceList (calPath); ++ TasksrcList = new SourceList (taskPath); + } + + public bool AccountExists + { + get + { +- foreach (SourceGroup group in srcList.Groups) ++ foreach (SourceGroup group in CalsrcList.Groups) ++ { ++ if (group.BaseUri == baseUri) ++ return true; ++ } ++ ++ foreach (SourceGroup group in TasksrcList.Groups) + { + if (group.BaseUri == baseUri) + return true; +@@ -52,45 +55,85 @@ namespace Sharepoint + } + } + +- public void CreateSources (FileInfo workspace, FileInfo [] folders) ++ public void CreateSources (FileInfo workspace, Folder [] folders) + { +- SourceGroup group = new SourceGroup (workspace.DisplayName, baseUri); ++ SourceGroup calGroup = new SourceGroup (workspace.DisplayName, baseUri); ++ SourceGroup taskGroup = new SourceGroup (workspace.DisplayName, baseUri); ++ bool addCalGroup = false; ++ bool addTaskGroup = false; + +- foreach (FileInfo folder in folders) ++ foreach (Folder folder in folders) + { +- Console.WriteLine (workspace.DisplayName + " folder " + folder.DisplayName); +- string relativeUri = hostUrl + ":" + folder.Id; +- Source source= new Source (folder.DisplayName, relativeUri); ++ Console.WriteLine (workspace.DisplayName + " folder " + folder.Title + " " + folder.Type); ++ string relativeUri = hostUrl + ":" + folder.ID; ++ Source source= new Source (folder.Title, relativeUri); + source.SetProperty ("username", username); + source.SetProperty ("workspaceid", workspace.Id); +- source.SetProperty ("Id", folder.Id); ++ source.SetProperty ("Id", folder.ID); + source.SetProperty ("Auth","True"); +- group.AddSource (source, -1); ++ source.SetProperty ("delete","no"); ++ if (folder.Type == FolderType.Task) ++ { ++ taskGroup.AddSource (source, -1); ++ addTaskGroup = true; ++ } else if (folder.Type == FolderType.Calendar) ++ { ++ calGroup.AddSource (source, -1); ++ addCalGroup = true; ++ } ++ } ++ ++ ++ if (addCalGroup) ++ { ++ calGroup.SetProperty ("username", username); ++ CalsrcList.AddGroup (calGroup, -1); ++ } ++ ++ if (addTaskGroup) ++ { ++ taskGroup.SetProperty ("username", username); ++ TasksrcList.AddGroup (taskGroup, -1); + } +- group.SetProperty ("username", username); +- srcList.AddGroup (group, -1); + } + + public void Sync () + { +- srcList.Sync (); ++ CalsrcList.Sync (); ++ TasksrcList.Sync (); + } + + public void DeleteSources () + { +- List groupsToRemove = new List (); +- foreach (SourceGroup group in srcList.Groups) ++ List calGroupsToRemove = new List (); ++ foreach (SourceGroup group in CalsrcList.Groups) ++ { ++ if (group.BaseUri.StartsWith (baseUri)) ++ { ++ /// Currently we remove all sharepoint calendars ++ calGroupsToRemove.Add (group); ++ } ++ } ++ ++ foreach (SourceGroup group in calGroupsToRemove) ++ { ++ CalsrcList.RemoveGroup (group); ++ } ++ ++ List TaskGroupsToRemove = new List (); ++ ++ foreach (SourceGroup group in TasksrcList.Groups) + { + if (group.BaseUri.StartsWith (baseUri)) + { + /// Currently we remove all sharepoint calendars +- groupsToRemove.Add (group); ++ TaskGroupsToRemove.Add (group); + } + } + +- foreach (SourceGroup group in groupsToRemove) ++ foreach (SourceGroup group in TaskGroupsToRemove) + { +- srcList.RemoveGroup (group); ++ TasksrcList.RemoveGroup (group); + } + } + } From 06a875248b87390852c9f9874961ebb5451a6ebe23561371adf3b18b1e949a58 Mon Sep 17 00:00:00 2001 From: OBS User buildservice-autocommit Date: Fri, 27 Aug 2010 19:59:54 +0000 Subject: [PATCH 5/5] Updating link to change in openSUSE:Factory/evolution revision 90.0 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/evolution?expand=0&rev=f78440c6ba1280b15f3ee3738af810c8 --- evolution-2.31.6.tar.bz2 | 3 - evolution-2.31.90.tar.bz2 | 3 + evolution-no-dbus-glib.patch | 42 -- evolution.changes | 47 ++ evolution.spec | 23 +- sharepoint-account-setup.patch | 514 ------------------ sp-meetingworkspace-ui.patch | 945 --------------------------------- sp-process-meetings.diff | 440 --------------- sp-tasks-setup.diff | 236 -------- 9 files changed, 52 insertions(+), 2201 deletions(-) delete mode 100644 evolution-2.31.6.tar.bz2 create mode 100644 evolution-2.31.90.tar.bz2 delete mode 100644 evolution-no-dbus-glib.patch delete mode 100644 sharepoint-account-setup.patch delete mode 100644 sp-meetingworkspace-ui.patch delete mode 100644 sp-process-meetings.diff delete mode 100644 sp-tasks-setup.diff diff --git a/evolution-2.31.6.tar.bz2 b/evolution-2.31.6.tar.bz2 deleted file mode 100644 index 21901ed..0000000 --- a/evolution-2.31.6.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a4c36b0773d810cf234ba466904da180af4ea35f270a87d0f7091d938f141d0b -size 31567308 diff --git a/evolution-2.31.90.tar.bz2 b/evolution-2.31.90.tar.bz2 new file mode 100644 index 0000000..52aa35e --- /dev/null +++ b/evolution-2.31.90.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3a667c80cb616552cf67b32e81b5cbe4435a8e3d6de6ca07ae4f41370b6bc58 +size 31784062 diff --git a/evolution-no-dbus-glib.patch b/evolution-no-dbus-glib.patch deleted file mode 100644 index 922d835..0000000 --- a/evolution-no-dbus-glib.patch +++ /dev/null @@ -1,42 +0,0 @@ -commit 5c49c70d5568a9a68daa5facaa531ab317d1f005 -Author: Fridrich Štrba -Date: Thu Aug 5 01:01:19 2010 +0200 - - We are not using dbus-glib anymore, don't call dbus_g_thread_init - -diff --git a/calendar/gui/alarm-notify/notify-main.c b/calendar/gui/alarm-notify/notify-main.c -index 2696119..799229a 100644 ---- a/calendar/gui/alarm-notify/notify-main.c -+++ b/calendar/gui/alarm-notify/notify-main.c -@@ -57,7 +57,6 @@ main (gint argc, gchar **argv) - textdomain (GETTEXT_PACKAGE); - - g_thread_init (NULL); -- dbus_g_thread_init (); - - #ifdef G_OS_WIN32 - path = g_build_path (";", _e_get_bindir (), g_getenv ("PATH"), NULL); -diff --git a/capplet/anjal-settings-main.c b/capplet/anjal-settings-main.c -index e789f91..ec1019d 100644 ---- a/capplet/anjal-settings-main.c -+++ b/capplet/anjal-settings-main.c -@@ -225,7 +225,6 @@ main (gint argc, gchar *argv[]) - - if (!g_thread_get_initialized ()) - g_thread_init (NULL); -- dbus_g_thread_init (); - - client = gconf_client_get_default(); - -diff --git a/shell/main.c b/shell/main.c -index a525262..82d6e6a 100644 ---- a/shell/main.c -+++ b/shell/main.c -@@ -492,7 +492,6 @@ main (gint argc, gchar **argv) - g_type_init (); - if (!g_thread_get_initialized ()) - g_thread_init (NULL); -- dbus_g_thread_init (); - - #ifdef G_OS_WIN32 - path = g_build_path (";", _e_get_bindir (), g_getenv ("PATH"), NULL); diff --git a/evolution.changes b/evolution.changes index d7eac94..e437f21 100644 --- a/evolution.changes +++ b/evolution.changes @@ -1,3 +1,50 @@ +------------------------------------------------------------------- +Tue Aug 17 10:58:11 CEST 2010 - dimstar@opensuse.org + +- Update to version 2.31.90: + + ESelectionModel, ECanvas, EMsgComposer, EMfolderTreeModel, + EMFormat cleanups. + + Pass an EShell to EMsgComposer instances. + + Pause timline instead of stop. It hides the search animation + texture. + + Add keybindings to tab. + + Remove select-on-focus hack, and replace with new skip-a-parent + chaining hack + + Ensure widgets are registered, without relying on config dialog + setup at startup. + + build: Add libemformat to LDADD for evolution-settings + + Add Histogram of mail trend in clutter tab and enable DnD of + tabs + + Change em_format_redraw() to em_format_queue_redraw(). + + Defer the load / creation of configuration UI with changes to + e_preferences_window to take factory callbacks and store a + reference to the shell. + + Execute calendar search post startup, not + + Make the intention of /tmp more explicit, and rescue people who + happen to have evolution .po files in /tmp from a sad fate + + bgo#624896: Missing icons in table properties + + bgo#605737: Appointment reminder shows icons on buttons + + bgo#624913: Disallow drag-and-drop within the same attachment + bar + + bgo#323142: Signature missing when handling mailto: URI with + body part + + bgo#626724: Folder tree mistakes "mark as unread" as new mail + + bgo#271691: Add a way to view all attachments inline + + bgo#626453: Show attachments inline when printing + + bgo#626090: Only set -fno-strict-aliasing for GCC + + bgo#626059: Welcome messages has incorrect links + + bgo#625847: make signatures work again. +- Drop evolution-no-dbus-glib.patch: fixed upstream. + +------------------------------------------------------------------- +Thu Aug 12 21:23:59 UTC 2010 - dimstar@opensuse.org + +- Finally drop unmaintained sharepoint patches (came from SLE) + + sharepoint-account-setup.patch + + sp-meetingworkspace-ui.patch + + sp-process-meetings.diff + + sp-tasks-setup.diff + ------------------------------------------------------------------- Fri Aug 6 02:11:42 CEST 2010 - vuntz@opensuse.org diff --git a/evolution.spec b/evolution.spec index 947c8b1..066c8ca 100644 --- a/evolution.spec +++ b/evolution.spec @@ -1,5 +1,5 @@ # -# spec file for package evolution (Version 2.31.6) +# spec file for package evolution (Version 2.31.90) # # Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -57,13 +57,11 @@ License: LGPLv2.0 ; LGPLv3 Group: Productivity/Networking/Email/Clients # This should be updated upon major version changes; it should match BASE_VERSION as defined in configure.in. %define evolution_base_version 2.32 -Version: 2.31.6 +Version: 2.31.90 Release: 1 # FIXME: check with upstream/meego if we want to enable clutter for express mode Summary: The Integrated GNOME Mail, Calendar, and Address Book Suite Source0: ftp://ftp.gnome.org/pub/gnome/sources/evolution/2.25/%{name}-%{version}.tar.bz2 -# PATCH-FIX-UPSTREAM evolution-no-dbus-glib.patch vuntz@opensuse.org -- Taken from upstream, there's no use of dbus-glib anymore, so no need to call init functions -Patch0: evolution-no-dbus-glib.patch # PATCH-NEEDS-REBASE calendar-sendbutton.patch -- It also needs a proper description and a bug number Patch7: calendar-sendbutton.patch # PATCH-FIX-OPENSUSE evolution-custom-openldap-includes.patch maw@novell.com -- look for ldap includes in %{_libdir}/evoldap/include @@ -72,24 +70,16 @@ Patch15: evolution-custom-openldap-includes.patch Patch18: bnc-435668-hide-accept.patch # PATCH-FIX-UPSTREAM bnc-435722-book-uri-long.patch bnc#435722 abharath@suse.de -- Book URI: Spills Into Second Column. Patch19: bnc-435722-book-uri-long.patch -# NEEDS-REBASE sharepoint-account-setup.patch pchenthill@suse.de -- This patch allows you to connect to sharepoint servers (WAS: PATCH-FIX-UPSTREAM) -Patch23: sharepoint-account-setup.patch # PATCH-FIX-OPENSUSE bnc-433448-backup-restore-fails.patch bnc433448 abharath@suse.de -- Not required upstream. Patch25: bnc-433448-backup-restore-fails.patch # PATCH-FIX-UPSTREAM bnc-210959-evo-accept-ics.patch bnc210959 pchenthill@novell.com -- Patch yet to be pushed upstream. Patch35: bnc-210959-evo-accept-ics.patch -# PATCH-NEEDS-REBASE sp-tasks-setup.diff pchenthill@suse.de -- Patch needs to be upstreamed. (WAS: PATCH-FIX-UPSTREAM) -Patch36: sp-tasks-setup.diff -# PATCH-NEEDS-REBASE sp-meetingworkspace-ui.patch pchenthill@suse.de -- Patch needs to be upstreamed. (WAS: PATCH-FIX-UPSTREAM) -Patch41: sp-meetingworkspace-ui.patch # PATCH-NEEDS-REBASE bnc-449888-handle-no-workspace.patch bnc449888 pchenthill@suse.de -- Patch needs to be upstreamed. (WAS: PATCH-FIX-UPSTREAM) Patch42: bnc-449888-handle-no-workspace.patch # PATCH-NEEDS-REBASE bnc-440634-forwarded-hide-accept-decline.patch bnc440634 abharath@suse.de -- Make GW understand folders better. (WAS: PATCH-FIX-SLED) Patch53: bnc-440634-forwarded-hide-accept-decline.patch # PATCH-NEEDS-REBASE bnc-445996-address-conflict.patch bnc445996 shashish@suse.de -- Needs to be moved out of glade files. (was PATCH-FIX-SLED) Patch54: bnc-445996-address-conflict.patch -# PATCH-NEEDS-REBASE: sp-process-meetings.diff pchenthill@suse.de -- Fix for bug 449899 (bnc) (WAS: PATCH-FIX-SLED) -Patch101: sp-process-meetings.diff Url: http://gnome.org/projects/evolution/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Recommends: bogofilter @@ -153,7 +143,6 @@ Evolution or embed the existing ones in other applications. %prep %setup -q translation-update-upstream -%patch0 -p1 # %patch7 %if %USE_EVOLDAP %patch15 -p1 @@ -161,21 +150,13 @@ translation-update-upstream # NEEDS REBASE #%patch18 %patch19 -# NEEDS-REBASE -#%patch23 -p1 %patch25 %patch35 # NEEDS-REBASE -#%patch36 -p1 -# NEEDS-REBASE -#%patch41 -p1 -# NEEDS-REBASE #%patch42 -p1 # NEEDS REBASE #%patch53 #%patch54 -# NEEDS-REBASE -#%patch101 -p1 %build autoreconf -f -i diff --git a/sharepoint-account-setup.patch b/sharepoint-account-setup.patch deleted file mode 100644 index 1b850b5..0000000 --- a/sharepoint-account-setup.patch +++ /dev/null @@ -1,514 +0,0 @@ -diff -ruN evolution-2.27.4.1/configure.ac evolution-2.27.4.1.patched//configure.ac ---- evolution-2.27.4.1/configure.ac 2009-07-15 11:25:24.000000000 +0200 -+++ evolution-2.27.4.1.patched//configure.ac 2009-07-22 13:21:18.000000000 +0200 -@@ -903,6 +903,24 @@ - PKG_CHECK_MODULES([MONO], ["mono"]) - AC_DEFINE(ENABLE_MONO,1,[Define if Mono embedding should be enabled]) - 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]) -+ 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, solvent]) -+ 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) -@@ -1714,7 +1732,7 @@ - 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 audio-inline mailing-list-actions default-mailer prefer-plain mail-notification attachment-reminder backup-restore email-custom-header templates pst-import vcard-inline" -@@ -1767,6 +1785,11 @@ - 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" -@@ -2021,6 +2044,7 @@ - plugins/tnef-attachments/Makefile - plugins/vcard-inline/Makefile - plugins/webdav-account-setup/Makefile -+plugins/sharepoint-account-setup/Makefile - smime/Makefile - smime/lib/Makefile - smime/gui/Makefile -diff -ruN evolution-2.27.4.1/plugins/mono/mono-plugin.c evolution-2.27.4.1.patched//plugins/mono/mono-plugin.c ---- evolution-2.27.4.1/plugins/mono/mono-plugin.c 2009-07-13 09:45:13.000000000 +0200 -+++ evolution-2.27.4.1.patched//plugins/mono/mono-plugin.c 2009-07-22 13:20:43.000000000 +0200 -@@ -81,9 +81,14 @@ - MonoObject *x = NULL, *res; - gpointer *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) { -@@ -232,8 +237,6 @@ - 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 -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/Makefile.am evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/Makefile.am ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/Makefile.am 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/Makefile.am 2009-07-22 13:20:43.000000000 +0200 -@@ -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 -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-account-setup.eplug.xml 2009-07-22 13:20:43.000000000 +0200 -@@ -0,0 +1,36 @@ -+ -+ -+ -+ -+ <_description>Create a sharepoint account for calendar and tasks -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-disconnect-ui.xml 2009-07-22 13:20:43.000000000 +0200 -@@ -0,0 +1,16 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/org-gnome-sharepoint-ui.xml 2009-07-22 13:20:43.000000000 +0200 -@@ -0,0 +1,16 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointAccount.cs evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointAccount.cs ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointAccount.cs 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointAccount.cs 2009-07-22 13:20:43.000000000 +0200 -@@ -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", -+ 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 (); -+ } -+ } -+ -+ /// -+ /// Connect with the ICEcore Daemon and register event handlers. -+ /// -+ 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 (DaemonNamespace, DaemonPath); -+ // Set up the daemon event handlers -+ deskIceDaemon.Authenticated += OnAuthenticated; -+ } -+ } -+} -diff -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointAccountSetup.cs evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointAccountSetup.cs ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointAccountSetup.cs 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointAccountSetup.cs 2009-07-22 13:20:43.000000000 +0200 -@@ -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 -ruN evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointSource.cs evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointSource.cs ---- evolution-2.27.4.1/plugins/sharepoint-account-setup/SharepointSource.cs 1970-01-01 01:00:00.000000000 +0100 -+++ evolution-2.27.4.1.patched//plugins/sharepoint-account-setup/SharepointSource.cs 2009-07-22 13:20:43.000000000 +0200 -@@ -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 groupsToRemove = new List (); -+ 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 -ruN evolution-2.27.4.1/ui/evolution.xml evolution-2.27.4.1.patched//ui/evolution.xml ---- evolution-2.27.4.1/ui/evolution.xml 2009-07-13 09:45:14.000000000 +0200 -+++ evolution-2.27.4.1.patched//ui/evolution.xml 2009-07-22 13:20:43.000000000 +0200 -@@ -66,6 +66,8 @@ - - - -+ -+ - - - diff --git a/sp-meetingworkspace-ui.patch b/sp-meetingworkspace-ui.patch deleted file mode 100644 index 932dbfc..0000000 --- a/sp-meetingworkspace-ui.patch +++ /dev/null @@ -1,945 +0,0 @@ -Index: evolution-2.27.2/calendar/gui/dialogs/comp-editor.c -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/dialogs/comp-editor.c -+++ evolution-2.27.2/calendar/gui/dialogs/comp-editor.c -@@ -63,6 +63,7 @@ - #include "../e-cal-popup.h" - #include "../calendar-config-keys.h" - #include "cal-attachment-select-file.h" -+#include "../e-cal-event.h" - #include "widgets/misc/e-attachment-view.h" - #include "widgets/misc/e-attachment-paned.h" - -@@ -100,6 +101,7 @@ struct _CompEditorPrivate { - /* Manages menus and toolbars */ - GtkUIManager *ui_manager; - -+ GtkWidget *vbox; - gchar *summary; - - guint32 attachment_bar_visible : 1; -@@ -1606,11 +1608,11 @@ comp_editor_init (CompEditor *editor) - - container = GTK_WIDGET (editor); - -- widget = gtk_vbox_new (FALSE, 0); -- gtk_container_add (GTK_CONTAINER (container), widget); -- gtk_widget_show (widget); -+ priv->vbox = gtk_vbox_new (FALSE, 0); -+ gtk_container_add (GTK_CONTAINER (editor), priv->vbox); -+ gtk_widget_show (priv->vbox); - -- container = widget; -+ container = priv->vbox; - - widget = comp_editor_get_managed_widget (editor, "/main-menu"); - gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0); -@@ -1955,6 +1957,22 @@ comp_editor_get_ui_manager (CompEditor * - return editor->priv->ui_manager; - } - -+GtkWidget * -+comp_editor_get_vbox (CompEditor *editor) -+{ -+ g_return_val_if_fail (IS_COMP_EDITOR (editor), NULL); -+ -+ return editor->priv->vbox; -+} -+ -+GtkNotebook * -+comp_editor_get_notebook (CompEditor *editor) -+{ -+ g_return_val_if_fail (IS_COMP_EDITOR (editor), NULL); -+ -+ return editor->priv->notebook; -+} -+ - GtkAction * - comp_editor_get_action (CompEditor *editor, - const gchar *action_name) -@@ -2112,9 +2130,15 @@ comp_editor_append_page (CompEditor *edi - - priv->pages = g_list_append (priv->pages, page); - -- if (add) -+ if (add){ - gtk_notebook_append_page (priv->notebook, page_widget, label_widget); - -+ ECalEvent *ec_event = e_cal_event_peek (); -+ ECalEventTargetCompEditor *target; -+ target = e_cal_event_target_comp_editor (ec_event, editor); -+ e_event_emit ((EEvent *) ec_event, "editor.append", (EEventTarget *) target); -+ } -+ - /* Listen for things happening on the page */ - g_signal_connect_swapped ( - page, "dates_changed", -Index: evolution-2.27.2/calendar/gui/dialogs/event-editor.c -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/dialogs/event-editor.c -+++ evolution-2.27.2/calendar/gui/dialogs/event-editor.c -@@ -38,6 +38,7 @@ - #include - #include - -+#include "../e-cal-event.h" - #include "event-page.h" - #include "recurrence-page.h" - #include "schedule-page.h" -@@ -65,7 +66,7 @@ static const gchar *ui = - "" - " " - " " --" " -+" " - " " - " " - " " -@@ -103,6 +104,17 @@ static gboolean event_editor_send_comp ( - - G_DEFINE_TYPE (EventEditor, event_editor, TYPE_COMP_EDITOR) - -+ -+CompEditorPage* -+event_editor_get_event_page (CompEditor *editor) -+{ -+ EventEditorPrivate *priv; -+ -+ priv = EVENT_EDITOR_GET_PRIVATE (editor); -+ -+ return priv->event_page; -+} -+ - static void - create_schedule_page (CompEditor *editor) - { -@@ -334,6 +346,11 @@ event_editor_constructor (GType type, - event_page_set_meeting (priv->event_page, TRUE); - priv->meeting_shown=TRUE; - } -+ -+ ECalEvent *ec_event = e_cal_event_peek (); -+ ECalEventTargetCompEditor *target; -+ target = e_cal_event_target_comp_editor (ec_event, editor); -+ e_event_emit ((EEvent *) ec_event, "editor.inited", (EEventTarget *) target); - - return object; - } -@@ -496,7 +513,6 @@ event_editor_init (EventEditor *ee) - } - - /* Hide send options. */ -- action = comp_editor_get_action (editor, "send-options"); - gtk_action_set_visible (action, FALSE); - - g_signal_connect ( -Index: evolution-2.27.2/calendar/gui/dialogs/event-editor.h -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/dialogs/event-editor.h -+++ evolution-2.27.2/calendar/gui/dialogs/event-editor.h -@@ -68,6 +68,7 @@ GType event_editor_get_type (void); - CompEditor * event_editor_new (ECal *client, - CompEditorFlags flags); - void event_editor_show_meeting (EventEditor *ee); -+CompEditorPage* event_editor_get_event_page (CompEditor *editor); - - G_END_DECLS - -Index: evolution-2.27.2/calendar/gui/dialogs/event-page.c -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/dialogs/event-page.c -+++ evolution-2.27.2/calendar/gui/dialogs/event-page.c -@@ -714,6 +714,26 @@ create_image_event_box (const char *imag - return box; - } - -+GtkWidget * -+event_page_get_toplevel_widget (CompEditorPage *page) -+{ -+ EventPagePrivate *priv; -+ -+ priv = EVENT_PAGE_GET_PRIVATE (page); -+ -+ return priv->main; -+} -+ -+GtkWidget * -+get_event_page_widget (EventPage *epage) -+{ -+ EventPagePrivate *priv; -+ -+ priv = EVENT_PAGE_GET_PRIVATE (epage); -+ -+ return priv->hour_selector; -+} -+ - static void - sensitize_widgets (EventPage *epage) - { -Index: evolution-2.27.2/calendar/gui/dialogs/event-page.h -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/dialogs/event-page.h -+++ evolution-2.27.2/calendar/gui/dialogs/event-page.h -@@ -110,6 +110,8 @@ void event_page_add_attendee (EventPag - EMeetingAttendee *attendee); - void event_page_remove_all_attendees (EventPage *epage); - -+GtkWidget * get_event_page_widget (EventPage *epage); -+ - G_END_DECLS - - #endif -Index: evolution-2.27.2/calendar/gui/e-cal-event.c -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/e-cal-event.c -+++ evolution-2.27.2/calendar/gui/e-cal-event.c -@@ -103,6 +103,16 @@ e_cal_event_target_new_component (ECalEv - return t; - } - -+ECalEventTargetCompEditor * -+e_cal_event_target_comp_editor (ECalEvent *ec_event, struct _CompEditor *editor) -+{ -+ ECalEventTargetCompEditor *t = e_event_target_new (&ec_event->event, E_CAL_EVENT_TARGET_COMP_EDITOR, sizeof (*t)); -+ -+ t->editor = g_object_ref (editor); -+ -+ return t; -+} -+ - /* ********************************************************************** */ - - static void *eceh_parent_class; -@@ -112,11 +122,18 @@ static const EEventHookTargetMask eceh_c - { NULL }, - }; - -+static const EEventHookTargetMask eceh_compeditor_masks[] = { -+ { "inited", E_CAL_EVENT_COMPEDITOR_INITED }, -+ { NULL }, -+}; -+ - static const EEventHookTargetMap eceh_targets[] = { - { "component", E_CAL_EVENT_TARGET_COMPONENT, eceh_component_masks }, -+ { "compeditor", E_CAL_EVENT_TARGET_COMP_EDITOR, eceh_compeditor_masks }, - { NULL }, - }; - -+ - static void - eceh_finalize (GObject *o) - { -Index: evolution-2.27.2/calendar/gui/e-cal-event.h -=================================================================== ---- evolution-2.27.2.orig/calendar/gui/e-cal-event.h -+++ evolution-2.27.2/calendar/gui/e-cal-event.h -@@ -37,7 +37,8 @@ typedef struct _ECalEvent ECalEvent; - typedef struct _ECalEventClass ECalEventClass; - - enum _e_cal_event_target_t { -- E_CAL_EVENT_TARGET_COMPONENT -+ E_CAL_EVENT_TARGET_COMPONENT, -+ E_CAL_EVENT_TARGET_COMP_EDITOR - }; - - /* Flags that describe TARGET_COMPONENT */ -@@ -45,6 +46,11 @@ enum { - E_CAL_EVENT_COMPONENT_MIGRATION = 1 << 0 - }; - -+ -+enum { -+ E_CAL_EVENT_COMPEDITOR_INITED = 1 << 0, -+}; -+ - typedef struct _ECalEventTargetComponent ECalEventTargetComponent; - - struct _ECalEventTargetComponent { -@@ -53,6 +59,14 @@ struct _ECalEventTargetComponent { - struct _CalendarComponent *component; - }; - -+ -+typedef struct _ECalEventTargetCompEditor ECalEventTargetCompEditor; -+ -+struct _ECalEventTargetCompEditor { -+ EEventTarget target; -+ struct _CompEditor *editor; -+}; -+ - struct _ECalEvent { - EEvent event; - -@@ -66,6 +80,7 @@ struct _ECalEventClass { - GType e_cal_event_get_type (void); - ECalEvent* e_cal_event_peek (void); - ECalEventTargetComponent* e_cal_event_target_new_component (ECalEvent *ece, struct _CalendarComponent *component, guint32 flags); -+ECalEventTargetCompEditor * e_cal_event_target_comp_editor (ECalEvent *ec_event, struct _CompEditor *editor); - - /* ********************************************************************** */ - -Index: evolution-2.27.2/plugins/sharepoint-features/Makefile.am -=================================================================== ---- /dev/null -+++ evolution-2.27.2/plugins/sharepoint-features/Makefile.am -@@ -0,0 +1,40 @@ -+INCLUDES = \ -+ -I$(top_srcdir) \ -+ -I$(top_builddir)/shell \ -+ -I$(top_srcdir)/widgets \ -+ -I$(top_srcdir)/widgets/misc \ -+ -I$(top_builddir)/calendar/gui \ -+ -I$(top_builddir)/calendar/gui/dialogs \ -+ $(EVOLUTION_CALENDAR_CFLAGS) \ -+ -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ -+ -DCONNECTOR_GLADEDIR=\""$(gladedir)"\" \ -+ $(SOURCE_SEL_CFLAGS) -+ -+ -+@EVO_PLUGIN_RULE@ -+ -+plugin_DATA = \ -+ org-gnome-sharepoint-features.eplug -+ -+plugin_LTLIBRARIES = liborg-gnome-sharepoint-features.la -+ -+liborg_gnome_sharepoint_features_la_SOURCES = \ -+ meeting-workspace.c -+ -+liborg_gnome_sharepoint_features_la_LIBADD = \ -+ $(top_builddir)/e-util/libeutil.la \ -+ $(top_builddir)/calendar/gui/libevolution-calendar.la \ -+ $(top_builddir)/widgets/misc/libemiscwidgets.la \ -+ $(NO_UNDEFINED_REQUIRED_LIBS) \ -+ $(EVOLUTION_CALENDAR_LIBS) -+liborg_gnome_sharepoint_features_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED) -+ -+glade_DATA = meetingworkspaces.glade -+ -+EXTRA_DIST = \ -+ org-gnome-sharepoint-features.eplug.xml \ -+ $(glade_DATA) -+ -+BUILT_SOURCES = org-gnome-sharepoint-features.eplug -+ -+CLEANFILES = $(BUILT_SOURCES) -Index: evolution-2.27.2/plugins/sharepoint-features/meetingworkspaces.glade -=================================================================== ---- /dev/null -+++ evolution-2.27.2/plugins/sharepoint-features/meetingworkspaces.glade -@@ -0,0 +1,324 @@ -+ -+ -+ -+ -+ -+ -+ True -+ Meeting Workspace -+ GTK_WINDOW_TOPLEVEL -+ GTK_WIN_POS_NONE -+ False -+ True -+ False -+ True -+ False -+ False -+ GDK_WINDOW_TYPE_HINT_DIALOG -+ GDK_GRAVITY_NORTH_WEST -+ True -+ False -+ True -+ -+ -+ -+ True -+ False -+ 0 -+ -+ -+ -+ True -+ GTK_BUTTONBOX_END -+ -+ -+ -+ True -+ True -+ True -+ gtk-cancel -+ True -+ GTK_RELIEF_NORMAL -+ True -+ -6 -+ -+ -+ -+ -+ -+ True -+ True -+ True -+ gtk-ok -+ True -+ GTK_RELIEF_NORMAL -+ True -+ -5 -+ -+ -+ -+ -+ 0 -+ False -+ True -+ GTK_PACK_END -+ -+ -+ -+ -+ -+ 12 -+ True -+ False -+ 12 -+ -+ -+ -+ True -+ True -+ C_reate meeting workspace -+ True -+ GTK_RELIEF_NORMAL -+ True -+ False -+ False -+ True -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ 12 -+ True -+ 2 -+ 2 -+ False -+ 12 -+ 12 -+ -+ -+ -+ True -+ T_itle: -+ True -+ False -+ GTK_JUSTIFY_LEFT -+ False -+ False -+ 0 -+ 0.5 -+ 0 -+ 0 -+ title-entry -+ PANGO_ELLIPSIZE_NONE -+ -1 -+ False -+ 0 -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 0 -+ 1 -+ fill -+ -+ -+ -+ -+ -+ -+ True -+ T_emplate: -+ True -+ False -+ GTK_JUSTIFY_LEFT -+ False -+ False -+ 0 -+ 0.5 -+ 0 -+ 0 -+ PANGO_ELLIPSIZE_NONE -+ -1 -+ False -+ 0 -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ 1 -+ 2 -+ fill -+ -+ -+ -+ -+ -+ -+ True -+ True -+ True -+ True -+ 0 -+ -+ True -+ -+ False -+ -+ -+ -+ -+ -+ 1 -+ 2 -+ 0 -+ 1 -+ -+ -+ -+ -+ -+ -+ True -+ Basic Meeting Workspace -+Blank Meeting Workspace -+Decision Meeting Workspace -+Social Meeting Workspace -+Multipage Meeting Workspace -+ False -+ True -+ True -+ -+ -+ -+ -+ -+ 1 -+ 2 -+ 1 -+ 2 -+ fill -+ fill -+ -+ -+ -+ -+ 0 -+ True -+ True -+ -+ -+ -+ -+ -+ True -+ True -+ _Link to existing workspace -+ True -+ GTK_RELIEF_NORMAL -+ True -+ False -+ False -+ True -+ create-radio -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ 12 -+ True -+ False -+ 12 -+ -+ -+ -+ True -+ Wo_rkspaces: -+ True -+ False -+ GTK_JUSTIFY_LEFT -+ False -+ False -+ 0.5 -+ 0.5 -+ 0 -+ 0 -+ PANGO_ELLIPSIZE_NONE -+ -1 -+ False -+ 0 -+ -+ -+ -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ True -+ False -+ True -+ True -+ -+ -+ -+ -+ -+ 0 -+ True -+ True -+ -+ -+ -+ -+ 0 -+ True -+ True -+ -+ -+ -+ -+ 0 -+ True -+ True -+ -+ -+ -+ -+ -+ True -+ True -+ -+ -+ 0 -+ False -+ False -+ -+ -+ -+ -+ -+ -+ -Index: evolution-2.27.2/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml -=================================================================== ---- /dev/null -+++ evolution-2.27.2/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml -@@ -0,0 +1,20 @@ -+ -+ -+ -+ <_description>Plugin to create or link to a meeting workspace -+ -+ -+ -+ -+ -+ -+ -+ -Index: evolution-2.27.2/plugins/sharepoint-features/meeting-workspace.c -=================================================================== ---- /dev/null -+++ evolution-2.27.2/plugins/sharepoint-features/meeting-workspace.c -@@ -0,0 +1,230 @@ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+static void action_meeting_workspace (GtkAction *action, EventEditor *editor); -+void org_gnome_meeting_workspace (EPlugin *ep, ECalEventTargetCompEditor *target); -+ -+static const gchar *ui = -+"" -+" " -+" " -+" " -+""; -+ -+static GtkActionEntry meeting_entries[] = { -+ { "meeting-workspace", -+ "stock_people", -+ N_("Meeting Workspace"), -+ NULL, -+ N_("Create or Link to Meeting Workspaces"), -+ G_CALLBACK (action_meeting_workspace) } -+}; -+ -+typedef struct { -+ GtkWidget *dialog; -+ GtkWidget *title_entry; -+ GtkWidget *template_label; -+ GtkWidget *template_combo; -+ GtkWidget *create_radio; -+ GtkWidget *link_radio; -+ GtkWidget *workspace_label; -+ GtkWidget *workspace_combo; -+ GtkWidget *statusbar; -+ gboolean got_workspaces; -+ guint contextid; -+ -+ EventEditor *editor; -+} MeetingWorkspaceWidget; -+ -+static DBusGProxy * -+get_dice_dbus_proxy () -+{ -+ GError *err = NULL; -+ DBusGConnection *conn = dbus_g_bus_get (DBUS_BUS_SESSION, &err); -+ if (!conn) { -+ g_printerr ("Failed to connect: %s\n", err->message); -+ g_error_free (err); -+ return NULL; -+ } -+ -+ return dbus_g_proxy_new_for_name (conn, "Novell.ICEDesktop.Daemon", "/Novell/ICEDesktop/Daemon", -+ "Novell.ICEDesktop.Daemon"); -+} -+ -+static MeetingWorkspaceWidget * -+setup_widgets (void) -+{ -+ char *gladefile; -+ GladeXML *xml; -+ MeetingWorkspaceWidget *mws; -+ -+ gladefile = g_build_filename (EVOLUTION_GLADEDIR, "meetingworkspaces.glade", NULL); -+ xml = glade_xml_new (gladefile, NULL, NULL); -+#define GW(name) glade_xml_get_widget (xml, name) -+ -+ mws = g_new0 (MeetingWorkspaceWidget, 1); -+ mws->dialog = GW("meeting-workspace-dialog"); -+ mws->title_entry = GW("title-entry"); -+ mws->template_label = GW("template-label"); -+ mws->template_combo = GW("template-combo"); -+ mws->create_radio = GW("create-radio"); -+ mws->link_radio = GW("link-radio"); -+ mws->workspace_label = GW("workspaces-label"); -+ mws->workspace_combo = GW("workspaces-combo"); -+ mws->statusbar = GW("statusbar"); -+ -+ return mws; -+} -+ -+static void -+create_toggled_cb (GtkToggleButton *create_radio, gpointer user_data) -+{ -+ gboolean active; -+ MeetingWorkspaceWidget *mws = user_data; -+ -+ active = gtk_toggle_button_get_active (create_radio); -+ -+ gtk_entry_set_editable ((GtkEntry *)mws->title_entry, active); -+ gtk_widget_set_sensitive (mws->template_combo, active); -+} -+ -+static void -+link_toggled_cb (GtkToggleButton *link_radio, gpointer user_data) -+{ -+ gboolean active; -+ MeetingWorkspaceWidget *mws = user_data; -+ -+ active = gtk_toggle_button_get_active (link_radio); -+ gtk_widget_set_sensitive (mws->workspace_combo, active); -+ -+ if (active && !mws->got_workspaces) { -+ gtk_statusbar_push ((GtkStatusbar *)mws->statusbar, mws->contextid, -+ _("Loading Meeting workspaces...")); -+ -+ // Get the meeting workspaces and set them -+ -+ mws->got_workspaces = TRUE; -+ } -+} -+ -+static void -+release_memory (MeetingWorkspaceWidget *mws) -+{ -+ -+} -+ -+static void -+dialog_response_cb (GtkDialog *dialog, int response_id, gpointer user_data) -+{ -+ MeetingWorkspaceWidget *mws = user_data; -+ -+ if (response_id == GTK_RESPONSE_OK) { -+ gboolean active; -+ const char *workspace_url = NULL; -+ ECalComponent *comp; -+ -+ active = gtk_toggle_button_get_active ((GtkToggleButton *) mws->link_radio); -+ -+ if (active) { -+ // Get the workspace from combo box selection -+ } else { -+ // Create the meeting workspace -+ const char *title; -+ -+ title = gtk_entry_get_text ((GtkEntry *) mws->title_entry); -+ -+ if (!title || !*title) { -+ gtk_statusbar_push ((GtkStatusbar *) mws->statusbar, mws->contextid, -+ _("Please set a title and press OK.")); -+ return; -+ } -+ -+ gtk_statusbar_push ((GtkStatusbar *) mws->statusbar, mws->contextid, -+ _("Creating Meeting Workspace. Please wait...")); -+ // Create Meeting Workspace -+ } -+ -+ // Set the workspace url to component -+ comp = comp_editor_get_comp ((CompEditor *) mws->editor); -+ } -+ -+ gtk_widget_destroy (mws->dialog); -+ release_memory (mws); -+} -+ -+static void -+init_widgets (MeetingWorkspaceWidget *mws) -+{ -+ g_signal_connect((mws->create_radio), "toggled", -+ G_CALLBACK (create_toggled_cb), mws); -+ -+ g_signal_connect((mws->link_radio), "toggled", -+ G_CALLBACK (link_toggled_cb), mws); -+ -+ g_signal_connect((mws->dialog), "response", -+ G_CALLBACK (dialog_response_cb), mws); -+ -+ gtk_widget_set_sensitive (mws->workspace_combo, FALSE); -+ -+ gtk_combo_box_set_active ((GtkComboBox *) mws->template_combo, 0); -+ -+ mws->contextid = gtk_statusbar_get_context_id ((GtkStatusbar *)mws->statusbar, "Meeting workspace status"); -+} -+ -+static void -+action_meeting_workspace (GtkAction *action, EventEditor *editor) -+{ -+ MeetingWorkspaceWidget *mws; -+ -+ mws = setup_widgets (); -+ init_widgets (mws); -+ mws->editor = editor; -+ -+ gtk_dialog_run ((GtkDialog *) mws->dialog); -+ g_print ("Clicked meeting workspace \n"); -+} -+ -+void -+org_gnome_meeting_workspace (EPlugin *ep, ECalEventTargetCompEditor *target) -+{ -+ GtkActionGroup *action_group; -+ GtkUIManager *manager; -+ GError *error = NULL; -+ CompEditor *editor = target->editor; -+ CompEditorFlags flags; -+ ECal *client; -+ const char *uri; -+ -+ client = comp_editor_get_client (editor); -+ uri = e_cal_get_uri (client); -+ flags = comp_editor_get_flags (editor); -+ -+ if (!g_str_has_prefix (uri, "sharepoint://")) -+ return; -+ -+ if (!(flags & COMP_EDITOR_MEETING && flags & COMP_EDITOR_NEW_ITEM)) -+ return; -+ -+ action_group = comp_editor_get_action_group (editor, "coordinated"); -+ gtk_action_group_add_actions (action_group, meeting_entries, -+ G_N_ELEMENTS (meeting_entries), editor); -+ -+ manager = comp_editor_get_ui_manager (editor); -+ gtk_ui_manager_add_ui_from_string (manager, ui, -1, &error); -+ if (error != NULL) { -+ g_critical ("%s: %s", G_STRFUNC, error->message); -+ g_error_free (error); -+ } -+} -Index: evolution-2.27.2/configure.ac -=================================================================== ---- evolution-2.27.2.orig/configure.ac -+++ evolution-2.27.2/configure.ac -@@ -965,6 +965,9 @@ if test "x${enable_mono}" = "xyes"; then - evolution-sharp, ndesk-dbus-1.0, ndesk-dbus-glib-1.0]) - AC_SUBST(MONO_PLATFORM_CFLAGS) - AC_SUBST(MONO_PLATFORM_LIBS) -+ PKG_CHECK_MODULES(DBUS, dbus-glib-1) -+ AC_SUBST(DBUS_CFLAGS) -+ AC_SUBST(DBUS_LIBS) - MONO_BASED_PLUGINS="" - - dnl Sharepoint account setup -@@ -976,7 +979,7 @@ if test "x${enable_mono}" = "xyes"; then - PKG_CHECK_MODULES(ICE_DESKTOP, [Novell.IceDesktop, solvent]) - AC_SUBST(ICE_DESKTOP_CFLAGS) - AC_SUBST(ICE_DESKTOP_LIBS) -- MONO_BASED_PLUGINS="$MONO_BASED_PLUGINS sharepoint-account-setup" -+ MONO_BASED_PLUGINS="$MONO_BASED_PLUGINS sharepoint-account-setup sharepoint-features" - fi - fi - AC_SUBST(MONO_CFLAGS) -@@ -2161,6 +2164,7 @@ plugins/tnef-attachments/Makefile - plugins/vcard-inline/Makefile - plugins/webdav-account-setup/Makefile - plugins/sharepoint-account-setup/Makefile -+plugins/sharepoint-features/Makefile - smime/Makefile - smime/lib/Makefile - smime/gui/Makefile diff --git a/sp-process-meetings.diff b/sp-process-meetings.diff deleted file mode 100644 index 36df3b8..0000000 --- a/sp-process-meetings.diff +++ /dev/null @@ -1,440 +0,0 @@ -commit 18a2f5f1206e7a7583db2b8c47862f79abf13e50 -Author: chenthill -Date: Tue Dec 30 05:00:06 2008 +0530 - - process meetings. - -diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c -index 8d889bd..e1555d8 100644 ---- a/calendar/gui/dialogs/comp-editor.c -+++ b/calendar/gui/dialogs/comp-editor.c -@@ -792,6 +792,13 @@ save_comp (CompEditor *editor) - - e_cal_component_set_attachment_list (priv->comp, - get_attachment_list (editor)); -+ -+ /* Give a chance for plugins to act on the component */ -+ ECalEvent *ec_event = e_cal_event_peek (); -+ ECalEventTargetCompEditor *target; -+ target = e_cal_event_target_comp_editor (ec_event, editor); -+ e_event_emit ((EEvent *) ec_event, "editor.commit", (EEventTarget *) target); -+ - icalcomp = e_cal_component_get_icalcomponent (priv->comp); - /* send the component to the server */ - if (!cal_comp_is_on_server (priv->comp, priv->client)) { -diff --git a/plugins/sharepoint-features/Makefile.am b/plugins/sharepoint-features/Makefile.am -index f101059..9123b66 100644 ---- a/plugins/sharepoint-features/Makefile.am -+++ b/plugins/sharepoint-features/Makefile.am -@@ -19,7 +19,9 @@ plugin_DATA = \ - plugin_LTLIBRARIES = liborg-gnome-sharepoint-features.la - - liborg_gnome_sharepoint_features_la_SOURCES = \ -- meeting-workspace.c -+ process-meeting.c \ -+ comp-commit.c \ -+ meeting-workspace.c - - liborg_gnome_sharepoint_features_la_LIBADD = \ - $(top_builddir)/e-util/libeutil.la \ -@@ -33,6 +35,7 @@ glade_DATA = meetingworkspaces.glade - - EXTRA_DIST = \ - org-gnome-sharepoint-features.eplug.xml \ -+ org-gnome-share-point.error.xml \ - $(glade_DATA) - - BUILT_SOURCES = org-gnome-sharepoint-features.eplug -diff --git a/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml b/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml -index d59db73..3e318fc 100644 ---- a/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml -+++ b/plugins/sharepoint-features/org-gnome-sharepoint-features.eplug.xml -@@ -16,5 +16,19 @@ - target="compeditor" - /> - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - diff --git a/plugins/sharepoint-features/comp-commit.c b/plugins/sharepoint-features/comp-commit.c -new file mode 100644 -index 0000000..b87df4f ---- /dev/null -+++ b/plugins/sharepoint-features/comp-commit.c -@@ -0,0 +1,88 @@ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+void org_gnome_comp_commit (EPlugin *ep, ECalEventTargetCompEditor *target); -+ -+static icaltimezone* -+resolve_tzid_cb (const char *tzid, gpointer data) -+{ -+ ECal *client; -+ icaltimezone *zone = NULL; -+ -+ g_return_val_if_fail (data != NULL, NULL); -+ g_return_val_if_fail (E_IS_CAL (data), NULL); -+ -+ client = E_CAL (data); -+ -+ /* Try to find the builtin timezone first. */ -+ zone = icaltimezone_get_builtin_timezone_from_tzid (tzid); -+ -+ if (!zone) { -+ /* FIXME: Handle errors. */ -+ e_cal_get_timezone (client, tzid, &zone, NULL); -+ } -+ -+ return zone; -+} -+ -+static gboolean -+recur_cb (ECalComponent *comp, time_t start, time_t end, gpointer data) -+{ -+ time_t *end_date = data; -+ -+ *end_date = end; -+ -+ return TRUE; -+} -+ -+void -+org_gnome_comp_commit (EPlugin *ep, ECalEventTargetCompEditor *target) -+{ -+ CompEditor *editor = target->editor; -+ CompEditorFlags flags; -+ ECal *client; -+ ECalComponent *comp; -+ ECalComponentDateTime cdt; -+ icaltimezone *zone = NULL; -+ const char *uri; -+ time_t end_date = -1; -+ -+ client = comp_editor_get_client (editor); -+ uri = e_cal_get_uri (client); -+ flags = comp_editor_get_flags (editor); -+ -+ if (!g_str_has_prefix (uri, "sharepoint://")) -+ return; -+ -+ comp = comp_editor_get_comp (editor); -+ -+ if (!e_cal_component_has_recurrences (comp)) -+ return; -+ -+ e_cal_component_get_dtstart (comp, &cdt); -+ if (cdt.tzid != NULL) { -+ /* FIXME Will e_cal_get_timezone really not return builtin zones? */ -+ if (!e_cal_get_timezone (client, cdt.tzid, &zone, NULL)) -+ zone = icaltimezone_get_builtin_timezone_from_tzid (cdt.tzid); -+ } -+ e_cal_component_free_datetime (&cdt); -+ -+ e_cal_recur_generate_instances (comp, -1, -1, -+ recur_cb, &end_date, -+ resolve_tzid_cb, -+ client, zone); -+ -+ char *end = g_strdup_printf ("%ld",end_date); -+ e_cal_component_set_x_prop (comp, "X-SP-RECUR-ENDDATE", end); -+ g_free (end); -+ g_print ("DEBUG: the component to be saved is %s \n", e_cal_component_get_as_string (comp)); -+} -diff --git a/plugins/sharepoint-features/org-gnome-share-point.error.xml b/plugins/sharepoint-features/org-gnome-share-point.error.xml -new file mode 100644 -index 0000000..d656dea ---- /dev/null -+++ b/plugins/sharepoint-features/org-gnome-share-point.error.xml -@@ -0,0 +1,5 @@ -+ -+ -+ -+ -+ -diff --git a/plugins/sharepoint-features/process-meeting.c b/plugins/sharepoint-features/process-meeting.c -new file mode 100644 -index 0000000..917166b ---- /dev/null -+++ b/plugins/sharepoint-features/process-meeting.c -@@ -0,0 +1,258 @@ -+/* -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) version 3. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with the program; if not, see -+ * -+ * -+ * Authors: -+ * Chenthill Palanisamy (pchenthill@novell.com) -+ * -+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) -+ * -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+ -+typedef struct { -+ ECal *ecal; -+ icalcomponent *icalcomp; -+} ReceiveData; -+ -+ECalendarView *c_view; -+ -+void org_gnome_process_meeting (EPlugin *ep, ECalPopupTargetSelect *target); -+static void on_accept_meeting (EPopup *ep, EPopupItem *pitem, void *data); -+static void on_accept_meeting_tentative (EPopup *ep, EPopupItem *pitem, void *data); -+static void on_decline_meeting (EPopup *ep, EPopupItem *pitem, void *data); -+ -+static EPopupItem popup_items[] = { -+{ E_POPUP_ITEM, "41.accept", N_("Accept"), on_accept_meeting, NULL, GTK_STOCK_APPLY, 0, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_MEETING}, -+{ E_POPUP_ITEM, "42.accept", N_("Accept Tentatively"), on_accept_meeting_tentative, NULL, GTK_STOCK_DIALOG_QUESTION, 0, E_CAL_POPUP_SELECT_NOTEDITING | E_CAL_POPUP_SELECT_MEETING}, -+{ E_POPUP_ITEM, "43.decline", N_("Decline"), on_decline_meeting, NULL, GTK_STOCK_CANCEL, 0, E_CAL_POPUP_SELECT_NOTEDITING} -+}; -+ -+static void -+popup_free (EPopup *ep, GSList *items, void *data) -+{ -+ g_slist_free (items); -+ items = NULL; -+} -+ -+void -+org_gnome_process_meeting (EPlugin *ep, ECalPopupTargetSelect *target) -+{ -+ GSList *menus = NULL; -+ GList *selected; -+ int i = 0; -+ static int first = 0; -+ const char *uri = NULL; -+ ECalendarView *cal_view = E_CALENDAR_VIEW (target->target.widget); -+ -+ c_view = cal_view; -+ selected = e_calendar_view_get_selected_events (cal_view); -+ if (selected) { -+ ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data; -+ -+ uri = e_cal_get_uri (event->comp_data->client); -+ } else -+ return; -+ -+ if (!uri) -+ return; -+ -+ if (! g_strrstr (uri, "sharepoint://")) -+ return ; -+ -+ /* for translation*/ -+ if (!first) { -+ popup_items[0].label = _(popup_items[0].label); -+ } -+ -+ first++; -+ -+ for (i = 0; i < sizeof (popup_items) / sizeof (popup_items[0]); i++) -+ menus = g_slist_prepend (menus, &popup_items[i]); -+ -+ e_popup_add_items (target->target.popup, menus, NULL, popup_free, NULL); -+} -+ -+static void -+finalize_receive_data (ReceiveData *r_data) -+{ -+ if (r_data->ecal) { -+ g_object_unref (r_data->ecal); -+ r_data->ecal = NULL; -+ } -+ -+ if (r_data->ecal) { -+ icalcomponent_free (r_data->icalcomp); -+ r_data->icalcomp = NULL; -+ } -+ -+ g_free (r_data); -+} -+ -+static gboolean -+receive_objects (gpointer data) -+{ -+ GError *error = NULL; -+ ReceiveData *r_data = data; -+ -+ -+ icalcomponent_set_method (r_data->icalcomp, ICAL_METHOD_REQUEST); -+ -+ if (!e_cal_receive_objects (r_data->ecal, r_data->icalcomp, &error)) { -+ /* FIXME show an error dialog */ -+ g_error_free (error); -+ } -+ -+ finalize_receive_data (r_data); -+ return TRUE; -+} -+ -+static icalproperty * -+find_attendee (icalcomponent *ical_comp, const char *address) -+{ -+ icalproperty *prop; -+ -+ if (address == NULL) -+ return NULL; -+ -+ for (prop = icalcomponent_get_first_property (ical_comp, ICAL_ATTENDEE_PROPERTY); -+ prop != NULL; -+ prop = icalcomponent_get_next_property (ical_comp, ICAL_ATTENDEE_PROPERTY)) { -+ icalvalue *value; -+ const char *attendee; -+ char *text; -+ -+ value = icalproperty_get_value (prop); -+ if (!value) -+ continue; -+ -+ attendee = icalvalue_get_string (value); -+ -+ text = g_strdup (itip_strip_mailto (attendee)); -+ text = g_strstrip (text); -+ if (!g_ascii_strcasecmp (address, text)) { -+ g_free (text); -+ break; -+ } -+ g_free (text); -+ } -+ -+ return prop; -+} -+static void -+change_status (icalcomponent *ical_comp, const char *address, icalparameter_partstat status) -+{ -+ icalproperty *prop; -+ -+ prop = find_attendee (ical_comp, address); -+ if (prop) { -+ icalparameter *param; -+ -+ icalproperty_remove_parameter (prop, ICAL_PARTSTAT_PARAMETER); -+ param = icalparameter_new_partstat (status); -+ icalproperty_add_parameter (prop, param); -+ } else { -+ icalparameter *param; -+ -+ prop = icalproperty_new_attendee (address); -+ icalcomponent_add_property (ical_comp, prop); -+ -+ param = icalparameter_new_role (ICAL_ROLE_OPTPARTICIPANT); -+ icalproperty_add_parameter (prop, param); -+ -+ param = icalparameter_new_partstat (status); -+ icalproperty_add_parameter (prop, param); -+ } -+} -+ -+static void -+process_meeting (ECalendarView *cal_view, icalparameter_partstat status) -+{ -+ GList *selected; -+ icalcomponent *clone; -+ -+ selected = e_calendar_view_get_selected_events (cal_view); -+ if (selected) { -+ ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data; -+ ECalComponent *comp = e_cal_component_new (); -+ ReceiveData *r_data = g_new0 (ReceiveData, 1); -+ gboolean recurring = FALSE; -+ GThread *thread = NULL; -+ GError *error = NULL; -+ char *address = NULL; -+ -+ e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp)); -+ address = itip_get_comp_attendee (comp, event->comp_data->client); -+ -+ if (e_cal_component_has_recurrences (comp) || e_cal_component_is_instance (comp)) -+ recurring = TRUE; -+ -+ /* Free comp */ -+ g_object_unref (comp); -+ comp = NULL; -+ -+ clone = icalcomponent_new_clone (event->comp_data->icalcomp); -+ change_status (clone, address, status); -+ -+ r_data->ecal = g_object_ref (event->comp_data->client); -+ r_data->icalcomp = clone; -+ -+ g_print ("The updated meeting is %s \n", icalcomponent_as_ical_string (clone)); -+ -+ thread = g_thread_create ((GThreadFunc) receive_objects, r_data , FALSE, &error); -+ if (!thread) { -+ g_warning (G_STRLOC ": %s", error->message); -+ g_error_free (error); -+ } -+ } -+} -+ -+/*FIXME the data does not give us the ECalendarView object. -+ we should remove the global c_view variable once we get it from the data*/ -+static void -+on_accept_meeting (EPopup *ep, EPopupItem *pitem, void *data) -+{ -+ ECalendarView *cal_view = c_view; -+ -+ process_meeting (cal_view, ICAL_PARTSTAT_ACCEPTED); -+} -+static void -+on_accept_meeting_tentative (EPopup *ep, EPopupItem *pitem, void *data) -+{ -+ ECalendarView *cal_view = c_view; -+ -+ process_meeting (cal_view, ICAL_PARTSTAT_TENTATIVE); -+} -+ -+static void -+on_decline_meeting (EPopup *ep, EPopupItem *pitem, void *data) -+{ -+ ECalendarView *cal_view = c_view; -+ -+ process_meeting (cal_view, ICAL_PARTSTAT_DECLINED); -+} diff --git a/sp-tasks-setup.diff b/sp-tasks-setup.diff deleted file mode 100644 index 5dc6a5b..0000000 --- a/sp-tasks-setup.diff +++ /dev/null @@ -1,236 +0,0 @@ -diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c -index c97f61c..16fa928 100644 ---- a/calendar/gui/e-cal-model.c -+++ b/calendar/gui/e-cal-model.c -@@ -1413,6 +1413,12 @@ ensure_dates_are_in_default_zone (icalcomponent *icalcomp) - dt = icaltime_convert_to_zone (dt, zone); - icalcomponent_set_dtend (icalcomp, dt); - } -+ -+ dt = icalcomponent_get_due (icalcomp); -+ if (dt.is_utc) { -+ dt = icaltime_convert_to_zone (dt, zone); -+ icalcomponent_set_due (icalcomp, dt); -+ } - } - - static void -diff --git a/plugins/sharepoint-account-setup/SharepointAccount.cs b/plugins/sharepoint-account-setup/SharepointAccount.cs -index 5009e98..61959ac 100644 ---- a/plugins/sharepoint-account-setup/SharepointAccount.cs -+++ b/plugins/sharepoint-account-setup/SharepointAccount.cs -@@ -38,10 +38,10 @@ namespace Sharepoint - initialized = true; - } - -+ ConnectToICEcoreDaemon (); - - sessionBus = Bus.Session.GetObject ("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) -@@ -49,7 +49,7 @@ namespace Sharepoint - Bus.Session.StartServiceByName (DaemonNamespace); - } - -- ConnectToICEcoreDaemon (); -+ sessionBus.NameOwnerChanged += OnDBusNameOwnerChanged; - try { deskIceDaemon.CheckAuthentication (String.Empty); } - catch (NotAuthenticatedException) - { return; } -@@ -70,7 +70,7 @@ namespace Sharepoint - public void DeleteAccount () - { - // we remove all share calendars. We currently support creating only one sharepoint account -- SharepointSource spSource = new SharepointSource (CalSourceType.Event, null, null); -+ SharepointSource spSource = new SharepointSource (null, null); - spSource.DeleteSources (); - spSource.Sync (); - } -@@ -89,7 +89,7 @@ namespace Sharepoint - { - Console.WriteLine ("Getting folders "); - AccountInfo accountInfo = deskIceDaemon.GetDefaultAccountInfo (); -- SharepointSource spSource = new SharepointSource (CalSourceType.Event, accountInfo.username, -+ SharepointSource spSource = new SharepointSource (accountInfo.username, - accountInfo.hostUrl); - - if (spSource.AccountExists) { -@@ -100,20 +100,17 @@ namespace Sharepoint - FileInfo [] workspaces = deskIceDaemon.EnumerateWorkspaces (); - foreach (FileInfo workspace in workspaces) - { -- FileInfo[] folders = null; -+ Folder[] folders = null; - -- if (spSource.srcType == CalSourceType.Event) -- folders = deskIceDaemon.GetCalendarFolders (string.Empty, workspace.Id); -- // else get task folders -+ folders = deskIceDaemon.GetCalendarFolders (string.Empty, workspace.Id); - -- - if (folders.Length == 0) - continue; - - spSource.CreateSources (workspace, folders); - } -+ - spSource.Sync (); -- Console.WriteLine ("******* Got folders "); - backgroundThread = null; - RemoveHandlers (); - } -diff --git a/plugins/sharepoint-account-setup/SharepointSource.cs b/plugins/sharepoint-account-setup/SharepointSource.cs -index c61fcf0..e9dad79 100644 ---- a/plugins/sharepoint-account-setup/SharepointSource.cs -+++ b/plugins/sharepoint-account-setup/SharepointSource.cs -@@ -16,33 +16,36 @@ 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; -+ SourceList CalsrcList; -+ SourceList TasksrcList; - readonly string baseUri = "sharepoint://"; - string username; - string hostUrl; - -- public SharepointSource(CalSourceType type, string userName, string hosturl) -+ public SharepointSource(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); -+ CalsrcList = new SourceList (calPath); -+ TasksrcList = new SourceList (taskPath); - } - - public bool AccountExists - { - get - { -- foreach (SourceGroup group in srcList.Groups) -+ foreach (SourceGroup group in CalsrcList.Groups) -+ { -+ if (group.BaseUri == baseUri) -+ return true; -+ } -+ -+ foreach (SourceGroup group in TasksrcList.Groups) - { - if (group.BaseUri == baseUri) - return true; -@@ -52,45 +55,85 @@ namespace Sharepoint - } - } - -- public void CreateSources (FileInfo workspace, FileInfo [] folders) -+ public void CreateSources (FileInfo workspace, Folder [] folders) - { -- SourceGroup group = new SourceGroup (workspace.DisplayName, baseUri); -+ SourceGroup calGroup = new SourceGroup (workspace.DisplayName, baseUri); -+ SourceGroup taskGroup = new SourceGroup (workspace.DisplayName, baseUri); -+ bool addCalGroup = false; -+ bool addTaskGroup = false; - -- foreach (FileInfo folder in folders) -+ foreach (Folder folder in folders) - { -- Console.WriteLine (workspace.DisplayName + " folder " + folder.DisplayName); -- string relativeUri = hostUrl + ":" + folder.Id; -- Source source= new Source (folder.DisplayName, relativeUri); -+ Console.WriteLine (workspace.DisplayName + " folder " + folder.Title + " " + folder.Type); -+ string relativeUri = hostUrl + ":" + folder.ID; -+ Source source= new Source (folder.Title, relativeUri); - source.SetProperty ("username", username); - source.SetProperty ("workspaceid", workspace.Id); -- source.SetProperty ("Id", folder.Id); -+ source.SetProperty ("Id", folder.ID); - source.SetProperty ("Auth","True"); -- group.AddSource (source, -1); -+ source.SetProperty ("delete","no"); -+ if (folder.Type == FolderType.Task) -+ { -+ taskGroup.AddSource (source, -1); -+ addTaskGroup = true; -+ } else if (folder.Type == FolderType.Calendar) -+ { -+ calGroup.AddSource (source, -1); -+ addCalGroup = true; -+ } -+ } -+ -+ -+ if (addCalGroup) -+ { -+ calGroup.SetProperty ("username", username); -+ CalsrcList.AddGroup (calGroup, -1); -+ } -+ -+ if (addTaskGroup) -+ { -+ taskGroup.SetProperty ("username", username); -+ TasksrcList.AddGroup (taskGroup, -1); - } -- group.SetProperty ("username", username); -- srcList.AddGroup (group, -1); - } - - public void Sync () - { -- srcList.Sync (); -+ CalsrcList.Sync (); -+ TasksrcList.Sync (); - } - - public void DeleteSources () - { -- List groupsToRemove = new List (); -- foreach (SourceGroup group in srcList.Groups) -+ List calGroupsToRemove = new List (); -+ foreach (SourceGroup group in CalsrcList.Groups) -+ { -+ if (group.BaseUri.StartsWith (baseUri)) -+ { -+ /// Currently we remove all sharepoint calendars -+ calGroupsToRemove.Add (group); -+ } -+ } -+ -+ foreach (SourceGroup group in calGroupsToRemove) -+ { -+ CalsrcList.RemoveGroup (group); -+ } -+ -+ List TaskGroupsToRemove = new List (); -+ -+ foreach (SourceGroup group in TasksrcList.Groups) - { - if (group.BaseUri.StartsWith (baseUri)) - { - /// Currently we remove all sharepoint calendars -- groupsToRemove.Add (group); -+ TaskGroupsToRemove.Add (group); - } - } - -- foreach (SourceGroup group in groupsToRemove) -+ foreach (SourceGroup group in TaskGroupsToRemove) - { -- srcList.RemoveGroup (group); -+ TasksrcList.RemoveGroup (group); - } - } - }