Coverage Report

Created: 2025-11-16 06:06

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/pidgin/libpurple/accountopt.c
Line
Count
Source
1
/**
2
 * @file accountopt.c Account Options API
3
 * @ingroup core
4
 */
5
6
/* purple
7
 *
8
 * Purple is the legal property of its developers, whose names are too numerous
9
 * to list here.  Please refer to the COPYRIGHT file distributed with this
10
 * source distribution.
11
 *
12
 * This program is free software; you can redistribute it and/or modify
13
 * it under the terms of the GNU General Public License as published by
14
 * the Free Software Foundation; either version 2 of the License, or
15
 * (at your option) any later version.
16
 *
17
 * This program is distributed in the hope that it will be useful,
18
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
 * GNU General Public License for more details.
21
 *
22
 * You should have received a copy of the GNU General Public License
23
 * along with this program; if not, write to the Free Software
24
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
25
 */
26
#include "internal.h"
27
28
#include "accountopt.h"
29
#include "util.h"
30
31
PurpleAccountOption *
32
purple_account_option_new(PurplePrefType type, const char *text,
33
            const char *pref_name)
34
0
{
35
0
  PurpleAccountOption *option;
36
37
0
  g_return_val_if_fail(type      != PURPLE_PREF_NONE, NULL);
38
0
  g_return_val_if_fail(text      != NULL,           NULL);
39
0
  g_return_val_if_fail(pref_name != NULL,           NULL);
40
41
0
  option = g_new0(PurpleAccountOption, 1);
42
43
0
  option->type      = type;
44
0
  option->text      = g_strdup(text);
45
0
  option->pref_name = g_strdup(pref_name);
46
47
0
  return option;
48
0
}
49
50
PurpleAccountOption *
51
purple_account_option_bool_new(const char *text, const char *pref_name,
52
               gboolean default_value)
53
0
{
54
0
  PurpleAccountOption *option;
55
56
0
  option = purple_account_option_new(PURPLE_PREF_BOOLEAN, text, pref_name);
57
58
0
  if (option == NULL)
59
0
    return NULL;
60
61
0
  option->default_value.boolean = default_value;
62
63
0
  return option;
64
0
}
65
66
PurpleAccountOption *
67
purple_account_option_int_new(const char *text, const char *pref_name,
68
              int default_value)
69
0
{
70
0
  PurpleAccountOption *option;
71
72
0
  option = purple_account_option_new(PURPLE_PREF_INT, text, pref_name);
73
74
0
  if (option == NULL)
75
0
    return NULL;
76
77
0
  option->default_value.integer = default_value;
78
79
0
  return option;
80
0
}
81
82
PurpleAccountOption *
83
purple_account_option_string_new(const char *text, const char *pref_name,
84
                 const char *default_value)
85
0
{
86
0
  PurpleAccountOption *option;
87
88
0
  option = purple_account_option_new(PURPLE_PREF_STRING, text, pref_name);
89
90
0
  if (option == NULL)
91
0
    return NULL;
92
93
0
  option->default_value.string = g_strdup(default_value);
94
95
0
  return option;
96
0
}
97
98
PurpleAccountOption *
99
purple_account_option_list_new(const char *text, const char *pref_name,
100
               GList *list)
101
0
{
102
0
  PurpleAccountOption *option;
103
104
0
  option = purple_account_option_new(PURPLE_PREF_STRING_LIST, text, pref_name);
105
106
0
  if (option == NULL)
107
0
    return NULL;
108
109
0
  option->default_value.list = list;
110
111
0
  return option;
112
0
}
113
114
static void
115
purple_account_option_list_free(gpointer data, gpointer user_data)
116
0
{
117
0
  PurpleKeyValuePair *kvp = data;
118
119
0
  g_free(kvp->value);
120
0
  g_free(kvp->key);
121
0
  g_free(kvp);
122
0
}
123
124
void
125
purple_account_option_destroy(PurpleAccountOption *option)
126
0
{
127
0
  g_return_if_fail(option != NULL);
128
129
0
  g_free(option->text);
130
0
  g_free(option->pref_name);
131
132
0
  if (option->type == PURPLE_PREF_STRING)
133
0
  {
134
0
    g_free(option->default_value.string);
135
0
  }
136
0
  else if (option->type == PURPLE_PREF_STRING_LIST)
137
0
  {
138
0
    if (option->default_value.list != NULL)
139
0
    {
140
0
      g_list_foreach(option->default_value.list, purple_account_option_list_free, NULL);
141
0
      g_list_free(option->default_value.list);
142
0
    }
143
0
  }
144
145
0
  g_free(option);
146
0
}
147
148
void
149
purple_account_option_set_default_bool(PurpleAccountOption *option,
150
                   gboolean value)
