static void start_monitoring_directory (FMTreeModel *model, TreeNode *node) { NemoDirectory *directory; NemoFileAttributes attributes; if (node->done_loading_id != 0) { return; } g_assert (node->files_added_id == 0); g_assert (node->files_changed_id == 0); directory = node->directory; node->done_loading_id = g_signal_connect (directory, "done_loading", G_CALLBACK (done_loading_callback), node->root); node->files_added_id = g_signal_connect (directory, "files_added", G_CALLBACK (files_changed_callback), node->root); node->files_changed_id = g_signal_connect (directory, "files_changed", G_CALLBACK (files_changed_callback), node->root); set_done_loading (model, node, nemo_directory_are_all_files_seen (directory)); attributes = get_tree_monitor_attributes (); nemo_directory_file_monitor_add (directory, model, model->details->show_hidden_files, attributes, files_changed_callback, node->root); }
static void add_directory_to_directory_list (NemoActionManager *action_manager, NemoDirectory *directory, GList **directory_list, GCallback changed_callback) { NemoFileAttributes attributes; if (g_list_find (*directory_list, directory) == NULL) { nemo_directory_ref (directory); attributes = NEMO_FILE_ATTRIBUTES_FOR_ICON | NEMO_FILE_ATTRIBUTE_INFO | NEMO_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT; nemo_directory_file_monitor_add (directory, directory_list, FALSE, attributes, (NemoDirectoryCallback)changed_callback, action_manager); g_signal_connect_object (directory, "files_added", G_CALLBACK (changed_callback), action_manager, 0); g_signal_connect_object (directory, "files_changed", G_CALLBACK (changed_callback), action_manager, 0); *directory_list = g_list_append (*directory_list, directory); } }
static void monitor_add_directory (gpointer key, gpointer value, gpointer callback_data) { MergedMonitor *monitor; monitor = value; nemo_directory_file_monitor_add (NEMO_DIRECTORY (callback_data), monitor, monitor->monitor_hidden_files, monitor->monitor_attributes, forward_files_added_cover, monitor->merged); }
static void desktop_monitor_add (NemoDirectory *directory, gconstpointer client, gboolean monitor_hidden_files, NemoFileAttributes file_attributes, NemoDirectoryCallback callback, gpointer callback_data) { NemoDesktopDirectory *desktop; MergedMonitor *monitor; GList *merged_callback_list; desktop = NEMO_DESKTOP_DIRECTORY (directory); /* Map the client to a unique value so this doesn't interfere * with direct monitoring of the directory by the same client. */ monitor = g_hash_table_lookup (desktop->details->monitors, client); if (monitor != NULL) { g_assert (monitor->desktop_dir == desktop); } else { monitor = g_new0 (MergedMonitor, 1); monitor->desktop_dir = desktop; g_hash_table_insert (desktop->details->monitors, (gpointer) client, monitor); } monitor->monitor_hidden_files = monitor_hidden_files; monitor->monitor_attributes = file_attributes; /* Call through to the real directory add calls. */ merged_callback_list = NULL; /* Call up to real dir */ nemo_directory_file_monitor_add (desktop->details->real_directory, monitor, monitor_hidden_files, file_attributes, build_merged_callback_list, &merged_callback_list); /* Handle the desktop part */ merged_callback_list = g_list_concat (merged_callback_list, nemo_file_list_copy (directory->details->file_list)); if (callback != NULL) { (* callback) (directory, merged_callback_list, callback_data); } nemo_file_list_free (merged_callback_list); }
/* Create a monitor on each of the directories in the list. */ static void merged_monitor_add (NemoDirectory *directory, gconstpointer client, gboolean monitor_hidden_files, NemoFileAttributes file_attributes, NemoDirectoryCallback callback, gpointer callback_data) { NemoMergedDirectory *merged; MergedMonitor *monitor; GList *node; GList *merged_callback_list; merged = NEMO_MERGED_DIRECTORY (directory); /* Map the client to a unique value so this doesn't interfere * with direct monitoring of the directory by the same client. */ monitor = g_hash_table_lookup (merged->details->monitors, client); if (monitor != NULL) { g_assert (monitor->merged == merged); } else { monitor = g_new0 (MergedMonitor, 1); monitor->merged = merged; g_hash_table_insert (merged->details->monitors, (gpointer) client, monitor); } monitor->monitor_hidden_files = monitor_hidden_files; monitor->monitor_attributes = file_attributes; /* Call through to the real directory add calls. */ merged_callback_list = NULL; for (node = merged->details->directories; node != NULL; node = node->next) { nemo_directory_file_monitor_add (node->data, monitor, monitor_hidden_files, file_attributes, build_merged_callback_list, &merged_callback_list); } if (callback != NULL) { (* callback) (directory, merged_callback_list, callback_data); } nemo_file_list_free (merged_callback_list); }
void nemo_self_check_directory (void) { NemoDirectory *directory; NemoFile *file; directory = nemo_directory_get_by_uri ("file:///etc"); file = nemo_file_get_by_uri ("file:///etc/passwd"); EEL_CHECK_INTEGER_RESULT (g_hash_table_size (directories), 1); nemo_directory_file_monitor_add (directory, &data_dummy, TRUE, 0, NULL, NULL); /* FIXME: these need to be updated to the new metadata infrastructure * as make check doesn't pass. nemo_file_set_metadata (file, "test", "default", "value"); EEL_CHECK_STRING_RESULT (nemo_file_get_metadata (file, "test", "default"), "value"); nemo_file_set_boolean_metadata (file, "test_boolean", TRUE, TRUE); EEL_CHECK_BOOLEAN_RESULT (nemo_file_get_boolean_metadata (file, "test_boolean", TRUE), TRUE); nemo_file_set_boolean_metadata (file, "test_boolean", TRUE, FALSE); EEL_CHECK_BOOLEAN_RESULT (nemo_file_get_boolean_metadata (file, "test_boolean", TRUE), FALSE); EEL_CHECK_BOOLEAN_RESULT (nemo_file_get_boolean_metadata (NULL, "test_boolean", TRUE), TRUE); nemo_file_set_integer_metadata (file, "test_integer", 0, 17); EEL_CHECK_INTEGER_RESULT (nemo_file_get_integer_metadata (file, "test_integer", 0), 17); nemo_file_set_integer_metadata (file, "test_integer", 0, -1); EEL_CHECK_INTEGER_RESULT (nemo_file_get_integer_metadata (file, "test_integer", 0), -1); nemo_file_set_integer_metadata (file, "test_integer", 42, 42); EEL_CHECK_INTEGER_RESULT (nemo_file_get_integer_metadata (file, "test_integer", 42), 42); EEL_CHECK_INTEGER_RESULT (nemo_file_get_integer_metadata (NULL, "test_integer", 42), 42); EEL_CHECK_INTEGER_RESULT (nemo_file_get_integer_metadata (file, "nonexistent_key", 42), 42); */ EEL_CHECK_BOOLEAN_RESULT (nemo_directory_get_by_uri ("file:///etc") == directory, TRUE); nemo_directory_unref (directory); EEL_CHECK_BOOLEAN_RESULT (nemo_directory_get_by_uri ("file:///etc/") == directory, TRUE); nemo_directory_unref (directory); EEL_CHECK_BOOLEAN_RESULT (nemo_directory_get_by_uri ("file:///etc////") == directory, TRUE); nemo_directory_unref (directory); nemo_file_unref (file); nemo_directory_file_monitor_remove (directory, &data_dummy); nemo_directory_unref (directory); while (g_hash_table_size (directories) != 0) { gtk_main_iteration (); } EEL_CHECK_INTEGER_RESULT (g_hash_table_size (directories), 0); directory = nemo_directory_get_by_uri ("file:///etc"); got_files_flag = FALSE; nemo_directory_call_when_ready (directory, NEMO_FILE_ATTRIBUTE_INFO | NEMO_FILE_ATTRIBUTE_DEEP_COUNTS, TRUE, got_files_callback, &data_dummy); while (!got_files_flag) { gtk_main_iteration (); } EEL_CHECK_BOOLEAN_RESULT (directory->details->file_list == NULL, TRUE); EEL_CHECK_INTEGER_RESULT (g_hash_table_size (directories), 1); file = nemo_file_get_by_uri ("file:///etc/passwd"); /* EEL_CHECK_STRING_RESULT (nemo_file_get_metadata (file, "test", "default"), "value"); */ nemo_file_unref (file); nemo_directory_unref (directory); EEL_CHECK_INTEGER_RESULT (g_hash_table_size (directories), 0); }