gboolean metadata_write_queue_confirm(gboolean force_dialog, FileUtilDoneFunc done_func, gpointer done_data) { GList *work; GList *to_approve = NULL; work = metadata_write_queue; while (work) { FileData *fd = work->data; work = work->next; if (!isname(fd->path)) { /* ignore deleted files */ metadata_write_queue_remove(fd); continue; } if (fd->change) continue; /* another operation in progress, skip this file for now */ to_approve = g_list_prepend(to_approve, file_data_ref(fd)); } file_util_write_metadata(NULL, to_approve, NULL, force_dialog, done_func, done_data); return (metadata_write_queue != NULL); }
void metadata_notify_cb(FileData *fd, NotifyType type, gpointer data) { if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE)) && g_list_find(metadata_write_queue, fd)) { DEBUG_1("Notify metadata: %s %04x", fd->path, type); if (!isname(fd->path)) { /* ignore deleted files */ metadata_write_queue_remove(fd); } } }
gboolean metadata_write_queue_remove_list(GList *list) { GList *work; gboolean ret = TRUE; work = list; while (work) { FileData *fd = work->data; work = work->next; ret = ret && metadata_write_queue_remove(fd); } return ret; }
gboolean metadata_write_revert(FileData *fd, const gchar *key) { if (!fd->modified_xmp) return FALSE; g_hash_table_remove(fd->modified_xmp, key); if (g_hash_table_size(fd->modified_xmp) == 0) { metadata_write_queue_remove(fd); } else { /* reread the metadata to restore the original value */ file_data_increment_version(fd); file_data_send_notification(fd, NOTIFY_REREAD); } return TRUE; }