~ubuntu-branches/ubuntu/wily/grilo/wily

« back to all changes in this revision

Viewing changes to src/grl-source.c

  • Committer: Package Import Robot
  • Author(s): Alberto Garcia
  • Date: 2014-03-19 16:12:33 UTC
  • mfrom: (1.2.5)
  • Revision ID: package-import@ubuntu.com-20140319161233-03kxmz2x6btjv2tg
Tags: 0.2.10-1
* New upstream release.
* debian/control: update build dependency on libglib2.0-dev to 2.34.
* debian/libgrilo-0.2-1.symbols: update.

Show diffs side-by-side

added added

removed removed

Lines of Context:
68
68
  PROP_PLUGIN,
69
69
  PROP_RANK,
70
70
  PROP_AUTO_SPLIT_THRESHOLD,
71
 
  PROP_SUPPORTED_MEDIA
 
71
  PROP_SUPPORTED_MEDIA,
 
72
  PROP_SOURCE_TAGS
72
73
};
73
74
 
74
75
enum {
76
77
  SIG_LAST
77
78
};
78
79
 
79
 
static gint registry_signals[SIG_LAST];
 
80
static gint source_signals[SIG_LAST];
80
81
 
81
82
typedef void (*MediaDecorateCb) (GrlMedia *media,
82
83
                                 gpointer user_data,
91
92
  guint auto_split_threshold;
92
93
  GrlPlugin *plugin;
93
94
  GIcon *icon;
 
95
  GPtrArray *tags;
94
96
};
95
97
 
96
98
typedef struct {
407
409
                                                       G_PARAM_STATIC_STRINGS));
408
410
 
409
411
  /**
 
412
   * GrlSource:source-tags:
 
413
   *
 
414
   * A string array of tags relevant this source.
 
415
   *
 
416
   * The tags are arbitrary, and applications should just pass over the tags
 
417
   * it does not understand. Applications would usually use this to either
 
418
   * group sources together, or hide certain sources: a radio application
 
419
   * would filter for %GRL_MEDIA_TYPE_AUDIO in GrlSource::supported-media as
 
420
   * well as "radio" being listed in the tags.
 
421
   *
 
422
   * To avoid irrelevant content being listed in applications, sources
 
423
   * such as generic video sites should not be tagged as "cinema" or
 
424
   * "tv" as they contain a lot of content that's not either of those.
 
425
   *
 
426
   * This is a list of commonly used values:
 
427
   *
 
428
   * - "cinema", or "tv"
 
429
   *   The content served is from cinema or TV sources. For example, a
 
430
   *   source for movie trailers would select the former, a source for
 
431
   *   streaming live TV would select the latter.
 
432
   *
 
433
   * - "radio"
 
434
   *   The content served is from streaming radios.
 
435
   *
 
436
   * - "music"
 
437
   *   The content served is music, for example, music stores such as
 
438
   *   Jamendo or Magnatune.
 
439
   *
 
440
   * - "country:country-code"
 
441
   *   The content is mostly relevant to users from a particular country,
 
442
   *   such as a national broadcaster. For example, BBC content would be
 
443
   *   tagged as "country:uk". Country codes should be an ISO-639-1 or
 
444
   *   ISO-639-2 code.
 
445
   *
 
446
   * - "protocol:protocol-name"
 
447
   *   The content browsing or searching uses a particular protocol, such
 
448
   *   as DLNA/UPnP or DMAP/DAAP. This makes it easier to whitelist or
 
449
   *   blacklist sources rather than matching the implementation specific
 
450
   *   source ID. Examples are "protocol:dlna" and "protocol:dmap".
 
451
   *
 
452
   * - "localhost", or "localuser"
 
453
   *   The content is served from the machine the application is running on,
 
454
   *   or by an application the user is running. Applications might choose to
 
455
   *   avoid showing the user's own data in their interfaces, or integrate it
 
456
   *   in the user's local collection.
 
457
   *
 
458
   * Since: 0.2.10
 
459
   */
 
460
  g_object_class_install_property (gobject_class,
 
461
                                   PROP_SOURCE_TAGS,
 
462
                                   g_param_spec_boxed ("source-tags",
 
463
                                                       "Tags",
 
464
                                                       "String array of tags relevant this source",
 
465
                                                       G_TYPE_STRV,
 
466
                                                       G_PARAM_READWRITE |
 
467
                                                       G_PARAM_CONSTRUCT |
 
468
                                                       G_PARAM_STATIC_STRINGS));
 
