o ˆ«2iÂã@sdZddlmZmZmZmZmZmZmZm Z m Z m Z ddl m Z ddlmZddlmZddlmZddlmZddlmZGd d „d eƒZd S) zc Schedules Widget for Python Scheduler Central scheduling hub - schedule individual jobs or groups é) ÚQWidgetÚ QVBoxLayoutÚ QHBoxLayoutÚ QTableWidgetÚQTableWidgetItemÚ QPushButtonÚ QHeaderViewÚQLabelÚ QMessageBoxÚQMenu)ÚQt)ÚQAction)Úlogger)ÚSchedulerDatabase)ÚSchedulerConfig)ÚScheduleEditorDialogcs~eZdZdZdedef‡fdd„ Zdd„Zdd „Zd e d e d e fd d„Z dd„Z d e fdd„Z dd„Zdd„Zdd„Z‡ZS)ÚSchedulesWidgetz$Schedules list and management widgetÚdbÚconfigcs*tƒ ¡||_||_| ¡| ¡dS)N)ÚsuperÚ__init__rrÚ _setup_uiÚrefresh)Úselfrr©Ú __class__©ú+c:\PYTHON\Scheduler\gui\schedules_widget.pyrs  zSchedulesWidget.__init__cCs¢t|ƒ}tƒ}tdƒ}| d¡| |¡| ¡tdƒ|_|jj  |j ¡| |j¡|  |¡tƒ}tdƒ|_ |j  d¡|j j  |j ¡| |j ¡tdƒ|_|j d¡|jj  |j¡| |j¡tdƒ|_|j d ¡|j d¡|jj  |j¡| |j¡| ¡|  |¡tƒ|_|j d ¡|j gd ¢¡|j ¡ d tjj¡|j tjj¡|j d ¡|j  tj!j"¡|jj#  |j$¡| |j¡dS)zSetup UIz Schedules - When to Execute Jobsz#font-size: 14px; font-weight: bold;ÚRefreshz New Schedulez;background-color: #4CAF50; color: white; padding: 5px 15px;ÚEditFÚDeletez;background-color: #f44336; color: white; padding: 5px 15px;é)ÚIDÚNameÚTypeÚTargetZScheduleÚEnabledéTN)%rrr Ú setStyleSheetÚ addWidgetÚ addStretchrÚ refresh_btnÚclickedÚconnectrÚ addLayoutZnew_schedule_btnÚ _new_scheduleÚedit_schedule_btnÚ setEnabledÚ_edit_scheduleÚdelete_schedule_btnÚ_delete_schedulerÚtableÚsetColumnCountÚsetHorizontalHeaderLabelsÚhorizontalHeaderÚsetSectionResizeModerÚ ResizeModeÚStretchÚsetSelectionBehaviorÚSelectionBehaviorÚ SelectRowsÚsetAlternatingRowColorsÚsetEditTriggersÚ EditTriggerÚNoEditTriggersÚitemSelectionChangedÚ_on_selection_changed)rÚlayoutÚ header_layoutÚ header_labelÚactions_layoutrrrrsF                  zSchedulesWidget._setup_uic CsŠz©|j ¡}|j t|ƒ¡t|ƒD]‰\}}|j |dtt|dƒƒ¡|j |dt|dƒ¡ddddd œ}|  |d |d ¡}|j |d t|ƒ¡|  d d |d›¡}|j |dt|ƒ¡|  |d|d¡}|j |dt|ƒ¡|drzdnd}t|ƒ} |drŒ|   t j j¡n|   t j j¡|j |d| ¡qt dt|ƒ›d¡WdStyÄ} zt d| ›¡WYd} ~ dSd} ~ ww)zRefresh schedules listrÚidr'ÚnameÚJobÚGroupÚBackupZSync)ÚjobÚgroupÚbackup_profileÚ sync_profileÚ target_typeéÚ target_namezID Ú target_idéÚ schedule_typeÚschedule_configéÚenabledÚYesÚNoézRefreshed schedules table: z scheduleszError refreshing schedules: N)rÚget_all_schedulesr5Ú setRowCountÚlenÚ enumerateÚsetItemrÚstrÚgetÚ_format_scheduleÚ setForegroundr Ú GlobalColorÚ darkGreenÚredrÚdebugÚ ExceptionÚerror) rÚ schedulesÚrowÚscheduleÚtype_mapZ type_textrTZ schedule_textZ enabled_textÚ enabled_itemÚerrrrVs8 ü€ÿzSchedulesWidget.refreshrWrXÚreturncCs´zLddl}t|tƒr| |¡n|}|dkrd| dd¡›WS|dkrCg}dD]}||vr9| ||›d|›¡q'd d  |¡›WS|d krJWd S|WSt|ƒdd …YS)z"Format schedule config for displayrNÚcronzCron: zN/AÚinterval)ÚweeksÚdaysÚhoursÚminutesÚsecondsú zEvery z, Úmanualz Manual onlyé2)ÚjsonÚ isinstancercÚloadsrdÚappendÚjoin)rrWrXr~rÚpartsÚkeyrrrre„s"€z SchedulesWidget._format_schedulecCs.t|j ¡ƒdk}|j |¡|j |¡dS)zHandle selection changerN)r`r5Ú selectedItemsr0r1r3)rÚ has_selectionrrrrD™s z%SchedulesWidget._on_selection_changedcCs8|j ¡ ¡}|s dS|d ¡}t|j |d¡ ¡ƒS)zGet selected schedule IDNr)r5ÚselectionModelÚ selectedRowsrnÚintÚitemÚtext)rÚ selected_rowsrnrrrÚ_get_selected_schedule_idŸs  z)SchedulesWidget._get_selected_schedule_idcCs(t||j|jƒ}| ¡r| ¡dSdS)zCreate new scheduleN)rrrÚexecr)rÚdialogrrrr/§s ÿzSchedulesWidget._new_schedulecCs<| ¡}|sdSt||j|j|d}| ¡r| ¡dSdS)zEdit selected scheduleN)Ú schedule_id)rrrrrŽr)rrrrrrr2­s ÿzSchedulesWidget._edit_schedulec Csö| ¡}|sdSzM|j |¡}t |dd|d›d|d›dtjjtjjBtjj¡}|tjjkrS|j |¡t   d|›¡t  |d d |d›d ¡|  ¡WdSWdSt yz}zt  d |›¡t |d d|›¡WYd}~dSd}~ww)zDelete selected scheduleNzConfirm DeletezDelete schedule 'rJz'? (The target rRz will not be deleted)zDeleted schedule ÚSuccessz Schedule 'z ' deletedzError deleting schedule: ÚErrorzFailed to delete schedule: )rrÚ get_scheduler ÚquestionÚStandardButtonr[r\Údelete_schedulerÚinfoÚ informationrrkrlÚcritical)rrroÚreplyrrrrrr4·s. û  ü"€þz SchedulesWidget._delete_schedule)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrrrcrerDr‰rr/r2r4Ú __classcell__rrrrrs9. rN)ržÚPyQt6.QtWidgetsrrrrrrrr r r Ú PyQt6.QtCorer Ú PyQt6.QtGuir ÚlogururÚ core.databaserÚ core.configrÚgui.schedule_editor_dialogrrrrrrÚs0