151
0
{
152
0
  g_return_if_fail(option != NULL);
153
0
  g_return_if_fail(option->type == PURPLE_PREF_BOOLEAN);
154
155
0
  option->default_value.boolean = value;
156
0
}
157
158
void
159
purple_account_option_set_default_int(PurpleAccountOption *option, int value)
160
0
{
161
0
  g_return_if_fail(option != NULL);
162
0
  g_return_if_fail(option->type == PURPLE_PREF_INT);
163
164
0
  option->default_value.integer = value;
165
0
}
166
167
void
168
purple_account_option_set_default_string(PurpleAccountOption *option,
169
                     const char *value)
170
0
{
171
0
  g_return_if_fail(option != NULL);
172
0
  g_return_if_fail(option->type == PURPLE_PREF_STRING);
173
174
0
  g_free(option->default_value.string);
175
0
  option->default_value.string = g_strdup(value);
176
0
}
177
178
void
179
purple_account_option_set_masked(PurpleAccountOption *option, gboolean masked)
180
0
{
181
0
  g_return_if_fail(option != NULL);
182
0
  g_return_if_fail(option->type == PURPLE_PREF_STRING);
183
184
0
  option->masked = masked;
185
0
}
186
187
188
void
189
purple_account_option_set_list(PurpleAccountOption *option, GList *values)
190
0
{
191
0
  g_return_if_fail(option != NULL);
192
0
  g_return_if_fail(option->type == PURPLE_PREF_STRING_LIST);
193
194
0
  if (option->default_value.list != NULL)
195
0
  {
196
0
    g_list_foreach(option->default_value.list, purple_account_option_list_free, NULL);
197
0
    g_list_free(option->default_value.list);
198
0
  }
199
200
0
  option->default_value.list = values;
201
0
}
202
203
void
204
purple_account_option_add_list_item(PurpleAccountOption *option,
205
                  const char *key, const char *value)
206
0
{
207
0
  PurpleKeyValuePair *kvp;
208
209
0
  g_return_if_fail(option != NULL);
210
0
  g_return_if_fail(key    != NULL);
211
0
  g_return_if_fail(value  != NULL);
212
0
  g_return_if_fail(option->type == PURPLE_PREF_STRING_LIST);
213
214
0
  kvp = g_new0(PurpleKeyValuePair, 1);
215
0
  kvp->key = g_strdup(key);
216
0
  kvp->value = g_strdup(value);
217
218
0
  option->default_value.list = g_list_append(option->default_value.list,
219
0
                         kvp);
220
0
}
221
222
PurplePrefType
223
purple_account_option_get_type(const PurpleAccountOption *option)
224
0
{
225
0
  g_return_val_if_fail(option != NULL, PURPLE_PREF_NONE);
226
227
0
  return option->type;
228
0
}
229
230
const char *
231
purple_account_option_get_text(const PurpleAccountOption *option)
232
0
{
233
0
  g_return_val_if_fail(option != NULL, NULL);
234
235
0
  return option->text;
236
0
}
237
238
const char *
239
purple_account_option_get_setting(const PurpleAccountOption *option)
240
0
{
241
0
  g_return_val_if_fail(option != NULL, NULL);
242
243
0
  return option->pref_name;
244
0
}
245
246
gboolean
247
purple_account_option_get_default_bool(const PurpleAccountOption *option)
248
0
{
249
0
  g_return_val_if_fail(option != NULL, FALSE);
250
0
  g_return_val_if_fail(option->type == PURPLE_PREF_BOOLEAN, FALSE);
251
252
0
  return option->default_value.boolean;
253
0
}
254
255
int
256
purple_account_option_get_default_int(const PurpleAccountOption *option)
257
0
{
258
0
  g_return_val_if_fail(option != NULL, -1);
259
0
  g_return_val_if_fail(option->type == PURPLE_PREF_INT, -1);
260
261
0
  return option->default_value.integer;
262
0
}
263
264
const char *
265
purple_account_option_get_default_string(const PurpleAccountOption *option)
266
0
{
267
0
  g_return_val_if_fail(option != NULL, NULL);
268
0
  g_return_val_if_fail(option->type == PURPLE_PREF_STRING, NULL);
269
270
0
  return option->default_value.string;
271
0
}
272
273
const char *
274
purple_account_option_get_default_list_value(const PurpleAccountOption *option)
275
0
{
276
0
  PurpleKeyValuePair *kvp;
277
278
0
  g_return_val_if_fail(option != NULL, NULL);
279
0
  g_return_val_if_fail(option->type == PURPLE_PREF_STRING_LIST, NULL);
280
281
0
  if (option->default_value.list == NULL)
282
0
    return NULL;
283
284
0
  kvp = option->default_value.list->data;
285
286
0
  return (kvp ? kvp->value : NULL);
287
0
}
288
289
gboolean
290
purple_account_option_get_masked(const PurpleAccountOption *option)
291
0
{
292
0
  g_return_val_if_fail(option != NULL, FALSE);
293
0
  g_return_val_if_fail(option->type == PURPLE_PREF_STRING, FALSE);
294
295
0
  return option->masked;
296
0
}
297
298
GList *
299
purple_account_option_get_list(const PurpleAccountOption *option)
300
0
{
301
0
  g_return_val_if_fail(option != NULL, NULL);
302
0
  g_return_val_if_fail(option->type == PURPLE_PREF_STRING_LIST, NULL);
303
304
0
  return option->default_value.list;
305
0
}
306
307
/**************************************************************************
308
 * Account User Split API
309
 **************************************************************************/
310
PurpleAccountUserSplit *
311
purple_account_user_split_new(const char *text, const char *default_value,
312
              char sep)
313
0
{
314
0
  PurpleAccountUserSplit *split;
315
316
0
  g_return_val_if_fail(text != NULL, NULL);
317
0
  g_return_val_if_fail(sep != 0, NULL);
318
319
0
  split = g_new0(PurpleAccountUserSplit, 1);
320
321
0
  split->text = g_strdup(text);
322
0
  split->field_sep = sep;
323
0
  split->default_value = g_strdup(default_value);
324
0
  split->reverse = TRUE;
325
326
0
  return split;
327
0
}
328
329
void
330
purple_account_user_split_destroy(PurpleAccountUserSplit *split)
331
0
{
332
0
  g_return_if_fail(split != NULL);
333
334
0
  g_free(split->text);
335
0
  g_free(split->default_value);
336
0
  g_free(split);
337
0
}
338
339
const char *
340
purple_account_user_split_get_text(const PurpleAccountUserSplit *split)
341
0
{
342
0
  g_return_val_if_fail(split != NULL, NULL);
343
344
0
  return split->text;
345
0
}
346
347
const char *
348
purple_account_user_split_get_default_value(const PurpleAccountUserSplit *split)
349
0
{
350
0
  g_return_val_if_fail(split != NULL, NULL);
351
352
0
  return split->default_value;
353
0
}
354
355
char
356
purple_account_user_split_get_separator(const PurpleAccountUserSplit *split)
357
0
{
358
0
  g_return_val_if_fail(split != NULL, 0);
359
360
0
  return split->field_sep;
361
0
}
362
363
gboolean
364
purple_account_user_split_get_reverse(const PurpleAccountUserSplit *split)
365
0
{
366
0
  g_return_val_if_fail(split != NULL, FALSE);
367
368
0
  return split->reverse;
369
0
}
370
371
void
372
purple_account_user_split_set_reverse(PurpleAccountUserSplit *split, gboolean reverse)
373
0
{
374
0
  g_return_if_fail(split != NULL);
375
376
0
  split->reverse = reverse;
377
0
}