static void
rb_grilo_source_dispose (GObject *object)
{
	RBGriloSource *source = RB_GRILO_SOURCE (object);

	if (source->priv->browse_op != 0) {
		grl_operation_cancel (source->priv->browse_op);
		source->priv->browse_op = 0;
	}

	if (source->priv->media_browse_op != 0) {
		grl_operation_cancel (source->priv->media_browse_op);
		source->priv->media_browse_op = 0;
	}

	if (source->priv->query_model != NULL) {
		g_object_unref (source->priv->query_model);
		source->priv->query_model = NULL;
	}

	if (source->priv->entry_type != NULL) {
		g_object_unref (source->priv->entry_type);
		source->priv->entry_type = NULL;
	}

	if (source->priv->maybe_expand_idle != 0) {
		g_source_remove (source->priv->maybe_expand_idle);
		source->priv->maybe_expand_idle = 0;
	}

	G_OBJECT_CLASS (rb_grilo_source_parent_class)->dispose (object);
}
static void
start_media_browse (RBGriloSource *source, GrlMedia *container, GtkTreeIter *container_iter, guint limit)
{
	rb_debug ("starting media browse for %s",
		  grl_source_get_name (source->priv->grilo_source));

	/* cancel existing operation? */
	if (source->priv->media_browse_op != 0) {
		grl_operation_cancel (source->priv->media_browse_op);
	}

	if (source->priv->media_browse_container != NULL) {
		g_object_unref (source->priv->media_browse_container);
	}
	source->priv->media_browse_container = container;
	if (container_iter != NULL) {
		/* hrm, probably have to use row references here.. */
		source->priv->media_browse_container_iter = *container_iter;
	}
	source->priv->media_browse_position = 0;
	source->priv->media_browse_limit = limit;
	source->priv->media_browse_got_containers = FALSE;

	if (source->priv->query_model != NULL) {
		g_object_unref (source->priv->query_model);
	}
	source->priv->query_model = rhythmdb_query_model_new_empty (source->priv->db);
	rb_entry_view_set_model (RB_ENTRY_VIEW (source->priv->entry_view), source->priv->query_model);
	g_object_set (source, "query-model", source->priv->query_model, NULL);

	media_browse_next (source);
}
static void
browse_cb (GrlSource *source,
           guint browse_id,
           GrlMedia *media,
           guint remaining,
           gpointer user_data,
           const GError *error)
{
  GHashTable *prop_table;
  GriloMs2Data *grdata = (GriloMs2Data *) user_data;
  gboolean add_media = FALSE;

  if (error) {
    grdata->error = g_error_copy (error);
    grdata->updated = TRUE;
    return;
  }

  if (media) {
    if ((grdata->list_type == LIST_ITEMS && !grl_media_is_container (media)) ||
        (grdata->list_type == LIST_CONTAINERS && grl_media_is_container (media))) {
      if (grdata->offset == 0) {
        add_media = TRUE;
      } else {
        grdata->offset--;
      }
    } else if (grdata->list_type == LIST_ALL) {
      add_media = TRUE;
    }
  }

  if (add_media) {
    if (grdata->parent_id) {
      grl_media_set_grilo_ms2_parent (media,
                                      grdata->parent_id);
    }
    prop_table = ms2_server_new_properties_hashtable ();
    fill_properties_table (grdata->server,
                           prop_table,
                           grdata->keys,
                           media);
    fill_other_properties_table (grdata->server,
                                 source,
                                 prop_table,
                                 grdata->other_keys,
                                 media);
    grdata->children = g_list_prepend (grdata->children, prop_table);
    grl_operation_options_set_count (grdata->options,
                                     grl_operation_options_get_count (grdata->options) -1);
  }

  if (!remaining) {
    grdata->children = g_list_reverse (grdata->children);
    grdata->updated = TRUE;
  } else if (grl_operation_options_get_count (grdata->options) == 0) {
    grl_operation_cancel (grdata->operation_id);
  }
}
static void
impl_delete_thyself (RBDisplayPage *page)
{
	RBGriloSource *source = RB_GRILO_SOURCE (page);
	RhythmDBEntryType *entry_type;

	if (source->priv->browse_op != 0) {
		grl_operation_cancel (source->priv->browse_op);
		source->priv->browse_op = 0;
	}

	if (source->priv->media_browse_op != 0) {
		grl_operation_cancel (source->priv->media_browse_op);
		source->priv->media_browse_op = 0;
	}

	g_object_get (source, "entry-type", &entry_type, NULL);
	rhythmdb_entry_delete_by_type (source->priv->db, entry_type);
	g_object_unref (entry_type);

	rhythmdb_commit (source->priv->db);
}
Ejemplo n.º 5
0
static void
mex_grilo_feed_stop_op (MexGriloFeed *feed)
{
  MexGriloFeedPrivate *priv = feed->priv;

  if (!priv->op)
    return;

  if (!priv->op->op_id)
    return;

  grl_operation_cancel (priv->op->op_id);
  priv->op->op_id = 0;

  if (priv->completed) {
    priv->completed = FALSE;
    g_object_notify (G_OBJECT (feed), "completed");
  }
}
static void
start_browse (RBGriloSource *source, GrlMedia *container, GtkTreeIter *container_iter, int position)
{
	rb_debug ("starting browse op for %s", grl_source_get_name (source->priv->grilo_source));

	/* cancel existing operation? */
	if (source->priv->browse_op != 0) {
		grl_operation_cancel (source->priv->browse_op);
	}

	if (source->priv->browse_container != NULL) {
		g_object_unref (source->priv->browse_container);
	}
	source->priv->browse_container = container;
	if (container_iter != NULL) {
		/* hrm, probably have to use row references here.. */
		source->priv->browse_container_iter = *container_iter;
	}
	source->priv->browse_position = position;
	source->priv->browse_got_media = FALSE;

	browse_next (source);
}