Mercurial > audlegacy
annotate src/audacious/tuple.c @ 4806:563b6f48acd9
Move one line to fix dependency generation.
author | Jonathan Schleifer <js-audacious@webkeks.org> |
---|---|
date | Sat, 01 Nov 2008 20:09:43 +0100 |
parents | 4eb5a651bbc4 |
children |
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" | |
3830
10053e99d90f
add strings.h include to remove a warning
William Pitcock <nenolod@atheme.org>
parents:
3828
diff
changeset
|
25 #include "strings.h" |
3278 | 26 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
27 const TupleBasicType tuple_fields[FIELD_LAST] = { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
28 { "artist", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
29 { "title", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
30 { "album", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
31 { "comment", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
32 { "genre", TUPLE_STRING }, |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
33 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
34 { "track", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
35 { "track-number", TUPLE_INT }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
36 { "length", TUPLE_INT }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
37 { "year", TUPLE_INT }, |
4064
7ecdb78a051e
some indenting (should make it easier to clean up the code afterwards ;-)
mf0102 <0102@gmx.at>
parents:
4061
diff
changeset
|
38 { "quality", TUPLE_STRING }, |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
39 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
40 { "codec", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
41 { "file-name", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
42 { "file-path", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
43 { "file-ext", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
44 { "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
|
45 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
46 { "mtime", TUPLE_INT }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
47 { "formatter", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
48 { "performer", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
49 { "copyright", TUPLE_STRING }, |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
50 { "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
|
51 |
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-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
|
53 { "subsong-num", TUPLE_INT }, |
4009
ba6258a39662
icon, codec and quality info added to file info box. Added new tuple field FIELD_MIMETYPE used for icon resolving
Eugene Zagidullin <e.asphyx@gmail.com>
parents:
3834
diff
changeset
|
54 { "mime-type", TUPLE_STRING }, |
4061
450581e58761
added new tuple field FIELD_BITRATE
Eugene Zagidullin <e.asphyx@gmail.com>
parents:
4009
diff
changeset
|
55 { "bitrate", TUPLE_INT }, |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
56 }; |
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
57 |
3504 | 58 static mowgli_heap_t *tuple_heap = NULL; |
59 static mowgli_heap_t *tuple_value_heap = NULL; | |
60 static mowgli_object_class_t tuple_klass; | |
61 | |
3278 | 62 |
3448
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
63 #define TUPLE_LOCKING |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
64 //#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
|
65 |
3448
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
66 #ifdef TUPLE_LOCKING |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
67 static GStaticRWLock tuple_rwlock = G_STATIC_RW_LOCK_INIT; |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
68 # ifdef TUPLE_DEBUG |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
69 # 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
|
70 # 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
|
71 # 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
|
72 # 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
|
73 # 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
|
74 # else |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
75 # 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
|
76 # 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
|
77 # 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
|
78 # 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
|
79 # endif |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
80 #else |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
81 # define TUPLE_LOCK_WRITE(XX) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
82 # define TUPLE_UNLOCK_WRITE(XX) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
83 # define TUPLE_LOCK_READ(XX) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
84 # define TUPLE_UNLOCK_READ(XX) |
004f822505b0
Added Tuple RW-lock debugging.
Matti Hamalainen <ccr@tnsp.org>
parents:
3427
diff
changeset
|
85 #endif |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
86 |
3280
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
87 /* iterative destructor of tuple values. */ |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
88 static void |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
89 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
|
90 { |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
91 TupleValue *value = (TupleValue *) delem->data; |
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 if (value->type == TUPLE_STRING) |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
94 g_free(value->value.string); |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
95 |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
96 mowgli_heap_free(tuple_value_heap, value); |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
97 } |
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
98 |
3278 | 99 static void |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
100 tuple_destroy(gpointer data) |
3278 | 101 { |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
102 Tuple *tuple = (Tuple *) data; |
3528
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
103 gint i; |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
104 |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
105 TUPLE_LOCK_WRITE(); |
3280
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
106 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
|
107 |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
108 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
|
109 if (tuple->values[i]) { |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
110 TupleValue *value = tuple->values[i]; |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
111 |
3528
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
112 if (value->type == TUPLE_STRING) |
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
113 g_free(value->value.string); |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
114 |
3528
9cc39a38fdfe
Oops, static field values were not being freed, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents:
3527
diff
changeset
|
115 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
|
116 } |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
117 |
3633
8c4633438785
Implement selective adding of subtunes.
Matti Hamalainen <ccr@tnsp.org>
parents:
3568
diff
changeset
|
118 g_free(tuple->subtunes); |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
119 |
3278 | 120 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
|
121 TUPLE_UNLOCK_WRITE(); |
3278 | 122 } |
123 | |
124 Tuple * | |
125 tuple_new(void) | |
126 { | |
127 Tuple *tuple; | |
128 | |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
129 TUPLE_LOCK_WRITE(); |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
130 |
3278 | 131 if (tuple_heap == NULL) |
132 { | |
3529
7e8c4aadfc32
Make the default allocation values bigger.
Matti Hamalainen <ccr@tnsp.org>
parents:
3528
diff
changeset
|
133 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
|
134 tuple_value_heap = mowgli_heap_create(sizeof(TupleValue), 1024, BH_NOW); |
3278 | 135 mowgli_object_class_init(&tuple_klass, "audacious.tuple", tuple_destroy, FALSE); |
136 } | |
137 | |
138 /* FIXME: use mowgli_object_bless_from_class() in mowgli 0.4 | |
139 when it is released --nenolod */ | |
140 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
|
141 memset(tuple, 0, sizeof(Tuple)); |
3278 | 142 mowgli_object_init(mowgli_object(tuple), NULL, &tuple_klass, NULL); |
143 | |
144 tuple->dict = mowgli_dictionary_create(g_ascii_strcasecmp); | |
145 | |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
146 TUPLE_UNLOCK_WRITE(); |
3278 | 147 return tuple; |
148 } | |
149 | |
3834 | 150 static TupleValue * |
151 tuple_associate_data(Tuple *tuple, const gint cnfield, const gchar *field, TupleValueType ftype); | |
152 | |
3833 | 153 static gboolean |
4643
4eb5a651bbc4
Properly fix my own fucked up changes. Sorry for the inconvenience.
Matti Hamalainen <ccr@tnsp.org>
parents:
4642
diff
changeset
|
154 _tuple_associate_raw_string(Tuple *tuple, const gint nfield, const gchar *field, gchar *string) |
3833 | 155 { |
156 TupleValue *value; | |
157 | |
158 TUPLE_LOCK_WRITE(); | |
159 if ((value = tuple_associate_data(tuple, nfield, field, TUPLE_STRING)) == NULL) | |
160 return FALSE; | |
161 | |
4643
4eb5a651bbc4
Properly fix my own fucked up changes. Sorry for the inconvenience.
Matti Hamalainen <ccr@tnsp.org>
parents:
4642
diff
changeset
|
162 value->value.string = string; |
3833 | 163 |
164 TUPLE_UNLOCK_WRITE(); | |
165 return TRUE; | |
166 } | |
167 | |
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
|
168 Tuple * |
3304
00286cde2485
Make filename a const
Christian Birchinger <joker@netswarm.net>
parents:
3303
diff
changeset
|
169 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
|
170 { |
4637 | 171 gchar *ext; |
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
|
172 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
|
173 |
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
|
174 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
|
175 |
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 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
|
177 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
|
178 |
4628
8399067f9b1a
Remove few pointless string copies.
Matti Hamalainen <ccr@tnsp.org>
parents:
4089
diff
changeset
|
179 _tuple_associate_raw_string(tuple, FIELD_FILE_NAME, NULL, |
8399067f9b1a
Remove few pointless string copies.
Matti Hamalainen <ccr@tnsp.org>
parents:
4089
diff
changeset
|
180 uri_to_display_basename(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
|
181 |
4628
8399067f9b1a
Remove few pointless string copies.
Matti Hamalainen <ccr@tnsp.org>
parents:
4089
diff
changeset
|
182 _tuple_associate_raw_string(tuple, FIELD_FILE_PATH, NULL, |
8399067f9b1a
Remove few pointless string copies.
Matti Hamalainen <ccr@tnsp.org>
parents:
4089
diff
changeset
|
183 uri_to_display_basename(filename)); |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
184 |
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
|
185 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
|
186 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
|
187 ++ext; |
4628
8399067f9b1a
Remove few pointless string copies.
Matti Hamalainen <ccr@tnsp.org>
parents:
4089
diff
changeset
|
188 _tuple_associate_raw_string(tuple, FIELD_FILE_EXT, NULL, |
8399067f9b1a
Remove few pointless string copies.
Matti Hamalainen <ccr@tnsp.org>
parents:
4089
diff
changeset
|
189 g_strdup(ext)); |
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
|
190 } |
3303
eaf68ed98166
Use real filenames inside tuples not URIs
Christian Birchinger <joker@netswarm.net>
parents:
3301
diff
changeset
|
191 |
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
|
192 return tuple; |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
193 } |
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
|
194 |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
195 |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
196 static gint tuple_get_nfield(const gchar *field) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
197 { |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
198 gint i; |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
199 for (i = 0; i < FIELD_LAST; i++) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
200 if (!strcmp(field, tuple_fields[i].name)) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
201 return i; |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
202 return -1; |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
203 } |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
204 |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
205 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
206 static TupleValue * |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
207 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
|
208 { |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
209 const gchar *tfield = field; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
210 gint nfield = cnfield; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
211 TupleValue *value = NULL; |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
212 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
213 g_return_val_if_fail(tuple != NULL, NULL); |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
214 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
|
215 |
3494
7d1dee4f660a
Check for known fields in tuple_associate_data() when given nfield is
Matti Hamalainen <ccr@tnsp.org>
parents:
3491
diff
changeset
|
216 /* Check for known fields */ |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
217 if (nfield < 0) { |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
218 nfield = tuple_get_nfield(field); |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
219 if (nfield >= 0) { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
220 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
|
221 } |
3494
7d1dee4f660a
Check for known fields in tuple_associate_data() when given nfield is
Matti Hamalainen <ccr@tnsp.org>
parents:
3491
diff
changeset
|
222 } |
7d1dee4f660a
Check for known fields in tuple_associate_data() when given nfield is
Matti Hamalainen <ccr@tnsp.org>
parents:
3491
diff
changeset
|
223 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
224 /* Check if field was known */ |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
225 if (nfield >= 0) { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
226 tfield = tuple_fields[nfield].name; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
227 value = tuple->values[nfield]; |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
228 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
229 if (ftype != tuple_fields[nfield].type) { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
230 /* FIXME! Convert values perhaps .. or not? */ |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
231 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
|
232 //mowgli_throw_exception_val(audacious.tuple.invalid_type_request, 0); |
3499 | 233 TUPLE_UNLOCK_WRITE(); |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
234 return NULL; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
235 } |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
236 } else { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
237 value = mowgli_dictionary_retrieve(tuple->dict, tfield); |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
238 } |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
239 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
240 if (value != NULL) { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
241 /* Value exists, just delete old associated data */ |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
242 if (value->type == TUPLE_STRING) { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
243 g_free(value->value.string); |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
244 value->value.string = NULL; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
245 } |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
246 } else { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
247 /* Allocate a new value */ |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
248 value = mowgli_heap_alloc(tuple_value_heap); |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
249 value->type = ftype; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
250 if (nfield >= 0) |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
251 tuple->values[nfield] = value; |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
252 else |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
253 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
|
254 } |
3499 | 255 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
256 return value; |
3491
899a7ed37a70
Clean up tiny bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents:
3489
diff
changeset
|
257 } |
899a7ed37a70
Clean up tiny bit of code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents:
3489
diff
changeset
|
258 |
3278 | 259 gboolean |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
260 tuple_associate_string(Tuple *tuple, const gint nfield, const gchar *field, const gchar *string) |
3278 | 261 { |
262 TupleValue *value; | |
263 | |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
264 TUPLE_LOCK_WRITE(); |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
265 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
|
266 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
|
267 |
70149c3555f4
For interest of transparency, make associating NULL equivilant to deleting the field.
William Pitcock <nenolod@atheme-project.org>
parents:
3304
diff
changeset
|
268 if (string == NULL) |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
269 value->value.string = NULL; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
270 else |
3833 | 271 value->value.string = str_to_utf8(string); |
3278 | 272 |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
273 TUPLE_UNLOCK_WRITE(); |
3278 | 274 return TRUE; |
275 } | |
276 | |
277 gboolean | |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
278 tuple_associate_int(Tuple *tuple, const gint nfield, const gchar *field, gint integer) |
3278 | 279 { |
280 TupleValue *value; | |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
281 |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
282 TUPLE_LOCK_WRITE(); |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
283 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
|
284 return FALSE; |
3278 | 285 |
286 value->value.integer = integer; | |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
287 |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
288 TUPLE_UNLOCK_WRITE(); |
3278 | 289 return TRUE; |
290 } | |
291 | |
292 void | |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
293 tuple_disassociate(Tuple *tuple, const gint cnfield, const gchar *field) |
3278 | 294 { |
295 TupleValue *value; | |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
296 gint nfield = cnfield; |
3278 | 297 |
298 g_return_if_fail(tuple != NULL); | |
3509 | 299 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
|
300 |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
301 if (nfield < 0) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
302 nfield = tuple_get_nfield(field); |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
303 |
3499 | 304 TUPLE_LOCK_WRITE(); |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
305 if (nfield < 0) |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
306 /* 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
|
307 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
|
308 else { |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
309 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
|
310 tuple->values[nfield] = NULL; |
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
311 } |
3278 | 312 |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
313 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
|
314 TUPLE_UNLOCK_WRITE(); |
3278 | 315 return; |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
316 } |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
317 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
318 /* Free associated data */ |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
319 if (value->type == TUPLE_STRING) { |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
320 g_free(value->value.string); |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
321 value->value.string = NULL; |
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
322 } |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
323 |
3498
9fcb90613e4f
Added types to base tuples.
Matti Hamalainen <ccr@tnsp.org>
parents:
3497
diff
changeset
|
324 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
|
325 TUPLE_UNLOCK_WRITE(); |
3278 | 326 } |
327 | |
328 TupleValueType | |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
329 tuple_get_value_type(Tuple *tuple, const gint cnfield, const gchar *field) |
3278 | 330 { |
3499 | 331 TupleValueType type = TUPLE_UNKNOWN; |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
332 gint nfield = cnfield; |
3278 | 333 |
3280
a26138e391ee
Tuple engine cleanups.
William Pitcock <nenolod@atheme-project.org>
parents:
3278
diff
changeset
|
334 g_return_val_if_fail(tuple != NULL, TUPLE_UNKNOWN); |
3509 | 335 g_return_val_if_fail(nfield < FIELD_LAST, TUPLE_UNKNOWN); |
3499 | 336 |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
337 if (nfield < 0) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
338 nfield = tuple_get_nfield(field); |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
339 |
3499 | 340 TUPLE_LOCK_READ(); |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
341 if (nfield < 0) { |
3499 | 342 TupleValue *value; |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
343 if ((value = mowgli_dictionary_retrieve(tuple->dict, field)) != NULL) |
3499 | 344 type = value->type; |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
345 } else { |
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
346 if (tuple->values[nfield]) |
3504 | 347 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
|
348 } |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
349 |
3499 | 350 TUPLE_UNLOCK_READ(); |
351 return type; | |
3278 | 352 } |
353 | |
354 const gchar * | |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
355 tuple_get_string(Tuple *tuple, const gint cnfield, const gchar *field) |
3278 | 356 { |
357 TupleValue *value; | |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
358 gint nfield = cnfield; |
3278 | 359 |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
360 g_return_val_if_fail(tuple != NULL, NULL); |
3509 | 361 g_return_val_if_fail(nfield < FIELD_LAST, NULL); |
3278 | 362 |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
363 if (nfield < 0) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
364 nfield = tuple_get_nfield(field); |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
365 |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
366 TUPLE_LOCK_READ(); |
3499 | 367 if (nfield < 0) |
368 value = mowgli_dictionary_retrieve(tuple->dict, field); | |
369 else | |
370 value = tuple->values[nfield]; | |
3278 | 371 |
3499 | 372 if (value) { |
373 if (value->type != TUPLE_STRING) | |
374 mowgli_throw_exception_val(audacious.tuple.invalid_type_request, NULL); | |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
375 |
3499 | 376 TUPLE_UNLOCK_READ(); |
377 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
|
378 } else { |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
379 TUPLE_UNLOCK_READ(); |
3278 | 380 return NULL; |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
381 } |
3278 | 382 } |
383 | |
3489
9580bb3e58fa
Tuple handling API changed to include support for "hardcoded" fields.
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
384 gint |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
385 tuple_get_int(Tuple *tuple, const gint cnfield, const gchar *field) |
3278 | 386 { |
387 TupleValue *value; | |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
388 gint nfield = cnfield; |
3278 | 389 |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
390 g_return_val_if_fail(tuple != NULL, 0); |
3509 | 391 g_return_val_if_fail(nfield < FIELD_LAST, 0); |
3278 | 392 |
3510
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
393 if (nfield < 0) |
b2a82a73a788
Few bits of pre-integration shit.
Matti Hamalainen <ccr@tnsp.org>
parents:
3509
diff
changeset
|
394 nfield = tuple_get_nfield(field); |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
395 |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
396 TUPLE_LOCK_READ(); |
3499 | 397 if (nfield < 0) |
398 value = mowgli_dictionary_retrieve(tuple->dict, field); | |
399 else | |
400 value = tuple->values[nfield]; | |
401 | |
402 if (value) { | |
403 if (value->type != TUPLE_INT) | |
404 mowgli_throw_exception_val(audacious.tuple.invalid_type_request, 0); | |
4640
cbc9965e1552
removed some dangling white spaces.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
4637
diff
changeset
|
405 |
3499 | 406 TUPLE_UNLOCK_READ(); |
407 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
|
408 } else { |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
409 TUPLE_UNLOCK_READ(); |
3282
b78d3197c70d
Tuple (final version)
William Pitcock <nenolod@atheme-project.org>
parents:
3281
diff
changeset
|
410 return 0; |
3427
7c2e63c5a001
Add a global GStaticRWLock to Tuple handling code. This should prevent
Matti Hamalainen <ccr@tnsp.org>
parents:
3409
diff
changeset
|
411 } |
3278 | 412 } |