static void merged_add_real_directory (NemoMergedDirectory *merged, NemoDirectory *real_directory) { g_return_if_fail (NEMO_IS_MERGED_DIRECTORY (merged)); g_return_if_fail (NEMO_IS_DIRECTORY (real_directory)); g_return_if_fail (!NEMO_IS_MERGED_DIRECTORY (real_directory)); g_return_if_fail (g_list_find (merged->details->directories, real_directory) == NULL); /* Add to our list of directories. */ nemo_directory_ref (real_directory); merged->details->directories = g_list_prepend (merged->details->directories, real_directory); merged->details->directories_not_done_loading = g_list_prepend (merged->details->directories_not_done_loading, real_directory); g_signal_connect_object (real_directory, "done_loading", G_CALLBACK (done_loading_callback), merged, 0); /* FIXME bugzilla.gnome.org 45084: The done_loading part won't work for the case where * we have no directories in our list. */ /* Add the directory to any extant monitors. */ g_hash_table_foreach (merged->details->monitors, monitor_add_directory, real_directory); /* FIXME bugzilla.gnome.org 42541: Do we need to add the directory to callbacks too? */ g_signal_connect_object (real_directory, "files_added", G_CALLBACK (forward_files_added_cover), merged, 0); g_signal_connect_object (real_directory, "files_changed", G_CALLBACK (forward_files_changed_cover), merged, 0); }
static void merged_remove_real_directory (NemoMergedDirectory *merged, NemoDirectory *real_directory) { g_return_if_fail (NEMO_IS_MERGED_DIRECTORY (merged)); g_return_if_fail (NEMO_IS_DIRECTORY (real_directory)); g_return_if_fail (g_list_find (merged->details->directories, real_directory) != NULL); /* Since the real directory will be going away, act as if files were removed */ real_directory_notify_files_removed (real_directory); /* Remove this directory from callbacks and monitors. */ eel_g_hash_table_safe_for_each (merged->details->callbacks, merged_callback_remove_directory_cover, real_directory); g_hash_table_foreach (merged->details->monitors, monitor_remove_directory, real_directory); /* Disconnect all the signals. */ g_signal_handlers_disconnect_matched (real_directory, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, merged); /* Remove from our list of directories. */ merged->details->directories = g_list_remove (merged->details->directories, real_directory); merged->details->directories_not_done_loading = g_list_remove (merged->details->directories_not_done_loading, real_directory); nemo_directory_unref (real_directory); }
void nemo_directory_force_reload (NemoDirectory *directory) { g_return_if_fail (NEMO_IS_DIRECTORY (directory)); NEMO_DIRECTORY_CLASS (G_OBJECT_GET_CLASS (directory))->force_reload (directory); }
GFile * nemo_directory_get_location (NemoDirectory *directory) { g_return_val_if_fail (NEMO_IS_DIRECTORY (directory), NULL); return g_object_ref (directory->details->location); }
char * nemo_directory_get_uri (NemoDirectory *directory) { g_return_val_if_fail (NEMO_IS_DIRECTORY (directory), NULL); return g_file_get_uri (directory->details->location); }
void nemo_directory_remove_file (NemoDirectory *directory, NemoFile *file) { GList *node; g_assert (NEMO_IS_DIRECTORY (directory)); g_assert (NEMO_IS_FILE (file)); g_assert (file->details->name != NULL); /* Find the list node in the hash table. */ node = extract_from_hash_table (directory, file); g_assert (node != NULL); g_assert (node->data == file); /* Remove the item from the list. */ directory->details->file_list = g_list_remove_link (directory->details->file_list, node); g_list_free_1 (node); nemo_directory_remove_file_from_work_queue (directory, file); if (!file->details->unconfirmed) { directory->details->confirmed_file_count--; } /* Unref if we are monitoring. */ if (nemo_directory_is_file_list_monitored (directory)) { nemo_file_unref (file); } }
void nemo_directory_add_file (NemoDirectory *directory, NemoFile *file) { GList *node; gboolean add_to_work_queue; g_assert (NEMO_IS_DIRECTORY (directory)); g_assert (NEMO_IS_FILE (file)); g_assert (file->details->name != NULL); /* Add to list. */ node = g_list_prepend (directory->details->file_list, file); directory->details->file_list = node; /* Add to hash table. */ add_to_hash_table (directory, file, node); directory->details->confirmed_file_count++; add_to_work_queue = FALSE; if (nemo_directory_is_file_list_monitored (directory)) { /* Ref if we are monitoring, since monitoring owns the file list. */ nemo_file_ref (file); add_to_work_queue = TRUE; } else if (nemo_directory_has_active_request_for_file (directory, file)) { /* We're waiting for the file in a call_when_ready. Make sure we add the file to the work queue so that said waiter won't wait forever for e.g. all files in the directory to be done */ add_to_work_queue = TRUE; } if (add_to_work_queue) { nemo_directory_add_file_to_work_queue (directory, file); } }
gboolean nemo_directory_is_not_empty (NemoDirectory *directory) { g_return_val_if_fail (NEMO_IS_DIRECTORY (directory), FALSE); return NEMO_DIRECTORY_CLASS (G_OBJECT_GET_CLASS (directory))->is_not_empty (directory); }
gboolean nemo_directory_are_all_files_seen (NemoDirectory *directory) { g_return_val_if_fail (NEMO_IS_DIRECTORY (directory), FALSE); return NEMO_DIRECTORY_CLASS (G_OBJECT_GET_CLASS (directory))->are_all_files_seen (directory); }
static void got_files_callback (NemoDirectory *directory, GList *files, gpointer callback_data) { g_assert (NEMO_IS_DIRECTORY (directory)); g_assert (g_list_length (files) > 10); g_assert (callback_data == &data_dummy); got_files_flag = TRUE; }
void nemo_directory_file_monitor_remove (NemoDirectory *directory, gconstpointer client) { g_return_if_fail (NEMO_IS_DIRECTORY (directory)); g_return_if_fail (client != NULL); NEMO_DIRECTORY_CLASS (G_OBJECT_GET_CLASS (directory))->file_monitor_remove (directory, client); }
static void invalidate_count_and_unref (gpointer key, gpointer value, gpointer user_data) { g_assert (NEMO_IS_DIRECTORY (key)); g_assert (value == key); g_assert (user_data == NULL); nemo_directory_invalidate_count_and_mime_list (key); nemo_directory_unref (key); }
gboolean nemo_directory_is_in_recent (NemoDirectory *directory) { g_assert (NEMO_IS_DIRECTORY (directory)); if (directory->details->location == NULL) { return FALSE; } return g_file_has_uri_scheme (directory->details->location, "recent"); }
void nemo_directory_unref (NemoDirectory *directory) { if (directory == NULL) { return; } g_return_if_fail (NEMO_IS_DIRECTORY (directory)); g_object_unref (directory); }
void nemo_directory_cancel_callback (NemoDirectory *directory, NemoDirectoryCallback callback, gpointer callback_data) { g_return_if_fail (NEMO_IS_DIRECTORY (directory)); g_return_if_fail (callback != NULL); NEMO_DIRECTORY_CLASS (G_OBJECT_GET_CLASS (directory))->cancel_callback (directory, callback, callback_data); }
static void collect_parent_directories (GHashTable *hash_table, NemoDirectory *directory) { g_assert (hash_table != NULL); g_assert (NEMO_IS_DIRECTORY (directory)); if (g_hash_table_lookup (hash_table, directory) == NULL) { nemo_directory_ref (directory); g_hash_table_insert (hash_table, directory, directory); } }
gboolean nemo_directory_is_local (NemoDirectory *directory) { g_return_val_if_fail (NEMO_IS_DIRECTORY (directory), FALSE); if (directory->details->location == NULL) { return TRUE; } return nemo_directory_is_in_trash (directory) || g_file_is_native (directory->details->location); }
NemoDirectory * nemo_directory_ref (NemoDirectory *directory) { if (directory == NULL) { return directory; } g_return_val_if_fail (NEMO_IS_DIRECTORY (directory), NULL); g_object_ref (directory); return directory; }
static void call_files_added_free_list (gpointer key, gpointer value, gpointer user_data) { g_assert (NEMO_IS_DIRECTORY (key)); g_assert (value != NULL); g_assert (user_data == NULL); g_signal_emit (key, signals[FILES_ADDED], 0, value); g_list_free (value); }
gboolean nemo_directory_contains_file (NemoDirectory *directory, NemoFile *file) { g_return_val_if_fail (NEMO_IS_DIRECTORY (directory), FALSE); g_return_val_if_fail (NEMO_IS_FILE (file), FALSE); if (nemo_file_is_gone (file)) { return FALSE; } return NEMO_DIRECTORY_CLASS (G_OBJECT_GET_CLASS (directory))->contains_file (directory, file); }
NemoFile * nemo_directory_find_file_by_name (NemoDirectory *directory, const char *name) { GList *node; g_return_val_if_fail (NEMO_IS_DIRECTORY (directory), NULL); g_return_val_if_fail (name != NULL, NULL); node = g_hash_table_lookup (directory->details->file_hash, name); return node == NULL ? NULL : NEMO_FILE (node->data); }
static void invalidate_one_count (gpointer key, gpointer value, gpointer user_data) { NemoDirectory *directory; g_assert (key != NULL); g_assert (NEMO_IS_DIRECTORY (value)); g_assert (user_data == NULL); directory = NEMO_DIRECTORY (value); nemo_directory_invalidate_count_and_mime_list (directory); }
void nemo_directory_call_when_ready (NemoDirectory *directory, NemoFileAttributes file_attributes, gboolean wait_for_all_files, NemoDirectoryCallback callback, gpointer callback_data) { g_return_if_fail (NEMO_IS_DIRECTORY (directory)); g_return_if_fail (callback != NULL); NEMO_DIRECTORY_CLASS (G_OBJECT_GET_CLASS (directory))->call_when_ready (directory, file_attributes, wait_for_all_files, callback, callback_data); }
static void async_state_changed_one (gpointer key, gpointer value, gpointer user_data) { NemoDirectory *directory; g_assert (key != NULL); g_assert (NEMO_IS_DIRECTORY (value)); g_assert (user_data == NULL); directory = NEMO_DIRECTORY (value); nemo_directory_async_state_changed (directory); emit_change_signals_for_all_files (directory); }
void nemo_merged_directory_add_real_directory (NemoMergedDirectory *merged, NemoDirectory *real_directory) { g_return_if_fail (NEMO_IS_MERGED_DIRECTORY (merged)); g_return_if_fail (NEMO_IS_DIRECTORY (real_directory)); g_return_if_fail (!NEMO_IS_MERGED_DIRECTORY (real_directory)); /* Quietly do nothing if asked to add something that's already there. */ if (g_list_find (merged->details->directories, real_directory) != NULL) { return; } g_signal_emit (merged, signals[ADD_REAL_DIRECTORY], 0, real_directory); }
void nemo_directory_file_monitor_add (NemoDirectory *directory, gconstpointer client, gboolean monitor_hidden_files, NemoFileAttributes file_attributes, NemoDirectoryCallback callback, gpointer callback_data) { g_return_if_fail (NEMO_IS_DIRECTORY (directory)); g_return_if_fail (client != NULL); NEMO_DIRECTORY_CLASS (G_OBJECT_GET_CLASS (directory))->file_monitor_add (directory, client, monitor_hidden_files, file_attributes, callback, callback_data); }
static void call_get_file_info_free_list (gpointer key, gpointer value, gpointer user_data) { NemoDirectory *directory; GList *files; g_assert (NEMO_IS_DIRECTORY (key)); g_assert (value != NULL); g_assert (user_data == NULL); directory = key; files = value; nemo_directory_get_info_for_new_files (directory, files); g_list_foreach (files, (GFunc) g_object_unref, NULL); g_list_free (files); }
char * nemo_directory_get_file_uri (NemoDirectory *directory, const char *file_name) { GFile *child; char *result; g_return_val_if_fail (NEMO_IS_DIRECTORY (directory), NULL); g_return_val_if_fail (file_name != NULL, NULL); result = NULL; child = g_file_get_child (directory->details->location, file_name); result = g_file_get_uri (child); g_object_unref (child); return result; }
static void directory_ready_callback (NemoDirectory *directory, GList *files, gpointer callback_data) { MergedCallback *merged_callback; g_assert (NEMO_IS_DIRECTORY (directory)); g_assert (callback_data != NULL); merged_callback = callback_data; g_assert (g_list_find (merged_callback->non_ready_directories, directory) != NULL); /* Update based on this call. */ merged_callback->merged_file_list = g_list_concat (merged_callback->merged_file_list, nemo_file_list_copy (files)); /* Check if we are ready. */ merged_callback_remove_directory (merged_callback, directory); }