static void
infinoted_plugin_manager_walk_directory(
  InfinotedPluginManager* manager,
  const InfBrowserIter* iter,
  InfinotedPluginInstance* instance,
  InfinotedPluginManagerWalkDirectoryFunc func)
{
  /* This function walks the whole directory tree recursively and
   * registers running sessions with the given plugin instance. */
  InfBrowser* browser;
  InfBrowserIter child;
  InfSessionProxy* proxy;

  browser = INF_BROWSER(manager->directory);
  if(inf_browser_is_subdirectory(browser, iter) == TRUE)
  {
    if(inf_browser_get_explored(browser, iter) == TRUE)
    {
      child = *iter;
      inf_browser_get_child(browser, &child);
      do
      {
        infinoted_plugin_manager_walk_directory(manager, &child, instance, func);
      } while(inf_browser_get_next(browser, &child));
    }
  }
  else
  {
    proxy = inf_browser_get_session(browser, iter);
    if(proxy != NULL)
    {
      func(manager, instance, iter, proxy);
    }
  }
}
예제 #2
0
static void
inf_test_browser_cmd_ls(InfTestBrowser* test,
                        const gchar* param)
{
  InfBrowserIter iter;
  gboolean result;

  if(inf_browser_get_explored(test->browser, &test->cwd) == FALSE)
  {
    fprintf(
      stderr,
      "Directory '%s' not yet explored\n",
      inf_browser_get_node_name(test->browser, &test->cwd)
    );
  }
  else
  {
    iter = test->cwd;
    for(result = inf_browser_get_child(test->browser, &iter);
        result == TRUE;
        result = inf_browser_get_next(test->browser, &iter))
    {
      printf("%s\n", inf_browser_get_node_name(test->browser, &iter));
    }
  }
}
예제 #3
0
static gboolean
inf_test_browser_find_node(InfTestBrowser* test,
                           const gchar* name,
                           InfBrowserIter* result_iter)
{
  InfBrowserIter iter;
  gboolean result;

  if(inf_browser_get_explored(test->browser, &test->cwd) == FALSE)
  {
    fprintf(
      stderr,
      "Directory '%s' not yet explored\n",
      inf_browser_get_node_name(test->browser, &test->cwd)
    );
  }
  else
  {
    iter = test->cwd;
    for(result = inf_browser_get_child(test->browser, &iter);
        result == TRUE;
        result = inf_browser_get_next(test->browser, &iter))
    {
      if(strcmp(inf_browser_get_node_name(test->browser, &iter), name) == 0)
      {
        *result_iter = iter;
        return TRUE;
      }
    }
  }

  return FALSE;
}
예제 #4
0
static void
inf_test_browser_cmd_explore(InfTestBrowser* test,
                             const gchar* param)
{
  InfBrowserIter iter;

  if(inf_test_browser_find_node(test, param, &iter) == FALSE)
  {
    fprintf(
      stderr,
      "Directory '%s' does not exist\n",
      param
    );
  }
  else if(inf_browser_get_explored(test->browser, &iter) == TRUE)
  {
    fprintf(
      stderr,
      "Directory '%s' is already explored",
      inf_browser_get_node_name(test->browser, &iter)
    );
  }
  else
  {
    inf_browser_explore(test->browser, &iter, NULL, NULL);
  }
}
예제 #5
0
static void
inf_test_browser_cmd_cd(InfTestBrowser* test,
                        const gchar* param)
{
  InfBrowserIter iter;

  if(strcmp(param, "..") == 0)
  {
    iter = test->cwd;
    if(inf_browser_get_parent(test->browser, &iter) == FALSE)
    {
      fprintf(stderr, "Already at the root directory\n");
    }
    else
    {
      test->cwd = iter;
    }
  }
  else if(inf_test_browser_find_node(test, param, &iter) == FALSE)
  {
    fprintf(
      stderr,
      "Directory '%s' does not exist\n",
      param
    );
  }
  else if(inf_browser_get_explored(test->browser, &iter) == FALSE)
  {
    fprintf(
      stderr,
      "Directory '%s' not yet explored\n",
      inf_browser_get_node_name(test->browser, &iter)
    );
  }
  else
  {
    test->cwd = iter;
  }
}
예제 #6
0
bool BrowserIter::isExplored()
{
    if( m_infBrowser )
        return inf_browser_get_explored( INF_BROWSER(m_infBrowser), &m_infBrowserIter ) != 0;
    return 0;
}