~ubuntu-branches/ubuntu/raring/grilo/raring

« back to all changes in this revision

Viewing changes to tools/grilo-test-ui/main.c

  • Committer: Package Import Robot
  • Author(s): Alberto Garcia
  • Date: 2012-10-12 16:42:22 UTC
  • mto: This revision was merged to the branch mainline in revision 9.
  • Revision ID: package-import@ubuntu.com-20121012164222-10mggmipxg83x46v
Tags: upstream-0.2.2
ImportĀ upstreamĀ versionĀ 0.2.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
63
63
/* ----- Other ----- */
64
64
 
65
65
#define BROWSE_FLAGS (GRL_RESOLVE_FAST_ONLY | GRL_RESOLVE_IDLE_RELAY)
66
 
#define METADATA_FLAGS (GRL_RESOLVE_FULL | GRL_RESOLVE_IDLE_RELAY)
 
66
#define RESOLVE_FLAGS (GRL_RESOLVE_FULL | GRL_RESOLVE_IDLE_RELAY)
67
67
 
68
68
#define WINDOW_TITLE "Grilo Test UI (v." VERSION ")"
69
69
 
120
120
  GtkTreeModel *query_combo_model;
121
121
  GtkWidget *query_btn;
122
122
  GtkWidget *store_btn;
 
123
  GtkWidget *filter_audio;
 
124
  GtkWidget *filter_video;
 
125
  GtkWidget *filter_image;
123
126
  GtkWidget *remove_btn;
124
127
  GtkWidget *back_btn;
125
128
  GtkWidget *show_btn;
137
140
  /* Keeps track of our browsing position and history  */
138
141
  GList *source_stack;
139
142
  GList *container_stack;
140
 
  GrlMediaSource *cur_source;
 
143
  GrlSource *cur_source;
141
144
  GrlMedia *cur_container;
142
145
 
143
146
  /* Keeps track of the last element we showed metadata for */
144
 
  GrlMediaSource *cur_md_source;
 
147
  GrlSource *cur_md_source;
145
148
  GrlMedia *cur_md_media;
146
149
 
147
150
  /* Keeps track of browse/search state */
148
151
  gboolean op_ongoing;
149
 
  GrlMediaSource *cur_op_source;
 
152
  GrlSource *cur_op_source;
150
153
  guint cur_op_id;
151
154
  gboolean multiple;
152
155
 
189
192
" </menubar>"
190
193
"</ui>";
191
194
 
192
 
static void show_plugins (void);
 
195
static GrlOperationOptions *default_options = NULL;
 
196
static GrlOperationOptions *default_resolve_options = NULL;
 
197
 
 
198
static void show_browsable_sources (void);
193
199
static void quit_cb (GtkAction *action);
194
200
 
195
201
static gchar *authorize_flickr (void);
202
208
static void load_all_plugins (void);
203
209
 
204
210
static void changes_notification_cb (GtkToggleAction *action);
205
 
