mcabber/buddies.c
author mikael
Sun, 27 Mar 2005 19:32:38 +0000
changeset 22 6a97e7cd00d9
parent 16 00183c49c45e
permissions -rw-r--r--
[/trunk] Changeset 37 by mikael * Unexport the scr_SearchWindow() function. Use the new scr_IsHiddenMessage() function instead.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
     1
#include <stdio.h>
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
     2
#include <stdlib.h>
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
     3
#include <string.h>
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
     4
#include <ncurses.h>
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
     5
#include <panel.h>
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
     6
#include "screen.h"
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
     7
#include "buddies.h"
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
     8
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
     9
#include "lang.h"
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    10
#include "utils.h"
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    11
#include "server.h"
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    12
#include "list.h"
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    13
#include "harddefines.h"
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    14
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    15
/* global vars for BUDDIES.C */
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    16
int buddySelected = 1;		/* Hold the selected Buddy  */
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    17
int buddyOffset = 0;		/* Hold the roster offset   */
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    18
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    19
static LIST_HEAD(buddy_list);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    20
static LIST_HEAD(sorted_buddies);
13
4c3d7b8a29c4 [/trunk] Changeset 28 by mikael
mikael
parents: 10
diff changeset
    21
0
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    22
#define buddy_entry(n) list_entry(n, buddy_entry_t, list)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    23
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    24
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    25
void bud_SetBuddyStatus(char *jidfrom, int status)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    26
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    27
  struct list_head *pos, *n;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    28
  buddy_entry_t *tmp;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    29
  int changed = 0;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    30
  char *buffer = (char *) malloc(4096);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    31
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    32
  list_for_each_safe(pos, n, &buddy_list) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    33
    tmp = buddy_entry(pos);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    34
    if (!strcmp(tmp->jid, jidfrom)) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    35
      if (tmp->flags != status) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    36
	tmp->flags = status;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    37
	changed = 1;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    38
      }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    39
      break;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    40
    }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    41
  }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    42
  if (changed) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    43
    bud_DrawRoster(scr_GetRosterWindow());
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    44
    switch (status) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    45
    case FLAG_BUDDY_DISCONNECTED:
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    46
      sprintf(buffer, "--> %s %s!", jidfrom, i18n("disconected"));
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    47
      break;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    48
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    49
    case FLAG_BUDDY_CONNECTED:
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    50
      sprintf(buffer, "--> %s %s!", jidfrom, i18n("connected"));
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    51
      break;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    52
    }
9
455ab6bc14ac [/trunk] Changeset 24 by mikael
mikael
parents: 0
diff changeset
    53
    scr_LogPrint("%s", buffer);