469
 
 
470
  /**
410
471
   * GrlSource::content-changed:
411
472
   * @source: source that has changed
412
473
   * @changed_medias: (element-type GrlMedia): a #GPtrArray with the medias
432
493
   *
433
494
   * Since: 0.2.0
434
495
   */
435
 
  registry_signals[SIG_CONTENT_CHANGED] =
 
496
  source_signals[SIG_CONTENT_CHANGED] =
436
497
    g_signal_new("content-changed",
437
498
                 G_TYPE_FROM_CLASS (gobject_class),
438
499
                 G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
454
515
grl_source_init (GrlSource *source)
455
516
{
456
517
  source->priv = GRL_SOURCE_GET_PRIVATE (source);
 
518
  source->priv->tags = g_ptr_array_new_with_free_func (g_free);
457
519
}
458
520
 
459
521
static void
472
534
  GrlSource *source = GRL_SOURCE (object);
473
535
 
474
536
  g_clear_object (&source->priv->icon);
 
537
  g_clear_pointer (&source->priv->tags, g_ptr_array_unref);
475
538
  g_free (source->priv->id);
476
539
  g_free (source->priv->name);
477
540
  g_free (source->priv->desc);
482
545
static void
483
546
set_string_property (gchar **property, const GValue *value)
484
547
{
485
 
  if (*property) {
486
 
    g_free (*property);
487
 
  }
 
548
  g_clear_pointer (property, g_free);
488
549
  *property = g_value_dup_string (value);
489
550
}
490
551
 
491
552
static void
 
553
grl_source_set_tags (GrlSource   *source,
 
554
                     const char **strv)
 
555
{
 
556
  guint i;
 
557
 
 
558
  g_ptr_array_set_size (source->priv->tags, 0);
 
559
  if (strv == NULL)
 
560
    return;
 
561
 
 
562
  for (i = 0; strv[i] != NULL; i++)
 
563
    g_ptr_array_add (source->priv->tags, g_strdup (strv[i]));
 
564
  g_ptr_array_add (source->priv->tags, NULL);
 
565
}
 
566
 
 
567
static void
492
568
grl_source_set_property (GObject *object,
493
569
                         guint prop_id,
494
570
                         const GValue *value,
523
599
  case PROP_SUPPORTED_MEDIA:
524
600
    source->priv->supported_media = g_value_get_flags (value);
525
601
    break;
 
602
  case PROP_SOURCE_TAGS:
 
603
    grl_source_set_tags (source, g_value_get_boxed (value));
 
604
    break;
526
605
  default:
527
606
    G_OBJECT_WARN_INVALID_PROPERTY_ID (source, prop_id, pspec);
528
607
    break;
564
643
  case PROP_SUPPORTED_MEDIA:
565
644
    g_value_set_flags (value, source->priv->supported_media);
566
645
    break;
 
646
  case PROP_SOURCE_TAGS:
 
647
    g_value_set_boxed (value, source->priv->tags->pdata);
 
648
    break;
567
649
  default:
568
650
    G_OBJECT_WARN_INVALID_PROPERTY_ID (source, prop_id, pspec);
569
651
    break;
1094
1176
    }
1095
1177
    g_hash_table_unref (rrc->map);
1096
1178
  }
1097
 
 
1098
 
  if (rrc->resolve_specs)
1099
 
    g_hash_table_unref (rrc->resolve_specs);
 
1179
  g_clear_pointer (&rrc->resolve_specs, g_hash_table_unref);
1100
1180
 
1101
1181
  g_slice_free (struct ResolveRelayCb, rrc);
1102
1182
}
1110
1190
  if (brc->auto_split) {
1111
1191
    g_slice_free (struct AutoSplitCtl, brc->auto_split);
1112
1192
  }
1113
 
  if (brc->queue) {
1114
 
    g_queue_free (brc->queue);
1115
 
  }
 
1193
  g_clear_pointer (&brc->queue, g_queue_free);
 
1194
 
1116
1195
  g_slice_free (struct BrowseRelayCb, brc);
1117
1196
}
1118
1197
 
1933
2012
 
1934
2013
    rrc->specs_to_invoke = g_hash_table_get_values (rrc->resolve_specs);
