feat: Implement backup deletion and improve exclusion list

This commit introduces two main improvements:

1.  **Backup Deletion:** The user can now delete system and user backups from the "Backup Content" view.
2.  **Improved Exclusion List:** The `.cache` directory is now excluded from backups by default, which should prevent "file has vanished" warnings from rsync.
This commit is contained in:
2025-08-31 19:54:14 +02:00
parent ed9700aca1
commit f69e77cdd2
3 changed files with 48 additions and 6 deletions

View File

@@ -86,6 +86,7 @@ class AppConfig:
**/root/.gvfs
/snap/*
/home/*/.gvfs
/home/*/.cache/*
/var/cache/pacman/pkg/*
/var/cache/apt/archives/*
/var/cache/yum/*

View File

@@ -122,9 +122,25 @@ class SystemBackupContentFrame(ttk.Frame):
print(f"Restoring {backup_name}...")
def _delete_selected(self):
# Placeholder for delete logic
selected_item = self.content_tree.focus()
if not selected_item:
return
backup_name = self.content_tree.item(selected_item)["values"][0]
print(f"Deleting {backup_name}...")
item_values = self.content_tree.item(selected_item)["values"]
folder_name = item_values[4] # Assuming folder_name is the 5th value
# Construct the full path to the backup folder
pybackup_path = os.path.join(self.backup_path, "pybackup")
folder_to_delete = os.path.join(pybackup_path, folder_name)
# Ask for confirmation
from shared_libs.message import MessageDialog
dialog = MessageDialog(master=self, message_type="warning",
title=Msg.STR["confirm_delete_title"],
text=Msg.STR["confirm_delete_text"].format(folder_name=folder_name),
buttons=["ok_cancel"])
if dialog.get_result() != "ok":
return
self.backup_manager.delete_privileged_path(folder_to_delete)
self._load_backup_content()

View File

@@ -109,9 +109,34 @@ class UserBackupContentFrame(ttk.Frame):
print(f"Restoring {backup_name}...")
def _delete_selected(self):
# Placeholder for delete logic
selected_item = self.content_tree.focus()
if not selected_item:
return
backup_name = self.content_tree.item(selected_item)["values"][0]
print(f"Deleting {backup_name}...")
item_values = self.content_tree.item(selected_item)["values"]
folder_name = item_values[3] # Assuming folder_name is the 4th value
# Construct the full path to the backup folder
folder_to_delete = os.path.join(self.backup_path, folder_name)
info_file_to_delete = os.path.join(self.backup_path, f"{folder_name}.txt")
# Ask for confirmation
from shared_libs.message import MessageDialog
dialog = MessageDialog(master=self, message_type="warning",
title=Msg.STR["confirm_delete_title"],
text=Msg.STR["confirm_delete_text"].format(folder_name=folder_name),
buttons=["ok_cancel"])
if dialog.get_result() != "ok":
return
try:
import shutil
if os.path.isdir(folder_to_delete):
shutil.rmtree(folder_to_delete)
if os.path.exists(info_file_to_delete):
os.remove(info_file_to_delete)
except Exception as e:
MessageDialog(master=self, message_type="error",
title=Msg.STR["error"], text=str(e))
self._load_backup_content()