0
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    54
  }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    55
  free(buffer);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    56
}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    57
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    58
int compara(buddy_entry_t * t1, buddy_entry_t * t2)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    59
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    60
  const char *s1 =
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    61
      (const char *) (STR_EMPTY(t1->name) ? t1->jid : t1->name);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    62
  const char *s2 =
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    63
      (const char *) (STR_EMPTY(t2->name) ? t2->jid : t2->name);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    64
  return strcasecmp(s1, s2);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    65
}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    66
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    67
void bud_SortRoster(void)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    68
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    69
  buddy_entry_t *indice, *tmp;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    70
  struct list_head *pos, *n;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    71
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    72
  while (!list_empty(&buddy_list)) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    73
    indice = NULL;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    74
    tmp = NULL;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    75
    list_for_each_safe(pos, n, &buddy_list) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    76
      if (!indice) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    77
	indice = buddy_entry(pos);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    78
	tmp = buddy_entry(pos);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    79
      } else {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    80
	tmp = buddy_entry(pos);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    81
	if (compara(indice, tmp) > 0) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    82
	  indice = tmp;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    83
	}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    84
      }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    85
    }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    86
    list_move_tail(&indice->list, &sorted_buddies);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    87
  }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    88
  list_splice(&sorted_buddies, &buddy_list);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    89
}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    90
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    91
void bud_ParseBuddies(char *roster)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    92
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    93
  buddy_entry_t *tmp = NULL;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    94
  char *aux;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    95
  char *p, *str;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    96
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    97
  ut_WriteLog("[roster]: %s\n\n", roster);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    98
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
    99
  while ((aux = ut_strrstr(roster, "<item")) != NULL) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   100
    char *jid = getattr(aux, "jid='");
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   101
    char *name = getattr(aux, "name='");
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   102
    char *group = gettag(aux, "group='");
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   103
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   104
    *aux = '\0';
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   105
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   106
    tmp = (buddy_entry_t *) calloc(1, sizeof(buddy_entry_t));
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   107
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   108
    tmp->flags = FLAG_BUDDY_DISCONNECTED;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   109
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   110
    if (strncmp(jid, "UNK", 3)) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   111
      char *res = strstr(jid, "/");
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   112
      if (res)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   113
	*res = '\0';
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   114
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   115
      tmp->jid = (char *) malloc(strlen(jid) + 1);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   116
      strcpy(tmp->jid, jid);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   117
      free(jid);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   118
    }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   119
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   120
    if (strncmp(name, "UNK", 3)) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   121
      tmp->name = (char *) calloc(1, strlen(name) + 1);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   122
      strcpy(tmp->name, name);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   123
      free(name);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   124
    } else {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   125
      tmp->name = (char *) calloc(1, strlen(tmp->jid) + 1);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   126
      str = strdup(tmp->jid);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   127
      p = strstr(str, "@");
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   128
      if (p) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   129
	*p = '\0';
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   130
      }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   131
      strncpy(tmp->name, str, 18);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   132
      free(str);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   133
    }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   134
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   135
    if (strncmp(group, "UNK", 3)) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   136
      tmp->group = (char *) malloc(strlen(group) + 1);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   137
      strcpy(tmp->group, group);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   138
      free(group);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   139
    }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   140
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   141
    if (!strncmp(tmp->jid, "msn.", 4)) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   142
      sprintf(tmp->name, "%c MSN %c", 254, 254);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   143
    }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   144
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   145
    if (!STR_EMPTY(tmp->jid)) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   146
      list_add_tail(&tmp->list, &buddy_list);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   147
    } else {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   148
      if (tmp->jid)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   149
	free(tmp->jid);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   150
      if (tmp->name)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   151
	free(tmp->name);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   152
      if (tmp->group)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   153
	free(tmp->group);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   154
      free(tmp);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   155
    }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   156
  }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   157
  free(roster);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   158
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   159
  bud_SortRoster();
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   160
}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   161
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   162
/* Desc: Initialize buddy list
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   163
 * 
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   164
 * In : none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   165
 * Out: none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   166
 *
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   167
 * Note: none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   168
 */
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   169
void bud_InitBuddies(int sock)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   170
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   171
  char *roster;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   172
  roster = srv_getroster(sock);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   173
  bud_ParseBuddies(roster);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   174
}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   175
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   176
/* Desc: Destroy (and free) buddy list
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   177
 * 
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   178
 * In : none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   179
 * Out: none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   180
 *
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   181
 * Note: none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   182
 */
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   183
void bud_TerminateBuddies(void)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   184
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   185
}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   186
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   187
/* Desc: Count elements in buddy list
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   188
 * 
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   189
 * In : none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   190
 * Out: number of buddies
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   191
 *
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   192
 * Note: none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   193
 */
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   194
int bud_BuddyCount(void)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   195
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   196
  int i = 0;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   197
  struct list_head *pos, *n;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   198
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   199
  list_for_each_safe(pos, n, &buddy_list) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   200
    i++;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   201
  }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   202
  return i;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   203
}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   204
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   205
/* Desc: Draw the roster in roster window
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   206
 * 
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   207
 * In : roster window
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   208
 * Out: none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   209
 *
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   210
 * Note: none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   211
 */
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   212
void bud_DrawRoster(WINDOW * win)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   213
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   214
  buddy_entry_t *tmp = NULL;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   215
  struct list_head *pos, *nn;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   216
  int i = 1;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   217
  int n;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   218
  int maxx, maxy;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   219
  int fakeOffset = buddyOffset;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   220
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   221
  getmaxyx(win, maxy, maxx);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   222
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   223
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   224
  /* cleanup of roster window */
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   225
  wattrset(win, COLOR_PAIR(COLOR_GENERAL));
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   226
  for (i = 1; i < maxy - 1; i++) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   227
    mvwprintw(win, i, 1, "");
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   228
    for (n = 2; n < maxx; n++)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   229
      waddch(win, ' ');
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   230
  }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   231
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   232
  i = 1;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   233
  list_for_each_safe(pos, nn, &buddy_list) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   234
10
3489a75cb115 [/trunk] Changeset 25 by mikael
mikael
parents: 9
diff changeset
   235
    char status = '?';
13
4c3d7b8a29c4 [/trunk] Changeset 28 by mikael
mikael
parents: 10
diff changeset
   236
    char pending = ' ';
10
3489a75cb115 [/trunk] Changeset 25 by mikael
mikael
parents: 9
diff changeset
   237
0
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   238
    if (fakeOffset > 0) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   239
      fakeOffset--;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   240
      continue;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   241
    }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   242
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   243
    tmp = buddy_entry(pos);
22
6a97e7cd00d9 [/trunk] Changeset 37 by mikael
mikael
parents: 16
diff changeset
   244
    if (scr_IsHiddenMessage(tmp->jid)) {
13
4c3d7b8a29c4 [/trunk] Changeset 28 by mikael
mikael
parents: 10
diff changeset
   245
      pending = '#';
4c3d7b8a29c4 [/trunk] Changeset 28 by mikael
mikael
parents: 10
diff changeset
   246
    }
0
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   247
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   248
    if ((tmp->flags && FLAG_BUDDY_CONNECTED) == 1) {
10
3489a75cb115 [/trunk] Changeset 25 by mikael
mikael
parents: 9
diff changeset
   249
      status = 'o';
0
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   250
      if (i == (buddySelected - buddyOffset))
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   251
	wattrset(win, COLOR_PAIR(COLOR_BD_CONSEL));
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   252
      else
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   253
	wattrset(win, COLOR_PAIR(COLOR_BD_CON));
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   254
    } else {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   255
      if (i == (buddySelected - buddyOffset))
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   256
	wattrset(win, COLOR_PAIR(COLOR_BD_DESSEL));
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   257
      else
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   258
	wattrset(win, COLOR_PAIR(COLOR_BD_DES));
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   259
    }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   260
    mvwprintw(win, i, 1, "");
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   261
    for (n = 2; n < maxx; n++)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   262
      waddch(win, ' ');
10
3489a75cb115 [/trunk] Changeset 25 by mikael
mikael
parents: 9
diff changeset
   263
    //mvwprintw(win, i, (maxx - strlen(tmp->name)) / 2, "%s", tmp->name);
13
4c3d7b8a29c4 [/trunk] Changeset 28 by mikael
mikael
parents: 10
diff changeset
   264
    mvwprintw(win, i, 1, " %c[%c] %.12s", pending, status, tmp->name);
0
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   265
    i++;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   266
    if (i >= maxy - 1)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   267
      break;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   268
  }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   269
  update_panels();
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   270
  doupdate();
16
00183c49c45e [/trunk] Changeset 31 by mikael
mikael
parents: 15
diff changeset
   271
00183c49c45e [/trunk] Changeset 31 by mikael
mikael
parents: 15
diff changeset
   272
  update_roaster = FALSE;
0
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   273
}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   274
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   275
/* Desc: Change selected buddy (one position down)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   276
 * 
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   277
 * In : none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   278
 * Out: none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   279
 *
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   280
 * Note: none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   281
 */
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   282
void bud_RosterDown(void)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   283
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   284
  int x, y;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   285
  getmaxyx(scr_GetRosterWindow(), y, x);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   286
  y -= 2;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   287
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   288
  if (buddySelected < bud_BuddyCount()) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   289
    buddySelected++;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   290
    if (buddySelected > y)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   291
      buddyOffset++;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   292
    bud_DrawRoster(scr_GetRosterWindow());
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   293
  }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   294
}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   295
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   296
/* Desc: Change selected buddy (one position up)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   297
 * 
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   298
 * In : none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   299
 * Out: none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   300
 *
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   301
 * Note: none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   302
 */
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   303
void bud_RosterUp(void)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   304
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   305
  if (buddySelected > 1) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   306
    buddySelected--;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   307
    if (buddySelected - buddyOffset < 1)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   308
      buddyOffset--;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   309
    bud_DrawRoster(scr_GetRosterWindow());
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   310
  }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   311
}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   312
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   313
/* Desc: Retrieve info for selected buddy
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   314
 * 
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   315
 * In : none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   316
 * Out: (buddy_entry_t *) of selected buddy
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   317
 *
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   318
 * Note: none
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   319
 */
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   320
buddy_entry_t *bud_SelectedInfo(void)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   321
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   322
  struct list_head *pos, *n;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   323
  buddy_entry_t *tmp = NULL;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   324
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   325
  int i = 0;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   326
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   327
  list_for_each_safe(pos, n, &buddy_list) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   328
    tmp = buddy_entry(pos);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   329
    if (i == buddySelected - 1) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   330
      return tmp;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   331
    }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   332
    i++;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   333
  }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   334
  return NULL;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   335
}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   336
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   337
void bud_AddBuddy(int sock)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   338
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   339
  char *buffer = (char *) calloc(1, 1024);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   340
  char *buffer2 = (char *) calloc(1, 1024);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   341
  char *p, *str;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   342
  buddy_entry_t *tmp;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   343
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   344
  ut_CenterMessage(i18n("write jid here"), 60, buffer2);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   345
  scr_CreatePopup(i18n("Add jid"), buffer2, 60, 1, buffer);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   346
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   347
  if (!STR_EMPTY(buffer)) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   348
    tmp = (buddy_entry_t *) calloc(1, sizeof(buddy_entry_t));
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   349
    tmp->jid = (char *) malloc(strlen(buffer) + 1);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   350
    strcpy(tmp->jid, buffer);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   351
    tmp->name = (char *) malloc(strlen(buffer) + 1);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   352
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   353
    str = strdup(buffer);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   354
    p = strstr(str, "@");
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   355
    if (p) {
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   356
      *p = '\0';
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   357
    }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   358
    strcpy(tmp->name, str);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   359
    free(str);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   360
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   361
    list_add_tail(&tmp->list, &buddy_list);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   362
    buddySelected = 1;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   363
    bud_DrawRoster(scr_GetRosterWindow());
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   364
    srv_AddBuddy(sock, tmp->jid);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   365
  }
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   366
  free(buffer);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   367
}
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   368
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   369
void bud_DeleteBuddy(int sock)
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   370
{
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   371
  buddy_entry_t *tmp = bud_SelectedInfo();
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   372
  srv_DelBuddy(sock, tmp->jid);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   373
  list_del(&tmp->list);
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   374
  buddySelected = 1;
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   375
  bud_DrawRoster(scr_GetRosterWindow());
b3b2332715fb Tailorization of /trunk
tailor@frmp8452
parents:
diff changeset
   376
}