⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abook-opts.c

📁 一个功能全面的电子邮件客户端
💻 C
📖 第 1 页 / 共 2 页
字号:
    free (bseek->data);  }  g_list_free (entry->email);  entry->email=NULL;  abook_entry_free (entry);  free (entry);}/* * Remember, we may be needing to find a substring of name. * In other words, the email address we are looking for may be * part of name, so strstr() must be used. */Abook_entry *abook_entry_seek_by_name (Abook *abook, char *name) {   /* Make sure we have a name to start with!!! */  g_return_val_if_fail (name != NULL, NULL);  if( !strlen(name) ) return NULL ;  if (abook) {    GList *seek;    Abook_entry *entry;    char *tmp=(char *)calloc (1024, sizeof (char));    for (seek=abook->entrys;seek;seek=seek->next) {      entry=(Abook_entry *)seek->data;#if 0      format_name (tmp, entry->first, entry->last);#else      format_name (1024, tmp, entry->first, entry->last, entry->def_email);#endif      /* Commented out by Greg for testing..I think strstr is really what we want!      if (strcasecmp (tmp, name)==0) {      */      if( strcasecmp( tmp, name ) == 0 ) {	free (tmp);	return entry;      }    }    free (tmp);  } else {    GList *seek;    Abook_entry *entry;    for (seek=abooks;seek;seek=seek->next) {      abook=(Abook *)seek->data;      if (abook) {	entry=abook_entry_seek_by_name (abook, name);	if (entry)	  return entry;      }    }  }  return NULL;}Abook_entry *abook_entry_seek_by_email (Abook *abook, char *email) {   g_return_val_if_fail (email != NULL, NULL);  if (abook) {    GList *seek;    GList *eseek;    Abook_entry *entry;    for (seek=abook->entrys;seek;seek=seek->next) {      entry=(Abook_entry *)seek->data;      for (eseek=entry->email;eseek;eseek=eseek->next) {#if 0	if (strcasecmp ((char *)eseek->data, email)==0) return entry ;#else	if( strstr( email, (char *)eseek->data ) ) return entry ;#endif      }    }  } else {    GList *seek;    Abook_entry *entry;    for (seek=abooks;seek;seek=seek->next) {      abook=seek->data;      entry=abook_entry_seek_by_email (abook, email);      if (entry)	return entry;    }  }  return NULL;}Abook_entry *abook_entry_seek_by_dname (Abook *abook, char *dname) {   g_return_val_if_fail (dname != NULL, NULL);  if (abook) {    GList *seek;    Abook_entry *entry;    for (seek=abook->entrys;seek;seek=seek->next) {      entry=(Abook_entry *)seek->data;      if( entry -> dn ) {	if (strcasecmp (entry->dn, dname)==0)	  return entry;      }    }  } else {    GList *seek;    Abook_entry *entry;    for (seek=abooks;seek;seek=seek->next) {      abook=seek->data;      entry=abook_entry_seek_by_dname (abook, dname);      if (entry)	return entry;    }  }  return NULL;}Abook_entry *abook_entry_seek_by_nickname (Abook *abook, char *nickname) {  g_return_val_if_fail (nickname != NULL, NULL);  if (abook) {    GList *seek;    Abook_entry *entry;    for (seek=abook->entrys;seek;seek=seek->next) {      entry=(Abook_entry *)seek->data;      if (strcasecmp (entry->nickname, nickname)==0) {        return entry;      }    }  } else {    GList *seek;    Abook_entry *entry;    for (seek=abooks;seek;seek=seek->next) {      abook=(Abook *)seek->data;      if (abook) {        entry=abook_entry_seek_by_nickname (abook, nickname);        if (entry)          return entry;      }    }  }  return NULL;}Abook *abook_entry_find_book (Abook_entry *entry) {  GList *seek;  for (seek=abooks;seek;seek=seek->next) {    Abook *abook=seek->data;    if (g_list_find (abook->entrys, entry))      return abook;  }  return NULL;}char *abook_entry_add_email (Abook_entry *entry, char *email) {   char *tmp;  g_return_val_if_fail (entry != NULL, NULL);  g_return_val_if_fail (email != NULL, NULL);  tmp=strdup (email);  entry->email=g_list_append (entry->email, tmp);  return tmp;}void abook_entry_remove_email (Abook_entry *entry, char *email) {  GList *seek;  char *data=NULL;  g_return_if_fail (entry != NULL);  g_return_if_fail (email != NULL);	  for (seek=entry->email;seek;seek=seek->next) {    if (strcasecmp ((char *)seek->data, email)==0) {      if (strcasecmp (entry->def_email, email)==0) {	if (seek->next) {	  entry->def_email=seek->next->data;	} else {	  if (seek->prev) {	    entry->def_email=seek->prev->data;	  } else {	    entry->def_email=NULL;	  }	}      }      data=seek->data;    }  }  if (data)    entry->email=g_list_remove (entry->email, data);}char *abook_entry_edit_email (Abook_entry *entry, char *oldmail, char *newmail) {  GList *seek;	  g_return_val_if_fail (entry != NULL, NULL);  for (seek=entry->email;seek;seek=seek->next) {    if (strcasecmp (oldmail, (char *)seek->data)==0) {      free (seek->data);      seek->data=strdup (newmail);      if (strcasecmp (oldmail, entry->def_email)==0) {	entry->def_email=seek->data;      }      return (char *)seek->data;    }  }  return NULL;}char *abook_entry_has_email (Abook_entry *entry, char *email) {   GList *seek;  g_return_val_if_fail (entry != NULL, FALSE);  g_return_val_if_fail (email != NULL, FALSE);	  for (seek=entry->email;seek;seek=seek->next) {    if (strcasecmp ((char *)seek->data, email)==0)      return seek->data;  }  return NULL;}void abook_entry_set_default (Abook_entry *entry, char *email) {  char *tmp;  g_return_if_fail (entry != NULL);  g_return_if_fail (email != NULL);	  if (!abook_entry_has_email (entry, email)) {    tmp=abook_entry_add_email (entry, email);  } else {    tmp=abook_entry_has_email (entry, email);  }  entry->def_email=tmp;}Abook_group *abook_group_new (Abook *abook) {   Abook_group *group;  g_return_val_if_fail (abook != NULL, NULL);	  group=(Abook_group *)calloc (1, sizeof (Abook_group));	  abook->groups=g_list_append (abook->groups, group);	  return group;}void abook_group_destroy (Abook *abook, Abook_group *group) {   g_return_if_fail (abook != NULL);  g_return_if_fail (group != NULL);	  abook->groups=g_list_remove (abook->groups, group);	  if (group->name) free (group->name);  free (group);}Abook_group *abook_group_seek (Abook *abook, char *name) {   g_return_val_if_fail (abook != NULL, NULL);  g_return_val_if_fail (name != NULL, NULL);  if (abook) {    GList *seek;    Abook_group *group;    for (seek=abook->groups;seek;seek=seek->next) {      group=(Abook_group *)seek->data;      if (strcasecmp (group->name, name)==0) 	return group;    }  }  return NULL;}void abook_group_add_member (Abook_group *group, Abook_entry *entry) {   g_return_if_fail (group != NULL);  g_return_if_fail (entry != NULL);	  entry->groups=g_list_append (entry->groups, group);}void abook_group_remove_member (Abook_group *group, Abook_entry *entry) {   g_return_if_fail (group != NULL);  g_return_if_fail (entry != NULL);	  entry->groups=g_list_remove (entry->groups, group);}GList *abook_group_get_members (Abook_group *group) {  GList *seek;  GList *ret=NULL;  GList *eseek;  for (seek=abooks;seek;seek=seek->next) {    Abook *abook=seek->data;    GList *tmp=g_list_find (abook->groups, group);    if (tmp) {      for (eseek=abook->entrys;eseek;eseek=eseek->next) {	Abook_entry *entry=eseek->data;	if (g_list_find (entry->groups, group)) 	  ret=g_list_append (ret, entry);      }    }  }  return ret;}void abook_resolve_dnames (Abook *abook) {  GList *dseek, *gseek;  Abook_group *group;  Abook_entry *entry;  g_return_if_fail (abook != NULL);  for (gseek=abook->groups;gseek;gseek=gseek->next) {    group=gseek->data;    for (dseek=group->members;dseek;dseek=dseek->next) {      entry=abook_entry_seek_by_dname (abook, (char *)dseek->data);      if (entry) 	abook_group_add_member (group, entry);    }  }  return ;}Abook_entry *abook_create_dummy (char *email) {  Abook_entry *entry;  g_return_val_if_fail (abooks != NULL, NULL);  entry=abook_entry_new (abooks->data);  entry->def_email=strdup (email);  entry->dummy=TRUE;  return entry;} void abook_destroy_dummys () {  GList *seek;  GList *destroy=NULL;  for (seek=abooks;seek;seek=seek->next) {	    Abook *abook=seek->data;    GList *eseek;    for (eseek=abook->entrys;eseek;eseek=eseek->next) {      Abook_entry *entry=eseek->data;#if DEBUG > 6      printf ("eseek->data: %p\n", eseek);#endif      if (entry) {	if (entry->dummy) {#if DEBUG > 6	  printf ("Adding %p to llist\n", entry);	  printf ("destroy list length: %d\n", g_list_length (destroy));#endif	  destroy=g_list_append (destroy, entry);	}      } else {#ifdef DEBUG	printf ("Entry came out as NULL, not adding to llist\n");#endif      }    }#ifdef DEBUG    printf ("destroy list length: %d\n", g_list_length (destroy));#endif    for (eseek=destroy;eseek;eseek=eseek->next) {#if DEBUG > 1      printf ("eseek->data: %p\n", eseek->data);#endif      abook_entry_destroy (abook, eseek->data);    }    g_list_free (destroy);    destroy=NULL;  }}void abook_entry_dump (Abook_entry *entry) {#if DEBUG > 6  GList *seek;  g_return_if_fail (entry != NULL);  printf ("******** ENTRY dump\n");  printf ("	entry            :          <%p>\n", entry);  printf ("	entry->first     : '%20.20s'<%p>\n", entry->first, entry->first);  printf ("	entry->middle    : '%20.20s'<%p>\n", entry->middle, entry->middle);  printf ("	entry->last      : '%20.20s'<%p>\n", entry->last, entry->last);  printf ("	entry->title     : '%20.20s'<%p>\n", entry->title, entry->title);  printf ("	entry->nickname  : '%20.20s'<%p>\n", entry->nickname, entry->nickname);  printf ("     entry->sex       : '%20.20s'<%p>\n", entry->sex, entry->sex);  printf ("	entry->hphone    : '%20.20s'<%p>\n", entry->hphone, entry->hphone);  printf ("	entry->wphone    : '%20.20s'<%p>\n", entry->wphone, entry->wphone);  printf ("	entry->mphone    : '%20.20s'<%p>\n", entry->mphone, entry->mphone);  printf ("	entry->pager     : '%20.20s'<%p>\n", entry->pager, entry->pager);  printf ("	entry->fax       : '%20.20s'<%p>\n", entry->fax, entry->fax);  printf ("	entry->street    : '%20.20s'<%p>\n", entry->street, entry->street);  printf ("	entry->webpage   : '%20.20s'<%p>\n", entry->webpage, entry->webpage);  printf ("	entry->company   : '%20.20s'<%p>\n", entry->company, entry->company);  printf ("	entry->position  : '%20.20s'<%p>\n", entry->position, entry->position);  printf ("	entry->cstreet   : '%20.20s'<%p>\n", entry->cstreet, entry->cstreet);  printf ("	entry->ccity     : '%20.20s'<%p>\n", entry->ccity, entry->ccity);  printf ("	entry->cstate    : '%20.20s'<%p>\n", entry->cstate, entry->cstate);  printf ("	entry->czip      : '%20.20s'<%p>\n", entry->czip, entry->czip);  printf ("	entry->ccountry  : '%20.20s'<%p>\n", entry->ccountry, entry->ccountry);  printf ("	entry->coffice   : '%20.20s'<%p>\n", entry->coffice, entry->coffice);  printf ("	entry->cphone1   : '%20.20s'<%p>\n", entry->cphone1, entry->cphone1);  printf ("	entry->cphone2   : '%20.20s'<%p>\n", entry->cphone2, entry->cphone2);  printf ("	entry->cfax      : '%20.20s'<%p>\n", entry->cfax, entry->cfax);  printf ("	entry->cpager    : '%20.20s'<%p>\n", entry->cpager, entry->cpager);  printf ("	entry->cwebpage  : '%20.20s'<%p>\n", entry->cwebpage, entry->cwebpage);  printf ("	entry->cmanager  : '%20.20s'<%p>\n", entry->cmanager, entry->cmanager);  printf ("	entry->cassistant: '%20.20s'<%p>\n", entry->cassistant, entry->cassistant);  printf ("	entry->def_email : '%20.20s'<%p>\n", entry->def_email, entry->def_email);  printf ("	entry->notes     : '%20.20s'<%p>\n", entry->notes, entry->notes);  for (seek=entry->email;seek;seek=seek->next) {    printf ("%s; ", (char *)seek->data);  }  printf ("\n");#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -