Mercurial > audlegacy
annotate src/audacious/tuple.c @ 3592:f69ae126bb47 trunk
Automated merge with ssh://sidhe.atheme.org//hg/audacious
author | Jonathan Schleifer <js@h3c.de> |
---|---|
date | Fri, 21 Sep 2007 18:13:30 +0200 |
parents | aeab45099e32 |
children | 8c4633438785 |
rev | line source |
---|---|
3278 | 1 /* |
2 * Audacious | |
3 * Copyright (c) 2006-2007 Audacious team | |
4 * | |
5 * This program is free software; you can redistribute it and/or modify | |
6 * it under the terms of the GNU General Public License as published by | |
7 * the Free Software Foundation; under version 3 of the License. | |
8 * | |
9 * This program is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU General Public License | |
15 * along with this program. If not, see <http://www.gnu.org/licenses>. | |
16 * | |
17 * The Audacious team does not consider modular code linking to | |
18 * Audacious or using our public API to be a derived work. | |
19 */ | |
20 | |
21 #include <glib.h> | |
22 #include <mowgli.h> | |
23 | |
24 #include "tuple.h" | |
25 | |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
26 const TupleBasicType tuple_fields[FIELD_LAST] = { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
27 { "artist", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
28 { "title", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
29 { "album", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
30 { "comment", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
31 { "genre", TUPLE_STRING }, |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
32 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
33 { "track", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
34 { "track-number", TUPLE_INT }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
35 { "length", TUPLE_INT }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
36 { "year", TUPLE_INT }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
37 { "quality", TUPLE_STRING }, |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
38 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
39 { "codec", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
40 { "file-name", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
41 { "file-path", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
42 { "file-ext", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
43 { "song-artist", TUPLE_STRING }, |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
44 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
45 { "mtime", TUPLE_INT }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
46 { "formatter", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
47 { "performer", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
48 { "copyright", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
49 { "date", TUPLE_STRING }, |
3550
6b0be1d088e6
- subtune handling is now done in playlist core, using tuple fields subsong-id and subsong-num (requires subtune-able plugins to be updated)
Giacomo Lozito <james@develia.org>
parents:
3529
diff
changeset
|
50 |
6b0be1d088e6
- subtune handling is now done in playlist core, using tuple fields subsong-id and subsong-num (requires subtune-able plugins to be updated)
Giacomo Lozito <james@develia.org>
parents:
3529
diff
changeset
|
51 { "subsong-id", TUPLE_INT }, |
6b0be1d088e6
- subtune handling is now done in playlist core, using tuple fields subsong-id and subsong-num (requires subtune-able plugins to be updated)
Giacomo Lozito <james@develia.org>
parents:
3529
diff
changeset
|
52 { "subsong-num", TUPLE_INT }, |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
53 }; |
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
54 |
3504 | 55 static mowgli_heap_t *tuple_heap = NULL; |
56 static mowgli_heap_t *tuple_value_heap = NULL; | |
57 static mowgli_object_class_t tuple_klass; | |
58 | |
3278 | 59 |
3448
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
60 #define TUPLE_LOCKING |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
61 //#define TUPLE_DEBUG |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
62 |
3448
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
63 #ifdef TUPLE_LOCKING |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
64 static GStaticRWLock tuple_rwlock = G_STATIC_RW_LOCK_INIT; |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
65 # ifdef TUPLE_DEBUG |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
66 # define TUPDEB(X) fprintf(stderr, "TUPLE_" X "(%s:%d)\n", __FUNCTION__, __LINE__) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
67 # define TUPLE_LOCK_WRITE(XX) { TUPDEB("LOCK_WRITE"); g_static_rw_lock_writer_lock(&tuple_rwlock); } |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
68 # define TUPLE_UNLOCK_WRITE(XX) { TUPDEB("UNLOCK_WRITE"); g_static_rw_lock_writer_unlock(&tuple_rwlock); } |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
69 # define TUPLE_LOCK_READ(XX) { TUPDEB("LOCK_READ"); g_static_rw_lock_reader_lock(&tuple_rwlock); } |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
70 # define TUPLE_UNLOCK_READ(XX) { TUPDEB("UNLOCK_READ"); g_static_rw_lock_reader_unlock(&tuple_rwlock); } |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
71 # else |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
72 # define TUPLE_LOCK_WRITE(XX) g_static_rw_lock_writer_lock(&tuple_rwlock) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
73 # define TUPLE_UNLOCK_WRITE(XX) g_static_rw_lock_writer_unlock(&tuple_rwlock) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
74 # define TUPLE_LOCK_READ(XX) g_static_rw_lock_reader_lock(&tuple_rwlock) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
75 # define TUPLE_UNLOCK_READ(XX) g_static_rw_lock_reader_unlock(&tuple_rwlock) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
76 # endif |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
77 #else |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
78 # define TUPLE_LOCK_WRITE(XX) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
79 # define TUPLE_UNLOCK_WRITE(XX) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
80 # define TUPLE_LOCK_READ(XX) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
81 # define TUPLE_UNLOCK_READ(XX) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
82 #endif |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
83 |
3280
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
84 /* iterative destructor of tuple values. */ |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
85 static void |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
86 tuple_value_destroy(mowgli_dictionary_elem_t *delem, gpointer privdata) |
3280
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
87 { |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
88 TupleValue *value = (TupleValue *) delem->data; |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
89 |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
90 if (value->type == TUPLE_STRING) |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
91 g_free(value->value.string); |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
92 |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
93 mowgli_heap_free(tuple_value_heap, value); |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
94 } |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
95 |
3278 | 96 static void |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
97 tuple_destroy(gpointer data) |
3278 | 98 { |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
99 Tuple *tuple = (Tuple *) data; |
3528
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
100 gint i; |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
101 |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
102 TUPLE_LOCK_WRITE(); |
3280
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
103 mowgli_dictionary_destroy(tuple->dict, tuple_value_destroy, NULL); |
3528
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
104 |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
105 for (i = 0; i < FIELD_LAST; i++) |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
106 if (tuple->values[i]) { |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
107 TupleValue *value = tuple->values[i]; |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
108 |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
109 if (value->type == TUPLE_STRING) |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
110 g_free(value->value.string); |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
111 |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
112 mowgli_heap_free(tuple_value_heap, value); |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
113 } |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
114 |
3278 | 115 mowgli_heap_free(tuple_heap, tuple); |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
116 TUPLE_UNLOCK_WRITE(); |
3278 | 117 } |
118 | |
119 Tuple * | |
120 tuple_new(void) | |
121 { | |
122 Tuple *tuple; | |
123 | |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
124 TUPLE_LOCK_WRITE(); |
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
125 |
3278 | 126 if (tuple_heap == NULL) |
127 { | |
3529
7e8c4aadfc32
Make the default allocation values bigger.
Matti Hamalainen <ccr@tnsp.org>
parents:
3528
diff
changeset
|
128 tuple_heap = mowgli_heap_create(sizeof(Tuple), 512, BH_NOW); |
7e8c4aadfc32
Make the default allocation values bigger.
Matti Hamalainen <ccr@tnsp.org>
parents:
3528
diff
changeset
|
129 tuple_value_heap = mowgli_heap_create(sizeof(TupleValue), 1024, BH_NOW); |
3278 | 130 mowgli_object_class_init(&tuple_klass, "audacious.tuple", tuple_destroy, FALSE); |
131 } | |
132 | |
133 /* FIXME: use mowgli_object_bless_from_class() in mowgli 0.4 | |
134 when it is released --nenolod */ | |
135 tuple = mowgli_heap_alloc(tuple_heap); | |
3505
7d865b5f5a04
Oops, previous merge had removed an important memset(), fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3504
diff
changeset
|
136 memset(tuple, 0, sizeof(Tuple)); |
3278 | 137 mowgli_object_init(mowgli_object(tuple), NULL, &tuple_klass, NULL); |
138 | |
139 tuple->dict = mowgli_dictionary_create(g_ascii_strcasecmp); | |
140 | |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
141 TUPLE_UNLOCK_WRITE(); |
3278 | 142 return tuple; |
143 } | |
144 | |
3301
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
145 Tuple * |
3304
00286cde2485
Make filename a const
Christian Birchinger <joker@netswarm.net>
parents:
3303
diff
changeset
|
146 tuple_new_from_filename(const gchar *filename) |
3301
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
147 { |
3303
eaf68ed98166
Use real filenames inside tuples not URIs
Christian Birchinger <joker@netswarm.net>
parents:
3301
diff
changeset
|
148 gchar *scratch, *ext, *realfn; |
3301
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
149 Tuple *tuple; |
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
150 |
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
151 g_return_val_if_fail(filename != NULL, NULL); |
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
152 |
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
153 tuple = tuple_new(); |
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
154 |
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
155 g_return_val_if_fail(tuple != NULL, NULL); |
3303
eaf68ed98166
Use real filenames inside tuples not URIs
Christian Birchinger <joker@netswarm.net>
parents:
3301
diff
changeset
|
156 |
eaf68ed98166
Use real filenames inside tuples not URIs
Christian Birchinger <joker@netswarm.net>
parents:
3301
diff
changeset
|
157 realfn = g_filename_from_uri(filename, NULL, NULL); |
eaf68ed98166
Use real filenames inside tuples not URIs
Christian Birchinger <joker@netswarm.net>
parents:
3301
diff
changeset
|
158 |
eaf68ed98166
Use real filenames inside tuples not URIs
Christian Birchinger <joker@netswarm.net>
parents:
3301
diff
changeset
|
159 scratch = g_path_get_basename(realfn ? realfn : filename); |
3504 | 160 tuple_associate_string(tuple, FIELD_FILE_NAME, NULL, scratch); |
3301
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
161 g_free(scratch); |
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
162 |
3303
eaf68ed98166
Use real filenames inside tuples not URIs
Christian Birchinger <joker@netswarm.net>
parents:
3301
diff
changeset
|
163 scratch = g_path_get_dirname(realfn ? realfn : filename); |
3504 | 164 tuple_associate_string(tuple, FIELD_FILE_PATH, NULL, scratch); |
3301
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
165 g_free(scratch); |
3303
eaf68ed98166
Use real filenames inside tuples not URIs
Christian Birchinger <joker@netswarm.net>
parents:
3301
diff
changeset
|
166 |
eaf68ed98166
Use real filenames inside tuples not URIs
Christian Birchinger <joker@netswarm.net>
parents:
3301
diff
changeset
|
167 g_free(realfn); realfn = NULL; |
eaf68ed98166
Use real filenames inside tuples not URIs
Christian Birchinger <joker@netswarm.net>
parents:
3301
diff
changeset
|
168 |
3301
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
169 ext = strrchr(filename, '.'); |
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
170 if (ext != NULL) { |
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
171 ++ext; |
3504 | 172 tuple_associate_string(tuple, FIELD_FILE_EXT, NULL, scratch); |
3301
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
173 } |
3303
eaf68ed98166
Use real filenames inside tuples not URIs
Christian Birchinger <joker@netswarm.net>
parents:
3301
diff
changeset
|
174 |
3301
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
175 return tuple; |
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
176 } |
008530664ba1
Add tuple_new_from_filename() which creates a new tuple with file-name, file-path and file-ext.
Christian Birchinger <joker@netswarm.net>
parents:
3282
diff
changeset
|
177 |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
178 |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
179 static gint tuple_get_nfield(const gchar *field) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
180 { |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
181 gint i; |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
182 for (i = 0; i < FIELD_LAST; i++) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
183 if (!strcmp(field, tuple_fields[i].name)) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
184 return i; |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
185 return -1; |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
186 } |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
187 |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
188 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
189 static TupleValue * |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
190 tuple_associate_data(Tuple *tuple, const gint cnfield, const gchar *field, TupleValueType ftype) |
3491
899a7ed37a70
Clean up tiny bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents:
3489
diff
changeset
|
191 { |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
192 const gchar *tfield = field; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
193 gint nfield = cnfield; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
194 TupleValue *value = NULL; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
195 |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
196 g_return_val_if_fail(tuple != NULL, NULL); |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
197 g_return_val_if_fail(cnfield < FIELD_LAST, NULL); |
3491
899a7ed37a70
Clean up tiny bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents:
3489
diff
changeset
|
198 |
3494
7d1dee4f660a
Check for known fields in tuple_associate_data() when given nfield is
Matti Hamalainen <ccr@tnsp.org>
parents:
3491
diff
changeset
|
199 /* Check for known fields */ |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
200 if (nfield < 0) { |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
201 nfield = tuple_get_nfield(field); |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
202 if (nfield >= 0) { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
203 fprintf(stderr, "WARNING! FIELD_* not used for '%s'!\n", field); |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
204 } |
3494
7d1dee4f660a
Check for known fields in tuple_associate_data() when given nfield is
Matti Hamalainen <ccr@tnsp.org>
parents:
3491
diff
changeset
|
205 } |
7d1dee4f660a
Check for known fields in tuple_associate_data() when given nfield is
Matti Hamalainen <ccr@tnsp.org>
parents:
3491
diff
changeset
|
206 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
207 /* Check if field was known */ |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
208 if (nfield >= 0) { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
209 tfield = tuple_fields[nfield].name; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
210 value = tuple->values[nfield]; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
211 |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
212 if (ftype != tuple_fields[nfield].type) { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
213 /* FIXME! Convert values perhaps .. or not? */ |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
214 fprintf(stderr, "Invalid type for [%s](%d->%d), %d != %d\n", tfield, cnfield, nfield, ftype, tuple_fields[nfield].type); |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
215 //mowgli_throw_exception_val(audacious.tuple.invalid_type_request, 0); |
3499 | 216 TUPLE_UNLOCK_WRITE(); |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
217 return NULL; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
218 } |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
219 } else { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
220 value = mowgli_dictionary_retrieve(tuple->dict, tfield); |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
221 } |
3499 | 222 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
223 if (value != NULL) { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
224 /* Value exists, just delete old associated data */ |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
225 if (value->type == TUPLE_STRING) { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
226 g_free(value->value.string); |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
227 value->value.string = NULL; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
228 } |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
229 } else { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
230 /* Allocate a new value */ |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
231 value = mowgli_heap_alloc(tuple_value_heap); |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
232 value->type = ftype; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
233 if (nfield >= 0) |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
234 tuple->values[nfield] = value; |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
235 else |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
236 mowgli_dictionary_add(tuple->dict, tfield, value); |
3491
899a7ed37a70
Clean up tiny bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents:
3489
diff
changeset
|
237 } |
3499 | 238 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
239 return value; |
3491
899a7ed37a70
Clean up tiny bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents:
3489
diff
changeset
|
240 } |
899a7ed37a70
Clean up tiny bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents:
3489
diff
changeset
|
241 |
3278 | 242 gboolean |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
243 tuple_associate_string(Tuple *tuple, const gint nfield, const gchar *field, const gchar *string) |
3278 | 244 { |
245 TupleValue *value; | |
246 | |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
247 TUPLE_LOCK_WRITE(); |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
248 if ((value = tuple_associate_data(tuple, nfield, field, TUPLE_STRING)) == NULL) |
3491
899a7ed37a70
Clean up tiny bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents:
3489
diff
changeset
|
249 return FALSE; |
3329
70149c3555f4
For interest of transparency, make associating NULL equivilant to deleting the field.
William Pitcock <nenolod@atheme-project.org>
parents:
3304
diff
changeset
|
250 |
70149c3555f4
For interest of transparency, make associating NULL equivilant to deleting the field.
William Pitcock <nenolod@atheme-project.org>
parents:
3304
diff
changeset
|
251 if (string == NULL) |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
252 value->value.string = NULL; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
253 else |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
254 value->value.string = g_strdup(string); |
3278 | 255 |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
256 TUPLE_UNLOCK_WRITE(); |
3278 | 257 return TRUE; |
258 } | |
259 | |
260 gboolean | |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
261 tuple_associate_int(Tuple *tuple, const gint nfield, const gchar *field, gint integer) |
3278 | 262 { |
263 TupleValue *value; | |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
264 |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
265 TUPLE_LOCK_WRITE(); |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
266 if ((value = tuple_associate_data(tuple, nfield, field, TUPLE_INT)) == NULL) |
3491
899a7ed37a70
Clean up tiny bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents:
3489
diff
changeset
|
267 return FALSE; |
3278 | 268 |
269 value->value.integer = integer; | |
3499 | 270 |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
271 TUPLE_UNLOCK_WRITE(); |
3278 | 272 return TRUE; |
273 } | |
274 | |
275 void | |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
276 tuple_disassociate(Tuple *tuple, const gint cnfield, const gchar *field) |
3278 | 277 { |
278 TupleValue *value; | |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
279 gint nfield = cnfield; |
3278 | 280 |
281 g_return_if_fail(tuple != NULL); | |
3509 | 282 g_return_if_fail(nfield < FIELD_LAST); |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
283 |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
284 if (nfield < 0) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
285 nfield = tuple_get_nfield(field); |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
286 |
3499 | 287 TUPLE_LOCK_WRITE(); |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
288 if (nfield < 0) |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
289 /* why _delete()? because _delete() returns the dictnode's data on success */ |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
290 value = mowgli_dictionary_delete(tuple->dict, field); |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
291 else { |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
292 value = tuple->values[nfield]; |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
293 tuple->values[nfield] = NULL; |
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
294 } |
3278 | 295 |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
296 if (value == NULL) { |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
297 TUPLE_UNLOCK_WRITE(); |
3278 | 298 return; |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
299 } |
3409
86dafe2300f7
Added Tuplez compiler (not used yet, though) and some related changes in
Matti Hamalainen <ccr@tnsp.org>
parents:
3329
diff
changeset
|
300 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
301 /* Free associated data */ |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
302 if (value->type == TUPLE_STRING) { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
303 g_free(value->value.string); |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
304 value->value.string = NULL; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
305 } |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
306 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
307 mowgli_heap_free(tuple_value_heap, value); |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
308 TUPLE_UNLOCK_WRITE(); |
3278 | 309 } |
310 | |
311 TupleValueType | |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
312 tuple_get_value_type(Tuple *tuple, const gint cnfield, const gchar *field) |
3278 | 313 { |
3499 | 314 TupleValueType type = TUPLE_UNKNOWN; |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
315 gint nfield = cnfield; |
3278 | 316 |
3280
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
317 g_return_val_if_fail(tuple != NULL, TUPLE_UNKNOWN); |
3509 | 318 g_return_val_if_fail(nfield < FIELD_LAST, TUPLE_UNKNOWN); |
3499 | 319 |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
320 if (nfield < 0) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
321 nfield = tuple_get_nfield(field); |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
322 |
3499 | 323 TUPLE_LOCK_READ(); |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
324 if (nfield < 0) { |
3499 | 325 TupleValue *value; |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
326 if ((value = mowgli_dictionary_retrieve(tuple->dict, field)) != NULL) |
3499 | 327 type = value->type; |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
328 } else { |
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
329 if (tuple->values[nfield]) |
3504 | 330 type = tuple->values[nfield]->type; |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
331 } |
3499 | 332 |
333 TUPLE_UNLOCK_READ(); | |
334 return type; | |
3278 | 335 } |
336 | |
337 const gchar * | |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
338 tuple_get_string(Tuple *tuple, const gint cnfield, const gchar *field) |
3278 | 339 { |
340 TupleValue *value; | |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
341 gint nfield = cnfield; |
3278 | 342 |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
343 g_return_val_if_fail(tuple != NULL, NULL); |
3509 | 344 g_return_val_if_fail(nfield < FIELD_LAST, NULL); |
3278 | 345 |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
346 if (nfield < 0) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
347 nfield = tuple_get_nfield(field); |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
348 |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
349 TUPLE_LOCK_READ(); |
3499 | 350 if (nfield < 0) |
351 value = mowgli_dictionary_retrieve(tuple->dict, field); | |
352 else | |
353 value = tuple->values[nfield]; | |
3278 | 354 |
3499 | 355 if (value) { |
356 if (value->type != TUPLE_STRING) | |
357 mowgli_throw_exception_val(audacious.tuple.invalid_type_request, NULL); | |
358 | |
359 TUPLE_UNLOCK_READ(); | |
360 return value->value.string; | |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
361 } else { |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
362 TUPLE_UNLOCK_READ(); |
3278 | 363 return NULL; |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
364 } |
3278 | 365 } |
366 | |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
367 gint |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
368 tuple_get_int(Tuple *tuple, const gint cnfield, const gchar *field) |
3278 | 369 { |
370 TupleValue *value; | |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
371 gint nfield = cnfield; |
3278 | 372 |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
373 g_return_val_if_fail(tuple != NULL, 0); |
3509 | 374 g_return_val_if_fail(nfield < FIELD_LAST, 0); |
3278 | 375 |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
376 if (nfield < 0) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
377 nfield = tuple_get_nfield(field); |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
378 |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
379 TUPLE_LOCK_READ(); |
3499 | 380 if (nfield < 0) |
381 value = mowgli_dictionary_retrieve(tuple->dict, field); | |
382 else | |
383 value = tuple->values[nfield]; | |
384 | |
385 if (value) { | |
386 if (value->type != TUPLE_INT) | |
387 mowgli_throw_exception_val(audacious.tuple.invalid_type_request, 0); | |
388 | |
389 TUPLE_UNLOCK_READ(); | |
390 return value->value.integer; | |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
391 } else { |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
392 TUPLE_UNLOCK_READ(); |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
393 return 0; |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
394 } |
3278 | 395 } |