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
This commit is contained in:
parent
3870365981
commit
2db054edd1
3
evolution-2.31.6.tar.bz2
Normal file
3
evolution-2.31.6.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a4c36b0773d810cf234ba466904da180af4ea35f270a87d0f7091d938f141d0b
|
||||
size 31567308
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a3a667c80cb616552cf67b32e81b5cbe4435a8e3d6de6ca07ae4f41370b6bc58
|
||||
size 31784062
|
42
evolution-no-dbus-glib.patch
Normal file
42
evolution-no-dbus-glib.patch
Normal file
@ -0,0 +1,42 @@
|
||||
commit 5c49c70d5568a9a68daa5facaa531ab317d1f005
|
||||
Author: Fridrich Štrba <fridrich.strba@bluewin.ch>
|
||||
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);
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
514
sharepoint-account-setup.patch
Normal file
514
sharepoint-account-setup.patch
Normal file
@ -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 @@
|
||||
+<?xml version="1.0"?>
|
||||
+<e-plugin-list>
|
||||
+ <e-plugin id="org.gnome.evolution.sharepoint.account.setup" type="mono"
|
||||
+ _name="Sharepoint account setup"
|
||||
+ location="@PLUGINDIR@/SharepointAccountSetup.dll" handler="SharePointAccountSetup">
|
||||
+ <author name="Chenthill Palanisamy" email="pchenthill@novell.com"/>
|
||||
+ <_description>Create a sharepoint account for calendar and tasks</_description>
|
||||
+
|
||||
+ <hook class="org.gnome.evolution.shell.bonobomenu:1.0">
|
||||
+ <menu id="org.gnome.evolution.shell" target="shell">
|
||||
+ <!-- the path to the bonobo menu description -->
|
||||
+ <ui file="@PLUGINDIR@/org-gnome-sharepoint-ui.xml"/>
|
||||
+ <item
|
||||
+ type="item"
|
||||
+ verb="SharepointSetup"
|
||||
+ path="/commands/SharepointSetup"
|
||||
+ enable="all"
|
||||
+ activate="SetupAccount"/>
|
||||
+ </menu>
|
||||
+ </hook>
|
||||
+
|
||||
+ <hook class="org.gnome.evolution.shell.bonobomenu:1.0">
|
||||
+ <menu id="org.gnome.evolution.shell" target="shell">
|
||||
+ <!-- the path to the bonobo menu description -->
|
||||
+ <ui file="@PLUGINDIR@/org-gnome-sharepoint-disconnect-ui.xml"/>
|
||||
+ <item
|
||||
+ type="item"
|
||||
+ verb="SharepointDisconnect"
|
||||
+ path="/commands/SharepointDisconnect"
|
||||
+ enable="all"
|
||||
+ activate="RemoveAccount"/>
|
||||
+ </menu>
|
||||
+ </hook>
|
||||
+
|
||||
+ </e-plugin>
|
||||
+</e-plugin-list>
|
||||
diff -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 @@
|
||||
+<Root>
|
||||
+ <commands>
|
||||
+ <cmd name="SharepointDisconnect" _label="Disconnect SharePoint"
|
||||
+ _tip="Remove sharepoint account"
|
||||
+ pixtype="stock"
|
||||
+ pixname="gtk-disconnect"/>
|
||||
+ </commands>
|
||||
+
|
||||
+ <menu>
|
||||
+ <placeholder name="ActionsPlaceholder">
|
||||
+ <submenu name="Actions">
|
||||
+ <menuitem name="SharepointDisconnect" verb="" />
|
||||
+ </submenu>
|
||||
+ </placeholder>
|
||||
+ </menu>
|
||||
+</Root>
|
||||
diff -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 @@
|
||||
+<Root>
|
||||
+ <commands>
|
||||
+ <cmd name="SharepointSetup" _label="Connect to SharePoint"
|
||||
+ _tip="Setup sharepoint account"
|
||||
+ pixtype="stock"
|
||||
+ pixname="gtk-connect"/>
|
||||
+ </commands>
|
||||
+
|
||||
+ <menu>
|
||||
+ <placeholder name="ActionsPlaceholder">
|
||||
+ <submenu name="Actions">
|
||||
+ <menuitem name="SharepointSetup" verb="" />
|
||||
+ </submenu>
|
||||
+ </placeholder>
|
||||
+ </menu>
|
||||
+</Root>
|
||||
diff -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.IBus> ("org.freedesktop.DBus",
|
||||
+ new ObjectPath ("/org/freedesktop/DBus"));
|
||||
+ sessionBus.NameOwnerChanged += OnDBusNameOwnerChanged;
|
||||
+
|
||||
+ // Force the daemon to start up if it's not already running
|
||||
+ if (Bus.Session.NameHasOwner (DaemonNamespace) == false)
|
||||
+ {
|
||||
+ Bus.Session.StartServiceByName (DaemonNamespace);
|
||||
+ }
|
||||
+
|
||||
+ ConnectToICEcoreDaemon ();
|
||||
+ try { deskIceDaemon.CheckAuthentication (String.Empty); }
|
||||
+ catch (NotAuthenticatedException)
|
||||
+ { return; }
|
||||
+
|
||||
+ Console.WriteLine ("****** Authenticated");
|
||||
+ StartFetchingFolder ();
|
||||
+
|
||||
+ }
|
||||
+ catch (Exception ex)
|
||||
+ {
|
||||
+ Console.WriteLine ("Error creating account: {0}", ex.Message);
|
||||
+ Console.WriteLine (ex.StackTrace);
|
||||
+ // Change the status text in the AuthDialog
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ public void DeleteAccount ()
|
||||
+ {
|
||||
+ // we remove all share calendars. We currently support creating only one sharepoint account
|
||||
+ SharepointSource spSource = new SharepointSource (CalSourceType.Event, null, null);
|
||||
+ spSource.DeleteSources ();
|
||||
+ spSource.Sync ();
|
||||
+ }
|
||||
+
|
||||
+ private static void StartFetchingFolder ()
|
||||
+ {
|
||||
+ if (backgroundThread == null)
|
||||
+ {
|
||||
+ backgroundThread = new System.Threading.Thread (new ThreadStart (SetupFolders));
|
||||
+ backgroundThread.IsBackground = true;
|
||||
+ backgroundThread.Start ();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private static void SetupFolders ()
|
||||
+ {
|
||||
+ Console.WriteLine ("Getting folders ");
|
||||
+ AccountInfo accountInfo = deskIceDaemon.GetDefaultAccountInfo ();
|
||||
+ SharepointSource spSource = new SharepointSource (CalSourceType.Event, accountInfo.username,
|
||||
+ accountInfo.hostUrl);
|
||||
+
|
||||
+ if (spSource.AccountExists) {
|
||||
+ Console.WriteLine ("Account already exists");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ FileInfo [] workspaces = deskIceDaemon.EnumerateWorkspaces ();
|
||||
+ foreach (FileInfo workspace in workspaces)
|
||||
+ {
|
||||
+ FileInfo[] folders = null;
|
||||
+
|
||||
+ if (spSource.srcType == CalSourceType.Event)
|
||||
+ folders = deskIceDaemon.GetCalendarFolders (string.Empty, workspace.Id);
|
||||
+ // else get task folders
|
||||
+
|
||||
+
|
||||
+ if (folders.Length == 0)
|
||||
+ continue;
|
||||
+
|
||||
+ spSource.CreateSources (workspace, folders);
|
||||
+ }
|
||||
+ spSource.Sync ();
|
||||
+ Console.WriteLine ("******* Got folders ");
|
||||
+ backgroundThread = null;
|
||||
+ RemoveHandlers ();
|
||||
+ }
|
||||
+
|
||||
+ private static void RemoveHandlers ()
|
||||
+ {
|
||||
+ sessionBus.NameOwnerChanged -= OnDBusNameOwnerChanged;
|
||||
+ deskIceDaemon.Authenticated -= OnAuthenticated;
|
||||
+ }
|
||||
+
|
||||
+ static void OnAuthenticated (string server, string username)
|
||||
+ {
|
||||
+ Console.WriteLine ("Auth done\n");
|
||||
+ StartFetchingFolder ();
|
||||
+ }
|
||||
+
|
||||
+ static void OnDBusNameOwnerChanged (string serviceName, string oldOwner, string newOwner)
|
||||
+ {
|
||||
+
|
||||
+ Console.WriteLine ("O/p {0} {1}", serviceName, DaemonNamespace);
|
||||
+ if (serviceName == null)
|
||||
+ return;
|
||||
+ if (serviceName.CompareTo (DaemonNamespace) != 0)
|
||||
+ return;
|
||||
+
|
||||
+ if (oldOwner != null && oldOwner.Length > 0) {
|
||||
+ // The daemon just went away
|
||||
+ // TODO: What should the Navigator do if the ICEcore Daemon suddenly exits?
|
||||
+ Console.WriteLine ("TODO: What should the Navigator do if the ICEcore Daemon suddenly exits?");
|
||||
+ } else {
|
||||
+ // Connect to the new instance of the daemon
|
||||
+ ConnectToICEcoreDaemon ();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /// <summary>
|
||||
+ /// Connect with the ICEcore Daemon and register event handlers.
|
||||
+ /// </summary>
|
||||
+ static void ConnectToICEcoreDaemon ()
|
||||
+ {
|
||||
+ Console.WriteLine ("Connecting the navigator to the ICEcore Daemon");
|
||||
+ // Check DBus to see if the Daemon is currently running
|
||||
+ deskIceDaemon =
|
||||
+ Bus.Session.GetObject<IDaemon> (DaemonNamespace, DaemonPath);
|
||||
+ // Set up the daemon event handlers
|
||||
+ deskIceDaemon.Authenticated += OnAuthenticated;
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
diff -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<SourceGroup> groupsToRemove = new List<SourceGroup> ();
|
||||
+ foreach (SourceGroup group in srcList.Groups)
|
||||
+ {
|
||||
+ if (group.BaseUri.StartsWith (baseUri))
|
||||
+ {
|
||||
+ /// Currently we remove all sharepoint calendars
|
||||
+ groupsToRemove.Add (group);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ foreach (SourceGroup group in groupsToRemove)
|
||||
+ {
|
||||
+ srcList.RemoveGroup (group);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
diff -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 @@
|
||||
<placeholder name="ComponentItems"/>
|
||||
</submenu>
|
||||
|
||||
+ <placeholder name="FileNewItems"/>
|
||||
+
|
||||
<menuitem name="OpenNewWindow" verb="" pixtype="pixbuf"/>
|
||||
|
||||
<separator f="" name="eshell4"/>
|
945
sp-meetingworkspace-ui.patch
Normal file
945
sp-meetingworkspace-ui.patch
Normal file
@ -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 <e-util/e-util-private.h>
|
||||
#include <evolution-shell-component-utils.h>
|
||||
|
||||
+#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 =
|
||||
"<ui>"
|
||||
" <menubar action='main-menu'>"
|
||||
" <menu action='view-menu'>"
|
||||
-" <menuitem action='view-type'/>"
|
||||
+" <menuitem action='view-type'/>"
|
||||
" <menuitem action='view-status'/>"
|
||||
" <menuitem action='view-role'/>"
|
||||
" <menuitem action='view-rsvp'/>"
|
||||
@@ -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 @@
|
||||
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
|
||||
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
|
||||
+
|
||||
+<glade-interface>
|
||||
+
|
||||
+<widget class="GtkDialog" id="meeting-workspace-dialog">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="title" translatable="yes">Meeting Workspace</property>
|
||||
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||
+ <property name="window_position">GTK_WIN_POS_NONE</property>
|
||||
+ <property name="modal">False</property>
|
||||
+ <property name="resizable">True</property>
|
||||
+ <property name="destroy_with_parent">False</property>
|
||||
+ <property name="decorated">True</property>
|
||||
+ <property name="skip_taskbar_hint">False</property>
|
||||
+ <property name="skip_pager_hint">False</property>
|
||||
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
|
||||
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
|
||||
+ <property name="focus_on_map">True</property>
|
||||
+ <property name="urgency_hint">False</property>
|
||||
+ <property name="has_separator">True</property>
|
||||
+
|
||||
+ <child internal-child="vbox">
|
||||
+ <widget class="GtkVBox" id="dialog-vbox1">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="homogeneous">False</property>
|
||||
+ <property name="spacing">0</property>
|
||||
+
|
||||
+ <child internal-child="action_area">
|
||||
+ <widget class="GtkHButtonBox" id="dialog-action_area1">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkButton" id="cancelbutton1">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="can_default">True</property>
|
||||
+ <property name="can_focus">True</property>
|
||||
+ <property name="label">gtk-cancel</property>
|
||||
+ <property name="use_stock">True</property>
|
||||
+ <property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
+ <property name="focus_on_click">True</property>
|
||||
+ <property name="response_id">-6</property>
|
||||
+ </widget>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkButton" id="okbutton1">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="can_default">True</property>
|
||||
+ <property name="can_focus">True</property>
|
||||
+ <property name="label">gtk-ok</property>
|
||||
+ <property name="use_stock">True</property>
|
||||
+ <property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
+ <property name="focus_on_click">True</property>
|
||||
+ <property name="response_id">-5</property>
|
||||
+ </widget>
|
||||
+ </child>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">False</property>
|
||||
+ <property name="fill">True</property>
|
||||
+ <property name="pack_type">GTK_PACK_END</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkVBox" id="vbox3">
|
||||
+ <property name="border_width">12</property>
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="homogeneous">False</property>
|
||||
+ <property name="spacing">12</property>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkRadioButton" id="create-radio">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="can_focus">True</property>
|
||||
+ <property name="label" translatable="yes">C_reate meeting workspace</property>
|
||||
+ <property name="use_underline">True</property>
|
||||
+ <property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
+ <property name="focus_on_click">True</property>
|
||||
+ <property name="active">False</property>
|
||||
+ <property name="inconsistent">False</property>
|
||||
+ <property name="draw_indicator">True</property>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">False</property>
|
||||
+ <property name="fill">False</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkTable" id="table1">
|
||||
+ <property name="border_width">12</property>
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="n_rows">2</property>
|
||||
+ <property name="n_columns">2</property>
|
||||
+ <property name="homogeneous">False</property>
|
||||
+ <property name="row_spacing">12</property>
|
||||
+ <property name="column_spacing">12</property>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkLabel" id="title-label">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="label" translatable="yes">T_itle:</property>
|
||||
+ <property name="use_underline">True</property>
|
||||
+ <property name="use_markup">False</property>
|
||||
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
+ <property name="wrap">False</property>
|
||||
+ <property name="selectable">False</property>
|
||||
+ <property name="xalign">0</property>
|
||||
+ <property name="yalign">0.5</property>
|
||||
+ <property name="xpad">0</property>
|
||||
+ <property name="ypad">0</property>
|
||||
+ <property name="mnemonic_widget">title-entry</property>
|
||||
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
+ <property name="width_chars">-1</property>
|
||||
+ <property name="single_line_mode">False</property>
|
||||
+ <property name="angle">0</property>
|
||||
+ <accessibility>
|
||||
+ <atkrelation target="title-entry" type="label-for"/>
|
||||
+ </accessibility>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="left_attach">0</property>
|
||||
+ <property name="right_attach">1</property>
|
||||
+ <property name="top_attach">0</property>
|
||||
+ <property name="bottom_attach">1</property>
|
||||
+ <property name="x_options">fill</property>
|
||||
+ <property name="y_options"></property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkLabel" id="template-label">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="label" translatable="yes">T_emplate:</property>
|
||||
+ <property name="use_underline">True</property>
|
||||
+ <property name="use_markup">False</property>
|
||||
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
+ <property name="wrap">False</property>
|
||||
+ <property name="selectable">False</property>
|
||||
+ <property name="xalign">0</property>
|
||||
+ <property name="yalign">0.5</property>
|
||||
+ <property name="xpad">0</property>
|
||||
+ <property name="ypad">0</property>
|
||||
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
+ <property name="width_chars">-1</property>
|
||||
+ <property name="single_line_mode">False</property>
|
||||
+ <property name="angle">0</property>
|
||||
+ <accessibility>
|
||||
+ <atkrelation target="template-combo" type="label-for"/>
|
||||
+ </accessibility>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="left_attach">0</property>
|
||||
+ <property name="right_attach">1</property>
|
||||
+ <property name="top_attach">1</property>
|
||||
+ <property name="bottom_attach">2</property>
|
||||
+ <property name="x_options">fill</property>
|
||||
+ <property name="y_options"></property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkEntry" id="title-entry">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="can_focus">True</property>
|
||||
+ <property name="editable">True</property>
|
||||
+ <property name="visibility">True</property>
|
||||
+ <property name="max_length">0</property>
|
||||
+ <property name="text" translatable="yes"></property>
|
||||
+ <property name="has_frame">True</property>
|
||||
+ <property name="invisible_char">●</property>
|
||||
+ <property name="activates_default">False</property>
|
||||
+ <accessibility>
|
||||
+ <atkrelation target="title-label" type="labelled-by"/>
|
||||
+ </accessibility>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="left_attach">1</property>
|
||||
+ <property name="right_attach">2</property>
|
||||
+ <property name="top_attach">0</property>
|
||||
+ <property name="bottom_attach">1</property>
|
||||
+ <property name="y_options"></property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkComboBoxEntry" id="template-combo">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="items" translatable="yes">Basic Meeting Workspace
|
||||
+Blank Meeting Workspace
|
||||
+Decision Meeting Workspace
|
||||
+Social Meeting Workspace
|
||||
+Multipage Meeting Workspace</property>
|
||||
+ <property name="add_tearoffs">False</property>
|
||||
+ <property name="has_frame">True</property>
|
||||
+ <property name="focus_on_click">True</property>
|
||||
+ <accessibility>
|
||||
+ <atkrelation target="template-label" type="labelled-by"/>
|
||||
+ </accessibility>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="left_attach">1</property>
|
||||
+ <property name="right_attach">2</property>
|
||||
+ <property name="top_attach">1</property>
|
||||
+ <property name="bottom_attach">2</property>
|
||||
+ <property name="x_options">fill</property>
|
||||
+ <property name="y_options">fill</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">True</property>
|
||||
+ <property name="fill">True</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkRadioButton" id="link-radio">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="can_focus">True</property>
|
||||
+ <property name="label" translatable="yes">_Link to existing workspace</property>
|
||||
+ <property name="use_underline">True</property>
|
||||
+ <property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
+ <property name="focus_on_click">True</property>
|
||||
+ <property name="active">False</property>
|
||||
+ <property name="inconsistent">False</property>
|
||||
+ <property name="draw_indicator">True</property>
|
||||
+ <property name="group">create-radio</property>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">False</property>
|
||||
+ <property name="fill">False</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkHBox" id="hbox2">
|
||||
+ <property name="border_width">12</property>
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="homogeneous">False</property>
|
||||
+ <property name="spacing">12</property>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkLabel" id="workspaces-label">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="label" translatable="yes">Wo_rkspaces:</property>
|
||||
+ <property name="use_underline">True</property>
|
||||
+ <property name="use_markup">False</property>
|
||||
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
+ <property name="wrap">False</property>
|
||||
+ <property name="selectable">False</property>
|
||||
+ <property name="xalign">0.5</property>
|
||||
+ <property name="yalign">0.5</property>
|
||||
+ <property name="xpad">0</property>
|
||||
+ <property name="ypad">0</property>
|
||||
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
+ <property name="width_chars">-1</property>
|
||||
+ <property name="single_line_mode">False</property>
|
||||
+ <property name="angle">0</property>
|
||||
+ <accessibility>
|
||||
+ <atkrelation target="workspaces-combo" type="label-for"/>
|
||||
+ </accessibility>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">False</property>
|
||||
+ <property name="fill">False</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkComboBoxEntry" id="workspaces-combo">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="add_tearoffs">False</property>
|
||||
+ <property name="has_frame">True</property>
|
||||
+ <property name="focus_on_click">True</property>
|
||||
+ <accessibility>
|
||||
+ <atkrelation target="workspaces-label" type="labelled-by"/>
|
||||
+ </accessibility>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">True</property>
|
||||
+ <property name="fill">True</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">True</property>
|
||||
+ <property name="fill">True</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">True</property>
|
||||
+ <property name="fill">True</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+
|
||||
+ <child>
|
||||
+ <widget class="GtkStatusbar" id="statusbar">
|
||||
+ <property name="visible">True</property>
|
||||
+ <property name="has_resize_grip">True</property>
|
||||
+ </widget>
|
||||
+ <packing>
|
||||
+ <property name="padding">0</property>
|
||||
+ <property name="expand">False</property>
|
||||
+ <property name="fill">False</property>
|
||||
+ </packing>
|
||||
+ </child>
|
||||
+ </widget>
|
||||
+ </child>
|
||||
+</widget>
|
||||
+
|
||||
+</glade-interface>
|
||||
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 @@
|
||||
+<e-plugin-list>
|
||||
+ <e-plugin
|
||||
+ type="shlib"
|
||||
+ id="org.gnome.evolution.calendar-meeting-workspace"
|
||||
+ _name="Create or Link to meeting workspaces"
|
||||
+ location="@PLUGINDIR@/liborg-gnome-sharepoint-features@SOEXT@">
|
||||
+
|
||||
+ <_description>Plugin to create or link to a meeting workspace</_description>
|
||||
+
|
||||
+ <author name="Chenthill" email="pchenthill@novell.com"/>
|
||||
+
|
||||
+ <hook class="org.gnome.evolution.calendar.events:1.0">
|
||||
+ <event
|
||||
+ id="editor.inited"
|
||||
+ handle="org_gnome_meeting_workspace"
|
||||
+ target="compeditor"
|
||||
+ />
|
||||
+ </hook>
|
||||
+ </e-plugin>
|
||||
+</e-plugin-list>
|
||||
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 <config.h>
|
||||
+#endif
|
||||
+
|
||||
+#include <gtk/gtk.h>
|
||||
+#include <e-util/e-plugin.h>
|
||||
+#include <glib/gi18n.h>
|
||||
+#include <e-util/e-plugin-ui.h>
|
||||
+#include <e-util/e-util-private.h>
|
||||
+#include <e-cal-event.h>
|
||||
+#include <calendar/gui/dialogs/event-editor.h>
|
||||
+#include <dbus/dbus-glib.h>
|
||||
+#include <dbus/dbus-glib-lowlevel.h>
|
||||
+#include <glade/glade.h>
|
||||
+
|
||||
+static void action_meeting_workspace (GtkAction *action, EventEditor *editor);
|
||||
+void org_gnome_meeting_workspace (EPlugin *ep, ECalEventTargetCompEditor *target);
|
||||
+
|
||||
+static const gchar *ui =
|
||||
+"<ui>"
|
||||
+" <toolbar name='main-toolbar'>"
|
||||
+" <toolitem action='meeting-workspace'/>"
|
||||
+" </toolbar>"
|
||||
+"</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
|
440
sp-process-meetings.diff
Normal file
440
sp-process-meetings.diff
Normal file
@ -0,0 +1,440 @@
|
||||
commit 18a2f5f1206e7a7583db2b8c47862f79abf13e50
|
||||
Author: chenthill <chen@rocky.blr.novell.com>
|
||||
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"
|
||||
/>
|
||||
</hook>
|
||||
+
|
||||
+ <hook class="org.gnome.evolution.calendar.events:1.0">
|
||||
+ <event
|
||||
+ id="editor.commit"
|
||||
+ handle="org_gnome_comp_commit"
|
||||
+ target="compeditor"
|
||||
+ />
|
||||
+ </hook>
|
||||
+
|
||||
+ <hook class="org.gnome.evolution.calendar.popup:1.0">
|
||||
+ <menu id="org.gnome.evolution.calendar.view.popup" target="select" factory = "org_gnome_process_meeting">
|
||||
+ </menu>
|
||||
+ </hook>
|
||||
+
|
||||
</e-plugin>
|
||||
</e-plugin-list>
|
||||
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 <config.h>
|
||||
+#endif
|
||||
+
|
||||
+#include <gtk/gtk.h>
|
||||
+#include <e-util/e-plugin.h>
|
||||
+#include <glib/gi18n.h>
|
||||
+#include <e-util/e-plugin-ui.h>
|
||||
+#include <e-util/e-util-private.h>
|
||||
+#include <e-cal-event.h>
|
||||
+#include <calendar/gui/dialogs/event-editor.h>
|
||||
+
|
||||
+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 @@
|
||||
+<?xml version="1.0" encoding="UTF-8"?>
|
||||
+<error-list domain="org.gnome.evolution.sharepoint">
|
||||
+
|
||||
+</error-list>
|
||||
+
|
||||
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 <http://www.gnu.org/licenses/>
|
||||
+ *
|
||||
+ *
|
||||
+ * Authors:
|
||||
+ * Chenthill Palanisamy (pchenthill@novell.com)
|
||||
+ *
|
||||
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#ifdef HAVE_CONFIG_H
|
||||
+#include <config.h>
|
||||
+#endif
|
||||
+
|
||||
+#include <string.h>
|
||||
+#include <glib/gi18n.h>
|
||||
+#include <gtk/gtk.h>
|
||||
+#include <calendar/gui/e-cal-popup.h>
|
||||
+#include <calendar/gui/e-calendar-view.h>
|
||||
+#include <calendar/gui/itip-utils.h>
|
||||
+#include <e-util/e-error.h>
|
||||
+#include <libecal/e-cal.h>
|
||||
+
|
||||
+
|
||||
+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);
|
||||
+}
|
236
sp-tasks-setup.diff
Normal file
236
sp-tasks-setup.diff
Normal file
@ -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.IBus> ("org.freedesktop.DBus",
|
||||
new ObjectPath ("/org/freedesktop/DBus"));
|
||||
- sessionBus.NameOwnerChanged += OnDBusNameOwnerChanged;
|
||||
|
||||
// Force the daemon to start up if it's not already running
|
||||
if (Bus.Session.NameHasOwner (DaemonNamespace) == false)
|
||||
@@ -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<SourceGroup> groupsToRemove = new List<SourceGroup> ();
|
||||
- foreach (SourceGroup group in srcList.Groups)
|
||||
+ List<SourceGroup> calGroupsToRemove = new List<SourceGroup> ();
|
||||
+ 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<SourceGroup> TaskGroupsToRemove = new List<SourceGroup> ();
|
||||
+
|
||||
+ 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);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user