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