1935
2014
    if (rrc->specs_to_invoke) {
1936
 
      g_idle_add_full (grl_operation_options_get_flags (rrc->options) & GRL_RESOLVE_IDLE_RELAY?
1937
 
                       G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
1938
 
                       resolve_idle,
1939
 
                       rrc,
1940
 
                       NULL);
 
2015
      guint id;
 
2016
      id = g_idle_add_full (grl_operation_options_get_flags (rrc->options) & GRL_RESOLVE_IDLE_RELAY?
 
2017
                            G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
 
2018
                            resolve_idle,
 
2019
                            rrc,
 
2020
                            NULL);
 
2021
      g_source_set_name_by_id (id, "[grilo] resolve_idle");
1941
2022
    } else {
1942
 
      g_idle_add_full (grl_operation_options_get_flags (rrc->options) & GRL_RESOLVE_IDLE_RELAY?
1943
 
                       G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
1944
 
                       resolve_all_done,
1945
 
                       rrc,
1946
 
                       NULL);
 
2023
      guint id;
 
2024
      id = g_idle_add_full (grl_operation_options_get_flags (rrc->options) & GRL_RESOLVE_IDLE_RELAY?
 
2025
                            G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
 
2026
                            resolve_all_done,
 
2027
                            rrc,
 
2028
                            NULL);
 
2029
      g_source_set_name_by_id (id, "[grilo] resolve_all_done");
1947
2030
    }
1948
2031
  }
1949
2032
}
2017
2100
  if (!brc->dispatcher_running) {
2018
2101
    qelement = g_queue_peek_head (brc->queue);
2019
2102
    if (qelement && qelement->is_ready) {
2020
 
      g_idle_add (queue_process,  brc);
 
2103
      guint id = g_idle_add (queue_process,  brc);
 
2104
      g_source_set_name_by_id (id, "[grilo] queue_process");
2021
2105
      brc->dispatcher_running = TRUE;
2022
2106
    }
2023
2107
  }
2120
2204
static void
2121
2205
auto_split_run_next_chunk (struct BrowseRelayCb *brc)
2122
2206
{
 
2207
  guint id;
2123
2208
  brc->auto_split->chunk_remaining = MIN (brc->auto_split->threshold,
2124
2209
                                          brc->auto_split->total_remaining);
2125
2210
 
2133
2218
    GRL_DEBUG ("auto-split: requesting chunk (skip=%u, count=%u)",
2134
2219
               grl_operation_options_get_skip (brc->spec.browse->options),
2135
2220
               grl_operation_options_get_count (brc->spec.browse->options));
2136
 
    g_idle_add_full (grl_operation_options_get_flags (brc->options) & GRL_RESOLVE_IDLE_RELAY?
2137
 
                     G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
2138
 
                     browse_idle,
2139
 
                     brc->spec.browse,
2140
 
                     NULL);
 
2221
    id = g_idle_add_full (grl_operation_options_get_flags (brc->options) & GRL_RESOLVE_IDLE_RELAY?
 
2222
                          G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
 
2223
                          browse_idle,
 
2224
                          brc->spec.browse,
 
2225
                          NULL);
 
2226
    g_source_set_name_by_id (id, "[grilo] browse_idle");
2141
2227
    break;
2142
2228
  case GRL_OP_SEARCH:
2143
2229
    grl_operation_options_set_skip (brc->spec.search->options,
2148
2234
    GRL_DEBUG ("auto-split: requesting chunk (skip=%u, count=%u)",
2149
2235
               grl_operation_options_get_skip (brc->spec.search->options),
2150
2236
               grl_operation_options_get_count (brc->spec.search->options));
2151
 
    g_idle_add_full (grl_operation_options_get_flags (brc->options) & GRL_RESOLVE_IDLE_RELAY?
2152
 
                     G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
2153
 
                     search_idle,
2154
 
                     brc->spec.search,
2155
 
                     NULL);
 
2237
    id = g_idle_add_full (grl_operation_options_get_flags (brc->options) & GRL_RESOLVE_IDLE_RELAY?
 
2238
                          G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
 
2239
                          search_idle,
 
2240
                          brc->spec.search,
 
2241
                          NULL);
 
2242
    g_source_set_name_by_id (id, "[grilo] search_idle");
2156
2243
    break;
2157
2244
  case GRL_OP_QUERY:
2158
2245
    grl_operation_options_set_skip (brc->spec.query->options,
2163
2250
    GRL_DEBUG ("auto-split: requesting chunk (skip=%u, count=%u)",
2164
2251
               grl_operation_options_get_skip (brc->spec.query->options),
2165
2252
               grl_operation_options_get_count (brc->spec.query->options));
2166
 
    g_idle_add_full (grl_operation_options_get_flags (brc->options) & GRL_RESOLVE_IDLE_RELAY?
2167
 
                     G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
2168
 
                     query_idle,
2169
 
                     brc->spec.query,
2170
 
                     NULL);
 
2253
    id = g_idle_add_full (grl_operation_options_get_flags (brc->options) & GRL_RESOLVE_IDLE_RELAY?
 
2254
                          G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
 
2255
                          query_idle,
 
2256
                          brc->spec.query,
 
2257
                          NULL);
 
2258
    g_source_set_name_by_id (id, "[grilo] query_idle");
2171
2259
    break;
2172
2260
  default:
2173
2261
    g_assert_not_reached ();
2722
2810
  GList *failed_keys = NULL;
2723
2811
  GError *error;
2724
2812
  struct StoreMetadataRelayCb *smrc;
 
2813
  guint id;
2725
2814
 
2726
2815
  map = map_writable_keys (source, keys, flags, &failed_keys);
2727
2816
 
2750
2839
  smrc->user_callback = callback;
2751
2840
  smrc->user_data = user_data;
2752
2841
 
2753
 
  g_idle_add (store_metadata_idle, smrc);
 
2842
  id = g_idle_add (store_metadata_idle, smrc);
 
2843
  g_source_set_name_by_id (id, "[grilo] store_metadata_idle");
2754
2844
}
2755
2845
 
2756
2846
static gboolean
2913
3003
}
2914
3004
 
2915
3005
/**
 
3006
 * grl_source_get_tags:
 
3007
 * @source: a source
 
3008
 *
 
3009
 * Returns: (element-type utf8) (transfer none): a %NULL-terminated list of tags
 
3010
 *
 
3011
 * Since: 0.2.10
 
3012
 */
 
3013
const char **
 
3014
grl_source_get_tags (GrlSource *source)
 
3015
{
 
3016
  g_return_val_if_fail (GRL_IS_SOURCE (source), NULL);
 
3017
 
 
3018
  return (const char **) source->priv->tags->pdata;
 
3019
}
 
3020
 
 
3021
/**
2916
3022
 * grl_source_get_plugin:
2917
3023
 * @source: a source
2918
3024
 *
3172
3278
 
3173
3279
  /* If there are no sources able to solve just send the media */
3174
3280
  if (g_list_length (sources) == 0) {
 
3281
    guint id;
3175
3282
    g_list_free (_keys);
3176
 
    g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY?
3177
 
                     G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
3178
 
                     resolve_all_done,
3179
 
                     rrc,
3180
 
                     NULL);
 
3283
    id = g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY?
 
3284
                          G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
 
3285
                          resolve_all_done,
 
3286
                          rrc,
 
3287
                          NULL);
 
