1 /* LyrDB.c generated by valac 0.12.0, the Vala compiler
2 * generated from LyrDB.vala, do not modify */
3
4 /* Gnome Music Player Client (GMPC)
5 * Copyright (C) 2004-2011 Qball Cow <qball@gmpclient.org>
6 * Project homepage: http://gmpclient.org/
7
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17
18 * You should have received a copy of the GNU General Public License along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 */
22
23 #include <glib.h>
24 #include <glib-object.h>
25 #include <gtk/gtk.h>
26 #include <gtktransition.h>
27 #include <stdlib.h>
28 #include <string.h>
29 #include <config.h>
30 #include "gmpc-extras.h"
31 #include <plugin.h>
32 #include <config1.h>
33 #include <libmpd/libmpdclient.h>
34 #include <libmpd/libmpd.h>
35 #include <misc.h>
36 #include <metadata.h>
37 #include <gmpc_easy_download.h>
38
39 #define _g_free0(var) (var = (g_free (var), NULL))
40 #define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
41 #define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
42 typedef struct _GmpcProviderLyrDBProp GmpcProviderLyrDBProp;
43 #define _meta_data_free0(var) ((var == NULL) ? NULL : (var = (meta_data_free (var), NULL)))
44 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
45 #define _mpd_freeSong0(var) ((var == NULL) ? NULL : (var = (mpd_freeSong (var), NULL)))
46 #define _g_queue_free0(var) ((var == NULL) ? NULL : (var = (g_queue_free (var), NULL)))
47 #define __g_list_free__meta_data_free0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__meta_data_free0_ (var), NULL)))
48
49 struct _GmpcProviderLyrDBProp {
50 mpd_Song* song;
51 GmpcProviderLyrDB* this;
52 GmpcPluginMetaDataCallback callback;
53 gpointer callback_target;
54 GDestroyNotify callback_target_destroy_notify;
55 GQueue* results;
56 GList* list;
57 };
58
59
60 static gpointer gmpc_provider_lyr_db_parent_class = NULL;
61 static GmpcPluginMetaDataIfaceIface* gmpc_provider_lyr_db_gmpc_plugin_meta_data_iface_parent_iface = NULL;
62
63 #define use_transition_ppldb TRUE
64 #define some_unique_name_ppldb VERSION
65 #define log_domain_ppldb "Gmpc.Provider.LyrDB"
66 enum {
67 GMPC_PROVIDER_LYR_DB_DUMMY_PROPERTY
68 };
69 #define GMPC_PROVIDER_LYR_DB_query "http://webservices.lyrdb.com/lookup.php?q=%s|%s&for=match&agent=gmpc-l" \
70 "yrdb"
71 #define GMPC_PROVIDER_LYR_DB_download_url "http://webservices.lyrdb.com/getlyr.php?q=%s"
72 static gint* gmpc_provider_lyr_db_real_get_version (GmpcPluginBase* base, int* result_length1);
73 static const gchar* gmpc_provider_lyr_db_real_get_name (GmpcPluginBase* base);
74 static void gmpc_provider_lyr_db_real_set_priority (GmpcPluginMetaDataIface* base, gint priority);
75 static gint gmpc_provider_lyr_db_real_get_priority (GmpcPluginMetaDataIface* base);
76 static void gmpc_provider_lyr_db_real_get_metadata (GmpcPluginMetaDataIface* base, const mpd_Song* song, MetaDataType type, GmpcPluginMetaDataCallback callback, void* callback_target);
77 static void gmpc_provider_lyr_db_get_song_txt (GmpcProviderLyrDB* self, const mpd_Song* song, GmpcPluginMetaDataCallback callback, void* callback_target);
78 static gchar* _gmpc_provider_lyr_db__convert_raw_data (GmpcProviderLyrDB* self, const gchar* raw_data);
79 static void gmpc_provider_lyr_db_handle_lyrics_download (GmpcProviderLyrDB* self, const GEADAsyncHandler* handle, GEADStatus status, void* d);
80 static void gmpc_provider_lyr_db_prop_free (GmpcProviderLyrDBProp* self);
81 static void gmpc_provider_lyr_db_download_lyrics (GmpcProviderLyrDB* self, GmpcProviderLyrDBProp* p);
82 static void _gmpc_provider_lyr_db_handle_lyrics_download_gmpc_async_download_callback_vala (const GEADAsyncHandler* handle, GEADStatus status, void* p, gpointer self);
83 static void gmpc_provider_lyr_db_parse_data (GmpcProviderLyrDB* self, GmpcProviderLyrDBProp* p, const gchar* raw_data);
84 static void gmpc_provider_lyr_db_handle_download (GmpcProviderLyrDB* self, const GEADAsyncHandler* handle, GEADStatus status, void* d);
85 static GmpcProviderLyrDBProp* gmpc_provider_lyr_db_prop_new (void);
86 static GmpcProviderLyrDBProp* gmpc_provider_lyr_db_prop_new (void);
87 static void _gmpc_provider_lyr_db_handle_download_gmpc_async_download_callback_vala (const GEADAsyncHandler* handle, GEADStatus status, void* p, gpointer self);
88 static GObject * gmpc_provider_lyr_db_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
89 static void gmpc_provider_lyr_db_prop_instance_init (GmpcProviderLyrDBProp * self);
90 static void _meta_data_free0_ (gpointer var);
91 static void _g_list_free__meta_data_free0_ (GList* self);
92 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
93 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
94 static gint _vala_array_length (gpointer array);
95
96 static const gint GMPC_PROVIDER_LYR_DB_version[3] = {0, 0, 2};
97
gmpc_provider_lyr_db_real_get_version(GmpcPluginBase * base,int * result_length1)98 static gint* gmpc_provider_lyr_db_real_get_version (GmpcPluginBase* base, int* result_length1) {
99 GmpcProviderLyrDB * self;
100 gint* result = NULL;
101 gint* _tmp0_;
102 self = (GmpcProviderLyrDB*) base;
103 _tmp0_ = GMPC_PROVIDER_LYR_DB_version;
104 *result_length1 = G_N_ELEMENTS (GMPC_PROVIDER_LYR_DB_version);
105 result = _tmp0_;
106 return result;
107 }
108
109
gmpc_provider_lyr_db_real_get_name(GmpcPluginBase * base)110 static const gchar* gmpc_provider_lyr_db_real_get_name (GmpcPluginBase* base) {
111 GmpcProviderLyrDB * self;
112 const gchar* result = NULL;
113 self = (GmpcProviderLyrDB*) base;
114 result = "Lyrics DB Plugin";
115 return result;
116 }
117
118
gmpc_provider_lyr_db_real_set_priority(GmpcPluginMetaDataIface * base,gint priority)119 static void gmpc_provider_lyr_db_real_set_priority (GmpcPluginMetaDataIface* base, gint priority) {
120 GmpcProviderLyrDB * self;
121 const gchar* _tmp0_ = NULL;
122 self = (GmpcProviderLyrDB*) base;
123 _tmp0_ = gmpc_plugin_base_get_name ((GmpcPluginBase*) self);
124 cfg_set_single_value_as_int (config, _tmp0_, "priority", priority);
125 }
126
127
gmpc_provider_lyr_db_real_get_priority(GmpcPluginMetaDataIface * base)128 static gint gmpc_provider_lyr_db_real_get_priority (GmpcPluginMetaDataIface* base) {
129 GmpcProviderLyrDB * self;
130 gint result = 0;
131 const gchar* _tmp0_ = NULL;
132 gint _tmp1_;
133 self = (GmpcProviderLyrDB*) base;
134 _tmp0_ = gmpc_plugin_base_get_name ((GmpcPluginBase*) self);
135 _tmp1_ = cfg_get_single_value_as_int_with_default (config, _tmp0_, "priority", 60);
136 result = _tmp1_;
137 return result;
138 }
139
140
gmpc_provider_lyr_db_real_get_metadata(GmpcPluginMetaDataIface * base,const mpd_Song * song,MetaDataType type,GmpcPluginMetaDataCallback callback,void * callback_target)141 static void gmpc_provider_lyr_db_real_get_metadata (GmpcPluginMetaDataIface* base, const mpd_Song* song, MetaDataType type, GmpcPluginMetaDataCallback callback, void* callback_target) {
142 GmpcProviderLyrDB * self;
143 gboolean _tmp0_ = FALSE;
144 gboolean _tmp1_ = FALSE;
145 self = (GmpcProviderLyrDB*) base;
146 g_return_if_fail (song != NULL);
147 if (song == NULL) {
148 _tmp1_ = TRUE;
149 } else {
150 _tmp1_ = song->artist == NULL;
151 }
152 if (_tmp1_) {
153 _tmp0_ = TRUE;
154 } else {
155 _tmp0_ = song->title == NULL;
156 }
157 if (_tmp0_) {
158 g_log (log_domain_ppldb, G_LOG_LEVEL_DEBUG, "LyrDB.vala:64: Insufficient information. doing nothing");
159 callback (NULL, callback_target);
160 return;
161 }
162 switch (type) {
163 case META_SONG_TXT:
164 {
165 gmpc_provider_lyr_db_get_song_txt (self, song, callback, callback_target);
166 return;
167 }
168 default:
169 case META_ALBUM_ART:
170 case META_ARTIST_ART:
171 case META_ALBUM_TXT:
172 case META_ARTIST_TXT:
173 case META_ARTIST_SIMILAR:
174 case META_SONG_SIMILAR:
175 case META_GENRE_SIMILAR:
176 case META_SONG_GUITAR_TAB:
177 case META_QUERY_DATA_TYPES:
178 case META_QUERY_NO_CACHE:
179 {
180 break;
181 }
182 }
183 callback (NULL, callback_target);
184 }
185
186
string_chomp(const gchar * self)187 static gchar* string_chomp (const gchar* self) {
188 gchar* result = NULL;
189 gchar* _tmp0_ = NULL;
190 gchar* _result_;
191 g_return_val_if_fail (self != NULL, NULL);
192 _tmp0_ = g_strdup (self);
193 _result_ = _tmp0_;
194 g_strchomp (_result_);
195 result = _result_;
196 return result;
197 }
198
199
string_replace(const gchar * self,const gchar * old,const gchar * replacement)200 static gchar* string_replace (const gchar* self, const gchar* old, const gchar* replacement) {
201 gchar* result = NULL;
202 gchar* _tmp0_ = NULL;
203 gchar* _tmp1_;
204 GRegex* _tmp2_ = NULL;
205 GRegex* _tmp3_;
206 GRegex* regex;
207 gchar* _tmp4_ = NULL;
208 gchar* _tmp5_;
209 GError * _inner_error_ = NULL;
210 g_return_val_if_fail (self != NULL, NULL);
211 g_return_val_if_fail (old != NULL, NULL);
212 g_return_val_if_fail (replacement != NULL, NULL);
213 _tmp0_ = g_regex_escape_string (old, -1);
214 _tmp1_ = _tmp0_;
215 _tmp2_ = g_regex_new (_tmp1_, 0, 0, &_inner_error_);
216 _tmp3_ = _tmp2_;
217 _g_free0 (_tmp1_);
218 regex = _tmp3_;
219 if (_inner_error_ != NULL) {
220 if (_inner_error_->domain == G_REGEX_ERROR) {
221 goto __catch25_g_regex_error;
222 }
223 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
224 g_clear_error (&_inner_error_);
225 return NULL;
226 }
227 _tmp4_ = g_regex_replace_literal (regex, self, (gssize) (-1), 0, replacement, 0, &_inner_error_);
228 _tmp5_ = _tmp4_;
229 if (_inner_error_ != NULL) {
230 _g_regex_unref0 (regex);
231 if (_inner_error_->domain == G_REGEX_ERROR) {
232 goto __catch25_g_regex_error;
233 }
234 _g_regex_unref0 (regex);
235 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
236 g_clear_error (&_inner_error_);
237 return NULL;
238 }
239 result = _tmp5_;
240 _g_regex_unref0 (regex);
241 return result;
242 _g_regex_unref0 (regex);
243 goto __finally25;
244 __catch25_g_regex_error:
245 {
246 GError * e;
247 e = _inner_error_;
248 _inner_error_ = NULL;
249 g_assert_not_reached ();
250 _g_error_free0 (e);
251 }
252 __finally25:
253 if (_inner_error_ != NULL) {
254 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
255 g_clear_error (&_inner_error_);
256 return NULL;
257 }
258 }
259
260
_gmpc_provider_lyr_db__convert_raw_data(GmpcProviderLyrDB * self,const gchar * raw_data)261 static gchar* _gmpc_provider_lyr_db__convert_raw_data (GmpcProviderLyrDB* self, const gchar* raw_data) {
262 gchar* result = NULL;
263 gchar* data;
264 gboolean _tmp0_;
265 GError * _inner_error_ = NULL;
266 g_return_val_if_fail (self != NULL, NULL);
267 g_return_val_if_fail (raw_data != NULL, NULL);
268 data = NULL;
269 _tmp0_ = g_utf8_validate (raw_data, (gssize) (-1), NULL);
270 if (!_tmp0_) {
271 gchar* _tmp1_ = NULL;
272 gchar* _tmp2_;
273 g_log (log_domain_ppldb, G_LOG_LEVEL_WARNING, "LyrDB.vala:103: Input is invalid utf-8, try converting");
274 _tmp1_ = g_convert ((const gchar*) raw_data, (gssize) (-1), "UTF-8", "ISO-8859-15", NULL, NULL, &_inner_error_);
275 _tmp2_ = _tmp1_;
276 if (_inner_error_ != NULL) {
277 goto __catch24_g_error;
278 }
279 _g_free0 (data);
280 data = _tmp2_;
281 goto __finally24;
282 __catch24_g_error:
283 {
284 GError * e;
285 e = _inner_error_;
286 _inner_error_ = NULL;
287 g_log (log_domain_ppldb, G_LOG_LEVEL_WARNING, "LyrDB.vala:114: Unable to convert input data: %s", e->message);
288 _g_error_free0 (e);
289 }
290 __finally24:
291 if (_inner_error_ != NULL) {
292 _g_free0 (data);
293 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
294 g_clear_error (&_inner_error_);
295 return NULL;
296 }
297 } else {
298 gchar* _tmp3_;
299 _tmp3_ = g_strdup ((const gchar*) raw_data);
300 _g_free0 (data);
301 data = _tmp3_;
302 }
303 if (data != NULL) {
304 gchar* _tmp4_ = NULL;
305 gchar* _tmp5_;
306 gchar* _tmp6_ = NULL;
307 gchar* _tmp7_;
308 _tmp4_ = string_chomp (data);
309 _tmp5_ = _tmp4_;
310 _g_free0 (_tmp5_);
311 _tmp6_ = string_replace (data, "\r\n", "\n");
312 _tmp7_ = _tmp6_;
313 _g_free0 (_tmp7_);
314 }
315 result = data;
316 return result;
317 }
318
319
gmpc_provider_lyr_db_handle_lyrics_download(GmpcProviderLyrDB * self,const GEADAsyncHandler * handle,GEADStatus status,void * d)320 static void gmpc_provider_lyr_db_handle_lyrics_download (GmpcProviderLyrDB* self, const GEADAsyncHandler* handle, GEADStatus status, void* d) {
321 GmpcProviderLyrDBProp* p;
322 g_return_if_fail (self != NULL);
323 g_return_if_fail (handle != NULL);
324 p = (GmpcProviderLyrDBProp*) d;
325 if (status == GEAD_PROGRESS) {
326 return;
327 } else {
328 if (status == GEAD_DONE) {
329 const gchar* _tmp0_ = NULL;
330 const gchar* raw_data;
331 gchar* _tmp1_ = NULL;
332 gchar* data;
333 _tmp0_ = gmpc_easy_handler_get_data_as_string (handle);
334 raw_data = _tmp0_;
335 _tmp1_ = _gmpc_provider_lyr_db__convert_raw_data (self, raw_data);
336 data = _tmp1_;
337 if (data != NULL) {
338 MetaData* _tmp2_ = NULL;
339 MetaData* pitem;
340 const gchar* _tmp3_ = NULL;
341 MetaData* _tmp4_;
342 _tmp2_ = meta_data_new ();
343 pitem = _tmp2_;
344 pitem->type = META_SONG_TXT;
345 _tmp3_ = gmpc_plugin_base_get_name ((GmpcPluginBase*) self);
346 pitem->plugin_name = _tmp3_;
347 pitem->content_type = META_DATA_CONTENT_TEXT;
348 meta_data_set_text (pitem, (const gchar*) data);
349 _tmp4_ = pitem;
350 pitem = NULL;
351 p->list = g_list_append (p->list, _tmp4_);
352 g_log (log_domain_ppldb, G_LOG_LEVEL_DEBUG, "LyrDB.vala:153: Added item to the list");
353 _meta_data_free0 (pitem);
354 }
355 _g_free0 (data);
356 }
357 }
358 gmpc_provider_lyr_db_download_lyrics (self, p);
359 }
360
361
_gmpc_provider_lyr_db_handle_lyrics_download_gmpc_async_download_callback_vala(const GEADAsyncHandler * handle,GEADStatus status,void * p,gpointer self)362 static void _gmpc_provider_lyr_db_handle_lyrics_download_gmpc_async_download_callback_vala (const GEADAsyncHandler* handle, GEADStatus status, void* p, gpointer self) {
363 gmpc_provider_lyr_db_handle_lyrics_download (self, handle, status, p);
364 }
365
366
gmpc_provider_lyr_db_download_lyrics(GmpcProviderLyrDB * self,GmpcProviderLyrDBProp * p)367 static void gmpc_provider_lyr_db_download_lyrics (GmpcProviderLyrDB* self, GmpcProviderLyrDBProp* p) {
368 g_return_if_fail (self != NULL);
369 if (p->results->length > 0) {
370 gpointer _tmp0_ = NULL;
371 gchar* path;
372 _tmp0_ = g_queue_pop_tail (p->results);
373 path = (gchar*) _tmp0_;
374 g_log (log_domain_ppldb, G_LOG_LEVEL_DEBUG, "LyrDB.vala:165: Added Downloading: '%s'", path);
375 gmpc_easy_async_downloader_vala (path, p, _gmpc_provider_lyr_db_handle_lyrics_download_gmpc_async_download_callback_vala, self);
376 _g_free0 (path);
377 } else {
378 GList* _tmp1_;
379 _tmp1_ = p->list;
380 p->list = NULL;
381 p->callback (_tmp1_, p->callback_target);
382 gmpc_provider_lyr_db_prop_free (p);
383 }
384 }
385
386
gmpc_provider_lyr_db_parse_data(GmpcProviderLyrDB * self,GmpcProviderLyrDBProp * p,const gchar * raw_data)387 static void gmpc_provider_lyr_db_parse_data (GmpcProviderLyrDB* self, GmpcProviderLyrDBProp* p, const gchar* raw_data) {
388 gchar* _tmp0_ = NULL;
389 gchar* data;
390 gchar** _tmp1_;
391 gchar** _tmp2_ = NULL;
392 gchar** splitted;
393 gint splitted_length1;
394 gint _splitted_size_;
395 g_return_if_fail (self != NULL);
396 g_return_if_fail (raw_data != NULL);
397 _tmp0_ = _gmpc_provider_lyr_db__convert_raw_data (self, raw_data);
398 data = _tmp0_;
399 if (data == NULL) {
400 _g_free0 (data);
401 return;
402 }
403 _tmp2_ = _tmp1_ = g_strsplit ((const gchar*) data, "\n", 0);
404 splitted = _tmp2_;
405 splitted_length1 = _vala_array_length (_tmp1_);
406 _splitted_size_ = _vala_array_length (_tmp1_);
407 {
408 gchar** entry_collection;
409 int entry_collection_length1;
410 int entry_it;
411 entry_collection = splitted;
412 entry_collection_length1 = splitted_length1;
413 for (entry_it = 0; entry_it < splitted_length1; entry_it = entry_it + 1) {
414 gchar* _tmp3_;
415 gchar* entry;
416 _tmp3_ = g_strdup (entry_collection[entry_it]);
417 entry = _tmp3_;
418 {
419 gchar** _tmp4_;
420 gchar** _tmp5_ = NULL;
421 gchar** fields;
422 gint fields_length1;
423 gint _fields_size_;
424 _tmp5_ = _tmp4_ = g_strsplit (entry, "\\", 0);
425 fields = _tmp5_;
426 fields_length1 = _vala_array_length (_tmp4_);
427 _fields_size_ = _vala_array_length (_tmp4_);
428 if (fields_length1 == 3) {
429 gchar* _tmp6_ = NULL;
430 gchar* path;
431 gchar* _tmp7_;
432 _tmp6_ = g_strdup_printf (GMPC_PROVIDER_LYR_DB_download_url, fields[0]);
433 path = _tmp6_;
434 _tmp7_ = path;
435 path = NULL;
436 g_queue_push_head (p->results, _tmp7_);
437 _g_free0 (path);
438 }
439 fields = (_vala_array_free (fields, fields_length1, (GDestroyNotify) g_free), NULL);
440 _g_free0 (entry);
441 }
442 }
443 }
444 splitted = (_vala_array_free (splitted, splitted_length1, (GDestroyNotify) g_free), NULL);
445 _g_free0 (data);
446 }
447
448
gmpc_provider_lyr_db_handle_download(GmpcProviderLyrDB * self,const GEADAsyncHandler * handle,GEADStatus status,void * d)449 static void gmpc_provider_lyr_db_handle_download (GmpcProviderLyrDB* self, const GEADAsyncHandler* handle, GEADStatus status, void* d) {
450 GmpcProviderLyrDBProp* p;
451 g_return_if_fail (self != NULL);
452 g_return_if_fail (handle != NULL);
453 p = (GmpcProviderLyrDBProp*) d;
454 if (status == GEAD_DONE) {
455 const gchar* _tmp0_ = NULL;
456 const gchar* data;
457 _tmp0_ = gmpc_easy_handler_get_data_as_string (handle);
458 data = _tmp0_;
459 if (data != NULL) {
460 gmpc_provider_lyr_db_parse_data (self, p, data);
461 }
462 g_log (log_domain_ppldb, G_LOG_LEVEL_DEBUG, "LyrDB.vala:205: Download done: results: %u ", p->results->length);
463 if (p->results->length == 0) {
464 p->callback (NULL, p->callback_target);
465 gmpc_provider_lyr_db_prop_free (p);
466 } else {
467 gmpc_provider_lyr_db_download_lyrics (self, p);
468 }
469 } else {
470 if (status == GEAD_PROGRESS) {
471 } else {
472 p->callback (NULL, p->callback_target);
473 gmpc_provider_lyr_db_prop_free (p);
474 }
475 }
476 }
477
478
479 /**
480 * Get artist art
481 */
_g_object_ref0(gpointer self)482 static gpointer _g_object_ref0 (gpointer self) {
483 return self ? g_object_ref (self) : NULL;
484 }
485
486
_mpd_songDup0(gpointer self)487 static gpointer _mpd_songDup0 (gpointer self) {
488 return self ? mpd_songDup (self) : NULL;
489 }
490
491
_gmpc_provider_lyr_db_handle_download_gmpc_async_download_callback_vala(const GEADAsyncHandler * handle,GEADStatus status,void * p,gpointer self)492 static void _gmpc_provider_lyr_db_handle_download_gmpc_async_download_callback_vala (const GEADAsyncHandler* handle, GEADStatus status, void* p, gpointer self) {
493 gmpc_provider_lyr_db_handle_download (self, handle, status, p);
494 }
495
496
gmpc_provider_lyr_db_get_song_txt(GmpcProviderLyrDB * self,const mpd_Song * song,GmpcPluginMetaDataCallback callback,void * callback_target)497 static void gmpc_provider_lyr_db_get_song_txt (GmpcProviderLyrDB* self, const mpd_Song* song, GmpcPluginMetaDataCallback callback, void* callback_target) {
498 GmpcProviderLyrDBProp* _tmp0_ = NULL;
499 GmpcProviderLyrDBProp* p;
500 GmpcProviderLyrDB* _tmp1_;
501 mpd_Song* _tmp2_;
502 GmpcPluginMetaDataCallback _tmp3_;
503 gchar* _tmp4_ = NULL;
504 gchar* _tmp5_;
505 gchar* _tmp6_ = NULL;
506 gchar* _tmp7_;
507 gchar* _tmp8_ = NULL;
508 gchar* _tmp9_;
509 gchar* path;
510 g_return_if_fail (self != NULL);
511 g_return_if_fail (song != NULL);
512 _tmp0_ = gmpc_provider_lyr_db_prop_new ();
513 p = _tmp0_;
514 _tmp1_ = _g_object_ref0 (self);
515 _g_object_unref0 (p->this);
516 p->this = _tmp1_;
517 _tmp2_ = _mpd_songDup0 (song);
518 _mpd_freeSong0 (p->song);
519 p->song = _tmp2_;
520 _tmp3_ = callback;
521 (p->callback_target_destroy_notify == NULL) ? NULL : (p->callback_target_destroy_notify (p->callback_target), NULL);
522 p->callback = NULL;
523 p->callback_target = NULL;
524 p->callback_target_destroy_notify = NULL;
525 p->callback = _tmp3_;
526 p->callback_target = callback_target;
527 p->callback_target_destroy_notify = NULL;
528 _tmp4_ = gmpc_easy_download_uri_escape (song->artist);
529 _tmp5_ = _tmp4_;
530 _tmp6_ = gmpc_easy_download_uri_escape (song->title);
531 _tmp7_ = _tmp6_;
532 _tmp8_ = g_strdup_printf (GMPC_PROVIDER_LYR_DB_query, _tmp5_, _tmp7_);
533 _tmp9_ = _tmp8_;
534 _g_free0 (_tmp7_);
535 _g_free0 (_tmp5_);
536 path = _tmp9_;
537 g_log (log_domain_ppldb, G_LOG_LEVEL_DEBUG, "LyrDB.vala:243: Query song txt: %s ", path);
538 gmpc_easy_async_downloader_vala (path, p, _gmpc_provider_lyr_db_handle_download_gmpc_async_download_callback_vala, self);
539 _g_free0 (path);
540 }
541
542
gmpc_provider_lyr_db_construct(GType object_type)543 GmpcProviderLyrDB* gmpc_provider_lyr_db_construct (GType object_type) {
544 GmpcProviderLyrDB * self = NULL;
545 self = (GmpcProviderLyrDB*) gmpc_plugin_base_construct (object_type);
546 return self;
547 }
548
549
gmpc_provider_lyr_db_new(void)550 GmpcProviderLyrDB* gmpc_provider_lyr_db_new (void) {
551 return gmpc_provider_lyr_db_construct (GMPC_PROVIDER_TYPE_LYR_DB);
552 }
553
554
gmpc_provider_lyr_db_constructor(GType type,guint n_construct_properties,GObjectConstructParam * construct_properties)555 static GObject * gmpc_provider_lyr_db_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) {
556 GObject * obj;
557 GObjectClass * parent_class;
558 GmpcProviderLyrDB * self;
559 parent_class = G_OBJECT_CLASS (gmpc_provider_lyr_db_parent_class);
560 obj = parent_class->constructor (type, n_construct_properties, construct_properties);
561 self = GMPC_PROVIDER_LYR_DB (obj);
562 ((GmpcPluginBase*) self)->plugin_type = 8 + 32;
563 return obj;
564 }
565
566
_meta_data_free0_(gpointer var)567 static void _meta_data_free0_ (gpointer var) {
568 (var == NULL) ? NULL : (var = (meta_data_free (var), NULL));
569 }
570
571
_g_list_free__meta_data_free0_(GList * self)572 static void _g_list_free__meta_data_free0_ (GList* self) {
573 g_list_foreach (self, (GFunc) _meta_data_free0_, NULL);
574 g_list_free (self);
575 }
576
577
gmpc_provider_lyr_db_prop_new(void)578 static GmpcProviderLyrDBProp* gmpc_provider_lyr_db_prop_new (void) {
579 GmpcProviderLyrDBProp* self;
580 self = g_slice_new0 (GmpcProviderLyrDBProp);
581 gmpc_provider_lyr_db_prop_instance_init (self);
582 return self;
583 }
584
585
gmpc_provider_lyr_db_prop_instance_init(GmpcProviderLyrDBProp * self)586 static void gmpc_provider_lyr_db_prop_instance_init (GmpcProviderLyrDBProp * self) {
587 GQueue* _tmp0_ = NULL;
588 _tmp0_ = g_queue_new ();
589 self->results = _tmp0_;
590 self->list = NULL;
591 }
592
593
gmpc_provider_lyr_db_prop_free(GmpcProviderLyrDBProp * self)594 static void gmpc_provider_lyr_db_prop_free (GmpcProviderLyrDBProp* self) {
595 _mpd_freeSong0 (self->song);
596 _g_object_unref0 (self->this);
597 (self->callback_target_destroy_notify == NULL) ? NULL : (self->callback_target_destroy_notify (self->callback_target), NULL);
598 self->callback = NULL;
599 self->callback_target = NULL;
600 self->callback_target_destroy_notify = NULL;
601 _g_queue_free0 (self->results);
602 __g_list_free__meta_data_free0_0 (self->list);
603 g_slice_free (GmpcProviderLyrDBProp, self);
604 }
605
606
gmpc_provider_lyr_db_class_init(GmpcProviderLyrDBClass * klass)607 static void gmpc_provider_lyr_db_class_init (GmpcProviderLyrDBClass * klass) {
608 gmpc_provider_lyr_db_parent_class = g_type_class_peek_parent (klass);
609 GMPC_PLUGIN_BASE_CLASS (klass)->get_version = gmpc_provider_lyr_db_real_get_version;
610 GMPC_PLUGIN_BASE_CLASS (klass)->get_name = gmpc_provider_lyr_db_real_get_name;
611 G_OBJECT_CLASS (klass)->constructor = gmpc_provider_lyr_db_constructor;
612 }
613
614
gmpc_provider_lyr_db_gmpc_plugin_meta_data_iface_interface_init(GmpcPluginMetaDataIfaceIface * iface)615 static void gmpc_provider_lyr_db_gmpc_plugin_meta_data_iface_interface_init (GmpcPluginMetaDataIfaceIface * iface) {
616 gmpc_provider_lyr_db_gmpc_plugin_meta_data_iface_parent_iface = g_type_interface_peek_parent (iface);
617 iface->set_priority = (void (*)(GmpcPluginMetaDataIface* ,gint)) gmpc_provider_lyr_db_real_set_priority;
618 iface->get_priority = (gint (*)(GmpcPluginMetaDataIface*)) gmpc_provider_lyr_db_real_get_priority;
619 iface->get_metadata = (void (*)(GmpcPluginMetaDataIface* ,const mpd_Song* ,MetaDataType ,GmpcPluginMetaDataCallback ,void*)) gmpc_provider_lyr_db_real_get_metadata;
620 }
621
622
gmpc_provider_lyr_db_instance_init(GmpcProviderLyrDB * self)623 static void gmpc_provider_lyr_db_instance_init (GmpcProviderLyrDB * self) {
624 }
625
626
gmpc_provider_lyr_db_get_type(void)627 GType gmpc_provider_lyr_db_get_type (void) {
628 static volatile gsize gmpc_provider_lyr_db_type_id__volatile = 0;
629 if (g_once_init_enter (&gmpc_provider_lyr_db_type_id__volatile)) {
630 static const GTypeInfo g_define_type_info = { sizeof (GmpcProviderLyrDBClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gmpc_provider_lyr_db_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GmpcProviderLyrDB), 0, (GInstanceInitFunc) gmpc_provider_lyr_db_instance_init, NULL };
631 static const GInterfaceInfo gmpc_plugin_meta_data_iface_info = { (GInterfaceInitFunc) gmpc_provider_lyr_db_gmpc_plugin_meta_data_iface_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
632 GType gmpc_provider_lyr_db_type_id;
633 gmpc_provider_lyr_db_type_id = g_type_register_static (GMPC_PLUGIN_TYPE_BASE, "GmpcProviderLyrDB", &g_define_type_info, 0);
634 g_type_add_interface_static (gmpc_provider_lyr_db_type_id, GMPC_PLUGIN_TYPE_META_DATA_IFACE, &gmpc_plugin_meta_data_iface_info);
635 g_once_init_leave (&gmpc_provider_lyr_db_type_id__volatile, gmpc_provider_lyr_db_type_id);
636 }
637 return gmpc_provider_lyr_db_type_id__volatile;
638 }
639
640
_vala_array_destroy(gpointer array,gint array_length,GDestroyNotify destroy_func)641 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
642 if ((array != NULL) && (destroy_func != NULL)) {
643 int i;
644 for (i = 0; i < array_length; i = i + 1) {
645 if (((gpointer*) array)[i] != NULL) {
646 destroy_func (((gpointer*) array)[i]);
647 }
648 }
649 }
650 }
651
652
_vala_array_free(gpointer array,gint array_length,GDestroyNotify destroy_func)653 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
654 _vala_array_destroy (array, array_length, destroy_func);
655 g_free (array);
656 }
657
658
_vala_array_length(gpointer array)659 static gint _vala_array_length (gpointer array) {
660 int length;
661 length = 0;
662 if (array) {
663 while (((gpointer*) array)[length]) {
664 length++;
665 }
666 }
667 return length;
668 }
669
670
671
672