forked from AuroraMiddleware/gtk
file system model: Add batched insertion
Add a batched version of gtk_file_system_model_add_and_query_file that takes a list of files and avoids resorting the model for each individual insertion. The querying is still done one-file-at-a-time, so more optimization is certainly possible.
This commit is contained in:
parent
9590879e2f
commit
b2ceadb057
@ -2129,3 +2129,39 @@ _gtk_file_system_model_add_and_query_file (GtkFileSystemModel *model,
|
||||
gtk_file_system_model_query_done,
|
||||
model);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_file_system_model_one_query_done (GObject * object,
|
||||
GAsyncResult *res,
|
||||
gpointer data)
|
||||
{
|
||||
GtkFileSystemModel *model = data; /* only a valid pointer if not cancelled */
|
||||
|
||||
gtk_file_system_model_query_done (object, res, data);
|
||||
thaw_updates (model);
|
||||
}
|
||||
|
||||
void
|
||||
_gtk_file_system_model_add_and_query_files (GtkFileSystemModel *model,
|
||||
GList *list,
|
||||
const char *attributes)
|
||||
{
|
||||
GList *l;
|
||||
GFile *file;
|
||||
|
||||
g_return_if_fail (GTK_IS_FILE_SYSTEM_MODEL (model));
|
||||
g_return_if_fail (attributes != NULL);
|
||||
|
||||
for (l = list; l; l = l->next)
|
||||
{
|
||||
file = (GFile *)l->data;
|
||||
freeze_updates (model);
|
||||
g_file_query_info_async (file,
|
||||
attributes,
|
||||
G_FILE_QUERY_INFO_NONE,
|
||||
IO_PRIORITY,
|
||||
model->cancellable,
|
||||
gtk_file_system_model_one_query_done,
|
||||
model);
|
||||
}
|
||||
}
|
||||
|
@ -66,9 +66,12 @@ const GValue * _gtk_file_system_model_get_value (GtkFileSystemModel
|
||||
GtkTreeIter * iter,
|
||||
int column);
|
||||
|
||||
void _gtk_file_system_model_add_and_query_file (GtkFileSystemModel *model,
|
||||
GFile *file,
|
||||
const char *attributes);
|
||||
void _gtk_file_system_model_add_and_query_file (GtkFileSystemModel *model,
|
||||
GFile *file,
|
||||
const char *attributes);
|
||||
void _gtk_file_system_model_add_and_query_files (GtkFileSystemModel *model,
|
||||
GList *files,
|
||||
const char *attributes);
|
||||
void _gtk_file_system_model_update_file (GtkFileSystemModel *model,
|
||||
GFile *file,
|
||||
GFileInfo *info);
|
||||
|
Loading…
Reference in New Issue
Block a user