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); } } }
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)); } } }
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; }
static void inf_test_mass_join_explore_finished_cb(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { InfTestMassJoiner* joiner; InfBrowser* browser; InfBrowserIter iter; const char* name; gboolean document_exists; joiner = (InfTestMassJoiner*)user_data; browser = INF_BROWSER(joiner->browser); inf_browser_get_root(browser, &iter); if(inf_browser_get_child(browser, &iter) == FALSE) { fprintf( stderr, "Joiner %s: Document %s does not exist\n", joiner->username, joiner->document ); inf_xml_connection_close(infc_browser_get_connection(joiner->browser)); } document_exists = FALSE; do { name = inf_browser_get_node_name(browser, &iter); if(strcmp(name, joiner->document) == 0) { document_exists = TRUE; inf_browser_subscribe( browser, &iter, inf_test_mass_join_subscribe_finished_cb, joiner ); break; } } while(inf_browser_get_next(browser, &iter) == TRUE); if(!document_exists) { fprintf( stderr, "Joiner %s: Document %s does not exist\n", joiner->username, joiner->document ); inf_xml_connection_close(infc_browser_get_connection(joiner->browser)); } }
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); }
bool BrowserIter::child() { if( m_infBrowser ) return inf_browser_get_child( INF_BROWSER(m_infBrowser), &m_infBrowserIter ) != 0; return 0; }