3288
    g_source_set_name_by_id (id, "[grilo] resolve_all_done");
3181
3289
    return operation_id;
3182
3290
  }
3183
3291
 
3205
3313
 
3206
3314
  rrc->specs_to_invoke = g_hash_table_get_values (rrc->resolve_specs);
3207
3315
  if (rrc->specs_to_invoke) {
3208
 
    g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY?
3209
 
                     G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
3210
 
                     resolve_idle,
3211
 
                     rrc,
3212
 
                     NULL);
 
3316
    guint id;
 
3317
    id = g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY?
 
3318
                          G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
 
3319
                          resolve_idle,
 
3320
                          rrc,
 
3321
                          NULL);
 
3322
    g_source_set_name_by_id (id, "[grilo] resolve_idle");
3213
3323
  } else {
3214
 
    g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY?
3215
 
                     G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
3216
 
                     resolve_all_done,
3217
 
                     rrc,
3218
 
                     NULL);
 
3324
    guint id;
 
3325
    id = g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY?
 
3326
                          G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
 
3327
                          resolve_all_done,
 
3328
                          rrc,
 
3329
                          NULL);
 
3330
    g_source_set_name_by_id (id, "[grilo] resolve_all_done");
3219
3331
  }
3220
3332
 
3221
3333
  return operation_id;
3408
3520
  struct ResolveRelayCb *rrc;
3409
3521
  guint operation_id;
3410
3522
  GrlResolutionFlags flags;
 
3523
  guint id;
3411
3524
 
3412
3525
  GRL_DEBUG (__FUNCTION__);
3413
3526
 
3465
3578
 
3466
3579
  operation_set_ongoing (source, operation_id);
3467
3580
 
3468
 
  g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY?
3469
 
                   G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
3470
 
                   media_from_uri_idle,
3471
 
                   mfus,
3472
 
                   NULL);
 
3581
  id = g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY?
 
3582
                        G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
 
3583
                        media_from_uri_idle,
 
3584
                        mfus,
 
3585
                        NULL);
 
3586
  g_source_set_name_by_id (id, "[grilo] media_from_uri_idle");
3473
3587
 
3474
3588
  return operation_id;
3475
3589
}
3560
3674
  guint operation_id;
