view plugins/icq/contacts.c @ 1401:bf041349b11e

[gaim-migrate @ 1411] abliity to set accounts away independent of each other. also allows for all the other states (like in yahoo and icq). probably breaks MSN, so don't use it until rob fixes it. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Wed, 10 Jan 2001 22:15:24 +0000
parents 0a766047b4fd
children 4c510ca3563f
line wrap: on
line source

/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/*
$Id: contacts.c 1319 2000-12-19 10:08:29Z warmenhoven $
$Log$
Revision 1.2  2000/12/19 10:08:29  warmenhoven
Yay, new icqlib

Revision 1.5  2000/12/19 06:00:07  bills
moved members from ICQLINK to ICQLINK_private struct

Revision 1.4  2000/06/17 16:38:45  denis
New parameter was added in icq_ContactSetVis() for setting/resetting
'Visible to User' status.
Port's type was changed to unsigned short in icq_UserOnline callback.

Revision 1.3  2000/01/16 03:59:10  bills
reworked list code so list_nodes don't need to be inside item structures,
removed strlist code and replaced with generic list calls

Revision 1.2  1999/07/23 12:28:00  denis
Cleaned up.

Revision 1.1  1999/07/18 20:11:48  bills
added

*/

#include <stdlib.h>
#include <stdarg.h>

#include "icq.h"
#include "icqlib.h"
#include "icqtypes.h"
#include "util.h"
#include "list.h"
#include "contacts.h"

icq_ContactItem *icq_ContactNew(ICQLINK *link)
{
  icq_ContactItem *pcontact=
    (icq_ContactItem *)malloc(sizeof(icq_ContactItem));

  if(pcontact)
    pcontact->icqlink=link;

  return pcontact;
}

void icq_ContactDelete(void *p)
{
  free(p);
}

void icq_ContactAdd(ICQLINK *link, DWORD cuin)
{
  icq_ContactItem *p = icq_ContactNew(link);
  p->uin = cuin;
  p->vis_list = FALSE;

  list_enqueue(link->d->icq_ContactList, p);
}

void icq_ContactRemove(ICQLINK *link, DWORD cuin)
{
  icq_ContactItem *pcontact=icq_ContactFind(link, cuin);

  if (pcontact)
  {
    list_remove(link->d->icq_ContactList, pcontact);
    icq_ContactDelete(pcontact);
  }
}

void icq_ContactClear(ICQLINK *link)
{
  list_delete(link->d->icq_ContactList, icq_ContactDelete);
  link->d->icq_ContactList=list_new();
}

int _icq_ContactFind(void *p, va_list data)
{
  DWORD uin=va_arg(data, DWORD);

  return (((icq_ContactItem *)p)->uin == uin);
}

icq_ContactItem *icq_ContactFind(ICQLINK *link, DWORD cuin)
{
  return list_traverse(link->d->icq_ContactList, _icq_ContactFind, cuin);
}

void icq_ContactSetVis(ICQLINK *link, DWORD cuin, BYTE vu)
{
  icq_ContactItem *p = icq_ContactFind(link, cuin);
  if(p)
    p->vis_list = vu;
}

icq_ContactItem *icq_ContactGetFirst(ICQLINK *link)
{
  return list_first(link->d->icq_ContactList);
}

icq_ContactItem *icq_ContactGetNext(icq_ContactItem *pcontact)
{
  list_node *p=list_find(pcontact->icqlink->d->icq_ContactList, pcontact);

  if (p && p->next)
    return p->next->item;
  else
    return 0L;

}