mcabber/src/events.c
author Myhailo Danylenko <isbear@ukrpost.net>
Thu, 15 Oct 2009 12:08:53 +0300
changeset 1623 b008ac166b91
parent 1599 dcd5d4c75199
permissions -rw-r--r--
Flags for hook handlers
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     1
/*
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     2
 * events.c     -- Events fonctions
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     3
 *
1599
dcd5d4c75199 Update/Add headers
Mikael Berthe <mikael@lilotux.net>
parents: 1598
diff changeset
     4
 * Copyright (C) 2006-2009 Mikael Berthe <mikael@lilotux.net>
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     5
 *
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License as published by
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     8
 * the Free Software Foundation; either version 2 of the License, or (at
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     9
 * your option) any later version.
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    10
 *
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    11
 * This program is distributed in the hope that it will be useful, but
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    12
 * WITHOUT ANY WARRANTY; without even the implied warranty of
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    14
 * General Public License for more details.
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    15
 *
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    17
 * along with this program; if not, write to the Free Software
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    19
 * USA
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    20
 */
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    21
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    22
#include <glib.h>
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1414
diff changeset
    23
#include <string.h>
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    24
#include "events.h"
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    25
#include "logprint.h"
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    26
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    27
static GSList *evs_list; // Events list
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    28
751
4a7271e69694 Avoid reusing events ids
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
    29
static eviqs *evs_find(const char *evid);
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    30
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    31
//  evs_new(type, timeout)
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    32
// Create an events structure.
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    33
eviqs *evs_new(guint8 type, time_t timeout)
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    34
{
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    35
  static guint evs_idn;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    36
  eviqs *new_evs;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    37
  time_t now_t;
751
4a7271e69694 Avoid reusing events ids
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
    38
  char *stridn;
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    39
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    40
  if (!++evs_idn)
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    41
    evs_idn = 1;
751
4a7271e69694 Avoid reusing events ids
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
    42
  /* Check for wrapping, we shouldn't reuse ids */
4a7271e69694 Avoid reusing events ids
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
    43
  stridn = g_strdup_printf("%d", evs_idn);
4a7271e69694 Avoid reusing events ids
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
    44
  if (evs_find(stridn))  {
4a7271e69694 Avoid reusing events ids
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
    45
    g_free(stridn);
4a7271e69694 Avoid reusing events ids
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
    46
    // We could try another id but for now giving up should be fine...
4a7271e69694 Avoid reusing events ids
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
    47
    return NULL;
4a7271e69694 Avoid reusing events ids
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
    48
  }
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    49
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    50
  new_evs = g_new0(eviqs, 1);
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    51
  time(&now_t);
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    52
  new_evs->ts_create = now_t;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    53
  if (timeout)
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    54
    new_evs->ts_expire = now_t + timeout;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    55
  new_evs->type = type;
751
4a7271e69694 Avoid reusing events ids
Mikael Berthe <mikael@lilotux.net>
parents: 746
diff changeset
    56
  new_evs->id = stridn;
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    57
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1414
diff changeset
    58
  if(!g_slist_length(evs_list))
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1414
diff changeset
    59
    g_timeout_add_seconds(20, evs_check_timeout, NULL);
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    60
  evs_list = g_slist_append(evs_list, new_evs);
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    61
  return new_evs;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    62
}
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    63
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    64
int evs_del(const char *evid)
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    65
{
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    66
  GSList *p;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    67
  eviqs *i;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    68
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    69
  if (!evid) return 1;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    70
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    71
  for (p = evs_list; p; p = g_slist_next(p)) {
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    72
    i = p->data;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    73
    if (!strcmp(evid, i->id))
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    74
      break;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    75
  }
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    76
  if (p) {
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    77
    g_free(i->id);
774
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
    78
    g_free(i->data);
46304b773a44 Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents: 757
diff changeset
    79
    g_free(i->desc);
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    80
    g_free(i);
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    81
    evs_list = g_slist_remove(evs_list, p->data);
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    82
    return 0; // Ok, deleted
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    83
  }
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    84
  return -1;  // Not found
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    85
}
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    86
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    87
static eviqs *evs_find(const char *evid)
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    88
{
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    89
  GSList *p;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    90
  eviqs *i;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    91
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    92
  if (!evid) return NULL;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    93
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    94
  for (p = evs_list; p; p = g_slist_next(p)) {
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    95
    i = p->data;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    96
    if (!strcmp(evid, i->id))
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    97
      return i;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    98
  }
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    99
  return NULL;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   100
}
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   101
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   102
//  evs_callback(evid, evcontext)
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   103
// Callback processing for the specified event.
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   104
// Return 0 in case of success, -1 if the evid hasn't been found.
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   105
int evs_callback(const char *evid, guint evcontext)
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   106
{
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   107
  eviqs *i;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   108
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   109
  i = evs_find(evid);
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   110
  if (!i) return -1;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   111
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   112
  // IQ processing
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   113
  // Note: If xml_result is NULL, this is a timeout
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   114
  if (i->callback)
1213
4a7db2870685 Improve Private Storage detection.
Mikael Berthe <mikael@lilotux.net>
parents: 1205
diff changeset
   115
    (void)(*i->callback)(i, evcontext);
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   116
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   117
  evs_del(evid);
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   118
  return 0;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   119
}
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   120
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1414
diff changeset
   121
