1 /* music-tree.c generated by valac 0.12.0, the Vala compiler
2  * generated from music-tree.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-profiles.h>
38 #include <gio/gio.h>
39 
40 #define _g_free0(var) (var = (g_free (var), NULL))
41 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
42 #define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
43 #define __g_list_free__g_object_unref0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__g_object_unref0_ (var), NULL)))
44 #define _meta_data_free0(var) ((var == NULL) ? NULL : (var = (meta_data_free (var), NULL)))
45 #define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
46 typedef struct _GmpcProviderMusicTreeCheckDirectoryForFilesData GmpcProviderMusicTreeCheckDirectoryForFilesData;
47 #define __g_list_free__meta_data_free0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__meta_data_free0_ (var), NULL)))
48 typedef struct _GmpcProviderMusicTreeWalkBackDirectoryData GmpcProviderMusicTreeWalkBackDirectoryData;
49 #define _mpd_freeSong0(var) ((var == NULL) ? NULL : (var = (mpd_freeSong (var), NULL)))
50 typedef struct _GmpcProviderMusicTreeGetArtistArtData GmpcProviderMusicTreeGetArtistArtData;
51 typedef struct _GmpcProviderMusicTreeGetAlbumCoverData GmpcProviderMusicTreeGetAlbumCoverData;
52 typedef struct _GmpcProviderMusicTreeGetBiographyData GmpcProviderMusicTreeGetBiographyData;
53 typedef struct _GmpcProviderMusicTreeGetAlbumInfoData GmpcProviderMusicTreeGetAlbumInfoData;
54 
55 struct _GmpcProviderMusicTreePrivate {
56 	gchar* file_type_string;
57 };
58 
59 struct _GmpcProviderMusicTreeCheckDirectoryForFilesData {
60 	int _state_;
61 	GObject* _source_object_;
62 	GAsyncResult* _res_;
63 	GSimpleAsyncResult* _async_result;
64 	GmpcProviderMusicTree* self;
65 	GList* list;
66 	GFile* dir;
67 	GRegex* query;
68 	MetaDataType type;
69 	gchar* _tmp0_;
70 	gchar* path;
71 	const gchar* _tmp1_;
72 	GFileEnumerator* _tmp2_;
73 	GFileEnumerator* e;
74 	GList* _tmp3_;
75 	GList* files;
76 	GList* info_collection;
77 	GList* info_it;
78 	GFileInfo* _tmp4_;
79 	GFileInfo* info;
80 	const gchar* _tmp5_;
81 	gchar* _tmp6_;
82 	gchar* name;
83 	gboolean _tmp7_;
84 	gchar _tmp8_;
85 	gboolean _tmp9_;
86 	gboolean _tmp10_;
87 	MetaData* _tmp11_;
88 	MetaData* item;
89 	const gchar* _tmp12_;
90 	gchar* _tmp13_;
91 	gchar* _tmp14_;
92 	MetaData* _tmp15_;
93 	GError * err;
94 	GError * _inner_error_;
95 };
96 
97 struct _GmpcProviderMusicTreeWalkBackDirectoryData {
98 	int _state_;
99 	GObject* _source_object_;
100 	GAsyncResult* _res_;
101 	GSimpleAsyncResult* _async_result;
102 	GmpcProviderMusicTree* self;
103 	GRegex* regex_query;
104 	gchar* mpd_directory;
105 	gchar* filename;
106 	GList* list;
107 	MetaDataType type;
108 	gchar* _tmp0_;
109 	gchar* base_path;
110 	gchar* _tmp1_;
111 	gchar* path;
112 	GFile* _tmp2_;
113 	GFile* dir;
114 	GList* temp;
115 	GList* _tmp3_;
116 	GList* _tmp4_;
117 	GFile* _tmp5_;
118 	GList* _tmp6_;
119 	GList* _tmp7_;
120 	GFile* _tmp8_;
121 	GList* _tmp9_;
122 	GList* _tmp10_;
123 };
124 
125 struct _GmpcProviderMusicTreeGetArtistArtData {
126 	int _state_;
127 	GObject* _source_object_;
128 	GAsyncResult* _res_;
129 	GSimpleAsyncResult* _async_result;
130 	GmpcProviderMusicTree* self;
131 	gchar* directory;
132 	mpd_Song* song;
133 	GmpcPluginMetaDataCallback callback;
134 	gpointer callback_target;
135 	GDestroyNotify callback_target_destroy_notify;
136 	GList* list;
137 	GRegex* regex_query;
138 	gchar* _tmp0_;
139 	gchar* _tmp1_;
140 	gchar* _tmp2_;
141 	gchar* _tmp3_;
142 	GRegex* _tmp4_;
143 	GRegex* _tmp5_;
144 	GRegex* _tmp6_;
145 	GError * erro;
146 	gchar* _tmp7_;
147 	gchar* _tmp8_;
148 	GRegex* _tmp9_;
149 	GRegex* _tmp10_;
150 	GRegex* _tmp11_;
151 	GError * err1;
152 	GList* _tmp12_;
153 	guint _tmp13_;
154 	GList* _tmp14_;
155 	GError * _inner_error_;
156 };
157 
158 struct _GmpcProviderMusicTreeGetAlbumCoverData {
159 	int _state_;
160 	GObject* _source_object_;
161 	GAsyncResult* _res_;
162 	GSimpleAsyncResult* _async_result;
163 	GmpcProviderMusicTree* self;
164 	gchar* directory;
165 	mpd_Song* song;
166 	GmpcPluginMetaDataCallback callback;
167 	gpointer callback_target;
168 	GDestroyNotify callback_target_destroy_notify;
169 	GList* list;
170 	GRegex* regex_query;
171 	gchar* _tmp0_;
172 	gchar* _tmp1_;
173 	gchar* _tmp2_;
174 	gchar* _tmp3_;
175 	GRegex* _tmp4_;
176 	GRegex* _tmp5_;
177 	GRegex* _tmp6_;
178 	GError * erro;
179 	gchar* _tmp7_;
180 	gchar* _tmp8_;
181 	GRegex* _tmp9_;
182 	GRegex* _tmp10_;
183 	GRegex* _tmp11_;
184 	GError * err1;
185 	GList* _tmp12_;
186 	guint _tmp13_;
187 	GList* _tmp14_;
188 	GError * _inner_error_;
189 };
190 
191 struct _GmpcProviderMusicTreeGetBiographyData {
192 	int _state_;
193 	GObject* _source_object_;
194 	GAsyncResult* _res_;
195 	GSimpleAsyncResult* _async_result;
196 	GmpcProviderMusicTree* self;
197 	gchar* directory;
198 	mpd_Song* song;
199 	GmpcPluginMetaDataCallback callback;
200 	gpointer callback_target;
201 	GDestroyNotify callback_target_destroy_notify;
202 	GList* list;
203 	GRegex* regex_query;
204 	GRegex* _tmp0_;
205 	GRegex* _tmp1_;
206 	GError * erro;
207 	GList* _tmp2_;
208 	guint _tmp3_;
209 	GList* _tmp4_;
210 	GError * _inner_error_;
211 };
212 
213 struct _GmpcProviderMusicTreeGetAlbumInfoData {
214 	int _state_;
215 	GObject* _source_object_;
216 	GAsyncResult* _res_;
217 	GSimpleAsyncResult* _async_result;
218 	GmpcProviderMusicTree* self;
219 	gchar* directory;
220 	mpd_Song* song;
221 	GmpcPluginMetaDataCallback callback;
222 	gpointer callback_target;
223 	GDestroyNotify callback_target_destroy_notify;
224 	GList* list;
225 	GRegex* regex_query;
226 	gchar* _tmp0_;
227 	gchar* _tmp1_;
228 	GRegex* _tmp2_;
229 	GRegex* _tmp3_;
230 	GRegex* _tmp4_;
231 	GError * erro;
232 	GList* _tmp5_;
233 	guint _tmp6_;
234 	GList* _tmp7_;
235 	GError * _inner_error_;
236 };
237 
238 
239 static gpointer gmpc_provider_music_tree_parent_class = NULL;
240 static GmpcPluginMetaDataIfaceIface* gmpc_provider_music_tree_gmpc_plugin_meta_data_iface_parent_iface = NULL;
241 
242 #define use_transition_lp TRUE
243 #define some_unique_name_lp VERSION
244 #define log_domain_cp "Gmpc.Providers.MusicTree"
245 #define GMPC_PROVIDER_MUSIC_TREE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GMPC_PROVIDER_TYPE_MUSIC_TREE, GmpcProviderMusicTreePrivate))
246 enum  {
247 	GMPC_PROVIDER_MUSIC_TREE_DUMMY_PROPERTY
248 };
249 static gint* gmpc_provider_music_tree_real_get_version (GmpcPluginBase* base, int* result_length1);
250 static const gchar* gmpc_provider_music_tree_real_get_name (GmpcPluginBase* base);
251 static void gmpc_provider_music_tree_real_set_priority (GmpcPluginMetaDataIface* base, gint priority);
252 static gint gmpc_provider_music_tree_real_get_priority (GmpcPluginMetaDataIface* base);
253 static void gmpc_provider_music_tree_real_get_metadata (GmpcPluginMetaDataIface* base, const mpd_Song* song, MetaDataType type, GmpcPluginMetaDataCallback callback, void* callback_target);
254 static void gmpc_provider_music_tree_get_album_cover (GmpcProviderMusicTree* self, const gchar* directory, const mpd_Song* song, GmpcPluginMetaDataCallback callback, void* callback_target, GAsyncReadyCallback _callback_, gpointer _user_data_);
255 static void gmpc_provider_music_tree_get_album_cover_finish (GmpcProviderMusicTree* self, GAsyncResult* _res_);
256 static void gmpc_provider_music_tree_get_artist_art (GmpcProviderMusicTree* self, const gchar* directory, const mpd_Song* song, GmpcPluginMetaDataCallback callback, void* callback_target, GAsyncReadyCallback _callback_, gpointer _user_data_);
257 static void gmpc_provider_music_tree_get_artist_art_finish (GmpcProviderMusicTree* self, GAsyncResult* _res_);
258 static void gmpc_provider_music_tree_get_biography (GmpcProviderMusicTree* self, const gchar* directory, const mpd_Song* song, GmpcPluginMetaDataCallback callback, void* callback_target, GAsyncReadyCallback _callback_, gpointer _user_data_);
259 static void gmpc_provider_music_tree_get_biography_finish (GmpcProviderMusicTree* self, GAsyncResult* _res_);
260 static void gmpc_provider_music_tree_get_album_info (GmpcProviderMusicTree* self, const gchar* directory, const mpd_Song* song, GmpcPluginMetaDataCallback callback, void* callback_target, GAsyncReadyCallback _callback_, gpointer _user_data_);
261 static void gmpc_provider_music_tree_get_album_info_finish (GmpcProviderMusicTree* self, GAsyncResult* _res_);
262 static void gmpc_provider_music_tree_check_directory_for_files_data_free (gpointer _data);
263 static void gmpc_provider_music_tree_check_directory_for_files (GmpcProviderMusicTree* self, GFile* dir, GRegex* query, MetaDataType type, GAsyncReadyCallback _callback_, gpointer _user_data_);
264 static void gmpc_provider_music_tree_check_directory_for_files_finish (GmpcProviderMusicTree* self, GAsyncResult* _res_, GList** list);
265 static gboolean gmpc_provider_music_tree_check_directory_for_files_co (GmpcProviderMusicTreeCheckDirectoryForFilesData* data);
266 static void gmpc_provider_music_tree_check_directory_for_files_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_);
267 static void _g_object_unref0_ (gpointer var);
268 static void _g_list_free__g_object_unref0_ (GList* self);
269 static void gmpc_provider_music_tree_walk_back_directory_data_free (gpointer _data);
270 static void gmpc_provider_music_tree_walk_back_directory (GmpcProviderMusicTree* self, GRegex* regex_query, const gchar* mpd_directory, const gchar* filename, MetaDataType type, GAsyncReadyCallback _callback_, gpointer _user_data_);
271 static void gmpc_provider_music_tree_walk_back_directory_finish (GmpcProviderMusicTree* self, GAsyncResult* _res_, GList** list);
272 static gboolean gmpc_provider_music_tree_walk_back_directory_co (GmpcProviderMusicTreeWalkBackDirectoryData* data);
273 static void gmpc_provider_music_tree_walk_back_directory_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_);
274 static void _meta_data_free0_ (gpointer var);
275 static void _g_list_free__meta_data_free0_ (GList* self);
276 static void gmpc_provider_music_tree_get_artist_art_data_free (gpointer _data);
277 static gboolean gmpc_provider_music_tree_get_artist_art_co (GmpcProviderMusicTreeGetArtistArtData* data);
278 static void gmpc_provider_music_tree_get_artist_art_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_);
279 static void gmpc_provider_music_tree_get_album_cover_data_free (gpointer _data);
280 static gboolean gmpc_provider_music_tree_get_album_cover_co (GmpcProviderMusicTreeGetAlbumCoverData* data);
281 static void gmpc_provider_music_tree_get_album_cover_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_);
282 static void gmpc_provider_music_tree_get_biography_data_free (gpointer _data);
283 static gboolean gmpc_provider_music_tree_get_biography_co (GmpcProviderMusicTreeGetBiographyData* data);
284 static void gmpc_provider_music_tree_get_biography_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_);
285 static void gmpc_provider_music_tree_get_album_info_data_free (gpointer _data);
286 static gboolean gmpc_provider_music_tree_get_album_info_co (GmpcProviderMusicTreeGetAlbumInfoData* data);
287 static void gmpc_provider_music_tree_get_album_info_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_);
288 static GObject * gmpc_provider_music_tree_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
289 static void gmpc_provider_music_tree_finalize (GObject* obj);
290 
291 static const gint GMPC_PROVIDER_MUSIC_TREE_version[3] = {0, 0, 2};
292 
gmpc_provider_music_tree_real_get_version(GmpcPluginBase * base,int * result_length1)293 static gint* gmpc_provider_music_tree_real_get_version (GmpcPluginBase* base, int* result_length1) {
294 	GmpcProviderMusicTree * self;
295 	gint* result = NULL;
296 	gint* _tmp0_;
297 	self = (GmpcProviderMusicTree*) base;
298 	_tmp0_ = GMPC_PROVIDER_MUSIC_TREE_version;
299 	*result_length1 = G_N_ELEMENTS (GMPC_PROVIDER_MUSIC_TREE_version);
300 	result = _tmp0_;
301 	return result;
302 }
303 
304 
gmpc_provider_music_tree_real_get_name(GmpcPluginBase * base)305 static const gchar* gmpc_provider_music_tree_real_get_name (GmpcPluginBase* base) {
306 	GmpcProviderMusicTree * self;
307 	const gchar* result = NULL;
308 	self = (GmpcProviderMusicTree*) base;
309 	result = "Music Tree Provider";
310 	return result;
311 }
312 
313 
gmpc_provider_music_tree_real_set_priority(GmpcPluginMetaDataIface * base,gint priority)314 static void gmpc_provider_music_tree_real_set_priority (GmpcPluginMetaDataIface* base, gint priority) {
315 	GmpcProviderMusicTree * self;
316 	const gchar* _tmp0_ = NULL;
317 	self = (GmpcProviderMusicTree*) base;
318 	_tmp0_ = gmpc_plugin_base_get_name ((GmpcPluginBase*) self);
319 	cfg_set_single_value_as_int (config, _tmp0_, "priority", priority);
320 }
321 
322 
gmpc_provider_music_tree_real_get_priority(GmpcPluginMetaDataIface * base)323 static gint gmpc_provider_music_tree_real_get_priority (GmpcPluginMetaDataIface* base) {
324 	GmpcProviderMusicTree * self;
325 	gint result = 0;
326 	const gchar* _tmp0_ = NULL;
327 	gint _tmp1_;
328 	self = (GmpcProviderMusicTree*) base;
329 	_tmp0_ = gmpc_plugin_base_get_name ((GmpcPluginBase*) self);
330 	_tmp1_ = cfg_get_single_value_as_int_with_default (config, _tmp0_, "priority", 0);
331 	result = _tmp1_;
332 	return result;
333 }
334 
335 
336 /********************************
337  * metadata code                *
338  ********************************/
gmpc_provider_music_tree_real_get_metadata(GmpcPluginMetaDataIface * base,const mpd_Song * song,MetaDataType type,GmpcPluginMetaDataCallback callback,void * callback_target)339 static void gmpc_provider_music_tree_real_get_metadata (GmpcPluginMetaDataIface* base, const mpd_Song* song, MetaDataType type, GmpcPluginMetaDataCallback callback, void* callback_target) {
340 	GmpcProviderMusicTree * self;
341 	gchar* _tmp0_ = NULL;
342 	gchar* id;
343 	const gchar* directory;
344 	const gchar* _tmp2_ = NULL;
345 	gboolean _tmp3_ = FALSE;
346 	gboolean _tmp5_ = FALSE;
347 	gchar* _tmp6_ = NULL;
348 	gchar* scheme;
349 	self = (GmpcProviderMusicTree*) base;
350 	g_return_if_fail (song != NULL);
351 	_tmp0_ = gmpc_profiles_get_current (gmpc_profiles);
352 	id = _tmp0_;
353 	directory = NULL;
354 	if (id != NULL) {
355 		const gchar* _tmp1_ = NULL;
356 		_tmp1_ = gmpc_profiles_get_music_directory (gmpc_profiles, id);
357 		directory = _tmp1_;
358 	}
359 	if (directory == NULL) {
360 		_tmp2_ = "(null)";
361 	} else {
362 		_tmp2_ = directory;
363 	}
364 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:96: Got directory: %s", _tmp2_);
365 	if (directory == NULL) {
366 		_tmp3_ = TRUE;
367 	} else {
368 		gint _tmp4_;
369 		_tmp4_ = strlen (directory);
370 		_tmp3_ = _tmp4_ == 0;
371 	}
372 	if (_tmp3_) {
373 		g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:101: No Music directory specified");
374 		callback (NULL, callback_target);
375 		_g_free0 (id);
376 		return;
377 	}
378 	if (song == NULL) {
379 		_tmp5_ = TRUE;
380 	} else {
381 		_tmp5_ = song->file == NULL;
382 	}
383 	if (_tmp5_) {
384 		g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:113: No Song or no song path specified");
385 		callback (NULL, callback_target);
386 		_g_free0 (id);
387 		return;
388 	}
389 	_tmp6_ = g_uri_parse_scheme (song->file);
390 	scheme = _tmp6_;
391 	if (scheme != NULL) {
392 		g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:124: Scheme '%s' indicates no local file.", scheme);
393 		callback (NULL, callback_target);
394 		_g_free0 (scheme);
395 		_g_free0 (id);
396 		return;
397 	}
398 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:130: Music directory: %s", directory);
399 	switch (type) {
400 		case META_ALBUM_ART:
401 		{
402 			gmpc_provider_music_tree_get_album_cover (self, directory, song, callback, callback_target, NULL, NULL);
403 			_g_free0 (scheme);
404 			_g_free0 (id);
405 			return;
406 		}
407 		case META_ARTIST_ART:
408 		{
409 			gmpc_provider_music_tree_get_artist_art (self, directory, song, callback, callback_target, NULL, NULL);
410 			_g_free0 (scheme);
411 			_g_free0 (id);
412 			return;
413 		}
414 		case META_ARTIST_TXT:
415 		{
416 			gmpc_provider_music_tree_get_biography (self, directory, song, callback, callback_target, NULL, NULL);
417 			_g_free0 (scheme);
418 			_g_free0 (id);
419 			return;
420 		}
421 		case META_ALBUM_TXT:
422 		{
423 			gmpc_provider_music_tree_get_album_info (self, directory, song, callback, callback_target, NULL, NULL);
424 			_g_free0 (scheme);
425 			_g_free0 (id);
426 			return;
427 		}
428 		case META_SONG_TXT:
429 		case META_SONG_GUITAR_TAB:
430 		{
431 			break;
432 		}
433 		case META_ARTIST_SIMILAR:
434 		case META_SONG_SIMILAR:
435 		case META_GENRE_SIMILAR:
436 		{
437 			break;
438 		}
439 		default:
440 		case META_QUERY_DATA_TYPES:
441 		case META_QUERY_NO_CACHE:
442 		{
443 			break;
444 		}
445 	}
446 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:166: Unsupported metadata, doing nothing ");
447 	callback (NULL, callback_target);
448 	_g_free0 (scheme);
449 	_g_free0 (id);
450 }
451 
452 
gmpc_provider_music_tree_check_directory_for_files_data_free(gpointer _data)453 static void gmpc_provider_music_tree_check_directory_for_files_data_free (gpointer _data) {
454 	GmpcProviderMusicTreeCheckDirectoryForFilesData* data;
455 	data = _data;
456 	_g_object_unref0 (data->dir);
457 	_g_regex_unref0 (data->query);
458 	_g_object_unref0 (data->self);
459 	g_slice_free (GmpcProviderMusicTreeCheckDirectoryForFilesData, data);
460 }
461 
462 
_g_object_ref0(gpointer self)463 static gpointer _g_object_ref0 (gpointer self) {
464 	return self ? g_object_ref (self) : NULL;
465 }
466 
467 
_g_regex_ref0(gpointer self)468 static gpointer _g_regex_ref0 (gpointer self) {
469 	return self ? g_regex_ref (self) : NULL;
470 }
471 
472 
gmpc_provider_music_tree_check_directory_for_files(GmpcProviderMusicTree * self,GFile * dir,GRegex * query,MetaDataType type,GAsyncReadyCallback _callback_,gpointer _user_data_)473 static void gmpc_provider_music_tree_check_directory_for_files (GmpcProviderMusicTree* self, GFile* dir, GRegex* query, MetaDataType type, GAsyncReadyCallback _callback_, gpointer _user_data_) {
474 	GmpcProviderMusicTreeCheckDirectoryForFilesData* _data_;
475 	_data_ = g_slice_new0 (GmpcProviderMusicTreeCheckDirectoryForFilesData);
476 	_data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, gmpc_provider_music_tree_check_directory_for_files);
477 	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, gmpc_provider_music_tree_check_directory_for_files_data_free);
478 	_data_->self = _g_object_ref0 (self);
479 	_data_->dir = _g_object_ref0 (dir);
480 	_data_->query = _g_regex_ref0 (query);
481 	_data_->type = type;
482 	gmpc_provider_music_tree_check_directory_for_files_co (_data_);
483 }
484 
485 
gmpc_provider_music_tree_check_directory_for_files_finish(GmpcProviderMusicTree * self,GAsyncResult * _res_,GList ** list)486 static void gmpc_provider_music_tree_check_directory_for_files_finish (GmpcProviderMusicTree* self, GAsyncResult* _res_, GList** list) {
487 	GmpcProviderMusicTreeCheckDirectoryForFilesData* _data_;
488 	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
489 	*list = _data_->list;
490 	_data_->list = NULL;
491 }
492 
493 
494 /**
495  * Helper functions
496  */
gmpc_provider_music_tree_check_directory_for_files_ready(GObject * source_object,GAsyncResult * _res_,gpointer _user_data_)497 static void gmpc_provider_music_tree_check_directory_for_files_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_) {
498 	GmpcProviderMusicTreeCheckDirectoryForFilesData* data;
499 	data = _user_data_;
500 	data->_source_object_ = source_object;
501 	data->_res_ = _res_;
502 	gmpc_provider_music_tree_check_directory_for_files_co (data);
503 }
504 
505 
_g_object_unref0_(gpointer var)506 static void _g_object_unref0_ (gpointer var) {
507 	(var == NULL) ? NULL : (var = (g_object_unref (var), NULL));
508 }
509 
510 
_g_list_free__g_object_unref0_(GList * self)511 static void _g_list_free__g_object_unref0_ (GList* self) {
512 	g_list_foreach (self, (GFunc) _g_object_unref0_, NULL);
513 	g_list_free (self);
514 }
515 
516 
string_get(const gchar * self,glong index)517 static gchar string_get (const gchar* self, glong index) {
518 	gchar result = '\0';
519 	g_return_val_if_fail (self != NULL, '\0');
520 	result = ((gchar*) self)[index];
521 	return result;
522 }
523 
524 
gmpc_provider_music_tree_check_directory_for_files_co(GmpcProviderMusicTreeCheckDirectoryForFilesData * data)525 static gboolean gmpc_provider_music_tree_check_directory_for_files_co (GmpcProviderMusicTreeCheckDirectoryForFilesData* data) {
526 	switch (data->_state_) {
527 		case 0:
528 		goto _state_0;
529 		case 1:
530 		goto _state_1;
531 		case 2:
532 		goto _state_2;
533 		default:
534 		g_assert_not_reached ();
535 	}
536 	_state_0:
537 	data->_tmp0_ = NULL;
538 	data->_tmp0_ = g_file_get_path (data->dir);
539 	data->path = data->_tmp0_;
540 	data->_tmp1_ = NULL;
541 	data->_tmp1_ = g_regex_get_pattern (data->query);
542 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:182: Checking %s with pattern: %s", data->path, data->_tmp1_);
543 	data->_state_ = 1;
544 	g_file_enumerate_children_async (data->dir, "standard,access::*", 0, G_PRIORITY_DEFAULT, NULL, gmpc_provider_music_tree_check_directory_for_files_ready, data);
545 	return FALSE;
546 	_state_1:
547 	data->_tmp2_ = NULL;
548 	data->_tmp2_ = g_file_enumerate_children_finish (data->dir, data->_res_, &data->_inner_error_);
549 	data->e = data->_tmp2_;
550 	if (data->_inner_error_ != NULL) {
551 		goto __catch16_g_error;
552 	}
553 	while (TRUE) {
554 		data->_state_ = 2;
555 		g_file_enumerator_next_files_async (data->e, 10, G_PRIORITY_DEFAULT, NULL, gmpc_provider_music_tree_check_directory_for_files_ready, data);
556 		return FALSE;
557 		_state_2:
558 		data->_tmp3_ = NULL;
559 		data->_tmp3_ = g_file_enumerator_next_files_finish (data->e, data->_res_, &data->_inner_error_);
560 		data->files = data->_tmp3_;
561 		if (data->_inner_error_ != NULL) {
562 			_g_object_unref0 (data->e);
563 			goto __catch16_g_error;
564 		}
565 		if (data->files == NULL) {
566 			__g_list_free__g_object_unref0_0 (data->files);
567 			break;
568 		}
569 		{
570 			data->info_collection = data->files;
571 			for (data->info_it = data->info_collection; data->info_it != NULL; data->info_it = data->info_it->next) {
572 				data->_tmp4_ = _g_object_ref0 ((GFileInfo*) data->info_it->data);
573 				data->info = data->_tmp4_;
574 				{
575 					data->_tmp5_ = NULL;
576 					data->_tmp5_ = g_file_info_get_name (data->info);
577 					data->_tmp6_ = g_strdup (data->_tmp5_);
578 					data->name = data->_tmp6_;
579 					g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:199: got file: %s", data->name);
580 					data->_tmp8_ = string_get (data->name, (glong) 0);
581 					if (data->_tmp8_ != '.') {
582 						data->_tmp9_ = g_regex_match (data->query, data->name, 0, NULL);
583 						data->_tmp7_ = data->_tmp9_;
584 					} else {
585 						data->_tmp7_ = FALSE;
586 					}
587 					if (data->_tmp7_) {
588 						g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:203: Got path: %s. Have info", data->name);
589 						data->_tmp10_ = g_file_info_get_attribute_boolean (data->info, "access::can-read");
590 						if (data->_tmp10_) {
591 							data->_tmp11_ = NULL;
592 							data->_tmp11_ = meta_data_new ();
593 							data->item = data->_tmp11_;
594 							data->item->type = data->type;
595 							data->_tmp12_ = NULL;
596 							data->_tmp12_ = gmpc_plugin_base_get_name ((GmpcPluginBase*) data->self);
597 							data->item->plugin_name = data->_tmp12_;
598 							data->item->content_type = META_DATA_CONTENT_URI;
599 							data->_tmp13_ = NULL;
600 							data->_tmp13_ = g_build_filename (data->path, data->name, NULL);
601 							data->_tmp14_ = data->_tmp13_;
602 							meta_data_set_uri (data->item, data->_tmp14_);
603 							_g_free0 (data->_tmp14_);
604 							data->_tmp15_ = data->item;
605 							data->item = NULL;
606 							data->list = g_list_append (data->list, data->_tmp15_);
607 							g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:213: Found %s/%s, adding", data->path, data->name);
608 							_meta_data_free0 (data->item);
609 						}
610 					}
611 					_g_free0 (data->name);
612 					_g_object_unref0 (data->info);
613 				}
614 			}
615 		}
616 		__g_list_free__g_object_unref0_0 (data->files);
617 	}
618 	_g_object_unref0 (data->e);
619 	goto __finally16;
620 	__catch16_g_error:
621 	{
622 		data->err = data->_inner_error_;
623 		data->_inner_error_ = NULL;
624 		g_log (log_domain_cp, G_LOG_LEVEL_WARNING, "music-tree.vala:223: Error trying to walk directory '%s': %s\n", data->path, data->err->message);
625 		_g_error_free0 (data->err);
626 	}
627 	__finally16:
628 	if (data->_inner_error_ != NULL) {
629 		_g_free0 (data->path);
630 		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, data->_inner_error_->message, g_quark_to_string (data->_inner_error_->domain), data->_inner_error_->code);
631 		g_clear_error (&data->_inner_error_);
632 		return FALSE;
633 	}
634 	_g_free0 (data->path);
635 	if (data->_state_ == 0) {
636 		g_simple_async_result_complete_in_idle (data->_async_result);
637 	} else {
638 		g_simple_async_result_complete (data->_async_result);
639 	}
640 	g_object_unref (data->_async_result);
641 	return FALSE;
642 }
643 
644 
gmpc_provider_music_tree_walk_back_directory_data_free(gpointer _data)645 static void gmpc_provider_music_tree_walk_back_directory_data_free (gpointer _data) {
646 	GmpcProviderMusicTreeWalkBackDirectoryData* data;
647 	data = _data;
648 	_g_regex_unref0 (data->regex_query);
649 	_g_free0 (data->mpd_directory);
650 	_g_free0 (data->filename);
651 	_g_object_unref0 (data->self);
652 	g_slice_free (GmpcProviderMusicTreeWalkBackDirectoryData, data);
653 }
654 
655 
gmpc_provider_music_tree_walk_back_directory(GmpcProviderMusicTree * self,GRegex * regex_query,const gchar * mpd_directory,const gchar * filename,MetaDataType type,GAsyncReadyCallback _callback_,gpointer _user_data_)656 static void gmpc_provider_music_tree_walk_back_directory (GmpcProviderMusicTree* self, GRegex* regex_query, const gchar* mpd_directory, const gchar* filename, MetaDataType type, GAsyncReadyCallback _callback_, gpointer _user_data_) {
657 	GmpcProviderMusicTreeWalkBackDirectoryData* _data_;
658 	_data_ = g_slice_new0 (GmpcProviderMusicTreeWalkBackDirectoryData);
659 	_data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, gmpc_provider_music_tree_walk_back_directory);
660 	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, gmpc_provider_music_tree_walk_back_directory_data_free);
661 	_data_->self = _g_object_ref0 (self);
662 	_data_->regex_query = _g_regex_ref0 (regex_query);
663 	_data_->mpd_directory = g_strdup (mpd_directory);
664 	_data_->filename = g_strdup (filename);
665 	_data_->type = type;
666 	gmpc_provider_music_tree_walk_back_directory_co (_data_);
667 }
668 
669 
gmpc_provider_music_tree_walk_back_directory_finish(GmpcProviderMusicTree * self,GAsyncResult * _res_,GList ** list)670 static void gmpc_provider_music_tree_walk_back_directory_finish (GmpcProviderMusicTree* self, GAsyncResult* _res_, GList** list) {
671 	GmpcProviderMusicTreeWalkBackDirectoryData* _data_;
672 	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
673 	*list = _data_->list;
674 	_data_->list = NULL;
675 }
676 
677 
678 /**
679  * Walks back the directory 3 levels.
680  */
gmpc_provider_music_tree_walk_back_directory_ready(GObject * source_object,GAsyncResult * _res_,gpointer _user_data_)681 static void gmpc_provider_music_tree_walk_back_directory_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_) {
682 	GmpcProviderMusicTreeWalkBackDirectoryData* data;
683 	data = _user_data_;
684 	data->_source_object_ = source_object;
685 	data->_res_ = _res_;
686 	gmpc_provider_music_tree_walk_back_directory_co (data);
687 }
688 
689 
_meta_data_free0_(gpointer var)690 static void _meta_data_free0_ (gpointer var) {
691 	(var == NULL) ? NULL : (var = (meta_data_free (var), NULL));
692 }
693 
694 
_g_list_free__meta_data_free0_(GList * self)695 static void _g_list_free__meta_data_free0_ (GList* self) {
696 	g_list_foreach (self, (GFunc) _meta_data_free0_, NULL);
697 	g_list_free (self);
698 }
699 
700 
gmpc_provider_music_tree_walk_back_directory_co(GmpcProviderMusicTreeWalkBackDirectoryData * data)701 static gboolean gmpc_provider_music_tree_walk_back_directory_co (GmpcProviderMusicTreeWalkBackDirectoryData* data) {
702 	switch (data->_state_) {
703 		case 0:
704 		goto _state_0;
705 		case 1:
706 		goto _state_1;
707 		case 2:
708 		goto _state_2;
709 		case 3:
710 		goto _state_3;
711 		default:
712 		g_assert_not_reached ();
713 	}
714 	_state_0:
715 	data->_tmp0_ = NULL;
716 	data->_tmp0_ = g_path_get_dirname (data->filename);
717 	data->base_path = data->_tmp0_;
718 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:237: Got basename: %s", data->base_path);
719 	data->_tmp1_ = NULL;
720 	data->_tmp1_ = g_build_filename (data->mpd_directory, data->base_path, NULL);
721 	data->path = data->_tmp1_;
722 	data->_tmp2_ = NULL;
723 	data->_tmp2_ = g_file_new_for_path (data->path);
724 	data->dir = data->_tmp2_;
725 	data->temp = NULL;
726 	data->_tmp3_ = NULL;
727 	data->_state_ = 1;
728 	gmpc_provider_music_tree_check_directory_for_files (data->self, data->dir, data->regex_query, data->type, gmpc_provider_music_tree_walk_back_directory_ready, data);
729 	return FALSE;
730 	_state_1:
731 	gmpc_provider_music_tree_check_directory_for_files_finish (data->self, data->_res_, &data->_tmp3_);
732 	__g_list_free__meta_data_free0_0 (data->temp);
733 	data->temp = data->_tmp3_;
734 	data->_tmp4_ = data->temp;
735 	data->temp = NULL;
736 	data->list = g_list_concat (data->list, data->_tmp4_);
737 	data->_tmp5_ = NULL;
738 	data->_tmp5_ = g_file_get_parent (data->dir);
739 	_g_object_unref0 (data->dir);
740 	data->dir = data->_tmp5_;
741 	if (data->dir != NULL) {
742 		data->_tmp6_ = NULL;
743 		data->_state_ = 2;
744 		gmpc_provider_music_tree_check_directory_for_files (data->self, data->dir, data->regex_query, data->type, gmpc_provider_music_tree_walk_back_directory_ready, data);
745 		return FALSE;
746 		_state_2:
747 		gmpc_provider_music_tree_check_directory_for_files_finish (data->self, data->_res_, &data->_tmp6_);
748 		__g_list_free__meta_data_free0_0 (data->temp);
749 		data->temp = data->_tmp6_;
750 		data->_tmp7_ = data->temp;
751 		data->temp = NULL;
752 		data->list = g_list_concat (data->list, data->_tmp7_);
753 		data->_tmp8_ = NULL;
754 		data->_tmp8_ = g_file_get_parent (data->dir);
755 		_g_object_unref0 (data->dir);
756 		data->dir = data->_tmp8_;
757 		if (data->dir != NULL) {
758 			data->_tmp9_ = NULL;
759 			data->_state_ = 3;
760 			gmpc_provider_music_tree_check_directory_for_files (data->self, data->dir, data->regex_query, data->type, gmpc_provider_music_tree_walk_back_directory_ready, data);
761 			return FALSE;
762 			_state_3:
763 			gmpc_provider_music_tree_check_directory_for_files_finish (data->self, data->_res_, &data->_tmp9_);
764 			__g_list_free__meta_data_free0_0 (data->temp);
765 			data->temp = data->_tmp9_;
766 			data->_tmp10_ = data->temp;
767 			data->temp = NULL;
768 			data->list = g_list_concat (data->list, data->_tmp10_);
769 		}
770 	}
771 	__g_list_free__meta_data_free0_0 (data->temp);
772 	_g_object_unref0 (data->dir);
773 	_g_free0 (data->path);
774 	_g_free0 (data->base_path);
775 	if (data->_state_ == 0) {
776 		g_simple_async_result_complete_in_idle (data->_async_result);
777 	} else {
778 		g_simple_async_result_complete (data->_async_result);
779 	}
780 	g_object_unref (data->_async_result);
781 	return FALSE;
782 }
783 
784 
gmpc_provider_music_tree_get_artist_art_data_free(gpointer _data)785 static void gmpc_provider_music_tree_get_artist_art_data_free (gpointer _data) {
786 	GmpcProviderMusicTreeGetArtistArtData* data;
787 	data = _data;
788 	_g_free0 (data->directory);
789 	_mpd_freeSong0 (data->song);
790 	_g_object_unref0 (data->self);
791 	g_slice_free (GmpcProviderMusicTreeGetArtistArtData, data);
792 }
793 
794 
_mpd_songDup0(gpointer self)795 static gpointer _mpd_songDup0 (gpointer self) {
796 	return self ? mpd_songDup (self) : NULL;
797 }
798 
799 
gmpc_provider_music_tree_get_artist_art(GmpcProviderMusicTree * self,const gchar * directory,const mpd_Song * song,GmpcPluginMetaDataCallback callback,void * callback_target,GAsyncReadyCallback _callback_,gpointer _user_data_)800 static void gmpc_provider_music_tree_get_artist_art (GmpcProviderMusicTree* self, const gchar* directory, const mpd_Song* song, GmpcPluginMetaDataCallback callback, void* callback_target, GAsyncReadyCallback _callback_, gpointer _user_data_) {
801 	GmpcProviderMusicTreeGetArtistArtData* _data_;
802 	_data_ = g_slice_new0 (GmpcProviderMusicTreeGetArtistArtData);
803 	_data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, gmpc_provider_music_tree_get_artist_art);
804 	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, gmpc_provider_music_tree_get_artist_art_data_free);
805 	_data_->self = _g_object_ref0 (self);
806 	_data_->directory = g_strdup (directory);
807 	_data_->song = _mpd_songDup0 (song);
808 	_data_->callback = callback;
809 	_data_->callback_target = callback_target;
810 	gmpc_provider_music_tree_get_artist_art_co (_data_);
811 }
812 
813 
gmpc_provider_music_tree_get_artist_art_finish(GmpcProviderMusicTree * self,GAsyncResult * _res_)814 static void gmpc_provider_music_tree_get_artist_art_finish (GmpcProviderMusicTree* self, GAsyncResult* _res_) {
815 	GmpcProviderMusicTreeGetArtistArtData* _data_;
816 	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
817 }
818 
819 
820 /**
821  * Get artist art
822  */
gmpc_provider_music_tree_get_artist_art_ready(GObject * source_object,GAsyncResult * _res_,gpointer _user_data_)823 static void gmpc_provider_music_tree_get_artist_art_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_) {
824 	GmpcProviderMusicTreeGetArtistArtData* data;
825 	data = _user_data_;
826 	data->_source_object_ = source_object;
827 	data->_res_ = _res_;
828 	gmpc_provider_music_tree_get_artist_art_co (data);
829 }
830 
831 
gmpc_provider_music_tree_get_artist_art_co(GmpcProviderMusicTreeGetArtistArtData * data)832 static gboolean gmpc_provider_music_tree_get_artist_art_co (GmpcProviderMusicTreeGetArtistArtData* data) {
833 	switch (data->_state_) {
834 		case 0:
835 		goto _state_0;
836 		case 1:
837 		goto _state_1;
838 		default:
839 		g_assert_not_reached ();
840 	}
841 	_state_0:
842 	data->list = NULL;
843 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:266: Query artist art ");
844 	data->regex_query = NULL;
845 	if (data->song->artist != NULL) {
846 		data->_tmp0_ = NULL;
847 		data->_tmp0_ = g_regex_escape_string (data->song->artist, -1);
848 		data->_tmp1_ = data->_tmp0_;
849 		data->_tmp2_ = NULL;
850 		data->_tmp2_ = g_strdup_printf ("^(artist|%s)\\.%s$", data->_tmp1_, data->self->priv->file_type_string);
851 		data->_tmp3_ = data->_tmp2_;
852 		data->_tmp4_ = NULL;
853 		data->_tmp4_ = g_regex_new (data->_tmp3_, G_REGEX_CASELESS | G_REGEX_DOTALL, 0, &data->_inner_error_);
854 		data->_tmp5_ = data->_tmp4_;
855 		_g_free0 (data->_tmp3_);
856 		_g_free0 (data->_tmp1_);
857 		data->_tmp6_ = data->_tmp5_;
858 		if (data->_inner_error_ != NULL) {
859 			goto __catch17_g_error;
860 		}
861 		_g_regex_unref0 (data->regex_query);
862 		data->regex_query = data->_tmp6_;
863 		goto __finally17;
864 		__catch17_g_error:
865 		{
866 			data->erro = data->_inner_error_;
867 			data->_inner_error_ = NULL;
868 			g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:282: Failed to create regex: %s", data->erro->message);
869 			data->callback (NULL, data->callback_target);
870 			_g_error_free0 (data->erro);
871 			_g_regex_unref0 (data->regex_query);
872 			__g_list_free__meta_data_free0_0 (data->list);
873 			if (data->_state_ == 0) {
874 				g_simple_async_result_complete_in_idle (data->_async_result);
875 			} else {
876 				g_simple_async_result_complete (data->_async_result);
877 			}
878 			g_object_unref (data->_async_result);
879 			return FALSE;
880 		}
881 		__finally17:
882 		if (data->_inner_error_ != NULL) {
883 			_g_regex_unref0 (data->regex_query);
884 			__g_list_free__meta_data_free0_0 (data->list);
885 			g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, data->_inner_error_->message, g_quark_to_string (data->_inner_error_->domain), data->_inner_error_->code);
886 			g_clear_error (&data->_inner_error_);
887 			return FALSE;
888 		}
889 	} else {
890 		data->_tmp7_ = NULL;
891 		data->_tmp7_ = g_strdup_printf ("^(artist)\\.%s$", data->self->priv->file_type_string);
892 		data->_tmp8_ = data->_tmp7_;
893 		data->_tmp9_ = NULL;
894 		data->_tmp9_ = g_regex_new (data->_tmp8_, G_REGEX_CASELESS | G_REGEX_DOTALL, 0, &data->_inner_error_);
895 		data->_tmp10_ = data->_tmp9_;
896 		_g_free0 (data->_tmp8_);
897 		data->_tmp11_ = data->_tmp10_;
898 		if (data->_inner_error_ != NULL) {
899 			goto __catch18_g_error;
900 		}
901 		_g_regex_unref0 (data->regex_query);
902 		data->regex_query = data->_tmp11_;
903 		goto __finally18;
904 		__catch18_g_error:
905 		{
906 			data->err1 = data->_inner_error_;
907 			data->_inner_error_ = NULL;
908 			g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:299: Failed to create regex: %s", data->err1->message);
909 			data->callback (NULL, data->callback_target);
910 			_g_error_free0 (data->err1);
911 			_g_regex_unref0 (data->regex_query);
912 			__g_list_free__meta_data_free0_0 (data->list);
913 			if (data->_state_ == 0) {
914 				g_simple_async_result_complete_in_idle (data->_async_result);
915 			} else {
916 				g_simple_async_result_complete (data->_async_result);
917 			}
918 			g_object_unref (data->_async_result);
919 			return FALSE;
920 		}
921 		__finally18:
922 		if (data->_inner_error_ != NULL) {
923 			_g_regex_unref0 (data->regex_query);
924 			__g_list_free__meta_data_free0_0 (data->list);
925 			g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, data->_inner_error_->message, g_quark_to_string (data->_inner_error_->domain), data->_inner_error_->code);
926 			g_clear_error (&data->_inner_error_);
927 			return FALSE;
928 		}
929 	}
930 	data->_tmp12_ = NULL;
931 	data->_state_ = 1;
932 	gmpc_provider_music_tree_walk_back_directory (data->self, data->regex_query, data->directory, data->song->file, META_ARTIST_ART, gmpc_provider_music_tree_get_artist_art_ready, data);
933 	return FALSE;
934 	_state_1:
935 	gmpc_provider_music_tree_walk_back_directory_finish (data->self, data->_res_, &data->_tmp12_);
936 	__g_list_free__meta_data_free0_0 (data->list);
937 	data->list = data->_tmp12_;
938 	data->_tmp13_ = g_list_length (data->list);
939 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:307: Query done, %u results", data->_tmp13_);
940 	g_list_first (data->list);
941 	data->_tmp14_ = data->list;
942 	data->list = NULL;
943 	data->callback (data->_tmp14_, data->callback_target);
944 	_g_regex_unref0 (data->regex_query);
945 	__g_list_free__meta_data_free0_0 (data->list);
946 	if (data->_state_ == 0) {
947 		g_simple_async_result_complete_in_idle (data->_async_result);
948 	} else {
949 		g_simple_async_result_complete (data->_async_result);
950 	}
951 	g_object_unref (data->_async_result);
952 	return FALSE;
953 	_g_regex_unref0 (data->regex_query);
954 	__g_list_free__meta_data_free0_0 (data->list);
955 	if (data->_state_ == 0) {
956 		g_simple_async_result_complete_in_idle (data->_async_result);
957 	} else {
958 		g_simple_async_result_complete (data->_async_result);
959 	}
960 	g_object_unref (data->_async_result);
961 	return FALSE;
962 }
963 
964 
gmpc_provider_music_tree_get_album_cover_data_free(gpointer _data)965 static void gmpc_provider_music_tree_get_album_cover_data_free (gpointer _data) {
966 	GmpcProviderMusicTreeGetAlbumCoverData* data;
967 	data = _data;
968 	_g_free0 (data->directory);
969 	_mpd_freeSong0 (data->song);
970 	_g_object_unref0 (data->self);
971 	g_slice_free (GmpcProviderMusicTreeGetAlbumCoverData, data);
972 }
973 
974 
gmpc_provider_music_tree_get_album_cover(GmpcProviderMusicTree * self,const gchar * directory,const mpd_Song * song,GmpcPluginMetaDataCallback callback,void * callback_target,GAsyncReadyCallback _callback_,gpointer _user_data_)975 static void gmpc_provider_music_tree_get_album_cover (GmpcProviderMusicTree* self, const gchar* directory, const mpd_Song* song, GmpcPluginMetaDataCallback callback, void* callback_target, GAsyncReadyCallback _callback_, gpointer _user_data_) {
976 	GmpcProviderMusicTreeGetAlbumCoverData* _data_;
977 	_data_ = g_slice_new0 (GmpcProviderMusicTreeGetAlbumCoverData);
978 	_data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, gmpc_provider_music_tree_get_album_cover);
979 	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, gmpc_provider_music_tree_get_album_cover_data_free);
980 	_data_->self = _g_object_ref0 (self);
981 	_data_->directory = g_strdup (directory);
982 	_data_->song = _mpd_songDup0 (song);
983 	_data_->callback = callback;
984 	_data_->callback_target = callback_target;
985 	gmpc_provider_music_tree_get_album_cover_co (_data_);
986 }
987 
988 
gmpc_provider_music_tree_get_album_cover_finish(GmpcProviderMusicTree * self,GAsyncResult * _res_)989 static void gmpc_provider_music_tree_get_album_cover_finish (GmpcProviderMusicTree* self, GAsyncResult* _res_) {
990 	GmpcProviderMusicTreeGetAlbumCoverData* _data_;
991 	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
992 }
993 
994 
995 /**
996  * Get album cover
997  */
gmpc_provider_music_tree_get_album_cover_ready(GObject * source_object,GAsyncResult * _res_,gpointer _user_data_)998 static void gmpc_provider_music_tree_get_album_cover_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_) {
999 	GmpcProviderMusicTreeGetAlbumCoverData* data;
1000 	data = _user_data_;
1001 	data->_source_object_ = source_object;
1002 	data->_res_ = _res_;
1003 	gmpc_provider_music_tree_get_album_cover_co (data);
1004 }
1005 
1006 
gmpc_provider_music_tree_get_album_cover_co(GmpcProviderMusicTreeGetAlbumCoverData * data)1007 static gboolean gmpc_provider_music_tree_get_album_cover_co (GmpcProviderMusicTreeGetAlbumCoverData* data) {
1008 	switch (data->_state_) {
1009 		case 0:
1010 		goto _state_0;
1011 		case 1:
1012 		goto _state_1;
1013 		default:
1014 		g_assert_not_reached ();
1015 	}
1016 	_state_0:
1017 	data->list = NULL;
1018 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:319: Query album cover");
1019 	data->regex_query = NULL;
1020 	if (data->song->album != NULL) {
1021 		data->_tmp0_ = NULL;
1022 		data->_tmp0_ = g_regex_escape_string (data->song->album, -1);
1023 		data->_tmp1_ = data->_tmp0_;
1024 		data->_tmp2_ = NULL;
1025 		data->_tmp2_ = g_strdup_printf ("^(folder|cover|.*%s.*)\\.%s$", data->_tmp1_, data->self->priv->file_type_string);
1026 		data->_tmp3_ = data->_tmp2_;
1027 		data->_tmp4_ = NULL;
1028 		data->_tmp4_ = g_regex_new (data->_tmp3_, G_REGEX_CASELESS | G_REGEX_DOTALL, 0, &data->_inner_error_);
1029 		data->_tmp5_ = data->_tmp4_;
1030 		_g_free0 (data->_tmp3_);
1031 		_g_free0 (data->_tmp1_);
1032 		data->_tmp6_ = data->_tmp5_;
1033 		if (data->_inner_error_ != NULL) {
1034 			goto __catch19_g_error;
1035 		}
1036 		_g_regex_unref0 (data->regex_query);
1037 		data->regex_query = data->_tmp6_;
1038 		goto __finally19;
1039 		__catch19_g_error:
1040 		{
1041 			data->erro = data->_inner_error_;
1042 			data->_inner_error_ = NULL;
1043 			g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:335: Failed to create regex: %s", data->erro->message);
1044 			data->callback (NULL, data->callback_target);
1045 			_g_error_free0 (data->erro);
1046 			_g_regex_unref0 (data->regex_query);
1047 			__g_list_free__meta_data_free0_0 (data->list);
1048 			if (data->_state_ == 0) {
1049 				g_simple_async_result_complete_in_idle (data->_async_result);
1050 			} else {
1051 				g_simple_async_result_complete (data->_async_result);
1052 			}
1053 			g_object_unref (data->_async_result);
1054 			return FALSE;
1055 		}
1056 		__finally19:
1057 		if (data->_inner_error_ != NULL) {
1058 			_g_regex_unref0 (data->regex_query);
1059 			__g_list_free__meta_data_free0_0 (data->list);
1060 			g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, data->_inner_error_->message, g_quark_to_string (data->_inner_error_->domain), data->_inner_error_->code);
1061 			g_clear_error (&data->_inner_error_);
1062 			return FALSE;
1063 		}
1064 	} else {
1065 		data->_tmp7_ = NULL;
1066 		data->_tmp7_ = g_strdup_printf ("^(folder|cover)\\.%s$", data->self->priv->file_type_string);
1067 		data->_tmp8_ = data->_tmp7_;
1068 		data->_tmp9_ = NULL;
1069 		data->_tmp9_ = g_regex_new (data->_tmp8_, G_REGEX_CASELESS | G_REGEX_DOTALL, 0, &data->_inner_error_);
1070 		data->_tmp10_ = data->_tmp9_;
1071 		_g_free0 (data->_tmp8_);
1072 		data->_tmp11_ = data->_tmp10_;
1073 		if (data->_inner_error_ != NULL) {
1074 			goto __catch20_g_error;
1075 		}
1076 		_g_regex_unref0 (data->regex_query);
1077 		data->regex_query = data->_tmp11_;
1078 		goto __finally20;
1079 		__catch20_g_error:
1080 		{
1081 			data->err1 = data->_inner_error_;
1082 			data->_inner_error_ = NULL;
1083 			g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:352: Failed to create regex: %s", data->err1->message);
1084 			data->callback (NULL, data->callback_target);
1085 			_g_error_free0 (data->err1);
1086 			_g_regex_unref0 (data->regex_query);
1087 			__g_list_free__meta_data_free0_0 (data->list);
1088 			if (data->_state_ == 0) {
1089 				g_simple_async_result_complete_in_idle (data->_async_result);
1090 			} else {
1091 				g_simple_async_result_complete (data->_async_result);
1092 			}
1093 			g_object_unref (data->_async_result);
1094 			return FALSE;
1095 		}
1096 		__finally20:
1097 		if (data->_inner_error_ != NULL) {
1098 			_g_regex_unref0 (data->regex_query);
1099 			__g_list_free__meta_data_free0_0 (data->list);
1100 			g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, data->_inner_error_->message, g_quark_to_string (data->_inner_error_->domain), data->_inner_error_->code);
1101 			g_clear_error (&data->_inner_error_);
1102 			return FALSE;
1103 		}
1104 	}
1105 	data->_tmp12_ = NULL;
1106 	data->_state_ = 1;
1107 	gmpc_provider_music_tree_walk_back_directory (data->self, data->regex_query, data->directory, data->song->file, META_ALBUM_ART, gmpc_provider_music_tree_get_album_cover_ready, data);
1108 	return FALSE;
1109 	_state_1:
1110 	gmpc_provider_music_tree_walk_back_directory_finish (data->self, data->_res_, &data->_tmp12_);
1111 	__g_list_free__meta_data_free0_0 (data->list);
1112 	data->list = data->_tmp12_;
1113 	g_list_first (data->list);
1114 	data->_tmp13_ = g_list_length (data->list);
1115 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:361: Query done, %u results", data->_tmp13_);
1116 	data->_tmp14_ = data->list;
1117 	data->list = NULL;
1118 	data->callback (data->_tmp14_, data->callback_target);
1119 	_g_regex_unref0 (data->regex_query);
1120 	__g_list_free__meta_data_free0_0 (data->list);
1121 	if (data->_state_ == 0) {
1122 		g_simple_async_result_complete_in_idle (data->_async_result);
1123 	} else {
1124 		g_simple_async_result_complete (data->_async_result);
1125 	}
1126 	g_object_unref (data->_async_result);
1127 	return FALSE;
1128 	_g_regex_unref0 (data->regex_query);
1129 	__g_list_free__meta_data_free0_0 (data->list);
1130 	if (data->_state_ == 0) {
1131 		g_simple_async_result_complete_in_idle (data->_async_result);
1132 	} else {
1133 		g_simple_async_result_complete (data->_async_result);
1134 	}
1135 	g_object_unref (data->_async_result);
1136 	return FALSE;
1137 }
1138 
1139 
gmpc_provider_music_tree_get_biography_data_free(gpointer _data)1140 static void gmpc_provider_music_tree_get_biography_data_free (gpointer _data) {
1141 	GmpcProviderMusicTreeGetBiographyData* data;
1142 	data = _data;
1143 	_g_free0 (data->directory);
1144 	_mpd_freeSong0 (data->song);
1145 	_g_object_unref0 (data->self);
1146 	g_slice_free (GmpcProviderMusicTreeGetBiographyData, data);
1147 }
1148 
1149 
gmpc_provider_music_tree_get_biography(GmpcProviderMusicTree * self,const gchar * directory,const mpd_Song * song,GmpcPluginMetaDataCallback callback,void * callback_target,GAsyncReadyCallback _callback_,gpointer _user_data_)1150 static void gmpc_provider_music_tree_get_biography (GmpcProviderMusicTree* self, const gchar* directory, const mpd_Song* song, GmpcPluginMetaDataCallback callback, void* callback_target, GAsyncReadyCallback _callback_, gpointer _user_data_) {
1151 	GmpcProviderMusicTreeGetBiographyData* _data_;
1152 	_data_ = g_slice_new0 (GmpcProviderMusicTreeGetBiographyData);
1153 	_data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, gmpc_provider_music_tree_get_biography);
1154 	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, gmpc_provider_music_tree_get_biography_data_free);
1155 	_data_->self = _g_object_ref0 (self);
1156 	_data_->directory = g_strdup (directory);
1157 	_data_->song = _mpd_songDup0 (song);
1158 	_data_->callback = callback;
1159 	_data_->callback_target = callback_target;
1160 	gmpc_provider_music_tree_get_biography_co (_data_);
1161 }
1162 
1163 
gmpc_provider_music_tree_get_biography_finish(GmpcProviderMusicTree * self,GAsyncResult * _res_)1164 static void gmpc_provider_music_tree_get_biography_finish (GmpcProviderMusicTree* self, GAsyncResult* _res_) {
1165 	GmpcProviderMusicTreeGetBiographyData* _data_;
1166 	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
1167 }
1168 
1169 
1170 /**
1171  * Get biography
1172  */
gmpc_provider_music_tree_get_biography_ready(GObject * source_object,GAsyncResult * _res_,gpointer _user_data_)1173 static void gmpc_provider_music_tree_get_biography_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_) {
1174 	GmpcProviderMusicTreeGetBiographyData* data;
1175 	data = _user_data_;
1176 	data->_source_object_ = source_object;
1177 	data->_res_ = _res_;
1178 	gmpc_provider_music_tree_get_biography_co (data);
1179 }
1180 
1181 
gmpc_provider_music_tree_get_biography_co(GmpcProviderMusicTreeGetBiographyData * data)1182 static gboolean gmpc_provider_music_tree_get_biography_co (GmpcProviderMusicTreeGetBiographyData* data) {
1183 	switch (data->_state_) {
1184 		case 0:
1185 		goto _state_0;
1186 		case 1:
1187 		goto _state_1;
1188 		default:
1189 		g_assert_not_reached ();
1190 	}
1191 	_state_0:
1192 	data->list = NULL;
1193 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:372: Query biography");
1194 	data->regex_query = NULL;
1195 	data->_tmp0_ = NULL;
1196 	data->_tmp0_ = g_regex_new ("^BIOGRAPHY(\\.txt)?$", G_REGEX_CASELESS | G_REGEX_DOTALL, 0, &data->_inner_error_);
1197 	data->_tmp1_ = data->_tmp0_;
1198 	if (data->_inner_error_ != NULL) {
1199 		goto __catch21_g_error;
1200 	}
1201 	_g_regex_unref0 (data->regex_query);
1202 	data->regex_query = data->_tmp1_;
1203 	goto __finally21;
1204 	__catch21_g_error:
1205 	{
1206 		data->erro = data->_inner_error_;
1207 		data->_inner_error_ = NULL;
1208 		g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:385: Failed to create regex: %s", data->erro->message);
1209 		data->callback (NULL, data->callback_target);
1210 		_g_error_free0 (data->erro);
1211 		_g_regex_unref0 (data->regex_query);
1212 		__g_list_free__meta_data_free0_0 (data->list);
1213 		if (data->_state_ == 0) {
1214 			g_simple_async_result_complete_in_idle (data->_async_result);
1215 		} else {
1216 			g_simple_async_result_complete (data->_async_result);
1217 		}
1218 		g_object_unref (data->_async_result);
1219 		return FALSE;
1220 	}
1221 	__finally21:
1222 	if (data->_inner_error_ != NULL) {
1223 		_g_regex_unref0 (data->regex_query);
1224 		__g_list_free__meta_data_free0_0 (data->list);
1225 		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, data->_inner_error_->message, g_quark_to_string (data->_inner_error_->domain), data->_inner_error_->code);
1226 		g_clear_error (&data->_inner_error_);
1227 		return FALSE;
1228 	}
1229 	data->_tmp2_ = NULL;
1230 	data->_state_ = 1;
1231 	gmpc_provider_music_tree_walk_back_directory (data->self, data->regex_query, data->directory, data->song->file, META_ARTIST_TXT, gmpc_provider_music_tree_get_biography_ready, data);
1232 	return FALSE;
1233 	_state_1:
1234 	gmpc_provider_music_tree_walk_back_directory_finish (data->self, data->_res_, &data->_tmp2_);
1235 	__g_list_free__meta_data_free0_0 (data->list);
1236 	data->list = data->_tmp2_;
1237 	data->_tmp3_ = g_list_length (data->list);
1238 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:392: Query done, %u results", data->_tmp3_);
1239 	g_list_first (data->list);
1240 	data->_tmp4_ = data->list;
1241 	data->list = NULL;
1242 	data->callback (data->_tmp4_, data->callback_target);
1243 	_g_regex_unref0 (data->regex_query);
1244 	__g_list_free__meta_data_free0_0 (data->list);
1245 	if (data->_state_ == 0) {
1246 		g_simple_async_result_complete_in_idle (data->_async_result);
1247 	} else {
1248 		g_simple_async_result_complete (data->_async_result);
1249 	}
1250 	g_object_unref (data->_async_result);
1251 	return FALSE;
1252 	_g_regex_unref0 (data->regex_query);
1253 	__g_list_free__meta_data_free0_0 (data->list);
1254 	if (data->_state_ == 0) {
1255 		g_simple_async_result_complete_in_idle (data->_async_result);
1256 	} else {
1257 		g_simple_async_result_complete (data->_async_result);
1258 	}
1259 	g_object_unref (data->_async_result);
1260 	return FALSE;
1261 }
1262 
1263 
gmpc_provider_music_tree_get_album_info_data_free(gpointer _data)1264 static void gmpc_provider_music_tree_get_album_info_data_free (gpointer _data) {
1265 	GmpcProviderMusicTreeGetAlbumInfoData* data;
1266 	data = _data;
1267 	_g_free0 (data->directory);
1268 	_mpd_freeSong0 (data->song);
1269 	_g_object_unref0 (data->self);
1270 	g_slice_free (GmpcProviderMusicTreeGetAlbumInfoData, data);
1271 }
1272 
1273 
gmpc_provider_music_tree_get_album_info(GmpcProviderMusicTree * self,const gchar * directory,const mpd_Song * song,GmpcPluginMetaDataCallback callback,void * callback_target,GAsyncReadyCallback _callback_,gpointer _user_data_)1274 static void gmpc_provider_music_tree_get_album_info (GmpcProviderMusicTree* self, const gchar* directory, const mpd_Song* song, GmpcPluginMetaDataCallback callback, void* callback_target, GAsyncReadyCallback _callback_, gpointer _user_data_) {
1275 	GmpcProviderMusicTreeGetAlbumInfoData* _data_;
1276 	_data_ = g_slice_new0 (GmpcProviderMusicTreeGetAlbumInfoData);
1277 	_data_->_async_result = g_simple_async_result_new (G_OBJECT (self), _callback_, _user_data_, gmpc_provider_music_tree_get_album_info);
1278 	g_simple_async_result_set_op_res_gpointer (_data_->_async_result, _data_, gmpc_provider_music_tree_get_album_info_data_free);
1279 	_data_->self = _g_object_ref0 (self);
1280 	_data_->directory = g_strdup (directory);
1281 	_data_->song = _mpd_songDup0 (song);
1282 	_data_->callback = callback;
1283 	_data_->callback_target = callback_target;
1284 	gmpc_provider_music_tree_get_album_info_co (_data_);
1285 }
1286 
1287 
gmpc_provider_music_tree_get_album_info_finish(GmpcProviderMusicTree * self,GAsyncResult * _res_)1288 static void gmpc_provider_music_tree_get_album_info_finish (GmpcProviderMusicTree* self, GAsyncResult* _res_) {
1289 	GmpcProviderMusicTreeGetAlbumInfoData* _data_;
1290 	_data_ = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (_res_));
1291 }
1292 
1293 
1294 /**
1295  * Get album information
1296  */
gmpc_provider_music_tree_get_album_info_ready(GObject * source_object,GAsyncResult * _res_,gpointer _user_data_)1297 static void gmpc_provider_music_tree_get_album_info_ready (GObject* source_object, GAsyncResult* _res_, gpointer _user_data_) {
1298 	GmpcProviderMusicTreeGetAlbumInfoData* data;
1299 	data = _user_data_;
1300 	data->_source_object_ = source_object;
1301 	data->_res_ = _res_;
1302 	gmpc_provider_music_tree_get_album_info_co (data);
1303 }
1304 
1305 
gmpc_provider_music_tree_get_album_info_co(GmpcProviderMusicTreeGetAlbumInfoData * data)1306 static gboolean gmpc_provider_music_tree_get_album_info_co (GmpcProviderMusicTreeGetAlbumInfoData* data) {
1307 	switch (data->_state_) {
1308 		case 0:
1309 		goto _state_0;
1310 		case 1:
1311 		goto _state_1;
1312 		default:
1313 		g_assert_not_reached ();
1314 	}
1315 	_state_0:
1316 	data->list = NULL;
1317 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:404: Query biography");
1318 	data->regex_query = NULL;
1319 	if (data->song->album == NULL) {
1320 		g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:410: Album is not set.");
1321 		data->callback (NULL, data->callback_target);
1322 		_g_regex_unref0 (data->regex_query);
1323 		__g_list_free__meta_data_free0_0 (data->list);
1324 		if (data->_state_ == 0) {
1325 			g_simple_async_result_complete_in_idle (data->_async_result);
1326 		} else {
1327 			g_simple_async_result_complete (data->_async_result);
1328 		}
1329 		g_object_unref (data->_async_result);
1330 		return FALSE;
1331 	}
1332 	data->_tmp0_ = NULL;
1333 	data->_tmp0_ = g_strdup_printf ("^.*%s.*\\.(txt|info)$", data->song->album);
1334 	data->_tmp1_ = data->_tmp0_;
1335 	data->_tmp2_ = NULL;
1336 	data->_tmp2_ = g_regex_new (data->_tmp1_, G_REGEX_CASELESS | G_REGEX_DOTALL, 0, &data->_inner_error_);
1337 	data->_tmp3_ = data->_tmp2_;
1338 	_g_free0 (data->_tmp1_);
1339 	data->_tmp4_ = data->_tmp3_;
1340 	if (data->_inner_error_ != NULL) {
1341 		goto __catch22_g_error;
1342 	}
1343 	_g_regex_unref0 (data->regex_query);
1344 	data->regex_query = data->_tmp4_;
1345 	goto __finally22;
1346 	__catch22_g_error:
1347 	{
1348 		data->erro = data->_inner_error_;
1349 		data->_inner_error_ = NULL;
1350 		g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:424: Failed to create regex: %s", data->erro->message);
1351 		data->callback (NULL, data->callback_target);
1352 		_g_error_free0 (data->erro);
1353 		_g_regex_unref0 (data->regex_query);
1354 		__g_list_free__meta_data_free0_0 (data->list);
1355 		if (data->_state_ == 0) {
1356 			g_simple_async_result_complete_in_idle (data->_async_result);
1357 		} else {
1358 			g_simple_async_result_complete (data->_async_result);
1359 		}
1360 		g_object_unref (data->_async_result);
1361 		return FALSE;
1362 	}
1363 	__finally22:
1364 	if (data->_inner_error_ != NULL) {
1365 		_g_regex_unref0 (data->regex_query);
1366 		__g_list_free__meta_data_free0_0 (data->list);
1367 		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, data->_inner_error_->message, g_quark_to_string (data->_inner_error_->domain), data->_inner_error_->code);
1368 		g_clear_error (&data->_inner_error_);
1369 		return FALSE;
1370 	}
1371 	data->_tmp5_ = NULL;
1372 	data->_state_ = 1;
1373 	gmpc_provider_music_tree_walk_back_directory (data->self, data->regex_query, data->directory, data->song->file, META_ARTIST_TXT, gmpc_provider_music_tree_get_album_info_ready, data);
1374 	return FALSE;
1375 	_state_1:
1376 	gmpc_provider_music_tree_walk_back_directory_finish (data->self, data->_res_, &data->_tmp5_);
1377 	__g_list_free__meta_data_free0_0 (data->list);
1378 	data->list = data->_tmp5_;
1379 	data->_tmp6_ = g_list_length (data->list);
1380 	g_log (log_domain_cp, G_LOG_LEVEL_DEBUG, "music-tree.vala:431: Query done, %u results", data->_tmp6_);
1381 	g_list_first (data->list);
1382 	data->_tmp7_ = data->list;
1383 	data->list = NULL;
1384 	data->callback (data->_tmp7_, data->callback_target);
1385 	_g_regex_unref0 (data->regex_query);
1386 	__g_list_free__meta_data_free0_0 (data->list);
1387 	if (data->_state_ == 0) {
1388 		g_simple_async_result_complete_in_idle (data->_async_result);
1389 	} else {
1390 		g_simple_async_result_complete (data->_async_result);
1391 	}
1392 	g_object_unref (data->_async_result);
1393 	return FALSE;
1394 	_g_regex_unref0 (data->regex_query);
1395 	__g_list_free__meta_data_free0_0 (data->list);
1396 	if (data->_state_ == 0) {
1397 		g_simple_async_result_complete_in_idle (data->_async_result);
1398 	} else {
1399 		g_simple_async_result_complete (data->_async_result);
1400 	}
1401 	g_object_unref (data->_async_result);
1402 	return FALSE;
1403 }
1404 
1405 
gmpc_provider_music_tree_construct(GType object_type)1406 GmpcProviderMusicTree* gmpc_provider_music_tree_construct (GType object_type) {
1407 	GmpcProviderMusicTree * self = NULL;
1408 	self = (GmpcProviderMusicTree*) gmpc_plugin_base_construct (object_type);
1409 	return self;
1410 }
1411 
1412 
gmpc_provider_music_tree_new(void)1413 GmpcProviderMusicTree* gmpc_provider_music_tree_new (void) {
1414 	return gmpc_provider_music_tree_construct (GMPC_PROVIDER_TYPE_MUSIC_TREE);
1415 }
1416 
1417 
gmpc_provider_music_tree_constructor(GType type,guint n_construct_properties,GObjectConstructParam * construct_properties)1418 static GObject * gmpc_provider_music_tree_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) {
1419 	GObject * obj;
1420 	GObjectClass * parent_class;
1421 	GmpcProviderMusicTree * self;
1422 	parent_class = G_OBJECT_CLASS (gmpc_provider_music_tree_parent_class);
1423 	obj = parent_class->constructor (type, n_construct_properties, construct_properties);
1424 	self = GMPC_PROVIDER_MUSIC_TREE (obj);
1425 	((GmpcPluginBase*) self)->plugin_type = 8 + 32;
1426 	return obj;
1427 }
1428 
1429 
gmpc_provider_music_tree_class_init(GmpcProviderMusicTreeClass * klass)1430 static void gmpc_provider_music_tree_class_init (GmpcProviderMusicTreeClass * klass) {
1431 	gmpc_provider_music_tree_parent_class = g_type_class_peek_parent (klass);
1432 	g_type_class_add_private (klass, sizeof (GmpcProviderMusicTreePrivate));
1433 	GMPC_PLUGIN_BASE_CLASS (klass)->get_version = gmpc_provider_music_tree_real_get_version;
1434 	GMPC_PLUGIN_BASE_CLASS (klass)->get_name = gmpc_provider_music_tree_real_get_name;
1435 	G_OBJECT_CLASS (klass)->constructor = gmpc_provider_music_tree_constructor;
1436 	G_OBJECT_CLASS (klass)->finalize = gmpc_provider_music_tree_finalize;
1437 }
1438 
1439 
gmpc_provider_music_tree_gmpc_plugin_meta_data_iface_interface_init(GmpcPluginMetaDataIfaceIface * iface)1440 static void gmpc_provider_music_tree_gmpc_plugin_meta_data_iface_interface_init (GmpcPluginMetaDataIfaceIface * iface) {
1441 	gmpc_provider_music_tree_gmpc_plugin_meta_data_iface_parent_iface = g_type_interface_peek_parent (iface);
1442 	iface->set_priority = (void (*)(GmpcPluginMetaDataIface* ,gint)) gmpc_provider_music_tree_real_set_priority;
1443 	iface->get_priority = (gint (*)(GmpcPluginMetaDataIface*)) gmpc_provider_music_tree_real_get_priority;
1444 	iface->get_metadata = (void (*)(GmpcPluginMetaDataIface* ,const mpd_Song* ,MetaDataType ,GmpcPluginMetaDataCallback ,void*)) gmpc_provider_music_tree_real_get_metadata;
1445 }
1446 
1447 
gmpc_provider_music_tree_instance_init(GmpcProviderMusicTree * self)1448 static void gmpc_provider_music_tree_instance_init (GmpcProviderMusicTree * self) {
1449 	gchar* _tmp0_;
1450 	self->priv = GMPC_PROVIDER_MUSIC_TREE_GET_PRIVATE (self);
1451 	_tmp0_ = g_strdup ("(jpg|jpeg|png|gif)");
1452 	self->priv->file_type_string = _tmp0_;
1453 }
1454 
1455 
gmpc_provider_music_tree_finalize(GObject * obj)1456 static void gmpc_provider_music_tree_finalize (GObject* obj) {
1457 	GmpcProviderMusicTree * self;
1458 	self = GMPC_PROVIDER_MUSIC_TREE (obj);
1459 	_g_free0 (self->priv->file_type_string);
1460 	G_OBJECT_CLASS (gmpc_provider_music_tree_parent_class)->finalize (obj);
1461 }
1462 
1463 
gmpc_provider_music_tree_get_type(void)1464 GType gmpc_provider_music_tree_get_type (void) {
1465 	static volatile gsize gmpc_provider_music_tree_type_id__volatile = 0;
1466 	if (g_once_init_enter (&gmpc_provider_music_tree_type_id__volatile)) {
1467 		static const GTypeInfo g_define_type_info = { sizeof (GmpcProviderMusicTreeClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gmpc_provider_music_tree_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GmpcProviderMusicTree), 0, (GInstanceInitFunc) gmpc_provider_music_tree_instance_init, NULL };
1468 		static const GInterfaceInfo gmpc_plugin_meta_data_iface_info = { (GInterfaceInitFunc) gmpc_provider_music_tree_gmpc_plugin_meta_data_iface_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
1469 		GType gmpc_provider_music_tree_type_id;
1470 		gmpc_provider_music_tree_type_id = g_type_register_static (GMPC_PLUGIN_TYPE_BASE, "GmpcProviderMusicTree", &g_define_type_info, 0);
1471 		g_type_add_interface_static (gmpc_provider_music_tree_type_id, GMPC_PLUGIN_TYPE_META_DATA_IFACE, &gmpc_plugin_meta_data_iface_info);
1472 		g_once_init_leave (&gmpc_provider_music_tree_type_id__volatile, gmpc_provider_music_tree_type_id);
1473 	}
1474 	return gmpc_provider_music_tree_type_id__volatile;
1475 }
1476 
1477 
1478 
1479