[evolution-kolab] EPlugin: read MYRIGHTS and ACL from IMAP server and display result



commit ce7846c0ab6f21a09088223fe9349dcb705ad745
Author: Christian Hilberg <hilberg kernelconcepts de>
Date:   Fri Oct 5 18:28:31 2012 +0200

    EPlugin: read MYRIGHTS and ACL from IMAP server and display result
    
    * in the "KolabFolderProperties..." context menu dialog,
      read the ACL and MYRIGHTS data from the IMAP server
      and update the UI accordingly for displaying that data

 src/eplugin/e-kolab-folder-permissions.c |   63 ++++++++++++++++++++++++++++--
 1 files changed, 59 insertions(+), 4 deletions(-)
---
diff --git a/src/eplugin/e-kolab-folder-permissions.c b/src/eplugin/e-kolab-folder-permissions.c
index 7abca84..d114551 100644
--- a/src/eplugin/e-kolab-folder-permissions.c
+++ b/src/eplugin/e-kolab-folder-permissions.c
@@ -363,7 +363,7 @@ e_kolab_folder_permissions_ui_new (void)
 	gtk_widget_set_margin_right (myrights_lbl, 4);
 	gtk_widget_set_margin_top (myrights_lbl, 2);
 	gtk_widget_set_margin_bottom (myrights_lbl, 2);
-	uidata->widgets->myrights_lbl = myrights;
+	uidata->widgets->myrights_lbl = myrights_lbl;
 	gtk_container_add (GTK_CONTAINER (myrights), myrights_lbl);
 	gtk_grid_attach (GTK_GRID (grid), myrights, 0, row, 2, 1);
 
@@ -426,9 +426,53 @@ e_kolab_folder_permissions_ui_free (KolabFolderPermUIData *uidata)
 void
 e_kolab_folder_permissions_ui_update_from_uidata (KolabFolderPermUIData *uidata)
 {
+	GtkTreeView *treeview = NULL;
+	GtkListStore *liststore = NULL;
+	GList *acl_ptr = NULL;
+
 	g_return_if_fail (uidata != NULL);
+	g_return_if_fail (uidata->permissions != NULL);
+	g_return_if_fail (uidata->widgets != NULL);
+	g_return_if_fail (GTK_IS_TREE_VIEW (uidata->widgets->treeview));
+	g_return_if_fail (GTK_IS_LABEL (uidata->widgets->myrights_lbl));
 
-	g_warning ("%s: FIXME implement me", __func__);
+	treeview = GTK_TREE_VIEW (uidata->widgets->treeview);
+	liststore = GTK_LIST_STORE (gtk_tree_view_get_model (treeview));
+
+	acl_ptr = uidata->permissions->acl;
+	while (acl_ptr != NULL) {
+		CamelImapxAclEntry *entry = NULL;
+		gchar *access_id = NULL;
+		gchar *rights = NULL;
+
+		entry = (CamelImapxAclEntry *) acl_ptr->data;
+		if (entry == NULL)
+			goto skip;
+
+		access_id = entry->access_id;
+		rights = entry->rights;
+
+		gtk_list_store_insert_with_values (liststore,
+		                                   NULL, /* GtkTreeIter not needed */
+		                                   -1,   /* append to liststore    */
+		                                   0, g_strdup (access_id),
+		                                   1, g_strdup (rights),
+		                                   -1);
+	skip:
+		acl_ptr = g_list_next (acl_ptr);
+	}
+
+	if (uidata->permissions->myrights != NULL) {
+		GtkWidget *label = uidata->widgets->myrights_lbl;
+		gpointer data = uidata->permissions->myrights->data;
+		gchar *rights = NULL;
+
+		if (data != NULL)
+			rights = ((CamelImapxAclEntry *) data)->rights;
+
+		gtk_label_set_text (GTK_LABEL (label),
+		                    rights);
+	}
 }
 
 gboolean
@@ -439,7 +483,7 @@ e_kolab_folder_permissions_ui_query_store (KolabFolderPermUIData *uidata,
 	CamelKolabIMAPXStore *kstore = NULL;
 	gchar *selected_path = NULL;
 	GError *tmp_err = NULL;
-	gboolean ok = FALSE;
+	gboolean ok = TRUE;
 
 	g_return_val_if_fail (uidata != NULL, FALSE);
 	/* cancellable may be NULL */
@@ -474,14 +518,25 @@ e_kolab_folder_permissions_ui_query_store (KolabFolderPermUIData *uidata,
 		                                                FALSE, /* general ACL (no myrights) */
 		                                                cancellable,
 		                                                &tmp_err);
-	g_free (selected_path);
+	if (tmp_err != NULL)
+		goto exit;
 
+	uidata->permissions->myrights =
+		camel_kolab_imapx_store_get_folder_permissions (kstore,
+		                                                selected_path,
+		                                                TRUE, /* myrights only */
+		                                                cancellable,
+		                                                &tmp_err);
  exit:
+
 	if (tmp_err != NULL) {
 		g_propagate_error (err, tmp_err);
 		ok = FALSE;
 	}
 
+	if (selected_path != NULL)
+		g_free (selected_path);
+
 	if (kstore != NULL)
 		g_object_unref (kstore);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]