feat: implementar Fase 2 del roadmap (Modo Replica Exacta / Mirroring)

This commit is contained in:
Carlos Tello
2026-08-14 21:50:00 -03:00
parent a72cf1480e
commit a1cafff90e
14 changed files with 421 additions and 14 deletions
+28 -1
View File
@@ -210,7 +210,7 @@ class AddFolderDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle("Añadir Carpeta de Backup — OnEver Drive")
self.resize(500, 320)
self.resize(500, 470)
self.setStyleSheet(DARK_QSS)
layout = QVBoxLayout(self)
@@ -236,6 +236,10 @@ class AddFolderDialog(QDialog):
self.txt_patterns.setText("*.bak,*.mdf")
form.addRow("Filtros de archivo:", self.txt_patterns)
self.txt_exclude_patterns = QLineEdit()
self.txt_exclude_patterns.setPlaceholderText("Ej: *.tmp, *.log, node_modules")
form.addRow("Filtros de exclusión:", self.txt_exclude_patterns)
self.cmb_schedule = QComboBox()
self.cmb_schedule.addItems(["hourly", "daily", "weekly", "monthly"])
self.cmb_schedule.setCurrentText("daily")
@@ -247,6 +251,24 @@ class AddFolderDialog(QDialog):
self.spin_stable.setSuffix(" seg")
form.addRow("Estabilidad de archivo (Locks):", self.spin_stable)
# File attribute skip checkboxes (Karen's Replicator style)
self.chk_skip_hidden = QCheckBox("Omitir archivos ocultos (Hidden)")
self.chk_skip_hidden.setChecked(False)
form.addRow("", self.chk_skip_hidden)
self.chk_skip_system = QCheckBox("Omitir archivos de sistema (System)")
self.chk_skip_system.setChecked(False)
form.addRow("", self.chk_skip_system)
self.chk_skip_readonly = QCheckBox("Omitir archivos de solo lectura (Read-only)")
self.chk_skip_readonly.setChecked(False)
form.addRow("", self.chk_skip_readonly)
# Mirror sync checkbox (Phase 2)
self.chk_sync_deletions = QCheckBox("Modo Réplica Exacta (Eliminar en destino si no existe en origen)")
self.chk_sync_deletions.setChecked(False)
form.addRow("", self.chk_sync_deletions)
layout.addLayout(form)
btn_layout = QHBoxLayout()
@@ -281,6 +303,11 @@ class AddFolderDialog(QDialog):
name=self.txt_name.text().strip(),
source_path=self.txt_path.text().strip(),
file_patterns=self.txt_patterns.text().strip() or "*.*",
exclude_patterns=self.txt_exclude_patterns.text().strip(),
skip_hidden=self.chk_skip_hidden.isChecked(),
skip_system=self.chk_skip_system.isChecked(),
skip_readonly=self.chk_skip_readonly.isChecked(),
sync_deletions=self.chk_sync_deletions.isChecked(),
schedule_cron=self.cmb_schedule.currentText(),
min_stable_seconds=self.spin_stable.value()
)