mcabber/src/buddies.c
author mikael
Wed, 06 Apr 2005 12:35:34 +0000
changeset 57 f381236239a4
parent 45 5654c4231de1
child 74 b392112ab995
permissions -rw-r--r--
[/trunk] Changeset 72 by mikael * Switch to autoconf and automake.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
     1
#include <stdio.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
     2
#include <stdlib.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
     3
#include <string.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
     4
#include <ncurses.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
     5
#include <panel.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
     6
#include "screen.h"
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
     7
#include "buddies.h"
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
     8
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
     9
#include "lang.h"
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    10
#include "utils.h"
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    11
#include "list.h"
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
    12
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
    13
#define STR_EMPTY(s) ((s)[0] == '\0')
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    14
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    15
/* global vars for BUDDIES.C */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    16
int buddySelected = 1;		/* Hold the selected Buddy  */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    17
int buddyOffset = 0;		/* Hold the roster offset   */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    18
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    19
static LIST_HEAD(buddy_list);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    20
static LIST_HEAD(sorted_buddies);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    21
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    22
#define buddy_entry(n) list_entry(n, buddy_entry_t, list)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    23
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    24
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
    25
void bud_SetBuddyStatus(char *jidfrom, enum imstatus status)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    26
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    27
  struct list_head *pos, *n;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    28
  buddy_entry_t *tmp;
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
    29
  enum imstatus oldstatus;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    30
  int changed = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    31
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    32
  list_for_each_safe(pos, n, &buddy_list) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    33
    tmp = buddy_entry(pos);
41
a7c699bd09e0 [/trunk] Changeset 57 by mikael
mikael
parents: 40
diff changeset
    34
    if (!strcasecmp(tmp->jid, jidfrom)) {
45
5654c4231de1 [/trunk] Changeset 61 by mikael
mikael
parents: 41
diff changeset
    35
      if ((unsigned)tmp->flags != status) {
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
    36
        oldstatus = tmp->flags;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    37
	tmp->flags = status;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    38
	changed = 1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    39
      }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    40
      break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    41
    }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    42
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    43
  if (changed) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    44
    bud_DrawRoster(scr_GetRosterWindow());
41
a7c699bd09e0 [/trunk] Changeset 57 by mikael
mikael
parents: 40
diff changeset
    45
    scr_LogPrint("Buddy status has changed: [%c>%c] <%s>",
a7c699bd09e0 [/trunk] Changeset 57 by mikael
mikael
parents: 40
diff changeset
    46
            imstatus2char[oldstatus], imstatus2char[status], jidfrom);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    47
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    48
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    49
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    50
int compara(buddy_entry_t * t1, buddy_entry_t * t2)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    51
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    52
  const char *s1 =
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    53
      (const char *) (STR_EMPTY(t1->name) ? t1->jid : t1->name);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    54
  const char *s2 =
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    55
      (const char *) (STR_EMPTY(t2->name) ? t2->jid : t2->name);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    56
  return strcasecmp(s1, s2);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    57
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    58
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    59
void bud_SortRoster(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    60
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    61
  buddy_entry_t *indice, *tmp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    62
  struct list_head *pos, *n;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    63
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    64
  while (!list_empty(&buddy_list)) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    65
    indice = NULL;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    66
    tmp = NULL;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    67
    list_for_each_safe(pos, n, &buddy_list) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    68
      if (!indice) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    69
	indice = buddy_entry(pos);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    70
	tmp = buddy_entry(pos);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    71
      } else {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    72
	tmp = buddy_entry(pos);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    73
	if (compara(indice, tmp) > 0) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    74
	  indice = tmp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    75
	}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    76
      }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    77
    }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    78
    list_move_tail(&indice->list, &sorted_buddies);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    79
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    80
  list_splice(&sorted_buddies, &buddy_list);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    81
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
    82
  update_roster = TRUE;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    83
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    84
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    85
/* Desc: Destroy (and free) buddy list
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    86
 * 
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    87
 * In : none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    88
 * Out: none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    89
 *
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    90
 * Note: none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    91
 */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    92
void bud_TerminateBuddies(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    93
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    94
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    95
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    96
/* Desc: Count elements in buddy list
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    97
 * 
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    98
 * In : none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
    99
 * Out: number of buddies
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   100
 *
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   101
 * Note: none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   102
 */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   103
int bud_BuddyCount(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   104
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   105
  int i = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   106
  struct list_head *pos, *n;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   107
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   108
  list_for_each_safe(pos, n, &buddy_list) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   109
    i++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   110
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   111
  return i;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   112
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   113
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   114
/* Desc: Draw the roster in roster window
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   115
 * 
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   116
 * In : roster window
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   117
 * Out: none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   118
 *
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   119
 * Note: none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   120
 */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   121
void bud_DrawRoster(WINDOW * win)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   122
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   123
  buddy_entry_t *tmp = NULL;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   124
  struct list_head *pos, *nn;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   125
  int i = 1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   126
  int n;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   127
  int maxx, maxy;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   128
  int fakeOffset = buddyOffset;
39
416fd026d76d [/trunk] Changeset 55 by mikael
mikael
parents: 35
diff changeset
   129
  char name[ROSTER_WEIGHT];
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   130
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   131
  getmaxyx(win, maxy, maxx);
39
416fd026d76d [/trunk] Changeset 55 by mikael
mikael
parents: 35
diff changeset
   132
  name[ROSTER_WEIGHT-8] = 0;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   133
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   134
  /* cleanup of roster window */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   135
  wattrset(win, COLOR_PAIR(COLOR_GENERAL));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   136
  for (i = 1; i < maxy - 1; i++) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   137
    mvwprintw(win, i, 1, "");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   138
    for (n = 2; n < maxx; n++)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   139
      waddch(win, ' ');
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   140
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   141
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   142
  i = 1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   143
  list_for_each_safe(pos, nn, &buddy_list) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   144
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   145
    char status = '?';
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   146
    char pending = ' ';
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   147
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   148
    if (fakeOffset > 0) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   149
      fakeOffset--;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   150
      continue;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   151
    }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   152
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   153
    tmp = buddy_entry(pos);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   154
    if (scr_IsHiddenMessage(tmp->jid)) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   155
      pending = '#';
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   156
    }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   157
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   158
    if (tmp->flags >= 0 && tmp->flags < imstatus_size) {
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   159
      status = imstatus2char[tmp->flags];
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   160
    }
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   161
    /*{
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   162
      if (i == (buddySelected - buddyOffset))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   163
	wattrset(win, COLOR_PAIR(COLOR_BD_CONSEL));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   164
      else
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   165
	wattrset(win, COLOR_PAIR(COLOR_BD_CON));
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   166
    } else*/ {
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   167
      if (i == (buddySelected - buddyOffset))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   168
	wattrset(win, COLOR_PAIR(COLOR_BD_DESSEL));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   169
      else
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   170
	wattrset(win, COLOR_PAIR(COLOR_BD_DES));
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   171
    }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   172
    mvwprintw(win, i, 1, "");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   173
    for (n = 2; n < maxx; n++)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   174
      waddch(win, ' ');
