1 /*************************************************************************/
2 /* Copyright (C) 2012-2013 matias <mati86dl@gmail.com>			 */
3 /* 									 */
4 /* This program is free software: you can redistribute it and/or modify	 */
5 /* it under the terms of the GNU General Public License as published by	 */
6 /* the Free Software Foundation, either version 3 of the License, or	 */
7 /* (at your option) any later version.					 */
8 /* 									 */
9 /* This program is distributed in the hope that it will be useful,	 */
10 /* but WITHOUT ANY WARRANTY; without even the implied warranty of	 */
11 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	 */
12 /* GNU General Public License for more details.				 */
13 /* 									 */
14 /* You should have received a copy of the GNU General Public License	 */
15 /* along with this program.  If not, see <http://www.gnu.org/licenses/>. */
16 /*************************************************************************/
17 
18 #include "pragha-musicobject.h"
19 
20 G_DEFINE_TYPE(PraghaMusicobject, pragha_musicobject, G_TYPE_OBJECT)
21 
22 struct _PraghaMusicobjectPrivate
23 {
24 	gchar *file;
25 	PraghaMusicSource source;
26 	gchar *mime_type;
27 	gchar *title;
28 	gchar *artist;
29 	gchar *album;
30 	gchar *genre;
31 	gchar *comment;
32 	guint year;
33 	guint track_no;
34 	gint length;
35 	gint bitrate;
36 	gint channels;
37 	gint samplerate;
38 };
39 
40 enum
41 {
42 	PROP_0,
43 	PROP_FILE,
44 	PROP_SOURCE,
45 	PROP_MIME_TYPE,
46 	PROP_TITLE,
47 	PROP_ARTIST,
48 	PROP_ALBUM,
49 	PROP_GENRE,
50 	PROP_COMMENT,
51 	PROP_YEAR,
52 	PROP_TRACK_NO,
53 	PROP_LENGTH,
54 	PROP_BITRATE,
55 	PROP_CHANNELS,
56 	PROP_SAMPLERATE,
57 	LAST_PROP
58 };
59 
60 static GParamSpec *gParamSpecs[LAST_PROP];
61 
62 /**
63  * pragha_musicobject_new:
64  *
65  */
66 PraghaMusicobject *
pragha_musicobject_new(void)67 pragha_musicobject_new (void)
68 {
69 	return g_object_new (PRAGHA_TYPE_MUSICOBJECT, NULL);
70 }
71 
72 /**
73  * pragha_musicobject_dup:
74  *
75  */
76 PraghaMusicobject *
pragha_musicobject_dup(PraghaMusicobject * musicobject)77 pragha_musicobject_dup (PraghaMusicobject *musicobject)
78 {
79 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), NULL);
80 
81 	return g_object_new (PRAGHA_TYPE_MUSICOBJECT,
82 	                     "file", pragha_musicobject_get_file(musicobject),
83 	                     "source", pragha_musicobject_get_source (musicobject),
84 	                     "mime-type", pragha_musicobject_get_mime_type(musicobject),
85 	                     "title", pragha_musicobject_get_title(musicobject),
86 	                     "artist", pragha_musicobject_get_artist(musicobject),
87 	                     "album", pragha_musicobject_get_album(musicobject),
88 	                     "genre", pragha_musicobject_get_genre(musicobject),
89 	                     "comment", pragha_musicobject_get_comment(musicobject),
90 	                     "year", pragha_musicobject_get_year(musicobject),
91 	                     "track-no", pragha_musicobject_get_track_no(musicobject),
92 	                     "length", pragha_musicobject_get_length(musicobject),
93 	                     "bitrate", pragha_musicobject_get_bitrate(musicobject),
94 	                     "channels", pragha_musicobject_get_channels(musicobject),
95 	                     "samplerate", pragha_musicobject_get_samplerate(musicobject),
96 	                     NULL);
97 }
98 
99 /**
100  * pragha_musicobject_clean:
101  *
102  */
103 void
pragha_musicobject_clean(PraghaMusicobject * musicobject)104 pragha_musicobject_clean (PraghaMusicobject *musicobject)
105 {
106 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
107 
108 	g_object_set (musicobject,
109 	              "file", "",
110 	              "source", FILE_NONE,
111 	              "mime-type", "",
112 	              "title", "",
113 	              "artist", "",
114 	              "album", "",
115 	              "genre", "",
116 	              "comment", "",
117 	              "year", 0,
118 	              "track-no", 0,
119 	              "length", 0,
120 	              "bitrate", 0,
121 	              "channels", 0,
122 	              "samplerate", 0,
123 	              NULL);
124 }
125 
126 /**
127  * pragha_musicobject_compare:
128  *
129  */
130 gint
pragha_musicobject_compare(PraghaMusicobject * a,PraghaMusicobject * b)131 pragha_musicobject_compare (PraghaMusicobject *a, PraghaMusicobject *b)
132 {
133 	/* First compare the pointers */
134 	if(a == b)
135 		return 0;
136 
137 	/* Then compare filenames. */
138 	return g_strcmp0(pragha_musicobject_get_file(a),
139 	                 pragha_musicobject_get_file(b));
140 }
141 
142 /**
143  * pragha_musicobject_get_file:
144  *
145  */
146 const gchar *
pragha_musicobject_get_file(PraghaMusicobject * musicobject)147 pragha_musicobject_get_file (PraghaMusicobject *musicobject)
148 {
149 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), NULL);
150 
151 	return musicobject->priv->file;
152 }
153 
154 /**
155  * pragha_musicobject_set_file:
156  *
157  */
158 void
pragha_musicobject_set_file(PraghaMusicobject * musicobject,const gchar * file)159 pragha_musicobject_set_file (PraghaMusicobject *musicobject,
160                              const gchar *file)
161 {
162 	PraghaMusicobjectPrivate *priv;
163 
164 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
165 
166 	priv = musicobject->priv;
167 
168 	g_free(priv->file);
169 	priv->file = g_strdup(file);
170 }
171 
172 /**
173  * pragha_musicobject_is_local_file:
174  *
175  */
176 gboolean
pragha_musicobject_is_local_file(PraghaMusicobject * musicobject)177 pragha_musicobject_is_local_file (PraghaMusicobject *musicobject)
178 {
179 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), FALSE);
180 
181 	PraghaMusicSource source = musicobject->priv->source;
182 
183 	return (source == FILE_LOCAL);
184 }
185 
186 /**
187  * pragha_musicobject_get_source:
188  *
189  */
190 PraghaMusicSource
pragha_musicobject_get_source(PraghaMusicobject * musicobject)191 pragha_musicobject_get_source (PraghaMusicobject *musicobject)
192 {
193 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), FILE_NONE);
194 
195 	return musicobject->priv->source;
196 }
197 /**
198  * pragha_musicobject_set_source:
199  *
200  */
201 void
pragha_musicobject_set_source(PraghaMusicobject * musicobject,PraghaMusicSource source)202 pragha_musicobject_set_source (PraghaMusicobject *musicobject,
203                                PraghaMusicSource  source)
204 {
205 	PraghaMusicobjectPrivate *priv;
206 
207 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
208 
209 	priv = musicobject->priv;
210 
211 	priv->source = source;
212 }
213 
214 /**
215  * pragha_musicobject_get_mime_type:
216  *
217  */
218 const gchar *
pragha_musicobject_get_mime_type(PraghaMusicobject * musicobject)219 pragha_musicobject_get_mime_type (PraghaMusicobject *musicobject)
220 {
221 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), NULL);
222 
223 	return musicobject->priv->mime_type;
224 }
225 /**
226  * pragha_musicobject_set_mime_type:
227  *
228  */
229 void
pragha_musicobject_set_mime_type(PraghaMusicobject * musicobject,const gchar * mime_type)230 pragha_musicobject_set_mime_type (PraghaMusicobject *musicobject,
231                                   const gchar       *mime_type)
232 {
233 	PraghaMusicobjectPrivate *priv;
234 
235 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
236 
237 	priv = musicobject->priv;
238 
239 	g_free (priv->mime_type);
240 	priv->mime_type = g_strdup(mime_type);
241 }
242 
243 /**
244  * pragha_musicobject_get_title:
245  *
246  */
247 const gchar *
pragha_musicobject_get_title(PraghaMusicobject * musicobject)248 pragha_musicobject_get_title (PraghaMusicobject *musicobject)
249 {
250 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), NULL);
251 
252 	return musicobject->priv->title;
253 }
254 /**
255  * pragha_musicobject_set_title:
256  *
257  */
258 void
pragha_musicobject_set_title(PraghaMusicobject * musicobject,const gchar * title)259 pragha_musicobject_set_title (PraghaMusicobject *musicobject,
260                               const gchar *title)
261 {
262 	PraghaMusicobjectPrivate *priv;
263 
264 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
265 
266 	priv = musicobject->priv;
267 
268 	g_free(priv->title);
269 	priv->title = g_strdup(title);
270 }
271 
272 /**
273  * pragha_musicobject_get_artist:
274  *
275  */
276 const gchar *
pragha_musicobject_get_artist(PraghaMusicobject * musicobject)277 pragha_musicobject_get_artist (PraghaMusicobject *musicobject)
278 {
279 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), NULL);
280 
281 	return musicobject->priv->artist;
282 }
283 /**
284  * pragha_musicobject_set_artist:
285  *
286  */
287 void
pragha_musicobject_set_artist(PraghaMusicobject * musicobject,const gchar * artist)288 pragha_musicobject_set_artist (PraghaMusicobject *musicobject,
289                                const gchar *artist)
290 {
291 	PraghaMusicobjectPrivate *priv;
292 
293 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
294 
295 	priv = musicobject->priv;
296 
297 	g_free(priv->artist);
298 	priv->artist = g_strdup(artist);
299 }
300 
301 /**
302  * pragha_musicobject_get_album:
303  *
304  */
305 const gchar *
pragha_musicobject_get_album(PraghaMusicobject * musicobject)306 pragha_musicobject_get_album (PraghaMusicobject *musicobject)
307 {
308 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), NULL);
309 
310 	return musicobject->priv->album;
311 }
312 /**
313  * pragha_musicobject_set_album:
314  *
315  */
316 void
pragha_musicobject_set_album(PraghaMusicobject * musicobject,const gchar * album)317 pragha_musicobject_set_album (PraghaMusicobject *musicobject,
318                               const gchar *album)
319 {
320 	PraghaMusicobjectPrivate *priv;
321 
322 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
323 
324 	priv = musicobject->priv;
325 
326 	g_free(priv->album);
327 	priv->album = g_strdup(album);
328 }
329 
330 /**
331  * pragha_musicobject_get_genre:
332  *
333  */
334 const gchar *
pragha_musicobject_get_genre(PraghaMusicobject * musicobject)335 pragha_musicobject_get_genre (PraghaMusicobject *musicobject)
336 {
337 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), NULL);
338 
339 	return musicobject->priv->genre;
340 }
341 /**
342  * pragha_musicobject_set_genre:
343  *
344  */
345 void
pragha_musicobject_set_genre(PraghaMusicobject * musicobject,const gchar * genre)346 pragha_musicobject_set_genre (PraghaMusicobject *musicobject,
347                               const gchar *genre)
348 {
349 	PraghaMusicobjectPrivate *priv;
350 
351 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
352 
353 	priv = musicobject->priv;
354 
355 	g_free(priv->genre);
356 	priv->genre = g_strdup(genre);
357 }
358 
359 /**
360  * pragha_musicobject_get_comment:
361  *
362  */
363 const gchar *
pragha_musicobject_get_comment(PraghaMusicobject * musicobject)364 pragha_musicobject_get_comment (PraghaMusicobject *musicobject)
365 {
366 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), NULL);
367 
368 	return musicobject->priv->comment;
369 }
370 /**
371  * pragha_musicobject_set_comment:
372  *
373  */
374 void
pragha_musicobject_set_comment(PraghaMusicobject * musicobject,const gchar * comment)375 pragha_musicobject_set_comment (PraghaMusicobject *musicobject,
376                                 const gchar *comment)
377 {
378 	PraghaMusicobjectPrivate *priv;
379 
380 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
381 
382 	priv = musicobject->priv;
383 
384 	g_free(priv->comment);
385 	priv->comment = g_strdup(comment);
386 }
387 
388 /**
389  * pragha_musicobject_get_year:
390  *
391  */
392 guint
pragha_musicobject_get_year(PraghaMusicobject * musicobject)393 pragha_musicobject_get_year (PraghaMusicobject *musicobject)
394 {
395 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), 0);
396 
397 	return musicobject->priv->year;
398 }
399 /**
400  * pragha_musicobject_set_year:
401  *
402  */
403 void
pragha_musicobject_set_year(PraghaMusicobject * musicobject,guint year)404 pragha_musicobject_set_year (PraghaMusicobject *musicobject,
405                              guint year)
406 {
407 	PraghaMusicobjectPrivate *priv;
408 
409 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
410 
411 	priv = musicobject->priv;
412 
413 	priv->year = year;
414 }
415 
416 /**
417  * pragha_musicobject_get_track_no:
418  *
419  */
420 guint
pragha_musicobject_get_track_no(PraghaMusicobject * musicobject)421 pragha_musicobject_get_track_no (PraghaMusicobject *musicobject)
422 {
423 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), 0);
424 
425 	return musicobject->priv->track_no;
426 }
427 /**
428  * pragha_musicobject_set_track_no:
429  *
430  */
431 void
pragha_musicobject_set_track_no(PraghaMusicobject * musicobject,guint track_no)432 pragha_musicobject_set_track_no (PraghaMusicobject *musicobject,
433                                  guint track_no)
434 {
435 	PraghaMusicobjectPrivate *priv;
436 
437 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
438 
439 	priv = musicobject->priv;
440 
441 	priv->track_no = track_no;
442 }
443 
444 /**
445  * pragha_musicobject_get_length:
446  *
447  */
448 gint
pragha_musicobject_get_length(PraghaMusicobject * musicobject)449 pragha_musicobject_get_length (PraghaMusicobject *musicobject)
450 {
451 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), 0);
452 
453 	return musicobject->priv->length;
454 }
455 /**
456  * pragha_musicobject_set_length:
457  *
458  */
459 void
pragha_musicobject_set_length(PraghaMusicobject * musicobject,gint length)460 pragha_musicobject_set_length (PraghaMusicobject *musicobject,
461                                gint length)
462 {
463 	PraghaMusicobjectPrivate *priv;
464 
465 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
466 
467 	priv = musicobject->priv;
468 
469 	priv->length = length;
470 }
471 
472 /**
473  * pragha_musicobject_get_bitrate:
474  *
475  */
476 gint
pragha_musicobject_get_bitrate(PraghaMusicobject * musicobject)477 pragha_musicobject_get_bitrate (PraghaMusicobject *musicobject)
478 {
479 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), 0);
480 
481 	return musicobject->priv->bitrate;
482 }
483 /**
484  * pragha_musicobject_set_bitrate:
485  *
486  */
487 void
pragha_musicobject_set_bitrate(PraghaMusicobject * musicobject,gint bitrate)488 pragha_musicobject_set_bitrate (PraghaMusicobject *musicobject,
489                                 gint bitrate)
490 {
491 	PraghaMusicobjectPrivate *priv;
492 
493 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
494 
495 	priv = musicobject->priv;
496 
497 	priv->bitrate = bitrate;
498 }
499 
500 /**
501  * pragha_musicobject_get_channels:
502  *
503  */
504 gint
pragha_musicobject_get_channels(PraghaMusicobject * musicobject)505 pragha_musicobject_get_channels (PraghaMusicobject *musicobject)
506 {
507 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), 0);
508 
509 	return musicobject->priv->channels;
510 }
511 /**
512  * pragha_musicobject_set_channels:
513  *
514  */
515 void
pragha_musicobject_set_channels(PraghaMusicobject * musicobject,gint channels)516 pragha_musicobject_set_channels (PraghaMusicobject *musicobject,
517                                  gint channels)
518 {
519 	PraghaMusicobjectPrivate *priv;
520 
521 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
522 
523 	priv = musicobject->priv;
524 
525 	priv->channels = channels;
526 }
527 
528 /**
529  * pragha_musicobject_get_samplerate:
530  *
531  */
532 gint
pragha_musicobject_get_samplerate(PraghaMusicobject * musicobject)533 pragha_musicobject_get_samplerate (PraghaMusicobject *musicobject)
534 {
535 	g_return_val_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject), 0);
536 
537 	return musicobject->priv->samplerate;
538 }
539 /**
540  * pragha_musicobject_set_samplerate:
541  *
542  */
543 void
pragha_musicobject_set_samplerate(PraghaMusicobject * musicobject,gint samplerate)544 pragha_musicobject_set_samplerate (PraghaMusicobject *musicobject,
545                                    gint samplerate)
546 {
547 	PraghaMusicobjectPrivate *priv;
548 
549 	g_return_if_fail(PRAGHA_IS_MUSICOBJECT(musicobject));
550 
551 	priv = musicobject->priv;
552 
553 	priv->samplerate = samplerate;
554 }
555 
556 static void
pragha_musicobject_finalize(GObject * object)557 pragha_musicobject_finalize (GObject *object)
558 {
559 	PraghaMusicobjectPrivate *priv;
560 
561 	priv = PRAGHA_MUSICOBJECT(object)->priv;
562 
563 	g_free(priv->file);
564 	g_free(priv->mime_type);
565 	g_free(priv->title);
566 	g_free(priv->artist);
567 	g_free(priv->album);
568 	g_free(priv->genre);
569 	g_free(priv->comment);
570 
571 	G_OBJECT_CLASS(pragha_musicobject_parent_class)->finalize(object);
572 }
573 
574 static void
pragha_musicobject_get_property(GObject * object,guint prop_id,GValue * value,GParamSpec * pspec)575 pragha_musicobject_get_property (GObject *object,
576                                  guint prop_id,
577                                  GValue *value,
578                                  GParamSpec *pspec)
579 {
580 	PraghaMusicobject *musicobject = PRAGHA_MUSICOBJECT(object);
581 
582 	switch (prop_id) {
583 	case PROP_FILE:
584 		g_value_set_string (value, pragha_musicobject_get_file(musicobject));
585 		break;
586 	case PROP_SOURCE:
587 		g_value_set_int(value, pragha_musicobject_get_source(musicobject));
588 		break;
589 	case PROP_MIME_TYPE:
590 		g_value_set_string (value, pragha_musicobject_get_mime_type(musicobject));
591 		break;
592 	case PROP_TITLE:
593 		g_value_set_string (value, pragha_musicobject_get_title(musicobject));
594 		break;
595 	case PROP_ARTIST:
596 		g_value_set_string (value, pragha_musicobject_get_artist(musicobject));
597 		break;
598 	case PROP_ALBUM:
599 		g_value_set_string (value, pragha_musicobject_get_album(musicobject));
600 		break;
601 	case PROP_GENRE:
602 		g_value_set_string (value, pragha_musicobject_get_genre(musicobject));
603 		break;
604 	case PROP_COMMENT:
605 		g_value_set_string (value, pragha_musicobject_get_comment(musicobject));
606 		break;
607 	case PROP_YEAR:
608 		g_value_set_uint (value, pragha_musicobject_get_year(musicobject));
609 		break;
610 	case PROP_TRACK_NO:
611 		g_value_set_uint (value, pragha_musicobject_get_track_no(musicobject));
612 		break;
613 	case PROP_LENGTH:
614 		g_value_set_int(value, pragha_musicobject_get_length(musicobject));
615 		break;
616 	case PROP_BITRATE:
617 		g_value_set_int(value, pragha_musicobject_get_bitrate(musicobject));
618 		break;
619 	case PROP_CHANNELS:
620 		g_value_set_int(value, pragha_musicobject_get_channels(musicobject));
621 		break;
622 	case PROP_SAMPLERATE:
623 		g_value_set_int(value, pragha_musicobject_get_samplerate(musicobject));
624 		break;
625 	default:
626 		G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
627 	}
628 }
629 
630 static void
pragha_musicobject_set_property(GObject * object,guint prop_id,const GValue * value,GParamSpec * pspec)631 pragha_musicobject_set_property (GObject *object,
632                                  guint prop_id,
633                                  const GValue *value,
634                                  GParamSpec *pspec)
635 {
636 	PraghaMusicobject *musicobject = PRAGHA_MUSICOBJECT(object);
637 
638 	switch (prop_id) {
639 	case PROP_FILE:
640 		pragha_musicobject_set_file(musicobject, g_value_get_string(value));
641 		break;
642 	case PROP_SOURCE:
643 		pragha_musicobject_set_source(musicobject, g_value_get_int(value));
644 		break;
645 	case PROP_MIME_TYPE:
646 		pragha_musicobject_set_mime_type(musicobject, g_value_get_string(value));
647 		break;
648 	case PROP_TITLE:
649 		pragha_musicobject_set_title(musicobject, g_value_get_string(value));
650 		break;
651 	case PROP_ARTIST:
652 		pragha_musicobject_set_artist(musicobject, g_value_get_string(value));
653 		break;
654 	case PROP_ALBUM:
655 		pragha_musicobject_set_album(musicobject, g_value_get_string(value));
656 		break;
657 	case PROP_GENRE:
658 		pragha_musicobject_set_genre(musicobject, g_value_get_string(value));
659 		break;
660 	case PROP_COMMENT:
661 		pragha_musicobject_set_comment(musicobject, g_value_get_string(value));
662 		break;
663 	case PROP_YEAR:
664 		pragha_musicobject_set_year(musicobject, g_value_get_uint(value));
665 		break;
666 	case PROP_TRACK_NO:
667 		pragha_musicobject_set_track_no(musicobject, g_value_get_uint(value));
668 		break;
669 	case PROP_LENGTH:
670 		pragha_musicobject_set_length(musicobject, g_value_get_int(value));
671 		break;
672 	case PROP_BITRATE:
673 		pragha_musicobject_set_bitrate(musicobject, g_value_get_int(value));
674 		break;
675 	case PROP_CHANNELS:
676 		pragha_musicobject_set_channels(musicobject, g_value_get_int(value));
677 		break;
678 	case PROP_SAMPLERATE:
679 		pragha_musicobject_set_samplerate(musicobject, g_value_get_int(value));
680 		break;
681 	default:
682 		G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
683    }
684 }
685 
686 static void
pragha_musicobject_class_init(PraghaMusicobjectClass * klass)687 pragha_musicobject_class_init (PraghaMusicobjectClass *klass)
688 {
689 	GObjectClass *object_class;
690 
691 	object_class = G_OBJECT_CLASS(klass);
692 	object_class->finalize = pragha_musicobject_finalize;
693 	object_class->get_property = pragha_musicobject_get_property;
694 	object_class->set_property = pragha_musicobject_set_property;
695 	g_type_class_add_private(object_class, sizeof(PraghaMusicobjectPrivate));
696 
697 	/**
698 	  * PraghaMusicobject:file:
699 	  *
700 	  */
701 	gParamSpecs[PROP_FILE] =
702 		g_param_spec_string("file",
703 		                    "File",
704 		                    "The File",
705 		                    "",
706 		                    PRAGHA_MUSICOBJECT_PARAM_STRING);
707 
708 	/**
709 	  * PraghaMusicobject:source:
710 	  *
711 	  */
712 	gParamSpecs[PROP_SOURCE] =
713 		g_param_spec_int ("source",
714 		                  "Source",
715 		                  "Source of file",
716 		                  FILE_HTTP,
717 		                  FILE_USER_L,
718 		                  FILE_NONE,
719 		                  G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
720 
721 	/**
722 	  * PraghaMusicobject:mime_type:
723 	  *
724 	  */
725 	gParamSpecs[PROP_MIME_TYPE] =
726 		g_param_spec_string("mime-type",
727 		                    "MimeType",
728 		                    "The MimeType",
729 		                    "",
730 		                    PRAGHA_MUSICOBJECT_PARAM_STRING);
731 
732 	/**
733 	  * PraghaMusicobject:title:
734 	  *
735 	  */
736 	gParamSpecs[PROP_TITLE] =
737 		g_param_spec_string("title",
738 		                    "Title",
739 		                    "The Title",
740 		                    "",
741 		                    PRAGHA_MUSICOBJECT_PARAM_STRING);
742 
743 	/**
744 	  * PraghaMusicobject:artist:
745 	  *
746 	  */
747 	gParamSpecs[PROP_ARTIST] =
748 		g_param_spec_string("artist",
749 		                    "Artist",
750 		                    "The Artist",
751 		                    "",
752 		                    PRAGHA_MUSICOBJECT_PARAM_STRING);
753 
754 	/**
755 	  * PraghaMusicobject:album:
756 	  *
757 	  */
758 	gParamSpecs[PROP_ALBUM] =
759 		g_param_spec_string("album",
760 		                    "Album",
761 		                    "The Album",
762 		                    "",
763 		                    PRAGHA_MUSICOBJECT_PARAM_STRING);
764 
765 	/**
766 	  * PraghaMusicobject:genre:
767 	  *
768 	  */
769 	gParamSpecs[PROP_GENRE] =
770 		g_param_spec_string("genre",
771 		                    "Genre",
772 		                    "The Genre",
773 		                    "",
774 		                    PRAGHA_MUSICOBJECT_PARAM_STRING);
775 
776 	/**
777 	  * PraghaMusicobject:comment:
778 	  *
779 	  */
780 	gParamSpecs[PROP_COMMENT] =
781 		g_param_spec_string("comment",
782 		                    "Comment",
783 		                    "The Comment",
784 		                    "",
785 		                    PRAGHA_MUSICOBJECT_PARAM_STRING);
786 
787 	/**
788 	  * PraghaMusicobject:year:
789 	  *
790 	  */
791 	gParamSpecs[PROP_YEAR] =
792 		g_param_spec_uint ("year",
793 		                   "Year",
794 		                   "The Year",
795 		                   0,
796 		                   G_MAXUINT,
797 		                   0,
798 		                   G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
799 
800 	/**
801 	  * PraghaMusicobject:track_no:
802 	  *
803 	  */
804 	gParamSpecs[PROP_TRACK_NO] =
805 		g_param_spec_uint ("track-no",
806 		                   "TrackNo",
807 		                   "The Track No",
808 		                   0,
809 		                   G_MAXUINT,
810 		                   0,
811 		                   G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
812 
813 	/**
814 	  * PraghaMusicobject:length:
815 	  *
816 	  */
817 	gParamSpecs[PROP_LENGTH] =
818 		g_param_spec_int ("length",
819 		                  "Length",
820 		                  "The Length",
821 		                  0,
822 		                  G_MAXINT,
823 		                  0,
824 		                  G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
825 
826 	/**
827 	  * PraghaMusicobject:bitrate:
828 	  *
829 	  */
830 	gParamSpecs[PROP_BITRATE] =
831 		g_param_spec_int ("bitrate",
832 		                  "Bitrate",
833 		                  "The Bitrate",
834 		                  0,
835 		                  G_MAXINT,
836 		                  0,
837 		                  G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
838 
839 	/**
840 	  * PraghaMusicobject:channels:
841 	  *
842 	  */
843 	gParamSpecs[PROP_CHANNELS] =
844 		g_param_spec_int ("channels",
845 		                  "Channels",
846 		                  "The Channels",
847 		                  0,
848 		                  G_MAXINT,
849 		                  0,
850 		                  G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
851 
852 	/**
853 	  * PraghaMusicobject:samplerate:
854 	  *
855 	  */
856 	gParamSpecs[PROP_SAMPLERATE] =
857 		g_param_spec_int ("samplerate",
858 		                  "Samplerate",
859 		                  "The Samplerate",
860 		                  0,
861 		                  G_MAXINT,
862 		                  0,
863 		                  G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
864 
865 	g_object_class_install_properties(object_class, LAST_PROP, gParamSpecs);
866 }
867 
868 static void
pragha_musicobject_init(PraghaMusicobject * musicobject)869 pragha_musicobject_init (PraghaMusicobject *musicobject)
870 {
871    musicobject->priv = G_TYPE_INSTANCE_GET_PRIVATE(musicobject,
872                                                    PRAGHA_TYPE_MUSICOBJECT,
873                                                    PraghaMusicobjectPrivate);
874 }
875