gboolean evs_check_timeout()
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   122
{
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1414
diff changeset
   123
  time_t now_t;
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   124
  GSList *p;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   125
  eviqs *i;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   126
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1414
diff changeset
   127
  time(&now_t);
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   128
  p = evs_list;
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1414
diff changeset
   129
  if (!p)
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1414
diff changeset
   130
    return FALSE;
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   131
  while (p) {
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   132
    i = p->data;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   133
    // We must get next IQ eviqs element now because the current one
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   134
    // could be freed.
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   135
    p = g_slist_next(p);
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   136
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   137
    if ((!i->ts_expire && now_t > i->ts_create + EVS_MAX_TIMEOUT) ||
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   138
        (i->ts_expire && now_t > i->ts_expire)) {
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   139
      evs_callback(i->id, EVS_CONTEXT_TIMEOUT);
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   140
    }
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   141
  }
1598
a087125d8fc8 Replace libjabber with loudmouth
franky
parents: 1414
diff changeset
   142
  return TRUE;
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   143
}
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   144
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   145
void evs_display_list(void)
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   146
{
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   147
  GSList *p;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   148
  eviqs *i;
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   149
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   150
  scr_LogPrint(LPRINT_LOGNORM, "Events list:");
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   151
  for (p = evs_list; p; p = g_slist_next(p)) {
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   152
    i = p->data;
753
584db5f21e43 Improve "/event list"
Mikael Berthe <mikael@lilotux.net>
parents: 751
diff changeset
   153
    scr_LogPrint(LPRINT_LOGNORM,
584db5f21e43 Improve "/event list"
Mikael Berthe <mikael@lilotux.net>
parents: 751
diff changeset
   154
                 "Id: %-3s %s", i->id, (i->desc ? i->desc : ""));
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   155
  }
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   156
  scr_LogPrint(LPRINT_LOGNORM, "End of events list.");
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   157
}
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   158
820
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
   159
//  evs_geteventslist(bool comp)
757
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   160
// Return a singly-linked-list of events ids, for the completion system.
820
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
   161
// If comp is true, the string "list" is added (it's a completion argument).
757
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   162
// Note: the caller should free the list (and data) after use.
820
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
   163
GSList *evs_geteventslist(int compl)
757
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   164
{
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   165
  GSList *evidlist = NULL, *p;
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   166
  eviqs *i;
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   167
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   168
  for (p = evs_list; p; p = g_slist_next(p)) {
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   169
    i = p->data;
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   170
    evidlist = g_slist_append(evidlist, g_strdup(i->id));
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   171
  }
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   172
820
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
   173
  if (compl) {
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
   174
    // Last item is the "list" subcommand.
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
   175
    evidlist = g_slist_append(evidlist, g_strdup("list"));
80bd7f49075f Allow '*' in /event command
Mikael Berthe <mikael@lilotux.net>
parents: 774
diff changeset
   176
  }
757
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   177
  return evidlist;
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   178
}
ae23c8826efb Improve completion for the "/event" command
Mikael Berthe <mikael@lilotux.net>
parents: 753
diff changeset
   179
745
413e95f3051a Introduce user "events" list
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   180
/* vim: set expandtab cindent cinoptions=>2\:2(0:  For Vim users... */