39
416fd026d76d [/trunk] Changeset 55 by mikael
mikael
parents: 35
diff changeset
   175
    strncpy(name, tmp->name, ROSTER_WEIGHT-8);
416fd026d76d [/trunk] Changeset 55 by mikael
mikael
parents: 35
diff changeset
   176
    mvwprintw(win, i, 1, " %c[%c] %s", pending, status, name);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   177
    i++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   178
    if (i >= maxy - 1)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   179
      break;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   180
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   181
  update_panels();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   182
  doupdate();
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   183
30
4ea2df449381 [/trunk] Changeset 46 by mikael
mikael
parents: 24
diff changeset
   184
  update_roster = FALSE;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   185
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   186
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   187
/* Desc: Change selected buddy (one position down)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   188
 * 
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   189
 * In : none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   190
 * Out: none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   191
 *
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   192
 * Note: none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   193
 */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   194
void bud_RosterDown(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   195
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   196
  int x, y;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   197
  getmaxyx(scr_GetRosterWindow(), y, x);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   198
  y -= 2;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   199
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   200
  if (buddySelected < bud_BuddyCount()) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   201
    buddySelected++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   202
    if (buddySelected > y)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   203
      buddyOffset++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   204
    bud_DrawRoster(scr_GetRosterWindow());
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   205
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   206
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   207
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   208
/* Desc: Change selected buddy (one position up)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   209
 * 
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   210
 * In : none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   211
 * Out: none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   212
 *
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   213
 * Note: none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   214
 */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   215
void bud_RosterUp(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   216
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   217
  if (buddySelected > 1) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   218
    buddySelected--;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   219
    if (buddySelected - buddyOffset < 1)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   220
      buddyOffset--;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   221
    bud_DrawRoster(scr_GetRosterWindow());
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   222
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   223
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   224
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   225
/* Desc: Retrieve info for selected buddy
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   226
 * 
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   227
 * In : none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   228
 * Out: (buddy_entry_t *) of selected buddy
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   229
 *
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   230
 * Note: none
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   231
 */
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   232
buddy_entry_t *bud_SelectedInfo(void)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   233
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   234
  struct list_head *pos, *n;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   235
  buddy_entry_t *tmp = NULL;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   236
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   237
  int i = 0;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   238
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   239
  list_for_each_safe(pos, n, &buddy_list) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   240
    tmp = buddy_entry(pos);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   241
    if (i == buddySelected - 1) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   242
      return tmp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   243
    }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   244
    i++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   245
  }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   246
  return NULL;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   247
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   248
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   249
buddy_entry_t *bud_AddBuddy(const char *bjid, const char *bname)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   250
{
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   251
  char *p, *str;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   252
  buddy_entry_t *tmp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   253
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   254
  tmp = calloc(1, sizeof(buddy_entry_t));
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   255
  tmp->jid = strdup(bjid);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   256
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   257
  if (bname) {
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   258
    tmp->name = strdup(bname);
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   259
  } else {
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   260
    str = strdup(bjid);
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   261
    p = strstr(str, "/");
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   262
    if (p)  *p = '\0';
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   263
    tmp->name = strdup(str);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   264
    free(str);
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   265
  }
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   266
41
a7c699bd09e0 [/trunk] Changeset 57 by mikael
mikael
parents: 40
diff changeset
   267
  ut_WriteLog("Adding buddy: %s <%s>\n", tmp->name, tmp->jid);
a7c699bd09e0 [/trunk] Changeset 57 by mikael
mikael
parents: 40
diff changeset
   268
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   269
  list_add_tail(&tmp->list, &buddy_list);
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   270
  bud_DrawRoster(scr_GetRosterWindow());
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   271
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   272
  return tmp;
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   273
}
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   274
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   275
void bud_DeleteBuddy(buddy_entry_t *buddy)
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   276
{
35
a8ceaa3005fd [/trunk] Changeset 51 by mikael
mikael
parents: 30
diff changeset
   277
  list_del(&buddy->list);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   278
  buddySelected = 1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   279
  bud_DrawRoster(scr_GetRosterWindow());
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
   280
}