static void
infinoted_plugin_dbus_explore_node(InfinotedPluginDbus* plugin,
                                   InfinotedPluginDbusInvocation* invocation,
                                   InfBrowser* browser,
                                   const InfBrowserIter* iter)
{
  InfBrowserIter child_iter;
  GVariantBuilder builder;

  child_iter = *iter;
  g_variant_builder_init(&builder, G_VARIANT_TYPE("a(ss)"));

  if(inf_browser_get_child(browser, &child_iter))
  {
    do
    {
      if(inf_browser_is_subdirectory(browser, &child_iter))
      {
        g_variant_builder_add(
          &builder,
          "(ss)",
          inf_browser_get_node_name(browser, &child_iter),
          "InfSubdirectory"
        );
      }
      else
      {
        g_variant_builder_add(
          &builder,
          "(ss)",
          inf_browser_get_node_name(browser, &child_iter),
          inf_browser_get_node_type(browser, &child_iter)
        );
      }
    } while(inf_browser_get_next(browser, &child_iter));
  }

  g_dbus_method_invocation_return_value(
    invocation->invocation,
    g_variant_new("(@a(ss))", g_variant_builder_end(&builder))
  );

  infinoted_plugin_dbus_invocation_free(invocation->plugin, invocation);
}
static void
infinoted_plugin_document_stream_navigate_func(InfBrowser* browser,
                                               const InfBrowserIter* iter,
                                               const GError* error,
                                               gpointer user_data)
{
  InfinotedPluginDocumentStreamStream* stream;
  InfSessionProxy* proxy;
  InfRequest* request;

  stream = (InfinotedPluginDocumentStreamStream*)user_data;
  stream->navigate_handle = NULL;

  if(error != NULL)
  {
    infinoted_plugin_document_stream_send_error(stream, error->message);
  }
  else
  {
    if(inf_browser_is_subdirectory(browser, iter) || 
       (strcmp(inf_browser_get_node_type(browser, iter), "InfText") != 0 &&
        strcmp(inf_browser_get_node_type(browser, iter), "InfChat") != 0))
    {
      infinoted_plugin_document_stream_send_error(
        stream,
        _("Not a text or chat node")
      );
    }
    else
    {
      stream->iter = *iter;
      proxy = inf_browser_get_session(browser, iter);
      if(proxy != NULL)
      {
        infinoted_plugin_document_stream_subscribe_done(stream, proxy);
      }
      else
      {
        request = inf_browser_get_pending_request(
          browser,
          iter,
          "subscribe-session"
        );

        if(request != NULL)
        {
          g_signal_connect(
            G_OBJECT(browser),
            "finished",
            G_CALLBACK(infinoted_plugin_document_stream_subscribe_func),
            stream
          );
        }
        else
        {
          request = inf_browser_subscribe(
            browser,
            iter,
            infinoted_plugin_document_stream_subscribe_func,
            stream
          );
        }

        stream->subscribe_request = request;
      }
    }
  }
}
Exemplo n.º 3
0
QString BrowserIter::noteType()
{
    if( m_infBrowser )
        return inf_browser_get_node_type( INF_BROWSER(m_infBrowser), &m_infBrowserIter );
    return "";
}