static void content_changed_cb (GrlMediaSource *source,
 
211
static void content_changed_cb (GrlSource *source,
206
212
                                GPtrArray *changed_medias,
207
 
                                GrlMediaSourceChangeType change_type,
 
213
                                GrlSourceChangeType change_type,
208
214
                                gboolean location_unknown,
209
215
                                gpointer data);
210
216
 
253
259
changes_notification_cb (GtkToggleAction *action)
254
260
{
255
261
  GList *sources, *source;
256
 
  GrlPluginRegistry *registry;
 
262
  GrlRegistry *registry;
257
263
 
258
264
  ui_state->changes_notification = gtk_toggle_action_get_active (action);
259
265
 
260
 
  registry = grl_plugin_registry_get_default ();
261
 
  sources = grl_plugin_registry_get_sources (registry, FALSE);
 
266
  registry = grl_registry_get_default ();
 
267
  sources = grl_registry_get_sources (registry, FALSE);
262
268
  for (source = sources; source; source = g_list_next (source)) {
263
 
    if (grl_metadata_source_supported_operations (GRL_METADATA_SOURCE (source->data)) &
 
269
    if (grl_source_supported_operations (GRL_SOURCE (source->data)) &
264
270
        GRL_OP_NOTIFY_CHANGE) {
265
271
      if (ui_state->changes_notification) {
266
 
        grl_media_source_notify_change_start (GRL_MEDIA_SOURCE (source->data),
267
 
                                              NULL);
268
 
        g_signal_connect (GRL_MEDIA_SOURCE (source->data),
 
272
        grl_source_notify_change_start (GRL_SOURCE (source->data), NULL);
 
273
        g_signal_connect (GRL_SOURCE (source->data),
269
274
                          "content-changed",
270
275
                          G_CALLBACK (content_changed_cb),
271
276
                          NULL);
272
277
      } else {
273
 
        grl_media_source_notify_change_stop (GRL_MEDIA_SOURCE (source->data),
274
 
                                             NULL);
 
278
        grl_source_notify_change_stop (GRL_SOURCE (source->data), NULL);
275
279
        g_signal_handlers_disconnect_by_func (source->data,
276
280
                                              content_changed_cb,
277
281
                                              NULL);
293
297
}
294
298
 
295
299
static GtkTreeModel *
296
 
create_metadata_model (void)
 
300
create_resolve_model (void)
297
301
{
298
302
  return GTK_TREE_MODEL (gtk_list_store_new (2,
299
303
                                             G_TYPE_STRING,     /* name */
355
359
static GList *
356
360
all_keys (void)
357
361
{
358
 
  GrlPluginRegistry *registry;
 
362
  GrlRegistry *registry;
359
363
  static GList *keys = NULL;
360
364
 
361
365
  if (!keys) {
362
 
    registry = grl_plugin_registry_get_default ();
363
 
    keys = grl_plugin_registry_get_metadata_keys (registry);
 
366
    registry = grl_registry_get_default ();
 
367
    keys = grl_registry_get_metadata_keys (registry);
364
368
  }
365
369
 
366
370
  return keys;
367
371
}
368
372
 
369
373
static void
370
 
browse_history_push (GrlMediaSource *source, GrlMedia *media)
 
374
browse_history_push (GrlSource *source, GrlMedia *media)
371
375
{
372
376
  if (source)
373
377
    g_object_ref (source);
379
383
}
380
384
 
381
385
static void
382
 
browse_history_pop (GrlMediaSource **source, GrlMedia **media)
 
386
browse_history_pop (GrlSource **source, GrlMedia **media)
383
387
{
384
388
  GList *tmp;
385
389
  tmp = g_list_last (ui_state->source_stack);
386
390
  if (tmp) {
387
 
    *source = GRL_MEDIA_SOURCE (tmp->data);
 
391
    *source = GRL_SOURCE (tmp->data);
388
392
    ui_state->source_stack = g_list_delete_link (ui_state->source_stack, tmp);
389
393
  }
390
394
  tmp = g_list_last (ui_state->container_stack);
396
400
}
397
401
 
398
402
static void
399
 
set_cur_browse (GrlMediaSource *source, GrlMedia *media)
 
403
set_cur_browse (GrlSource *source, GrlMedia *media)
400
404
{
401
405
  if (ui_state->cur_source)
402
406
    g_object_unref (ui_state->cur_source);
413
417
}
414
418
 
415
419
static void
416
 
set_cur_metadata (GrlMediaSource *source, GrlMedia *media)
 
420
set_cur_resolve (GrlSource *source, GrlMedia *media)
417
421
{
418
422
  if (ui_state->cur_md_source)
419
423
    g_object_unref (ui_state->cur_md_source);
444
448
    gtk_list_store_clear (GTK_LIST_STORE (view->metadata_model));
445
449
    g_object_unref (view->metadata_model);
446
450
  }
447
 
  view->metadata_model = create_metadata_model ();
 
451
  view->metadata_model = create_resolve_model ();
448
452
  gtk_tree_view_set_model (GTK_TREE_VIEW (view->metadata),
449
453
                           view->metadata_model);
450
454
 
496
500
  }
497
501
}
498
502
 
 
503
static gchar *
 
504
value_description (const GValue *value)
 
505
{
 
506
  if (value == NULL)
 
507
    return g_strdup ("");
 
508
 
 
509
  if (G_VALUE_HOLDS_BOXED (value)
 
510
      && G_VALUE_TYPE (value) == G_TYPE_DATE_TIME) {
 
511
    GDateTime *date_time = g_value_get_boxed (value);
 
512
    return g_date_time_format (date_time, "%FT%H:%M:%SZ");
 
513
  } else if (G_VALUE_HOLDS_STRING (value)) {
 
514
      return g_value_dup_string (value);
 
515
  }
 
516
 
 
517
  return g_strdup_value_contents (value);
 
518
}
 
519
 
499
520
static void
500
 
metadata_cb (GrlMediaSource *source,
501
 
             guint operation_id,
502
 
             GrlMedia *media,
503
 
             gpointer user_data,
504
 
             const GError *error)
 
521
resolve_cb (GrlSource *source,
 
522
            guint operation_id,
 
523
            GrlMedia *media,
 
524
            gpointer user_data,
 
525
            const GError *error)
505
526
{
506
527
  GList *keys, *i;
507
528
  GtkTreeIter iter;
 
529
  GrlKeyID key;
 
530
  const gchar *key_name;
508
531
 
509
532
  /* Not interested if not the last media we
510
533
     requested metadata for */
516
539
    gtk_list_store_clear (GTK_LIST_STORE (view->metadata_model));
517
540
    g_object_unref (view->metadata_model);
518
541
  }
519
 
  view->metadata_model = create_metadata_model ();
 
542
  view->metadata_model = create_resolve_model ();
520
543
  gtk_tree_view_set_model (GTK_TREE_VIEW (view->metadata),
521
544
                           view->metadata_model);
522
545
 
535
558
    keys = grl_data_get_keys (GRL_DATA (media));
536
559
    i = keys;
537
560
    while (i) {
538
 
      if (grl_data_has_key (GRL_DATA (media), i->data)) {
539
 
        const GValue *g_value = grl_data_get (GRL_DATA (media), i->data);
540
 
        gchar *value = g_value ? g_strdup_value_contents (g_value) : "";
 
561
      key = GRLPOINTER_TO_KEYID (i->data);
 
562
      key_name = grl_metadata_key_get_name (key);
 
563
      if (grl_data_has_key (GRL_DATA (media), key)) {
 
564
        const GValue *g_value = grl_data_get (GRL_DATA (media), key);
 
565
        GRL_DEBUG ("handling key %d (%s)", key, key_name);
 
566
        gchar *value = value_description (g_value);
541
567
        gtk_list_store_append (GTK_LIST_STORE (view->metadata_model), &iter);
542
568
        gtk_list_store_set (GTK_LIST_STORE (view->metadata_model),
543
569
                            &iter,
544
570
                            METADATA_MODEL_NAME,
545
 
                            GRL_METADATA_KEY_GET_NAME (i->data),
 
571
                            key_name,
546
572
                            METADATA_MODEL_VALUE, value,
547
573
                            -1);
548
 
        GRL_DEBUG ("  %s: %s", GRL_METADATA_KEY_GET_NAME (i->data), value);
 
574
        GRL_DEBUG ("  %s: %s", key_name, value);
549
575
      }
550
576
      i = g_list_next (i);
551
577
    }
552
578
 
553
579
    g_list_free (keys);
554
580
 
555
 
    /* Don't free media (we do not ref it when issuing metadata(),
 
581
    /* Don't free media (we do not ref it when issuing resolve(),
556
582
       so its reference comes from the treeview and that's freed
557
583
       when the treeview is cleared */
558
584
 
570
596
}
571
597
 
572
598
static void
573
 
operation_started (GrlMediaSource *source, guint operation_id,
 
599
operation_started (GrlSource *source, guint operation_id,
574
600
                   gboolean multiple)
575
601
{
576
602
  ui_state->op_ongoing = TRUE;
595
621
}
596
622
 
597
623
static void
598
 
browse_search_query_cb (GrlMediaSource *source,
599
 
                        guint op_id,
600
 
                        GrlMedia *media,
601
 
                        guint remaining,
602
 
                        gpointer user_data,
603
 
                        const GError *error)
 
624
browse_search_query_cb (GrlSource *source,
 
625
                        guint op_id,
 
626
                        GrlMedia *media,
 
627
                        guint remaining,
 
628
                        gpointer user_data,
 
629
                        const GError *error)
604
630
{
605
631
  gint type;
606
632
  const gchar *name;
607
633
  GtkTreeIter iter;
608
634
  GdkPixbuf *icon;
609
635
  OperationState *state = (OperationState *) user_data;
610
 
  guint next_op_id = 0;
 
636
  guint next_op_id;
611
637
 
612
638
  if (error) {
613
639
    if (g_error_matches (error,
662
688
      state->offset += state->count;
663
689
      if (state->count >= BROWSE_CHUNK_SIZE &&
664
690
          state->offset < BROWSE_MAX_COUNT) {
 
691
        GrlOperationOptions *options =
 
692
            grl_operation_options_copy (default_options);
 
693
          GrlTypeFilter filter = GRL_TYPE_FILTER_NONE;
 
694
          if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (view->filter_audio))) {
 
695
            filter |= GRL_TYPE_FILTER_AUDIO;
 
696
          }
 
697
          if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (view->filter_video))) {
 
698
            filter |= GRL_TYPE_FILTER_VIDEO;
 
699
          }
 
700
          if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (view->filter_image))) {
 
701
            filter |= GRL_TYPE_FILTER_IMAGE;
 
702
          }
 
703
          grl_operation_options_set_type_filter (options, filter);
 
704
 
665
705
        GRL_DEBUG ("operation (%d) requesting more data from source", op_id);
666
706
        state->count = 0;
 
707
 
 
708
   grl_operation_options_set_skip (options, state->offset);
 
709
   grl_operation_options_set_count (options, BROWSE_CHUNK_SIZE);
 
710
 
 
711
   GrlOperationOptions *supported_options = NULL;
 
712
   grl_operation_options_obey_caps (options,
 
713
                                    grl_source_get_caps (source, GRL_OP_SEARCH),
 
714
                                    &supported_options,
 
715
                                    NULL);
667
716
        switch (state->type) {
668
717
          case OP_TYPE_BROWSE:
669
718
            next_op_id =
670
 
              grl_media_source_browse (source,
 
719
              grl_source_browse (source,
671
720
                                       ui_state->cur_container,
672
721
                                       all_keys (),
673
 
                                       state->offset, BROWSE_CHUNK_SIZE,
674
 
                                       BROWSE_FLAGS,
 
722
                                       supported_options,
675
723
                                       browse_search_query_cb,
676
724
                                       state);
677
725
            break;
678
726
          case OP_TYPE_SEARCH:
679
727
            next_op_id =
680
 
              grl_media_source_search (source,
 
728
              grl_source_search (source,
681
729
                                       state->text,
682
730
                                       all_keys (),
683
 
                                       state->offset, BROWSE_CHUNK_SIZE,
684
 
                                       BROWSE_FLAGS,
 
731
                                       options,
685
732
                                       browse_search_query_cb,
686
733
                                       state);
687
734
            break;
688
735
          case OP_TYPE_QUERY:
689
736
            next_op_id =
690
 
              grl_media_source_query (source,
 
737
              grl_source_query (source,
691
738
                                      state->text,
692
739
                                      all_keys (),
693
 
                                      state->offset, BROWSE_CHUNK_SIZE,
694
 
                                      BROWSE_FLAGS,
 
740
                                      options,
695
741
                                      browse_search_query_cb,
696
742
                                      state);
697
743
            break;
699
745
            /* this shouldn't happen as multiple search has no chunk
700
746
             * size parameter */
701
747
            g_warn_if_reached ();
 
748
            g_object_unref (options);
702
749
            goto operation_finished;
703
750
            break;
704
751
        }
 
752
        g_object_unref (options);
 
753
   g_object_unref (supported_options);
705
754
        operation_started (source, next_op_id, FALSE);
706
755
      } else {
707
756
        /* We browsed all requested elements  */
722
771
}
723
772
 
724
773
static void
725
 
browse (GrlMediaSource *source, GrlMedia *container)
 
774
browse (GrlSource *source, GrlMedia *container)
726
775
{
727
776
  guint browse_id;
728
777
  if (source) {
732
781
 
733
782
    OperationState *state = g_new0 (OperationState, 1);
734
783
    state->type = OP_TYPE_BROWSE;
735
 
    browse_id = grl_media_source_browse (source,
736
 
                                         container,
737
 
                                         all_keys (),
738
 
                                         0, BROWSE_CHUNK_SIZE,
739
 
                                         BROWSE_FLAGS,
740
 
                                         browse_search_query_cb,
741
 
                                         state);
 
784
    browse_id = grl_source_browse (source,
 
785
                                   container,
 
786
                                   all_keys (),
 
787
                                   default_options,
 
788
                                   browse_search_query_cb,
 
789
                                   state);
742
790
    operation_started (source, browse_id, FALSE);
743
791
  } else {
744
 
    show_plugins ();
 
792
    show_browsable_sources ();
745
793
  }
746
794
 
747
795
  set_cur_browse (source, container);
748
 
  set_cur_metadata (NULL, NULL);
 
796
  set_cur_resolve (NULL, NULL);
749
797
}
750
798
 
751
799
static void
758
806
  GtkTreeIter iter;
759
807
  GrlMedia *content;
760
808
  gint type;
761
 
  GrlMediaSource *source;
 
809
  GrlSource *source;
762
810
  GrlMedia *container;
763
811
 
764
812
  model = gtk_tree_view_get_model (tree_view);
793
841
}
794
842
 
795
843
static void
796
 
metadata (GrlMediaSource *source, GrlMedia *media)
 
844
resolve (GrlSource *source, GrlMedia *media)
797
845
{
798
846
  if (source) {
799
 
    /* If source does not support metadata() operation, then use the current
 
847
    /* If source does not support resolve() operation, then use the current
800
848
       media */
801
 
    if ((grl_metadata_source_supported_operations (GRL_METADATA_SOURCE (source)) &
802
 
         GRL_OP_METADATA)) {
803
 
          grl_media_source_metadata (source,
804
 
                                     media,
805
 
                                     all_keys (),
806
 
                                     METADATA_FLAGS,
807
 
                                     metadata_cb,
808
 
                                     NULL);
 
849
    if ((grl_source_supported_operations (source) &
 
850
         GRL_OP_RESOLVE)) {
 
851
      grl_source_resolve (source,
 
852
                          media,
 
853
                          all_keys (),
 
854
                          default_resolve_options,
 
855
                          resolve_cb,
 
856
                          NULL);
809
857
    } else {
810
 
      metadata_cb (source, 0, media, NULL, NULL);
 
858
      resolve_cb (source, 0, media, NULL, NULL);
811
859
    }
812
860
  }
813
861
}
818
866
{
819
867
  GtkTreePath *path = NULL;
820
868
  GtkTreeIter iter;
821
 
  GrlMediaSource *source;
 
869
  GrlSource *source;
822
870
  GrlMedia *content;
823
871
 
824
872
  gtk_tree_view_get_cursor (tree_view, &path, NULL);
834
882
 
835
883
  if (source != ui_state->cur_md_source ||
836
884
      content != ui_state->cur_md_media) {
837
 
    set_cur_metadata (source, content);
838
 
    metadata (source, content);
 
885
    set_cur_resolve (source, content);
 
886
    resolve (source, content);
839
887
  }
840
888
 
841
889
  /* Check if we can store content in the selected item */
842
890
  if (content == NULL &&
843
 
      (grl_metadata_source_supported_operations (GRL_METADATA_SOURCE (source)) &
 
891
      (grl_source_supported_operations (GRL_SOURCE (source)) &
844
892
       GRL_OP_STORE)) {
845
893
    gtk_widget_set_sensitive (view->store_btn, TRUE);
846
894
  } else if (content && GRL_IS_MEDIA_BOX (content) &&
847
 
             grl_metadata_source_supported_operations (GRL_METADATA_SOURCE (source)) &
 
895
             grl_source_supported_operations (GRL_SOURCE (source)) &
848
896
             GRL_OP_STORE_PARENT) {
849
897
    gtk_widget_set_sensitive (view->store_btn, TRUE);
850
898
  } else {
853
901
 
854
902
  /* Check if we can remove the selected item */
855
903
  if (content != NULL &&
856
 
      (grl_metadata_source_supported_operations (GRL_METADATA_SOURCE (source)) &
 
904
      (grl_source_supported_operations (GRL_SOURCE (source)) &
857
905
       GRL_OP_REMOVE)) {
858
906
    gtk_widget_set_sensitive (view->remove_btn, TRUE);
859
907
  } else {
911
959
static void
912
960
back_btn_clicked_cb (GtkButton *btn, gpointer user_data)
913
961
{
914
 
  GrlMediaSource *prev_source = NULL;
 
962
  GrlSource *prev_source = NULL;
915
963
  GrlMedia *prev_container = NULL;
916
964
 
917
965
  /* TODO: when using dynamic sources this will break
932
980
}
933
981
 
934
982
static void
935
 
store_cb (GrlMediaSource *source,
936
 
          GrlMediaBox *box,
937
 
          GrlMedia *media,
938
 
          gpointer user_data,
939
 
          const GError *error)
 
983
store_cb (GrlSource *source,
 
984
          GrlMedia *media,
 
985
          GList *failed_keys,
 
986
          gpointer user_data,
 
987
          const GError *error)
940
988
{
941
989
  if (error) {
942
990
    GRL_WARNING ("Error storing media: %s", error->message);
953
1001
  GtkTreeSelection *sel;
954
1002
  GtkTreeModel *model = NULL;
955
1003
  GtkTreeIter iter;
956
 
  GrlMediaSource *source;
 
1004
  GrlSource *source;
957
1005
  GrlMedia *container;
958
1006
 
959
1007
  sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (view->browser));
1006
1054
    grl_media_set_title (media, gtk_entry_get_text (GTK_ENTRY (e1)));
1007
1055
    grl_media_set_description (media,
1008
1056
                                    gtk_entry_get_text (GTK_ENTRY (e3)));
1009
 
    grl_media_source_store (source, GRL_MEDIA_BOX (container),
1010
 
                            media, store_cb, NULL);
 
1057
    grl_source_store (source, GRL_MEDIA_BOX (container),
 
1058
                      media, GRL_WRITE_FULL, store_cb, NULL);
1011
1059
  }
1012
1060
 
1013
1061
  gtk_widget_destroy (dialog);
1021
1069
}
1022
1070
 
1023
1071
static void
1024
 
remove_item_from_view (GrlMediaSource *source, GrlMedia *media)
 
1072
remove_item_from_view (GrlSource *source, GrlMedia *media)
1025
1073
{
1026
1074
  GtkTreeIter iter;
1027
 
  GrlMediaSource *iter_source;
 
1075
  GrlSource *iter_source;
1028
1076
  GrlMedia *iter_media;
1029
1077
  gboolean found = FALSE;
1030
1078
  gboolean more;
1051
1099
}
1052
1100
 
1053
1101
static void
1054
 
remove_cb (GrlMediaSource *source,
1055
 
           GrlMedia *media,
1056
 
           gpointer user_data,
1057
 
           const GError *error)
 
1102
remove_cb (GrlSource *source,
 
1103
           GrlMedia *media,
 
1104
           gpointer user_data,
 
1105
           const GError *error)
1058
1106
{
1059
1107
  if (error) {
1060
1108
    GRL_WARNING ("Error removing media: %s", error->message);
1071
1119
  GtkTreeSelection *sel;
1072
1120
  GtkTreeModel *model = NULL;
1073
1121
  GtkTreeIter iter;
1074
 
  GrlMediaSource *source;
 
1122
  GrlSource *source;
1075
1123
  GrlMedia *media;
1076
1124
 
1077
1125
  sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (view->browser));
1081
1129
                      BROWSER_MODEL_CONTENT, &media,
1082
1130
                      -1);
1083
1131
 
1084
 
  grl_media_source_remove (source, media, remove_cb, NULL);
 
1132
  grl_source_remove (source, media, remove_cb, NULL);
1085
1133
 
1086
1134
  if (source) {
1087
1135
    g_object_unref (source);
1092
1140
}
1093
1141
 
1094
1142
static void
1095
 
search (GrlMediaSource *source, const gchar *text)
 
1143
search (GrlSource *source, const gchar *text)
1096
1144
{
1097
1145
  OperationState *state;
1098
1146
  guint search_id;
1099
1147
  gboolean multiple = FALSE;
 
1148
  GrlOperationOptions *options;
 
1149
  GrlOperationOptions *supported_options;
 
1150
  GrlTypeFilter filter;
1100
1151
 
1101
1152
  /* If we have an operation ongoing, let's cancel it first */
1102
1153
  cancel_current_operation ();
1103
1154
 
1104
1155
  state = g_new0 (OperationState, 1);
1105
1156
  state->text = (gchar *) text;
 
1157
  options = grl_operation_options_copy (default_options);
 
1158
  filter = GRL_TYPE_FILTER_NONE;
 
1159
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (view->filter_audio))) {
 
1160
    filter |= GRL_TYPE_FILTER_AUDIO;
 
1161
  }
 
1162
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (view->filter_video))) {
 
1163
    filter |= GRL_TYPE_FILTER_VIDEO;
 
1164
  }
 
1165
  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (view->filter_image))) {
 
1166
    filter |= GRL_TYPE_FILTER_IMAGE;
 
1167
  }
 
1168
  grl_operation_options_set_type_filter (options, filter);
 
1169
 
1106
1170
  if (source) {
1107
1171
    /* Normal search */
1108
1172
    state->type = OP_TYPE_SEARCH;
1109
 
    search_id = grl_media_source_search (source,
 
1173
    grl_operation_options_obey_caps (options,
 
1174
                                     grl_source_get_caps (GRL_SOURCE (source), GRL_OP_SEARCH),
 
1175
                                     &supported_options,
 
1176
                                     NULL);
 
1177
    g_object_unref (options);
 
1178
    search_id = grl_source_search (source,
1110
1179
                                         text,
1111
1180
                                         all_keys (),
1112
 
                                         0, BROWSE_CHUNK_SIZE,
1113
 
                                         BROWSE_FLAGS,
 
1181
                                         supported_options,
1114
1182
                                         browse_search_query_cb,
1115
1183
                                         state);
1116
1184
  } else {
1120
1188
    search_id = grl_multiple_search (NULL,
1121
1189
                                     text,
1122
1190
                                     all_keys (),
1123
 
                                     BROWSE_MAX_COUNT,
1124
 
                                     BROWSE_FLAGS,
 
1191
                                     options,
1125
1192
                                     browse_search_query_cb,
1126
1193
                                     state);
1127
1194
  }
 
1195
  g_object_unref (supported_options);
1128
1196
  clear_panes ();
1129
1197
  operation_started (source, search_id, multiple);
1130
1198
}
1136
1204
 
1137
1205
  if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (view->search_combo),
1138
1206
                                     &iter)) {
1139
 
    GrlMediaSource *source;
 
1207
    GrlSource *source;
1140
1208
    const gchar *text;
1141
1209
    gtk_tree_model_get (view->search_combo_model, &iter,
1142
1210
                        SEARCH_MODEL_SOURCE, &source,
1156
1224
}
1157
1225
 
1158
1226
static void
1159
 
query (GrlMediaSource *source, const gchar *text)
 
1227
query (GrlSource *source, const gchar *text)
1160
1228
{
1161
1229
  OperationState *state;
1162
1230
  guint query_id;
1167
1235
  state = g_new0 (OperationState, 1);
1168
1236
  state->text = (gchar *) text;
1169
1237
  state->type = OP_TYPE_QUERY;
1170
 
  query_id = grl_media_source_query (source,
1171
 
                                     text,
1172
 
                                     all_keys (),
1173
 
                                     0, BROWSE_CHUNK_SIZE,
1174
 
                                     BROWSE_FLAGS,
1175
 
                                     browse_search_query_cb,
1176
 
                                     state);
 
1238
  query_id = grl_source_query (source,
 
1239
                               text,
 
1240
                               all_keys (),
 
1241
                               default_options,
 
1242
                               browse_search_query_cb,
 
1243
                               state);
1177
1244
  clear_panes ();
1178
1245
  operation_started (source, query_id, FALSE);
1179
1246
}
1185
1252
 
1186
1253
  if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (view->query_combo),
1187
1254
                                     &iter)) {
1188
 
    GrlMediaSource *source;
 
1255
    GrlSource *source;
1189
1256
    const gchar *text;
1190
1257
    gtk_tree_model_get (view->query_combo_model, &iter,
1191
1258
                        QUERY_MODEL_SOURCE, &source,
1200
1267
}
1201
1268
 
1202
1269
static void
 
1270
set_filter_cb (GtkComboBox *widget,
 
1271
               gpointer user_data)
 
1272
{
 
1273
  GrlCaps *caps;
 
1274
  GrlTypeFilter filter;
 
1275
  GrlSource *source;
 
1276
  GtkTreeIter iter;
 
1277
 
 
1278
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (view->filter_audio), TRUE);
 
1279
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (view->filter_image), TRUE);
 
1280
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (view->filter_video), TRUE);
 
1281
 
 
1282
  gtk_widget_set_sensitive (view->filter_audio, FALSE);
 
1283
  gtk_widget_set_sensitive (view->filter_video, FALSE);
 
1284
  gtk_widget_set_sensitive (view->filter_image, FALSE);
 
1285
 
 
1286
  if (!gtk_combo_box_get_active_iter (widget, &iter)) {
 
1287
    return;
 
1288
  }
 
1289
 
 
1290
  gtk_tree_model_get (gtk_combo_box_get_model (widget),
 
1291
                      &iter,
 
1292
                      SEARCH_MODEL_SOURCE, &source,
 
1293
                      -1);
 
1294
  if (!source) {
 
1295
    return;
 
1296
  }
 
1297
 
 
1298
  caps = grl_source_get_caps (GRL_SOURCE (source), GRL_OP_SEARCH);
 
1299
 
 
1300
 
 
1301
  filter = grl_caps_get_type_filter (caps);
 
1302
 
 
1303
  if (filter & GRL_TYPE_FILTER_AUDIO) {
 
1304
    gtk_widget_set_sensitive (view->filter_audio, TRUE);
 
1305
  }
 
1306
  if (filter & GRL_TYPE_FILTER_VIDEO) {
 
1307
    gtk_widget_set_sensitive (view->filter_video, TRUE);
 
1308
  }
 
1309
  if (filter & GRL_TYPE_FILTER_IMAGE) {
 
1310
    gtk_widget_set_sensitive (view->filter_image, TRUE);
 
1311
  }
 
1312
}
 
1313
 
 
1314
static void
1203
1315
query_combo_setup (void)
1204
1316
{
1205
 
  GrlPluginRegistry *registry;
 
1317
  GrlRegistry *registry;
1206
1318
  GList *sources = NULL;
1207
1319
  GList *sources_iter;
1208
1320
  GtkTreeIter iter;
1209
1321
 
1210
1322
  clear_query_combo ();
1211
1323
 
1212
 
  registry = grl_plugin_registry_get_default ();
1213
 
  sources = grl_plugin_registry_get_sources_by_operations (registry,
1214
 
                                                           GRL_OP_QUERY,
1215
 
                                                           FALSE);
 
1324
  registry = grl_registry_get_default ();
 
1325
  sources = grl_registry_get_sources_by_operations (registry,
 
1326
                                                    GRL_OP_QUERY,
 
1327
                                                    FALSE);
1216
1328
  for (sources_iter = sources; sources_iter;
1217
1329
      sources_iter = g_list_next (sources_iter)) {
1218
 
    GrlMetadataSource *source = GRL_METADATA_SOURCE (sources_iter->data);
1219
 
    const gchar *name = grl_metadata_source_get_name (source);
 
1330
    GrlSource *source = GRL_SOURCE (sources_iter->data);
 
1331
    const gchar *name = grl_source_get_name (source);
1220
1332
 
1221
1333
    gtk_list_store_append (GTK_LIST_STORE (view->query_combo_model), &iter);
1222
1334
    gtk_list_store_set (GTK_LIST_STORE (view->query_combo_model),
1233
1345
static void
1234
1346
search_combo_setup (void)
1235
1347
{
1236
 
  GrlPluginRegistry *registry;
 
1348
  GrlRegistry *registry;
1237
1349
  GList *sources = NULL;
1238
1350
  GList *sources_iter;
1239
1351
  GtkTreeIter iter;
1240
1352
 
1241
1353
  clear_search_combo ();
1242
1354
 
1243
 
  registry = grl_plugin_registry_get_default ();
1244
 
  sources = grl_plugin_registry_get_sources_by_operations (registry,
1245
 
                                                           GRL_OP_SEARCH,
1246
 
                                                           FALSE);
 
1355
  registry = grl_registry_get_default ();
 
1356
  sources = grl_registry_get_sources_by_operations (registry,
 
1357
                                                    GRL_OP_SEARCH,
 
1358
                                                    FALSE);
1247
1359
  for (sources_iter = sources; sources_iter;
1248
1360
      sources_iter = g_list_next (sources_iter)) {
1249
 
    GrlMetadataSource *source = GRL_METADATA_SOURCE (sources_iter->data);
1250
 
    const gchar *name = grl_metadata_source_get_name (source);
 
1361
    GrlSource *source = GRL_SOURCE (sources_iter->data);
 
1362
    const gchar *name = grl_source_get_name (source);
1251
1363
 
1252
1364
    gtk_list_store_append (GTK_LIST_STORE (view->search_combo_model), &iter);
1253
1365
    gtk_list_store_set (GTK_LIST_STORE (view->search_combo_model),
1378
1490
static void
1379
1491
load_file_config (void)
1380
1492
{
1381
 
  GrlPluginRegistry *registry;
 
1493
  GrlRegistry *registry;
1382
1494
  gchar *config_file;
1383
1495
 
1384
 
  registry = grl_plugin_registry_get_default ();
 
1496
  registry = grl_registry_get_default ();
1385
1497
  config_file = g_strconcat (g_get_user_config_dir(),
1386
1498
                             G_DIR_SEPARATOR_S, "grilo-test-ui",
1387
1499
                             G_DIR_SEPARATOR_S, "grilo.conf",
1388
1500
                             NULL);
1389
1501
  if (g_file_test (config_file, G_FILE_TEST_EXISTS)) {
1390
 
    grl_plugin_registry_add_config_from_file (registry, config_file, NULL);
 
1502
    grl_registry_add_config_from_file (registry, config_file, NULL);
1391
1503
  }
1392
1504
  g_free (config_file);
1393
1505
}
1473
1585
set_flickr_config (void)
1474
1586
{
1475
1587
  GrlConfig *config;
1476
 
  GrlPluginRegistry *registry;
 
1588
  GrlRegistry *registry;
1477
1589
  gchar *token;
1478
1590
 
1479
 
  registry = grl_plugin_registry_get_default ();
 
1591
  registry = grl_registry_get_default ();
1480
1592
 
1481
1593
  config = grl_config_new ("grl-flickr", NULL);
1482
1594
  grl_config_set_api_key (config, FLICKR_KEY);
1483
1595
  grl_config_set_api_secret (config, FLICKR_SECRET);
1484
 
  grl_plugin_registry_add_config (registry, config, NULL);
 
1596
  grl_registry_add_config (registry, config, NULL);
1485
1597
 
1486
1598
  token = load_flickr_token ();
1487
1599
 
1498
1610
    grl_config_set_api_key (config, FLICKR_KEY);
1499
1611
    grl_config_set_api_secret (config, FLICKR_SECRET);
1500
1612
    grl_config_set_api_token (config, token);
1501
 
    grl_plugin_registry_add_config (registry, config, NULL);
 
1613
    grl_registry_add_config (registry, config, NULL);
1502
1614
  }
1503
1615
  g_free (token);
1504
1616
}
1507
1619
set_youtube_config (void)
1508
1620
{
1509
1621
  GrlConfig *config;
1510
 
  GrlPluginRegistry *registry;
 
1622
  GrlRegistry *registry;
1511
1623
 
1512
1624
  config = grl_config_new ("grl-youtube", NULL);
1513
1625
  grl_config_set_api_key (config, YOUTUBE_KEY);
1514
1626
 
1515
 
  registry = grl_plugin_registry_get_default ();
1516
 
  grl_plugin_registry_add_config (registry, config, NULL);
 
1627
  registry = grl_registry_get_default ();
 
1628
  grl_registry_add_config (registry, config, NULL);
1517
1629
}
1518
1630
 
1519
1631
static void
1520
1632
set_vimeo_config (void)
1521
1633
{
1522
1634
  GrlConfig *config;
1523
 
  GrlPluginRegistry *registry;
 
1635
  GrlRegistry *registry;
1524
1636
 
1525
1637
  config = grl_config_new ("grl-vimeo", NULL);
1526
1638
  grl_config_set_api_key (config, VIMEO_KEY);
1527
1639
  grl_config_set_api_secret (config, VIMEO_SECRET);
1528
1640
 
1529
 
  registry = grl_plugin_registry_get_default ();
1530
 
  grl_plugin_registry_add_config (registry, config, NULL);
 
1641
  registry = grl_registry_get_default ();
 
1642
  grl_registry_add_config (registry, config, NULL);
1531
1643
}
1532
1644
 
1533
1645
static void
1534
1646
set_local_config (void)
1535
1647
{
1536
1648
  GrlConfig *config;
1537
 
  GrlPluginRegistry *registry;
 
1649
  GrlRegistry *registry;
1538
1650
 
1539
1651
  config = grl_config_new ("grl-local-metadata", NULL);
1540
1652
  grl_config_set_boolean (config, "guess-video", TRUE);
1541
1653
 
1542
 
  registry = grl_plugin_registry_get_default ();
1543
 
  grl_plugin_registry_add_config (registry, config, NULL);
 
1654
  registry = grl_registry_get_default ();
 
1655
  grl_registry_add_config (registry, config, NULL);
1544
1656
}
1545
1657
 
1546
1658
static void
1563
1675
}
1564
1676
 
1565
1677
static void
 
1678
options_setup (void)
 
1679
{
 
1680
  default_options = grl_operation_options_new (NULL);
 
1681
  grl_operation_options_set_flags (default_options, BROWSE_FLAGS);
 
1682
  grl_operation_options_set_skip (default_options, 0);
 
1683
  grl_operation_options_set_count (default_options, BROWSE_CHUNK_SIZE);
 
1684
 
 
1685
  default_resolve_options = grl_operation_options_new (NULL);
 
1686
  grl_operation_options_set_flags (default_resolve_options, RESOLVE_FLAGS);
 
1687
}
 
1688
 
 
1689
static void
1566
1690
ui_setup (void)
1567
1691
{
1568
1692
  view = g_new0 (UiView, 1);
1647
1771
  search_combo_setup ();
1648
1772
  query_combo_setup ();
1649
1773
 
 
1774
  /* Advanced search */
 
1775
  box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
 
1776
  view->filter_audio = gtk_check_button_new_with_label ("Audio");
 
1777
  view->filter_video = gtk_check_button_new_with_label ("Video");
 
1778
  view->filter_image = gtk_check_button_new_with_label ("Image");
 
1779
  gtk_widget_set_sensitive (view->filter_audio, FALSE);
 
1780
  gtk_widget_set_sensitive (view->filter_video, FALSE);
 
1781
  gtk_widget_set_sensitive (view->filter_image, FALSE);
 
1782
 
 
1783
  gtk_container_add_with_properties (GTK_CONTAINER (box),
 
1784
                                     view->filter_audio,
 
1785
                                     "expand", FALSE, NULL);
 
1786
  gtk_container_add_with_properties (GTK_CONTAINER (box),
 
1787
                                     view->filter_video,
 
1788
                                     "expand", FALSE, NULL);
 
1789
  gtk_container_add_with_properties (GTK_CONTAINER (box),
 
1790
                                     view->filter_image,
 
1791
                                     "expand", FALSE, NULL);
 
1792
  gtk_container_add_with_properties (GTK_CONTAINER (view->lpane),
 
1793
                                     box,
 
1794
                                     "expand", FALSE, NULL);
 
1795
  g_signal_connect (G_OBJECT (view->search_combo),
 
1796
                    "changed",
 
1797
                    G_CALLBACK (set_filter_cb), NULL);
 
1798
 
1650
1799
  /* Toolbar buttons */
1651
1800
  box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
1652
1801
  view->back_btn = gtk_button_new ();
1779
1928
                               METADATA_MIN_WIDTH,
1780
1929
                               METADATA_MIN_HEIGHT);
1781
1930
 
1782
 
  /* Populate the browser with the plugins */
1783
 
  show_plugins ();
 
1931
  /* Populate the browser with the sources */
 
1932
  show_browsable_sources ();
1784
1933
 
1785
1934
  gtk_widget_show_all (view->window);
1786
1935
}
1787
1936
 
1788
1937
static void
1789
 
show_plugins ()
 
1938
show_browsable_sources ()
1790
1939
{
1791
1940
  GList *sources;
1792
1941
  GList *sources_iter;
1793
1942
  GtkTreeIter iter;
1794
 
  GrlPluginRegistry *registry;
 
1943
  GrlRegistry *registry;
1795
1944
 
1796
 
  registry = grl_plugin_registry_get_default ();
 
1945
  registry = grl_registry_get_default ();
1797
1946
 
1798
1947
  clear_panes ();
1799
1948
 
1800
 
  sources = grl_plugin_registry_get_sources_by_operations (registry,
1801
 
                                                           GRL_OP_BROWSE,
1802
 
                                                           FALSE);
 
1949
  sources = grl_registry_get_sources_by_operations (registry,
 
1950
                                                    GRL_OP_BROWSE,
 
1951
                                                    FALSE);
1803
1952
  for (sources_iter = sources; sources_iter;
1804
1953
      sources_iter = g_list_next (sources_iter)) {
1805
 
    GrlMetadataSource *source;
 
1954
    GrlSource *source;
1806
1955
    const gchar *name;
1807
1956
    GdkPixbuf *icon;
1808
1957
 
1809
 
    source = GRL_METADATA_SOURCE (sources_iter->data);
 
1958
    source = GRL_SOURCE (sources_iter->data);
1810
1959
    icon = load_icon (GTK_STOCK_DIRECTORY);
1811
 
    name = grl_metadata_source_get_name (source);
 
1960
    name = grl_source_get_name (source);
1812
1961
    GRL_DEBUG ("Loaded source: '%s'", name);
1813
1962
    gtk_list_store_append (GTK_LIST_STORE (view->browser_model), &iter);
1814
1963
    gtk_list_store_set (GTK_LIST_STORE (view->browser_model),
1847
1996
  free_stack (&ui_state->source_stack);
1848
1997
  free_stack (&ui_state->container_stack);
1849
1998
  set_cur_browse (NULL, NULL);
1850
 
  set_cur_metadata (NULL, NULL);
 
1999
  set_cur_resolve (NULL, NULL);
1851
2000
}
1852
2001
 
1853
2002
static void
1856
2005
  cancel_current_operation ();
1857
2006
  clear_panes ();
1858
2007
  reset_browse_history ();
1859
 
  show_plugins ();
 
2008
  show_browsable_sources ();
1860
2009
}
1861
2010
 
1862
2011
static gboolean
1870
2019
}
1871
2020
 
1872
2021
static void
1873
 
content_changed_cb (GrlMediaSource *source,
 
2022
content_changed_cb (GrlSource *source,
1874
2023
                    GPtrArray *changed_medias,
1875
 
                    GrlMediaSourceChangeType change_type,
 
2024
                    GrlSourceChangeType change_type,
1876
2025
                    gboolean location_unknown,
1877
2026
                    gpointer data)
1878
2027
{
1905
2054
    if (GRL_IS_MEDIA_BOX (media)) {
1906
2055
      message =
1907
2056
        g_strdup_printf ("%s: container '%s' has %s%s",
1908
 
                         grl_metadata_source_get_name (GRL_METADATA_SOURCE (source)),
 
2057
                         grl_source_get_name (source),
1909
2058
                         media_id? media_id: "root",
1910
2059
                         change_type_string,
1911
2060
                         location_string);
1912
2061
    } else {
1913
2062
      message =
1914
2063
        g_strdup_printf ("%s: element '%s' has %s",
1915
 
                         grl_metadata_source_get_name (GRL_METADATA_SOURCE (source)),
 
2064
                         grl_source_get_name (GRL_SOURCE (source)),
1916
2065
                         media_id,
1917
2066
                         change_type_string);
1918
2067
    }
1929
2078
}
1930
2079
 
1931
2080
static void
1932
 
source_added_cb (GrlPluginRegistry *registry,
1933
 
                 GrlMediaPlugin *source,
1934
 
                 gpointer user_data)
 
2081
source_added_cb (GrlRegistry *registry,
 
2082
                 GrlSource *source,
 
2083
                 gpointer user_data)
1935
2084
{
1936
2085
  GRL_DEBUG ("Detected new source available: '%s'",
1937
 
           grl_metadata_source_get_name (GRL_METADATA_SOURCE (source)));
 
2086
             grl_source_get_name (source));
1938
2087
 
1939
 
  GRL_DEBUG ("\tPlugin's name: %s", grl_media_plugin_get_name (GRL_MEDIA_PLUGIN (source)));
1940
 
  GRL_DEBUG ("\tPlugin's description: %s", grl_media_plugin_get_description (GRL_MEDIA_PLUGIN (source)));
1941
 
  GRL_DEBUG ("\tPlugin's author: %s", grl_media_plugin_get_author (GRL_MEDIA_PLUGIN (source)));
1942
 
  GRL_DEBUG ("\tPlugin's license: %s", grl_media_plugin_get_license (GRL_MEDIA_PLUGIN (source)));
1943
 
  GRL_DEBUG ("\tPlugin's version: %s", grl_media_plugin_get_version (GRL_MEDIA_PLUGIN (source)));
1944
 
  GRL_DEBUG ("\tPlugin's web site: %s", grl_media_plugin_get_site (GRL_MEDIA_PLUGIN (source)));
 
2088
  GRL_DEBUG ("\tSource's name: %s", grl_source_get_name (source));
 
2089
  GRL_DEBUG ("\tSource's description: %s", grl_source_get_description (source));
1945
2090
 
1946
2091
  /* If showing the plugin list, refresh it */
1947
2092
  if (!ui_state->cur_source && !ui_state->cur_container) {
1948
 
    show_plugins ();
 
2093
    show_browsable_sources ();
1949
2094
  }
1950
2095
 
1951
2096
  /* Also refresh the search combos */
1954
2099
 
1955
2100
  /* Check for changes in source (if supported) */
1956
2101
  if (ui_state->changes_notification &&
1957
 
      (grl_metadata_source_supported_operations (GRL_METADATA_SOURCE (source)) &
 
2102
      (grl_source_supported_operations (source) &
1958
2103
       GRL_OP_NOTIFY_CHANGE)) {
1959
 
    if (grl_media_source_notify_change_start (GRL_MEDIA_SOURCE (source), NULL)) {
1960
 
      g_signal_connect (GRL_MEDIA_SOURCE (source), "content-changed",
 
2104
    if (grl_source_notify_change_start (GRL_SOURCE (source), NULL)) {
 
2105
      g_signal_connect (GRL_SOURCE (source), "content-changed",
1961
2106
                        G_CALLBACK (content_changed_cb), NULL);
1962
2107
    }
1963
2108
  }
1964
2109
}
1965
2110
 
1966
2111
static void
1967
 
source_removed_cb (GrlPluginRegistry *registry,
1968
 
                   GrlMediaPlugin *source,
1969
 
                   gpointer user_data)
 
2112
source_removed_cb (GrlRegistry *registry,
 
2113
                   GrlSource *source,
 
2114
                   gpointer user_data)
1970
2115
{
1971
2116
  GRL_DEBUG ("Source '%s' is gone",
1972
 
             grl_metadata_source_get_name (GRL_METADATA_SOURCE (source)));
 
2117
             grl_source_get_name (source));
1973
2118
 
1974
2119
  if (!ui_state->cur_source && !ui_state->cur_container) {
1975
2120
    /* If showing the plugin list, refresh it */
1976
 
    show_plugins ();
 
2121
    show_browsable_sources ();
1977
2122
  } else if ((gpointer)ui_state->cur_source == user_data ) {
1978
2123
    /* If we were browsing that source, cancel operation and  go back to
1979
2124
       plugin list view */
1989
2134
static void
1990
2135
load_plugins (void)
1991
2136
{
1992
 
  GrlPluginRegistry *registry;
1993
 
  registry = grl_plugin_registry_get_default ();
 
2137
  GrlRegistry *registry;
 
2138
  registry = grl_registry_get_default ();
1994
2139
  g_signal_connect (registry, "source-added",
1995
2140
                    G_CALLBACK (source_added_cb), NULL);
1996
2141
  g_signal_connect (registry, "source-removed",
1997
2142
                    G_CALLBACK (source_removed_cb), NULL);
1998
 
  if (!grl_plugin_registry_load_all (registry, NULL)) {
 
2143
  if (!grl_registry_load_all_plugins (registry, NULL)) {
1999
2144
    g_error ("Failed to load plugins.");
2000
2145
  }
2001
2146
}
2003
2148
static void
2004
2149
shutdown_plugins (void)
2005
2150
{
2006
 
  GList *sources = NULL;
2007
 
  GrlPluginRegistry *registry;
 
2151
  GList *plugins;
 
2152
  GList *plugin_iter;
 
2153
  GrlRegistry *registry;
2008
2154
 
2009
2155
  /* Cancel previous operation, if any */
2010
2156
  cancel_current_operation ();
2013
2159
     we are about to shut down */
2014
2160
  clear_ui ();
2015
2161
 
2016
 
  registry = grl_plugin_registry_get_default ();
 
2162
  registry = grl_registry_get_default ();
2017
2163
 
2018
2164
  /* Disable "source-removed" handler */
2019
2165
  g_signal_handlers_block_by_func (G_OBJECT (registry), source_removed_cb,
2020
2166
                                   NULL);
2021
2167
 
2022
2168
  /* Shut down the plugins now */
2023
 
  sources = grl_plugin_registry_get_sources (registry, FALSE);
2024
 
  while (sources) {
2025
 
    const gchar *plugin_id;
2026
 
    GrlMediaPlugin *source;
2027
 
 
2028
 
    source = GRL_MEDIA_PLUGIN (sources->data);
2029
 
    plugin_id = grl_media_plugin_get_id (source);
2030
 
    grl_plugin_registry_unload (registry, plugin_id, NULL);
2031
 
 
2032
 
    g_list_free (sources);
2033
 
    sources = grl_plugin_registry_get_sources (registry, FALSE);
 
2169
  plugins = grl_registry_get_plugins (registry, TRUE);
 
2170
  for (plugin_iter = plugins;
 
2171
       plugin_iter;
 
2172
       plugin_iter = g_list_next (plugin_iter)) {
 
2173
    grl_registry_unload_plugin (registry,
 
2174
                                grl_plugin_get_id (GRL_PLUGIN (plugin_iter->data)),
 
2175
                                NULL);
2034
2176
  }
2035
 
  g_list_free (sources);
 
2177
  g_list_free (plugins);
2036
2178
 
2037
2179
  /* Re-enable "source-removed" handler */
2038
2180
  g_signal_handlers_unblock_by_func (G_OBJECT (registry), source_removed_cb,
2047
2189
static void
2048
2190
load_all_plugins ()
2049
2191
{
2050
 
  GrlPluginRegistry *registry;
2051
 
 
2052
 
  registry = grl_plugin_registry_get_default ();
2053
 
 
2054
 
  grl_plugin_registry_load_all (registry, NULL);
 
2192
  GrlRegistry *registry;
 
2193
 
 
2194
  registry = grl_registry_get_default ();
 
2195
 
 
2196
  grl_registry_load_all_plugins (registry, NULL);
2055
2197
}
2056
2198
 
2057
2199
static void
2071
2213
  grl_init (&argc, &argv);
2072
2214
  GRL_LOG_DOMAIN_INIT (test_ui_log_domain, "test-ui");
2073
2215
  launchers_setup ();
 
2216
  options_setup ();
2074
2217
  ui_setup ();
2075
2218
  configure_plugins ();
2076
2219
  load_plugins ();