1 /* gmpc-metadata-similarartists.c generated by valac 0.12.0, the Vala compiler
2 * generated from gmpc-metadata-similarartists.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 <libmpd/libmpdclient.h>
32 #include <libmpd/libmpd.h>
33 #include <misc.h>
34 #include <gdk/gdk.h>
35 #include <gmpc-meta-watcher.h>
36 #include <metadata.h>
37 #include <glib/gi18n-lib.h>
38 #include <plugin.h>
39 #include <libmpd/libmpd-internal.h>
40 #include <gmpc-metaimage.h>
41 #include <pango/pango.h>
42 #include <main.h>
43
44 #define _mpd_freeSong0(var) ((var == NULL) ? NULL : (var = (mpd_freeSong (var), NULL)))
45 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
46 #define _g_list_free0(var) ((var == NULL) ? NULL : (var = (g_list_free (var), NULL)))
47 #define _g_free0(var) (var = (g_free (var), NULL))
48 #define _mpd_data_free0(var) ((var == NULL) ? NULL : (var = (mpd_data_free (var), NULL)))
49 #define __g_list_free__g_object_unref0_0(var) ((var == NULL) ? NULL : (var = (_g_list_free__g_object_unref0_ (var), NULL)))
50 #define _meta_data_free0(var) ((var == NULL) ? NULL : (var = (meta_data_free (var), NULL)))
51
52 struct _GmpcMetaDataWidgetsSimilarArtistsPrivate {
53 mpd_Song* song;
54 gint columns;
55 gint button_width;
56 };
57
58
59 static gpointer gmpc_meta_data_widgets_similar_artists_parent_class = NULL;
60
61 #define use_transition_mdsa TRUE
62 #define some_unique_name_mdsa VERSION
63 #define GMPC_META_DATA_WIDGETS_SIMILAR_ARTISTS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GMPC_META_DATA_WIDGETS_TYPE_SIMILAR_ARTISTS, GmpcMetaDataWidgetsSimilarArtistsPrivate))
64 enum {
65 GMPC_META_DATA_WIDGETS_SIMILAR_ARTISTS_DUMMY_PROPERTY
66 };
67 static void gmpc_meta_data_widgets_similar_artists_size_changed (GmpcMetaDataWidgetsSimilarArtists* self, GdkRectangle* alloc);
68 static void gmpc_meta_data_widgets_similar_artists_metadata_changed (GmpcMetaDataWidgetsSimilarArtists* self, GmpcMetaWatcher* gmw2, const mpd_Song* song, MetaDataType type, MetaDataResult _result_, const MetaData* met);
69 static void _g_object_unref0_ (gpointer var);
70 static void _g_list_free__g_object_unref0_ (GList* self);
71 static void gmpc_meta_data_widgets_similar_artists_artist_button_clicked (GmpcMetaDataWidgetsSimilarArtists* self, GtkButton* button);
72 static gboolean _misc_header_expose_event_gtk_widget_expose_event (GtkWidget* _sender, GdkEventExpose* event, gpointer self);
73 static void _gmpc_meta_data_widgets_similar_artists_artist_button_clicked_gtk_button_clicked (GtkButton* _sender, gpointer self);
74 #define np2_LOG_DOMAIN "NowPlaying"
75 static void _gmpc_meta_data_widgets_similar_artists_metadata_changed_gmpc_meta_watcher_data_changed (GmpcMetaWatcher* _sender, const mpd_Song* song, MetaDataType type, MetaDataResult _result_, const MetaData* met, gpointer self);
76 static void _gmpc_meta_data_widgets_similar_artists_size_changed_gtk_widget_size_allocate (GtkWidget* _sender, GdkRectangle* allocation, gpointer self);
77 static void gmpc_meta_data_widgets_similar_artists_finalize (GObject* obj);
78
79
_g_object_ref0(gpointer self)80 static gpointer _g_object_ref0 (gpointer self) {
81 return self ? g_object_ref (self) : NULL;
82 }
83
84
gmpc_meta_data_widgets_similar_artists_size_changed(GmpcMetaDataWidgetsSimilarArtists * self,GdkRectangle * alloc)85 static void gmpc_meta_data_widgets_similar_artists_size_changed (GmpcMetaDataWidgetsSimilarArtists* self, GdkRectangle* alloc) {
86 gint t_column;
87 gint _tmp0_ = 0;
88 g_return_if_fail (self != NULL);
89 t_column = (*alloc).width / self->priv->button_width;
90 if (t_column < 1) {
91 _tmp0_ = 1;
92 } else {
93 _tmp0_ = t_column;
94 }
95 t_column = _tmp0_;
96 if (t_column != self->priv->columns) {
97 GList* _tmp1_ = NULL;
98 GList* list;
99 gint i;
100 guint _tmp3_;
101 _tmp1_ = gtk_container_get_children ((GtkContainer*) self);
102 list = _tmp1_;
103 {
104 GList* child_collection;
105 GList* child_it;
106 child_collection = list;
107 for (child_it = child_collection; child_it != NULL; child_it = child_it->next) {
108 GtkWidget* _tmp2_;
109 GtkWidget* child;
110 _tmp2_ = _g_object_ref0 ((GtkWidget*) child_it->data);
111 child = _tmp2_;
112 {
113 g_object_ref ((GObject*) child);
114 gtk_container_remove ((GtkContainer*) self, child);
115 _g_object_unref0 (child);
116 }
117 }
118 }
119 self->priv->columns = t_column;
120 i = 0;
121 _tmp3_ = g_list_length (list);
122 gtk_table_resize ((GtkTable*) self, (_tmp3_ / self->priv->columns) + 1, (guint) self->priv->columns);
123 {
124 GList* item_collection;
125 GList* item_it;
126 item_collection = list;
127 for (item_it = item_collection; item_it != NULL; item_it = item_it->next) {
128 GtkWidget* _tmp4_;
129 GtkWidget* item;
130 _tmp4_ = _g_object_ref0 ((GtkWidget*) item_it->data);
131 item = _tmp4_;
132 {
133 gtk_table_attach ((GtkTable*) self, item, (guint) (i % self->priv->columns), (guint) ((i % self->priv->columns) + 1), (guint) (i / self->priv->columns), (guint) ((i / self->priv->columns) + 1), GTK_EXPAND | GTK_FILL, GTK_SHRINK, (guint) 0, (guint) 0);
134 i++;
135 _g_object_unref0 (item);
136 }
137 }
138 }
139 gtk_widget_show_all ((GtkWidget*) self);
140 _g_list_free0 (list);
141 }
142 }
143
144
145 /**
146 * Handle signals from the metadata object.
147 */
_g_object_unref0_(gpointer var)148 static void _g_object_unref0_ (gpointer var) {
149 (var == NULL) ? NULL : (var = (g_object_unref (var), NULL));
150 }
151
152
_g_list_free__g_object_unref0_(GList * self)153 static void _g_list_free__g_object_unref0_ (GList* self) {
154 g_list_foreach (self, (GFunc) _g_object_unref0_, NULL);
155 g_list_free (self);
156 }
157
158
gmpc_meta_data_widgets_similar_artists_metadata_changed(GmpcMetaDataWidgetsSimilarArtists * self,GmpcMetaWatcher * gmw2,const mpd_Song * song,MetaDataType type,MetaDataResult _result_,const MetaData * met)159 static void gmpc_meta_data_widgets_similar_artists_metadata_changed (GmpcMetaDataWidgetsSimilarArtists* self, GmpcMetaWatcher* gmw2, const mpd_Song* song, MetaDataType type, MetaDataResult _result_, const MetaData* met) {
160 gint _tmp0_;
161 GList* _tmp1_ = NULL;
162 GList* child_list;
163 gboolean _tmp3_ = FALSE;
164 gboolean _tmp4_ = FALSE;
165 g_return_if_fail (self != NULL);
166 g_return_if_fail (gmw2 != NULL);
167 g_return_if_fail (song != NULL);
168 if (type != META_ARTIST_SIMILAR) {
169 return;
170 }
171 _tmp0_ = g_utf8_collate (self->priv->song->artist, song->artist);
172 if (_tmp0_ != 0) {
173 return;
174 }
175 _tmp1_ = gtk_container_get_children ((GtkContainer*) self);
176 child_list = _tmp1_;
177 {
178 GList* child_collection;
179 GList* child_it;
180 child_collection = child_list;
181 for (child_it = child_collection; child_it != NULL; child_it = child_it->next) {
182 GtkWidget* _tmp2_;
183 GtkWidget* child;
184 _tmp2_ = _g_object_ref0 ((GtkWidget*) child_it->data);
185 child = _tmp2_;
186 {
187 gtk_object_destroy ((GtkObject*) child);
188 _g_object_unref0 (child);
189 }
190 }
191 }
192 if (_result_ == META_DATA_UNAVAILABLE) {
193 _tmp4_ = TRUE;
194 } else {
195 gboolean _tmp5_;
196 _tmp5_ = meta_data_is_empty (met);
197 _tmp4_ = _tmp5_;
198 }
199 if (_tmp4_) {
200 _tmp3_ = TRUE;
201 } else {
202 gboolean _tmp6_;
203 _tmp6_ = meta_data_is_text_list (met);
204 _tmp3_ = !_tmp6_;
205 }
206 if (_tmp3_) {
207 const gchar* _tmp7_ = NULL;
208 GtkLabel* _tmp8_ = NULL;
209 GtkLabel* label;
210 _tmp7_ = _ ("Unavailable");
211 _tmp8_ = (GtkLabel*) gtk_label_new (_tmp7_);
212 label = g_object_ref_sink (_tmp8_);
213 gtk_table_attach ((GtkTable*) self, (GtkWidget*) label, (guint) 0, (guint) 1, (guint) 0, (guint) 1, GTK_SHRINK, GTK_SHRINK, (guint) 0, (guint) 0);
214 _g_object_unref0 (label);
215 } else {
216 if (_result_ == META_DATA_FETCHING) {
217 const gchar* _tmp9_ = NULL;
218 GtkLabel* _tmp10_ = NULL;
219 GtkLabel* label;
220 _tmp9_ = _ ("Fetching");
221 _tmp10_ = (GtkLabel*) gtk_label_new (_tmp9_);
222 label = g_object_ref_sink (_tmp10_);
223 gtk_table_attach ((GtkTable*) self, (GtkWidget*) label, (guint) 0, (guint) 1, (guint) 0, (guint) 1, GTK_SHRINK, GTK_SHRINK, (guint) 0, (guint) 0);
224 _g_object_unref0 (label);
225 } else {
226 GList* in_db_list;
227 GList* _tmp11_ = NULL;
228 GList* _tmp12_ = NULL;
229 GList* list;
230 gint items;
231 gint i;
232 guint _tmp34_;
233 guint llength;
234 gint _tmp35_ = 0;
235 in_db_list = NULL;
236 _tmp11_ = meta_data_get_text_list (met);
237 _tmp12_ = g_list_copy (_tmp11_);
238 list = _tmp12_;
239 list = g_list_sort (list, (GCompareFunc) g_utf8_collate);
240 items = 30;
241 i = 0;
242 if (list != NULL) {
243 GList* liter;
244 MpdData* _tmp13_ = NULL;
245 MpdData* data;
246 gint q;
247 GList* _tmp30_ = NULL;
248 liter = NULL;
249 mpd_database_search_field_start (connection, MPD_TAG_ITEM_ARTIST);
250 _tmp13_ = mpd_database_search_commit (connection);
251 data = _tmp13_;
252 q = 0;
253 if (data != NULL) {
254 MpdData* _tmp14_ = NULL;
255 MpdData* iter;
256 GList* _tmp15_ = NULL;
257 gchar* _tmp16_;
258 gchar* artist;
259 gboolean _tmp17_;
260 data = misc_sort_mpddata_by_album_disc_track (data);
261 _tmp14_ = mpd_data_get_first (data);
262 iter = _tmp14_;
263 _tmp15_ = g_list_first (list);
264 liter = _tmp15_;
265 _tmp16_ = g_strdup ("");
266 artist = _tmp16_;
267 _tmp17_ = g_utf8_validate (iter->tag, (gssize) (-1), NULL);
268 if (_tmp17_ == FALSE) {
269 g_error ("gmpc-metadata-similarartists.vala:120: Failed to validate");
270 }
271 if (iter->tag != NULL) {
272 gchar* _tmp18_ = NULL;
273 _tmp18_ = g_utf8_casefold (iter->tag, (gssize) (-1));
274 _g_free0 (artist);
275 artist = _tmp18_;
276 }
277 {
278 gboolean _tmp19_;
279 _tmp19_ = TRUE;
280 while (TRUE) {
281 gchar* _tmp22_ = NULL;
282 gchar* _tmp23_;
283 gint _tmp24_;
284 gint _tmp25_;
285 gint res;
286 if (!_tmp19_) {
287 gboolean _tmp20_ = FALSE;
288 gboolean _tmp21_ = FALSE;
289 if (iter != NULL) {
290 _tmp21_ = liter != NULL;
291 } else {
292 _tmp21_ = FALSE;
293 }
294 if (_tmp21_) {
295 _tmp20_ = i < items;
296 } else {
297 _tmp20_ = FALSE;
298 }
299 if (!_tmp20_) {
300 break;
301 }
302 }
303 _tmp19_ = FALSE;
304 _tmp22_ = g_utf8_casefold ((const gchar*) liter->data, (gssize) (-1));
305 _tmp23_ = _tmp22_;
306 _tmp24_ = g_utf8_collate (_tmp23_, artist);
307 _tmp25_ = _tmp24_;
308 _g_free0 (_tmp23_);
309 res = _tmp25_;
310 q++;
311 if (res == 0) {
312 GtkWidget* _tmp26_ = NULL;
313 gchar* _tmp27_;
314 gchar* d;
315 _tmp26_ = gmpc_meta_data_widgets_similar_artists_new_artist_button (self, iter->tag, TRUE);
316 in_db_list = g_list_prepend (in_db_list, _tmp26_);
317 i++;
318 _tmp27_ = g_strdup ((const gchar*) liter->data);
319 d = _tmp27_;
320 liter = liter->next;
321 list = g_list_remove (list, d);
322 iter = mpd_data_get_next_real (iter, FALSE);
323 if (iter != NULL) {
324 gchar* _tmp28_ = NULL;
325 _tmp28_ = g_utf8_casefold (iter->tag, (gssize) (-1));
326 _g_free0 (artist);
327 artist = _tmp28_;
328 }
329 _g_free0 (d);
330 } else {
331 if (res > 0) {
332 iter = mpd_data_get_next_real (iter, FALSE);
333 if (iter != NULL) {
334 gchar* _tmp29_ = NULL;
335 _tmp29_ = g_utf8_casefold (iter->tag, (gssize) (-1));
336 _g_free0 (artist);
337 artist = _tmp29_;
338 }
339 } else {
340 liter = liter->next;
341 }
342 }
343 }
344 }
345 _g_free0 (artist);
346 }
347 _tmp30_ = g_list_first (list);
348 liter = _tmp30_;
349 while (TRUE) {
350 gboolean _tmp31_ = FALSE;
351 gchar* _tmp32_;
352 gchar* artist;
353 GtkWidget* _tmp33_ = NULL;
354 if (liter != NULL) {
355 _tmp31_ = i < items;
356 } else {
357 _tmp31_ = FALSE;
358 }
359 if (!_tmp31_) {
360 break;
361 }
362 _tmp32_ = g_strdup ((const gchar*) liter->data);
363 artist = _tmp32_;
364 _tmp33_ = gmpc_meta_data_widgets_similar_artists_new_artist_button (self, artist, FALSE);
365 in_db_list = g_list_prepend (in_db_list, _tmp33_);
366 i++;
367 liter = liter->next;
368 _g_free0 (artist);
369 }
370 _mpd_data_free0 (data);
371 }
372 in_db_list = g_list_reverse (in_db_list);
373 i = 0;
374 gtk_widget_hide ((GtkWidget*) self);
375 _tmp34_ = g_list_length (in_db_list);
376 llength = _tmp34_;
377 self->priv->columns = ((GtkWidget*) self)->allocation.width / self->priv->button_width;
378 if (self->priv->columns < 1) {
379 _tmp35_ = 1;
380 } else {
381 _tmp35_ = self->priv->columns;
382 }
383 self->priv->columns = _tmp35_;
384 gtk_table_resize ((GtkTable*) self, (llength / self->priv->columns) + 1, (guint) self->priv->columns);
385 {
386 GList* item_collection;
387 GList* item_it;
388 item_collection = in_db_list;
389 for (item_it = item_collection; item_it != NULL; item_it = item_it->next) {
390 GtkWidget* _tmp36_;
391 GtkWidget* item;
392 _tmp36_ = _g_object_ref0 ((GtkWidget*) item_it->data);
393 item = _tmp36_;
394 {
395 gtk_table_attach ((GtkTable*) self, item, (guint) (i % self->priv->columns), (guint) ((i % self->priv->columns) + 1), (guint) (i / self->priv->columns), (guint) ((i / self->priv->columns) + 1), GTK_EXPAND | GTK_FILL, GTK_SHRINK, (guint) 0, (guint) 0);
396 i++;
397 _g_object_unref0 (item);
398 }
399 }
400 }
401 _g_list_free0 (list);
402 __g_list_free__g_object_unref0_0 (in_db_list);
403 }
404 }
405 gtk_widget_show_all ((GtkWidget*) self);
406 _g_list_free0 (child_list);
407 }
408
409
gmpc_meta_data_widgets_similar_artists_artist_button_clicked(GmpcMetaDataWidgetsSimilarArtists * self,GtkButton * button)410 static void gmpc_meta_data_widgets_similar_artists_artist_button_clicked (GmpcMetaDataWidgetsSimilarArtists* self, GtkButton* button) {
411 gconstpointer _tmp0_ = NULL;
412 const gchar* artist;
413 g_return_if_fail (self != NULL);
414 g_return_if_fail (button != NULL);
415 _tmp0_ = g_object_get_data ((GObject*) button, "artist");
416 artist = (const gchar*) ((const gchar*) _tmp0_);
417 info2_fill_artist_view (artist);
418 }
419
420
_misc_header_expose_event_gtk_widget_expose_event(GtkWidget * _sender,GdkEventExpose * event,gpointer self)421 static gboolean _misc_header_expose_event_gtk_widget_expose_event (GtkWidget* _sender, GdkEventExpose* event, gpointer self) {
422 gboolean result;
423 result = misc_header_expose_event (_sender, event);
424 return result;
425 }
426
427
_gmpc_meta_data_widgets_similar_artists_artist_button_clicked_gtk_button_clicked(GtkButton * _sender,gpointer self)428 static void _gmpc_meta_data_widgets_similar_artists_artist_button_clicked_gtk_button_clicked (GtkButton* _sender, gpointer self) {
429 gmpc_meta_data_widgets_similar_artists_artist_button_clicked (self, _sender);
430 }
431
432
gmpc_meta_data_widgets_similar_artists_new_artist_button(GmpcMetaDataWidgetsSimilarArtists * self,const gchar * artist,gboolean in_db)433 GtkWidget* gmpc_meta_data_widgets_similar_artists_new_artist_button (GmpcMetaDataWidgetsSimilarArtists* self, const gchar* artist, gboolean in_db) {
434 GtkWidget* result = NULL;
435 GtkHBox* _tmp0_ = NULL;
436 GtkHBox* hbox;
437 GtkEventBox* _tmp1_ = NULL;
438 GtkEventBox* event;
439 GmpcMetaImage* _tmp2_ = NULL;
440 GmpcMetaImage* image;
441 mpd_Song* _tmp3_ = NULL;
442 mpd_Song* song;
443 gchar* _tmp4_;
444 GtkLabel* _tmp5_ = NULL;
445 GtkLabel* label;
446 g_return_val_if_fail (self != NULL, NULL);
447 g_return_val_if_fail (artist != NULL, NULL);
448 _tmp0_ = (GtkHBox*) gtk_hbox_new (FALSE, 6);
449 hbox = g_object_ref_sink (_tmp0_);
450 gtk_container_set_border_width ((GtkContainer*) hbox, (guint) 4);
451 _tmp1_ = (GtkEventBox*) gtk_event_box_new ();
452 event = g_object_ref_sink (_tmp1_);
453 gtk_widget_set_app_paintable ((GtkWidget*) event, TRUE);
454 gtk_event_box_set_visible_window (event, TRUE);
455 g_signal_connect ((GtkWidget*) event, "expose-event", (GCallback) _misc_header_expose_event_gtk_widget_expose_event, NULL);
456 gtk_widget_set_size_request ((GtkWidget*) event, self->priv->button_width - 20, 60);
457 _tmp2_ = gmpc_metaimage_new_size (META_ARTIST_ART, 48);
458 image = g_object_ref_sink (_tmp2_);
459 gmpc_metaimage_set_no_cover_icon (image, "no-artist");
460 gmpc_metaimage_set_loading_cover_icon (image, "fetching-artist");
461 _tmp3_ = mpd_newSong ();
462 song = _tmp3_;
463 _tmp4_ = g_strdup (artist);
464 _g_free0 (song->artist);
465 song->artist = _tmp4_;
466 gmpc_metaimage_set_squared (image, TRUE);
467 gmpc_metaimage_update_cover_from_song_delayed (image, song);
468 gtk_box_pack_start ((GtkBox*) hbox, (GtkWidget*) image, FALSE, FALSE, (guint) 0);
469 _tmp5_ = (GtkLabel*) gtk_label_new (artist);
470 label = g_object_ref_sink (_tmp5_);
471 gtk_widget_set_tooltip_text ((GtkWidget*) label, artist);
472 gtk_label_set_selectable (label, TRUE);
473 gtk_misc_set_alignment ((GtkMisc*) label, 0.0f, 0.5f);
474 gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_END);
475 gtk_box_pack_start ((GtkBox*) hbox, (GtkWidget*) label, TRUE, TRUE, (guint) 0);
476 if (in_db) {
477 GtkButton* _tmp6_ = NULL;
478 GtkButton* find;
479 GtkImage* _tmp7_ = NULL;
480 GtkImage* _tmp8_;
481 gchar* _tmp9_ = NULL;
482 _tmp6_ = (GtkButton*) gtk_button_new ();
483 find = g_object_ref_sink (_tmp6_);
484 _tmp7_ = (GtkImage*) gtk_image_new_from_stock ("gtk-find", GTK_ICON_SIZE_MENU);
485 _tmp8_ = g_object_ref_sink (_tmp7_);
486 gtk_container_add ((GtkContainer*) find, (GtkWidget*) _tmp8_);
487 _g_object_unref0 (_tmp8_);
488 gtk_button_set_relief (find, GTK_RELIEF_NONE);
489 gtk_box_pack_start ((GtkBox*) hbox, (GtkWidget*) find, FALSE, FALSE, (guint) 0);
490 _tmp9_ = g_strdup_printf ("%s", artist);
491 g_object_set_data_full ((GObject*) find, "artist", (void*) _tmp9_, (GDestroyNotify) g_free);
492 g_signal_connect_object (find, "clicked", (GCallback) _gmpc_meta_data_widgets_similar_artists_artist_button_clicked_gtk_button_clicked, self, 0);
493 _g_object_unref0 (find);
494 }
495 gtk_container_add ((GtkContainer*) event, (GtkWidget*) hbox);
496 result = (GtkWidget*) event;
497 _g_object_unref0 (label);
498 _mpd_freeSong0 (song);
499 _g_object_unref0 (image);
500 _g_object_unref0 (hbox);
501 return result;
502 }
503
504
_gmpc_meta_data_widgets_similar_artists_metadata_changed_gmpc_meta_watcher_data_changed(GmpcMetaWatcher * _sender,const mpd_Song * song,MetaDataType type,MetaDataResult _result_,const MetaData * met,gpointer self)505 static void _gmpc_meta_data_widgets_similar_artists_metadata_changed_gmpc_meta_watcher_data_changed (GmpcMetaWatcher* _sender, const mpd_Song* song, MetaDataType type, MetaDataResult _result_, const MetaData* met, gpointer self) {
506 gmpc_meta_data_widgets_similar_artists_metadata_changed (self, _sender, song, type, _result_, met);
507 }
508
509
_gmpc_meta_data_widgets_similar_artists_size_changed_gtk_widget_size_allocate(GtkWidget * _sender,GdkRectangle * allocation,gpointer self)510 static void _gmpc_meta_data_widgets_similar_artists_size_changed_gtk_widget_size_allocate (GtkWidget* _sender, GdkRectangle* allocation, gpointer self) {
511 gmpc_meta_data_widgets_similar_artists_size_changed (self, allocation);
512 }
513
514
gmpc_meta_data_widgets_similar_artists_first_show(GmpcMetaDataWidgetsSimilarArtists * self)515 void gmpc_meta_data_widgets_similar_artists_first_show (GmpcMetaDataWidgetsSimilarArtists* self) {
516 g_return_if_fail (self != NULL);
517 g_log (np2_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "gmpc-metadata-similarartists.vala:238: First Show()");
518 if (!self->first_show_b) {
519 MetaData* item;
520 MetaData* _tmp0_ = NULL;
521 MetaDataResult _tmp1_;
522 MetaDataResult gm_result;
523 item = NULL;
524 g_signal_connect_object (gmw, "data-changed", (GCallback) _gmpc_meta_data_widgets_similar_artists_metadata_changed_gmpc_meta_watcher_data_changed, self, 0);
525 g_signal_connect_object ((GtkWidget*) self, "size-allocate", (GCallback) _gmpc_meta_data_widgets_similar_artists_size_changed_gtk_widget_size_allocate, self, 0);
526 _tmp1_ = gmpc_meta_watcher_get_meta_path (gmw, self->priv->song, META_ARTIST_SIMILAR, &_tmp0_);
527 _meta_data_free0 (item);
528 item = _tmp0_;
529 gm_result = _tmp1_;
530 if (gm_result == META_DATA_AVAILABLE) {
531 gmpc_meta_data_widgets_similar_artists_metadata_changed (self, gmw, self->priv->song, META_ARTIST_SIMILAR, gm_result, item);
532 }
533 self->first_show_b = TRUE;
534 _meta_data_free0 (item);
535 }
536 }
537
538
_mpd_songDup0(gpointer self)539 static gpointer _mpd_songDup0 (gpointer self) {
540 return self ? mpd_songDup (self) : NULL;
541 }
542
543
gmpc_meta_data_widgets_similar_artists_construct(GType object_type,MpdObj * server,const mpd_Song * song)544 GmpcMetaDataWidgetsSimilarArtists* gmpc_meta_data_widgets_similar_artists_construct (GType object_type, MpdObj* server, const mpd_Song* song) {
545 GmpcMetaDataWidgetsSimilarArtists * self = NULL;
546 mpd_Song* _tmp0_;
547 g_return_val_if_fail (server != NULL, NULL);
548 g_return_val_if_fail (song != NULL, NULL);
549 self = (GmpcMetaDataWidgetsSimilarArtists*) g_object_new (object_type, NULL);
550 _tmp0_ = _mpd_songDup0 (song);
551 _mpd_freeSong0 (self->priv->song);
552 self->priv->song = _tmp0_;
553 gtk_table_set_homogeneous ((GtkTable*) self, TRUE);
554 gtk_table_set_row_spacings ((GtkTable*) self, (guint) 6);
555 gtk_table_set_col_spacings ((GtkTable*) self, (guint) 6);
556 gtk_widget_show ((GtkWidget*) self);
557 return self;
558 }
559
560
gmpc_meta_data_widgets_similar_artists_new(MpdObj * server,const mpd_Song * song)561 GmpcMetaDataWidgetsSimilarArtists* gmpc_meta_data_widgets_similar_artists_new (MpdObj* server, const mpd_Song* song) {
562 return gmpc_meta_data_widgets_similar_artists_construct (GMPC_META_DATA_WIDGETS_TYPE_SIMILAR_ARTISTS, server, song);
563 }
564
565
gmpc_meta_data_widgets_similar_artists_class_init(GmpcMetaDataWidgetsSimilarArtistsClass * klass)566 static void gmpc_meta_data_widgets_similar_artists_class_init (GmpcMetaDataWidgetsSimilarArtistsClass * klass) {
567 gmpc_meta_data_widgets_similar_artists_parent_class = g_type_class_peek_parent (klass);
568 g_type_class_add_private (klass, sizeof (GmpcMetaDataWidgetsSimilarArtistsPrivate));
569 G_OBJECT_CLASS (klass)->finalize = gmpc_meta_data_widgets_similar_artists_finalize;
570 }
571
572
gmpc_meta_data_widgets_similar_artists_instance_init(GmpcMetaDataWidgetsSimilarArtists * self)573 static void gmpc_meta_data_widgets_similar_artists_instance_init (GmpcMetaDataWidgetsSimilarArtists * self) {
574 self->priv = GMPC_META_DATA_WIDGETS_SIMILAR_ARTISTS_GET_PRIVATE (self);
575 self->priv->song = NULL;
576 self->priv->columns = 1;
577 self->priv->button_width = 200;
578 self->first_show_b = FALSE;
579 }
580
581
gmpc_meta_data_widgets_similar_artists_finalize(GObject * obj)582 static void gmpc_meta_data_widgets_similar_artists_finalize (GObject* obj) {
583 GmpcMetaDataWidgetsSimilarArtists * self;
584 self = GMPC_META_DATA_WIDGETS_SIMILAR_ARTISTS (obj);
585 _mpd_freeSong0 (self->priv->song);
586 G_OBJECT_CLASS (gmpc_meta_data_widgets_similar_artists_parent_class)->finalize (obj);
587 }
588
589
gmpc_meta_data_widgets_similar_artists_get_type(void)590 GType gmpc_meta_data_widgets_similar_artists_get_type (void) {
591 static volatile gsize gmpc_meta_data_widgets_similar_artists_type_id__volatile = 0;
592 if (g_once_init_enter (&gmpc_meta_data_widgets_similar_artists_type_id__volatile)) {
593 static const GTypeInfo g_define_type_info = { sizeof (GmpcMetaDataWidgetsSimilarArtistsClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gmpc_meta_data_widgets_similar_artists_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GmpcMetaDataWidgetsSimilarArtists), 0, (GInstanceInitFunc) gmpc_meta_data_widgets_similar_artists_instance_init, NULL };
594 GType gmpc_meta_data_widgets_similar_artists_type_id;
595 gmpc_meta_data_widgets_similar_artists_type_id = g_type_register_static (GTK_TYPE_TABLE, "GmpcMetaDataWidgetsSimilarArtists", &g_define_type_info, 0);
596 g_once_init_leave (&gmpc_meta_data_widgets_similar_artists_type_id__volatile, gmpc_meta_data_widgets_similar_artists_type_id);
597 }
598 return gmpc_meta_data_widgets_similar_artists_type_id__volatile;
599 }
600
601
602
603