)i?SrSSKJrJrJrJrJrJrJrJ r J r J r J r J r SSKJrJr SSKJrJr SSKJr SSKJr SSKJr SSKJr "S S \5rg ) z@ Backup Widget for GUI - Manages backup profiles and operations ) QWidget QVBoxLayout QHBoxLayout QPushButton QTableWidgetQTableWidgetItemQLabel QMessageBox QGroupBox QTextEdit QHeaderViewQAbstractItemView)Qt pyqtSignal)QFontQColor)logger)datetime)Database)SchedulerConfigc^\rSrSrSr\"5rS\S\4U4Sjjr Sr Sr Sr S r S rS rS rS rSrSrSrSrU=r$) BackupWidgetz2Widget for managing backup profiles and operationsdbconfigcz>[TU]5 XlX lUR 5 UR 5 g)N)super__init__rr _setup_uirefresh)selfrr __class__s (c:\PYTHON\Scheduler\gui\backup_widget.pyrBackupWidget.__init__s+    c8[U5nURSSSS5 URS5 [5n[ S5n[ 5nUR S5 URS5 URU5 URU5 UR5 [S5Ul URRRUR5 URUR5 [S5UlUR RRUR"5 UR R%S5 URUR 5 [S5UlUR&RRUR(5 UR&R%S5 URUR&5 [S 5UlUR*RRUR,5 UR*R%S5 URUR*5 UR/U5 [1S 5n[U5n[35UlUR4R7S 5 UR4R9/S Q5 UR4R;5R=[>R@RB5 UR4R;5RES5 UR4RG[HRJRL5 UR4RO[HRPRR5 UR4RU[HRVRX5 UR4RZRUR\5 UR4R^RUR`5 UR4RcS S5 UR4RcSS5 UR4RcSS5 UR4RcSS5 UR4RcSS5 UR4RcSS5 URUR45 URUSS9 [1S5n[U5n[35Ul2URdR7S5 URdR9/SQ5 URdR;5R=[>R@RB5 URdR;5RES5 URdRG[HRJRL5 URdRU[HRVRX5 URdRcS S5 URdRcSS5 URdRcSS5 URdRcSS5 URdRcSS5 URdRcSS5 URdRcS S5 URURd5 URUSS9 g)zSetup backup UI componentsu💾 Backup ProfilesTu➕ New Profileu▶ Run BackupFu 📅 Scheduleu 🗑 DeletezBackup Profiles)IDNamez Backup RootSourceszRetention (days)Enabledr2xP)stretchzRecent Backup Operations)r*ProfileTypeStatusz Start TimeDurationFilesdN)3rsetContentsMargins setSpacingrr r setPointSizesetBoldsetFont addWidget addStretchrnew_btnclickedconnect_create_profilerun_btn _run_backup setEnabled schedule_btn_schedule_backup delete_btn_delete_profile addLayoutr rprofiles_tablesetColumnCountsetHorizontalHeaderLabelshorizontalHeadersetSectionResizeModer ResizeMode InteractivesetStretchLastSectionsetSelectionBehaviorrSelectionBehavior SelectRowssetSelectionMode SelectionModeSingleSelectionsetEditTriggers EditTriggerNoEditTriggersitemSelectionChanged_on_profile_selected doubleClicked _edit_profilesetColumnWidthoperations_table) r!layout header_layout title_label title_fontprofiles_groupprofiles_layoutoperations_groupoperations_layouts r#rBackupWidget._setup_ui sQT"!!"b"b1"$ 34 W #4 J' ,  "##45  $$T%9%9: -"#34  $$T%5%56 & -'8 !!))$*?*?@ $$U+ 1 12%m4 ''(<(<= ""5)0'##45%n5*n **1- 557   ,,.CCKDZDZDfDfg ,,.DDTJ 001B1T1T1_1_` ,,->-L-L-\-\] ++,=,I,I,X,XY 00889R9RS ))11$2D2DE **1b1 **1c2 **1c2 **1c2 **1c2 **1b1!!$"5"563%%?@'(89 , ,,Q/ 779   ..0EEkF\F\FhFhi ..0FFtL 223D3V3V3a3ab --.?.K.K.Z.Z[ ,,Q3 ,,Q4 ,,Q4 ,,Q4 ,,Q4 ,,Q4 ,,Q4##D$9$9:)15r%cDUR5 UR5 g)zRefresh all dataN)_load_profiles_load_operations)r!s r#r BackupWidget.refresh|s  r%cURR5nURR[ U55 [ U5GHIup#[ [US55nUR[RR5 URRUSU5 [ US5nURRUSU5 [ US5nURRUSU5 SSK n[US[5(aURUS5OUSn[ U5n [ U S 35n U R[RR5 URRUS U 5 [ [US 55n U R[RR5 URRUS U 5 US (aSOSn [ U 5n U R[RR5 US (aU R![#S55 OU R![#S55 URRUSU 5 GML g! Sn GN\=f![$a>n[&R("SU35 [*R,"USSU35 SnAgSnAff=f)z"Load backup profiles from databaseidrnamer/ backup_rootr1Nsourcesz source(s)r3retention_daysr5enabledu✓ Yesu✗ Nogreenredr7zError loading backup profiles: Errorz Failed to load backup profiles: )rget_all_backup_profilesrT setRowCountlen enumeraterstrsetTextAlignmentr AlignmentFlag AlignCentersetItemjson isinstanceloads setForegroundr Exceptionrerrorr critical)r!profilesrowprofileid_item name_item root_itemrr| sources_count sources_itemretention_item enabled_text enabled_itemes r#ruBackupWidget._load_profilesst/ Xww668H    + +CM : )( 3 *3wt}+=>(()9)9)E)EF##++CG<-WV_= ##++CI>-W]-CD ##++CI>&@J7S\K]_b@c@cdjj);.>.J.JK##++CLA"2#g>N6O2P!Q//0@0@0L0LM##++CNC-4I,>yH / = --b.>.>.J.JK9% ..vg? ..ve}=##++CLAM!4&&$%M( X LL:1#> ?  w2RSTRU0V W W Xs1DJ$ $Z0*3r$x=9(()9)9)E)EF%%--c1g>''44R 5EF29wv"\JZI[?\ / = %%--c1lC-R0@-AB %%--c1i@!l .{; ,,R-=-=-I-IJh<;.--fWo>\X---fUm<\Y.--fX.>?%%--c1kB - [%33J?#%;;/B#C %H,X6 %%--c1i@66*%%"&&*>*>- ( 6 6r,7G H&44R ^D$'%K#>#>#@*23q'9 46h<93L ..r/?/?/K/KL%%--c1mD!ff]A6 !vvna8 GRUV{m2l^7C\a -i8 ++B,<,<,H,HI%%--c1jAC1J[69*o6J:cr?PZ-',  B LL ? LLN  % % ' 8r%c6UR5nU(dg[R"USSUS3[RR[RR -5nU[RR:XaH[R "USSUS35 UR5 URR5 gg![a>n[R"SU35 [R"US S U35 SnAgSnAff=f) zRun backup for selected profileNz Run Backupz#Start backup operation for profile ?zBackup Startedz$Backup operation queued for profile zD. Full integration with daemon will be completed in the next phase.zError running backup: rzFailed to run backup: )rr questionStandardButtonYesNo informationr rrrrrrr!rreplyrs r#rMBackupWidget._run_backup,s224  $$  1*Q ?  & & * *[-G-G-J-J J   K..22 2 R''$::,GXX  $$))+ 3 R 5aS9:$$T76LQC4PQQ RsAC D4DDcUR5nU(dgSSKJn SSKJn UR R U5nU(d[R"USSUS35 gU"XR UR5nURRS5 [URR55H?nURRU5U:XdM$URR!U5 O UR"R%S US 35 UR'5UR(R*:Xa9[,R."S U35 [R0"US S US S35 gg![2a>n[,R4"SU35 [R6"USSU35 SnAgSnAff=f)z0Open schedule dialog for selected backup profileNr)ScheduleEditorDialogrrrz not foundTzScheduled Backup: rzz$Created schedule for backup profile zSchedule Createdz#Schedule created successfully for 'z2'. Check the Schedules tab to view and manage it.zError scheduling backup: z Failed to open schedule dialog: )rgui.schedule_editor_dialogrrrrrr rr backup_radio setCheckedrange backup_combocountitemDatasetCurrentIndex name_inputsetTextrrrrrrrrr)r!rrrrrirs r#rPBackupWidget._schedule_backupIs224  $ X G /gg00n[R"SU35 [R"USSU35 SnAgSnAff=f) zDelete selected backup profileNzDelete Profilez(Are you sure you want to delete profile z:? This will also delete all associated backup operations.zDeleted backup profile zError deleting profile: rzFailed to delete profile: )rr rrrrrdelete_backup_profilerrr rrrrrrs r#rRBackupWidget._delete_profileus 224  $$  6zlCF F  & & * *[-G-G-J-J J   K..22 2 V--j9 5j\BC $$))+ 3 V 7s;<$$T76PQRPS4TUU VsAC(( D024D++D0)rrrQrHrjrTrLrO)__name__ __module__ __qualname____firstlineno____doc__rrrrrrr rurvrfrrKrhrMrPrR__static_attributes__ __classcell__)r"s@r#rrsh< lO8_Z6x 1XfKBZ2< (( R:*XXVVr%rN)rrrrrrrrr r r r r r PyQt6.QtCorerr PyQt6.QtGuirrlogururr core.databaser core.configrrr%r#r sB (%"'yV7yVr%