ayttm-commits
[Top][All Lists]
Advanced

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

[Ayttm-commits] CVS: ayttm/src util.c,1.14,1.15 util.h,1.7,1.8 add_conta


From: Colin Leroy <address@hidden>
Subject: [Ayttm-commits] CVS: ayttm/src util.c,1.14,1.15 util.h,1.7,1.8 add_contact_window.c,1.12,1.13
Date: Sat, 18 Jan 2003 06:44:48 -0500

Update of /cvsroot/ayttm/ayttm/src
In directory subversions:/tmp/cvs-serv19555/src

Modified Files:
        util.c util.h add_contact_window.c 
Log Message:
Forbid contact & account move/add/del when not
online (avoid messing up server-side lists)


Index: util.c
===================================================================
RCS file: /cvsroot/ayttm/ayttm/src/util.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- util.c      16 Jan 2003 17:28:26 -0000      1.14
+++ util.c      18 Jan 2003 11:44:39 -0000      1.15
@@ -674,7 +674,7 @@
 }      
        
 eb_account * find_suitable_remote_account( eb_account * first, 
-                                                                               
   struct contact * rest )
+                                          struct contact * rest )
 {
        GList * node;
        eb_account * possibility = NULL;
@@ -1134,14 +1134,23 @@
 }
 
 