3561
3675
  struct BrowseRelayCb *brc;
3562
3676
  GrlResolutionFlags flags;
 
3677
  guint id;
3563
3678
 
3564
3679
  g_return_val_if_fail (GRL_IS_SOURCE (source), 0);
3565
3680
  g_return_val_if_fail (GRL_IS_OPERATION_OPTIONS (options), 0);
3628
3743
 
3629
3744
  operation_set_ongoing (source, operation_id);
3630
3745
 
3631
 
  g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY? G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
3632
 
                   browse_idle,
3633
 
                   bs,
3634
 
                   NULL);
 
3746
  id = g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY? G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
 
3747
                        browse_idle,
 
3748
                        bs,
 
3749
                        NULL);
 
3750
  g_source_set_name_by_id (id, "[grilo] browse_idle");
3635
3751
 
3636
3752
  return operation_id;
3637
3753
}
3726
3842
  guint operation_id;
3727
3843
  struct BrowseRelayCb *brc;
3728
3844
  GrlResolutionFlags flags;
 
3845
  guint id;
3729
3846
 
3730
3847
  g_return_val_if_fail (GRL_IS_SOURCE (source), 0);
3731
3848
  g_return_val_if_fail (GRL_IS_OPERATION_OPTIONS (options), 0);
3785
3902
 
3786
3903
  operation_set_ongoing (source, operation_id);
3787
3904
 
3788
 
  g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY? G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
3789
 
                   search_idle,
3790
 
                   ss,
3791
 
                   NULL);
 
3905
  id = g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY? G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
 
3906
                        search_idle,
 
3907
                        ss,
 
3908
                        NULL);
 
3909
  g_source_set_name_by_id (id, "[grilo] search_idle");
3792
3910
 
3793
3911
  return operation_id;
3794
3912
}
3886
4004
  guint operation_id;
3887
4005
  struct BrowseRelayCb *brc;
3888
4006
  GrlResolutionFlags flags;
 
4007
  guint id;
3889
4008
 
3890
4009
  g_return_val_if_fail (GRL_IS_SOURCE (source), 0);
3891
4010
  g_return_val_if_fail (GRL_IS_OPERATION_OPTIONS (options), 0);
3945
4064
 
3946
4065
  operation_set_ongoing (source, operation_id);
3947
4066
 
3948
 
  g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY? G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
3949
 
                   query_idle,
3950
 
                   qs,
3951
 
                   NULL);
 
4067
  id = g_idle_add_full (flags & GRL_RESOLVE_IDLE_RELAY? G_PRIORITY_DEFAULT_IDLE: G_PRIORITY_HIGH_IDLE,
 
4068
                        query_idle,
 
4069
                        qs,
 
4070
                        NULL);
 
4071
  g_source_set_name_by_id (id, "[grilo] query_idle");
3952
4072
 
3953
4073
  return operation_id;
3954
4074
}
4016
4136
  const gchar *id;
4017
4137
  struct RemoveRelayCb *rrc;
4018
4138
  GrlSourceRemoveSpec *rs;
 
4139
  guint tag_id;
4019
4140
 
4020
4141
  GRL_DEBUG (__FUNCTION__);
4021
4142
 
4049
4170
    rrc->spec = rs;
4050
4171
  }
4051
4172
 
4052
 
  g_idle_add (remove_idle, rrc);
 
4173
  tag_id = g_idle_add (remove_idle, rrc);
 
4174
  g_source_set_name_by_id (tag_id, "[grilo] remove_idle");
4053
4175
 
4054
4176
  return TRUE;
4055
4177
}
4124
4246
{
4125
4247
  struct StoreRelayCb *src;
4126
4248
  GrlSourceStoreSpec *ss;
 
4249
  guint id;
4127
4250
 
4128
4251
  GRL_DEBUG (__FUNCTION__);
4129
4252
 
4151
4274
 
4152
4275
  src->spec = ss;
4153
4276
 
4154
 
  g_idle_add (store_idle, ss);
 
4277
  id = g_idle_add (store_idle, ss);
 
4278
  g_source_set_name_by_id (id, "[grilo] store_idle");
4155
4279
 
4156
4280
  return TRUE;
4157
4281
}
4431
4555
  g_ptr_array_set_free_func (changed_medias, (GDestroyNotify) g_object_unref);
4432
4556
 
4433
4557
  g_signal_emit (source,
4434
 
                 registry_signals[SIG_CONTENT_CHANGED],
 
4558
                 source_signals[SIG_CONTENT_CHANGED],
4435
4559
                 0,
4436
4560
                 changed_medias,
4437
4561
                 change_type,