Sync trash dir items when files change
Resolves: RHEL-2824
This commit is contained in:
		
							parent
							
								
									5d10c69bf2
								
							
						
					
					
						commit
						313a3fbe16
					
				| @ -25,7 +25,7 @@ | |||||||
| 
 | 
 | ||||||
| Name: gvfs | Name: gvfs | ||||||
| Version: 1.36.2 | Version: 1.36.2 | ||||||
| Release: 15%{?dist} | Release: 16%{?dist} | ||||||
| Summary: Backends for the gio framework in GLib | Summary: Backends for the gio framework in GLib | ||||||
| 
 | 
 | ||||||
| License: GPLv3 and LGPLv2+ and BSD and MPLv2.0 | License: GPLv3 and LGPLv2+ and BSD and MPLv2.0 | ||||||
| @ -78,6 +78,7 @@ Patch15: google-performance-fixes.patch | |||||||
| 
 | 
 | ||||||
| # https://issues.redhat.com/browse/RHEL-2824 | # https://issues.redhat.com/browse/RHEL-2824 | ||||||
| Patch16: trash-Add-support-for-x-gvfs-notrash-option-to-ignor.patch | Patch16: trash-Add-support-for-x-gvfs-notrash-option-to-ignor.patch | ||||||
|  | Patch17: trash-Sync-trash-dir-items-when-files-change.patch | ||||||
| 
 | 
 | ||||||
| BuildRequires: pkgconfig | BuildRequires: pkgconfig | ||||||
| BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version} | BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version} | ||||||
| @ -469,6 +470,9 @@ killall -USR1 gvfsd >&/dev/null || : | |||||||
| %{_datadir}/installed-tests | %{_datadir}/installed-tests | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Wed Dec 06 2023 Ondrej Holy <oholy@redhat.com> - 1.36.2-16 | ||||||
|  | - Sync trash dir items when files change (RHEL-2824) | ||||||
|  | 
 | ||||||
| * Mon Oct 09 2023 Ondrej Holy <oholy@redhat.com> - 1.36.2-15 | * Mon Oct 09 2023 Ondrej Holy <oholy@redhat.com> - 1.36.2-15 | ||||||
| - Add support for x-gvfs-notrash mount option (RHEL-2824) | - Add support for x-gvfs-notrash mount option (RHEL-2824) | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										55
									
								
								trash-Sync-trash-dir-items-when-files-change.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								trash-Sync-trash-dir-items-when-files-change.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | |||||||
|  | From 41862c0179f834d8bc3bd84ce78ee495050f2676 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: rong wang <wangrong@uniontech.com> | ||||||
|  | Date: Thu, 23 Mar 2023 10:26:24 +0800 | ||||||
|  | Subject: [PATCH] trash: Sync trash dir items when files change | ||||||
|  | 
 | ||||||
|  | In the case of an application monitoring the trash can, delete a file | ||||||
|  | on the mounted device to the trash can, and then unmount the device. | ||||||
|  | At this time, if you check the status of the trash can, you will find | ||||||
|  | that the number of files queried is inconsistent with the number of | ||||||
|  | files obtained through the enumeration job. This is because the number | ||||||
|  | of files queried includes some files that do not exist when the device | ||||||
|  | is unmounted. The solution is to synchronize the status of the trash | ||||||
|  | can in time to ensure that the trash can does not record files that do | ||||||
|  | not exist. | ||||||
|  | ---
 | ||||||
|  |  daemon/trashlib/trashdir.c | 21 +++++++++++++++++++-- | ||||||
|  |  1 file changed, 19 insertions(+), 2 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/daemon/trashlib/trashdir.c b/daemon/trashlib/trashdir.c
 | ||||||
|  | index c470d3bd..0d7d2b1b 100644
 | ||||||
|  | --- a/daemon/trashlib/trashdir.c
 | ||||||
|  | +++ b/daemon/trashlib/trashdir.c
 | ||||||
|  | @@ -163,10 +163,27 @@ trash_dir_changed (GFileMonitor      *monitor,
 | ||||||
|  |    TrashDir *dir = user_data; | ||||||
|  |   | ||||||
|  |    if (event_type == G_FILE_MONITOR_EVENT_CREATED) | ||||||
|  | -    trash_root_add_item (dir->root, file, dir->topdir, dir->is_homedir);
 | ||||||
|  | +    {
 | ||||||
|  | +      dir->items = g_slist_insert_sorted (dir->items,
 | ||||||
|  | +                                          g_object_ref (file),
 | ||||||
|  | +                                          (GCompareFunc) compare_basename);
 | ||||||
|  | +      trash_root_add_item (dir->root, file, dir->topdir, dir->is_homedir);
 | ||||||
|  | +    }
 | ||||||
|  |   | ||||||
|  |    else if (event_type == G_FILE_MONITOR_EVENT_DELETED) | ||||||
|  | -    trash_root_remove_item (dir->root, file, dir->is_homedir);
 | ||||||
|  | +    {
 | ||||||
|  | +      GSList *node;
 | ||||||
|  | +
 | ||||||
|  | +      node = g_slist_find_custom (dir->items,
 | ||||||
|  | +                                  file,
 | ||||||
|  | +                                  (GCompareFunc) compare_basename);
 | ||||||
|  | +      if (node)
 | ||||||
|  | +        {
 | ||||||
|  | +          g_object_unref (node->data);
 | ||||||
|  | +          dir->items = g_slist_delete_link (dir->items, node);
 | ||||||
|  | +        }
 | ||||||
|  | +      trash_root_remove_item (dir->root, file, dir->is_homedir);
 | ||||||
|  | +    }
 | ||||||
|  |   | ||||||
|  |    else if (event_type == G_FILE_MONITOR_EVENT_PRE_UNMOUNT || | ||||||
|  |             event_type == G_FILE_MONITOR_EVENT_UNMOUNTED || | ||||||
|  | -- 
 | ||||||
|  | 2.41.0 | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user