-void remove_account( eb_account * a )
+int remove_account( eb_account * a )
 {
     struct contact * c = a->account_contact;
-       buddy_logoff(a);
-       remove_account_line(a);
+    if (!find_suitable_local_account(NULL, a->service_id)) {
+       char *buff = g_strdup_printf(_("You should be connected to %s before 
removing this account"), 
+                                   get_service_name(a->service_id));
+       do_error_dialog(buff, _("Error"));
+       g_free(buff);
+       return 0;
+    }
+
+    buddy_logoff(a);
+    remove_account_line(a);
     c->accounts = g_list_remove(c->accounts, a);
     RUN_SERVICE(a)->del_user(a);
     g_free(a);
+    return 1;
 }
 void remove_contact( struct contact * c )
 {
@@ -1150,7 +1159,8 @@
         gtk_widget_destroy(c->chatwindow->window);
     while(c->accounts)
     {
-        remove_account(c->accounts->data);
+        if (!remove_account(c->accounts->data))
+               return;
     }
        remove_contact_line(c);
     g->members = g_list_remove(g->members, c);
@@ -1208,32 +1218,39 @@
 void add_account_verbose( gchar * contact, eb_account * account, gboolean 
verbosity )
 {
     struct contact * c = find_contact_by_nick( contact );
-       eb_account * ea = find_account_by_handle(account->handle, 
account->service_id);
-       if(ea)
-       {
-               if(!strcasecmp(ea->account_contact->nick, _("Unknown")))
-               {
-                       struct contact * c2 = ea->account_contact;
-                       remove_account(ea);
-                       if(g_list_length(c2->accounts) == 0)
-                       {
-                               remove_contact(c2);
-                       }
-               }
-               else
-               {
-                       char buff[2048];
-                       g_snprintf(buff, 2048, _("The account already exists on 
your\ncontact list at the following location\nGroup: %s\nContact: %s\nPlease 
delete this account before\nadding it elsewhere."), 
ea->account_contact->group->name, ea->account_contact->nick );
+    eb_account * ea = find_account_by_handle(account->handle, 
account->service_id);
+    if (!find_suitable_local_account(NULL, account->service_id)) {
+       char *buff = g_strdup_printf(_("You should be connected to %s before 
adding this account"), 
+                                       get_service_name(account->service_id));
+       do_error_dialog(buff, _("Error"));
+       g_free(buff);
+       return;
+    }
+    if(ea)
+    {      /* shouldn't it be ea->account_contact->group->name ? */
+           if(!strcasecmp(ea->account_contact->nick, _("Unknown"))) 
+           {
+                   struct contact * c2 = ea->account_contact;
+                   remove_account(ea);
+                   if(g_list_length(c2->accounts) == 0)
+                   {
+                           remove_contact(c2);
+                   }
+           }
+           else
+           {
+                   char buff[2048];
+                   g_snprintf(buff, 2048, _("The account already exists on 
your\ncontact list at the following location\nGroup: %s\nContact: %s\nPlease 
delete this account before\nadding it elsewhere."), 
ea->account_contact->group->name, ea->account_contact->nick );
 
-                       if( c && g_list_length(c->accounts) == 0)
-                       {
-                               remove_contact(c);
-                       }
-                       if(verbosity)
-                               do_error_dialog(buff, _("Error: account 
exists"));
-                       return;
-               }
-       }
+                   if( c && g_list_length(c->accounts) == 0)
+                   {
+                           remove_contact(c);
+                   }
+                   if(verbosity)
+                           do_error_dialog(buff, _("Error: account exists"));
+                   return;
+           }
+    }
     if( c )
     {
         c->accounts = g_list_append( c->accounts, account );
@@ -1334,7 +1351,15 @@
        struct contact *c = ea->account_contact;
        gchar * new_group = con->group->name;
        gchar *old_group = c->group->name;
-       
+
+       if (!find_suitable_local_account(NULL, ea->service_id)) {
+               char *buff = g_strdup_printf(_("You should be connected to %s 
before moving this account"), 
+                                               
get_service_name(ea->service_id));
+               do_error_dialog(buff, _("Error"));
+               g_free(buff);
+               return;
+       }
+               
        handle_group_change(ea, old_group, new_group);
 
        c->accounts = g_list_remove(c->accounts, ea);
@@ -1368,6 +1393,28 @@
        grouplist * g = c->group;
        struct contact *con;
        GList *l = c->accounts;
+       char *not_connected = NULL;
+       for(; l; l=l->next)
+       {
+               eb_account *ea = l->data;
+               if (!find_suitable_local_account(NULL, ea->service_id)) {
+                       if (not_connected && 
!strstr(not_connected,get_service_name(ea->service_id))) {
+                               char *old = not_connected;
+                               not_connected = g_strdup_printf("%s,%s", 
not_connected, get_service_name(ea->service_id));
+                               g_free(old);
+                       } else if (!not_connected)
+                               not_connected = 
g_strdup(get_service_name(ea->service_id));
+               }
+       }
+       if(not_connected != NULL) {
+               char *buff = g_strdup_printf(_("You should be connected to %s 
before moving this contact"), 
+                                           not_connected);
+               do_error_dialog(buff, _("Error"));
+               g_free(buff);
+               g_free(not_connected);
+               return;
+       }
+       l = c->accounts;
        
        g->members = g_list_remove(g->members, c);
        remove_contact_line(c);

Index: util.h
===================================================================
RCS file: /cvsroot/ayttm/ayttm/src/util.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- util.h      16 Jan 2003 17:28:26 -0000      1.7
+++ util.h      18 Jan 2003 11:44:39 -0000      1.8
@@ -91,7 +91,7 @@
 eb_account * find_account_by_handle_normalized( gchar * handle, gint type );
 eb_local_account * find_local_account_by_handle( gchar * handle, gint type );
 void strip_html(gchar * text);
-void remove_account( eb_account * a );
+int remove_account( eb_account * a );
 void remove_contact( struct contact * c );
 void rename_contact( struct contact * c, char *newname);
 void remove_group( grouplist * g );

Index: add_contact_window.c
===================================================================
RCS file: /cvsroot/ayttm/ayttm/src/add_contact_window.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- add_contact_window.c        17 Jan 2003 23:43:11 -0000      1.12
+++ add_contact_window.c        18 Jan 2003 11:44:39 -0000      1.13
@@ -227,6 +227,8 @@
        }  
        
        add_account(con->nick, ea);
+       if (g_list_length(con->accounts) == 0)
+               remove_contact(con);
        update_contact_list ();
        write_contact_list();
        gtk_widget_destroy(add_contact_window);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]