2i7SrSSKJrJrJrJrJrJrJrJ r J r J r J r SSK JrJr SSKJrJr SSKJr SSKJr SSKJr SSKJr "S S \5rg ) z< Sync Widget for GUI - Manages sync profiles and operations ) QWidget QVBoxLayout QHBoxLayout QPushButton QTableWidgetQTableWidgetItemQLabel QMessageBox QGroupBox QHeaderViewQAbstractItemView)Qt pyqtSignal)QFontQColor)logger)datetime)Database)SchedulerConfigc^\rSrSrSr\"5rS\S\4U4Sjjr Sr Sr Sr S r S rS rS rS rSrSrSrU=r$) SyncWidgetz0Widget for managing sync profiles and operationsdbconfigcz>[TU]5 XlX lUR 5 UR 5 g)N)super__init__rr _setup_uirefresh)selfrr __class__s &c:\PYTHON\Scheduler\gui\sync_widget.pyrSyncWidget.__init__s+    c[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 [S 5UlUR.RRUR05 URUR.5 UR3U5 [5S 5n[U5n[75UlUR8R;S 5 UR8R=/S Q5 UR8R?5RA[BRDRF5 UR8R?5RIS5 UR8RK[LRNRP5 UR8RS[LRTRV5 UR8RY[LRZR\5 UR8R^RUR`5 UR8RbRUR"5 UR8ReSS5 UR8ReSS5 UR8ReSS5 UR8ReSS5 UR8ReSS5 URUR85 URUSS9 [5S5n[U5n[75Ul3URfR;S5 URfR=/SQ5 URfR?5RA[BRDRF5 URfR?5RIS5 URfRK[LRNRP5 URfRY[LRZR\5 URfReSS5 URfReSS5 URfReSS5 URfReSS5 URfReSS5 URfReS S5 URfReSS5 URURf5 URUSS9 g)zSetup sync UI componentsu📁 Directory Sync ProfilesTu➕ New Profileu✏ EditFu 📅 Scheduleu 🗑 Deleteu 🔄 Refreshz Sync Profiles)IDNameSource DestinationEnabledr2i,P)stretchzRecent Sync Operations)r)ProfileStatusz Start TimeDurationCopiedDeleteddN)4rsetContentsMargins setSpacingrr r setPointSizesetBoldsetFont addWidget addStretchrnew_btnclickedconnect_create_profileedit_btn _edit_profile setEnabled schedule_btn_schedule_sync delete_btn_delete_profile refresh_btnr addLayoutr rprofiles_tablesetColumnCountsetHorizontalHeaderLabelshorizontalHeadersetSectionResizeModer ResizeMode InteractivesetStretchLastSectionsetSelectionBehaviorr SelectionBehavior SelectRowssetSelectionMode SelectionModeSingleSelectionsetEditTriggers EditTriggerNoEditTriggersitemSelectionChanged_on_profile_selected doubleClickedsetColumnWidthoperations_table) r layout header_layout title_label title_fontprofiles_groupprofiles_layoutoperations_groupoperations_layouts r"rSyncWidget._setup_ui sxT"!!"b"b1"$ ;< W #4 J' ,  "##45  $$T%9%9: -#J/  %%d&8&89   ' .'8 !!))$*=*=> $$U+ 1 12%m4 ''(<(<= ""5)0&~6   ((6 0 01'#?3%n5*n **1- 557   ,,.CCKDZDZDfDfg ,,.DDTJ 001B1T1T1_1_` ,,->-L-L-\-\] ++,=,I,I,X,XY 00889R9RS ))11$2D2DE **1b1 **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"rSyncWidget.refreshs  r$c<URR5nURR[ U55 [ U5GHup#[ [US55nUR[RR5 URRUSU5 [ US5nURRUSU5 [ US5nURRUSU5 [ US5nURRUSU5 US (aS OS n[ U5n U R[RR5 US (aU R[S 55 OU R[S 55 URRUSU 5 GM g![a>n [ R""SU 35 [$R&"USSU 35 Sn A gSn A ff=f)z Load sync profiles from databaseidrnamer/ source_pathr1destination_pathr2enabledu✓ Yesu✗ Nogreenredr3zError loading sync profiles: ErrorzFailed to load sync profiles: N)rget_all_sync_profilesrS setRowCountlen enumeraterstrsetTextAlignmentr AlignmentFlag AlignCentersetItem setForegroundr Exceptionrerrorr critical) r profilesrowprofileid_item name_item source_item dest_item enabled_text enabled_itemes r"rsSyncWidget._load_profiless# Vww446H    + +CM : )( 3 *3wt}+=>(()9)9)E)EF##++CG<-WV_= ##++CI>/w}/EF ##++CK@-W5G-HI ##++CI>-4I,>yH / = --b.>.>.J.JK9% ..vg? ..ve}=##++CLA5!48 V LL8< =  w2PQRPS0T U U VsGG H4HHcURRSS9nURR[ U55 [ U5GHup#[ [US55nUR[RR5 URRUSU5 URRUS5nU(aUSOSUS3n[ U5nURRUSU5 US n[ U5n U R[RR5 US S :XaU R[S 55 OkUS S :XaU R[S 55 OGUS S:XaU R[S55 O#US S:XaU R[S55 URRUSU 5 USn U (a)[ R""U 5n U R%S5n OSn [ U 5n URRUSU 5 UR'S5(abUR'S5(aL[ R""US5n[ R""US5nX- R)5nUSS3nO US S:XaSOSn[ U5nUR[RR5 URRUSU5 UR'SS5n[ [U55nUR[RR5 URRUSU5 UR'S S5n[ [U55nUR[RR5 URRUS!U5 GM g! [ U 5S:aU SSOU n GN=f! SnGNT=f![*a#n[,R."S"U35 SnAgSnAff=f)#zLoad recent sync operations)limitrwr profile_idrxProfile r/status completedr|failedr}runningorangecompleted_with_errors darkoranger1 start_timez%Y-%m-%d %H:%M:%SrNzN/Ar2end_timez.1fsz Running...r3 files_copiedr( files_deletedr>zError loading sync operations: )rget_recent_sync_operationsrhrrrrrrrrrrget_sync_profilerrr fromisoformatstrftimeget total_secondsrrr)r operationsroprr profile_name profile_item status_text status_itemrdttime_str time_itemstartendduration duration_str duration_itemr copied_itemr deleted_itemrs r"rtSyncWidget._load_operationssK @;;";EJ  ! ! - -c*o >$Z0*3r$x=9(()9)9)E)EF%%--c1g>''222l3CD29wv"\JZI[?\ / = %%--c1lC!l .{; ,,R-=-=-I-IJh<;.--fWo>\X---fUm<\Y.--fX.>?\%<<--f\.BC%%--c1kB - [%33J?#%;;/B#C %H,X6 %%--c1i@66*%%"&&*>*>- ( 6 6r,7G H&44R ^D$'K#>#>#@*23q'9 46h<93L ..r/?/?/K/KL%%--c1mD "vvna8 .s.>.J.JK%%--c1lCG1F[69*o6J:cr?PZ-', & @ LL:1#> ? ? @sKG6P'9'O? AP'8A PDn[R"SU35 [R"USSU35 SnAgSnAff=f)zDelete selected sync profileNzDelete ProfileziAre you sure you want to delete this sync profile? This will also delete all associated sync operations.zDeleted sync profile zError deleting profile: r~zFailed to delete profile: )rr questionStandardButtonYesNordelete_sync_profilerrrrrrrr)r rreplyrs r"rPSyncWidget._delete_profileIs224  $$  D  & & * *[-G-G-J-J J   K..22 2 V++J7 3J<@A $$))+ 3 V 7s;<$$T76PQRPS4TUU VsAC$$ D,.4D''D,) rrrOrJrFrhrSrQrM)__name__ __module__ __qualname____firstlineno____doc__rrrrrrrrsrtrerrIrKrNrP__static_attributes__ __classcell__)r!s@r"rrsa: lO8_]6~ %VNM@^2< (( "HVVr$rN)rrrrrrrrr r r r r PyQt6.QtCorerr PyQt6.QtGuirrlogururr core.databaser core.configrrr$r"rsB (%"'MVMVr$