Added an event to occur at the same time everyday, may add days of the week selections as well later.
Code:
from calibre_plugins.action_chains.events import ChainEvent
from qt.core import QApplication, Qt, QWidget, QVBoxLayout, QGroupBox, QLabel, QTimeEdit, QTimer, QTime, pyqtSignal
from calibre.utils.date import now
from calibre import prints
from calibre.constants import DEBUG
from datetime import datetime
class ConfigWidget(QWidget):
def __init__(self, plugin_action):
QWidget.__init__(self)
self.plugin_action = plugin_action
self.gui = plugin_action.gui
self.db = self.gui.current_db
self._init_controls()
def _init_controls(self):
l = self.l = QVBoxLayout()
self.setLayout(l)
time_edit_box = QGroupBox('Trigger time (24h format):')
time_edit_box_l = QVBoxLayout()
time_edit_box.setLayout(time_edit_box_l)
l.addWidget(time_edit_box)
self.time_edit = QTimeEdit()
self.time_edit.setDisplayFormat('HH:mm')
self.time_edit.setTime(QTime.fromString('08:00', 'HH:mm'))
time_edit_box_l.addWidget(self.time_edit)
l.addStretch(1)
self.setMinimumSize(300,300)
def load_settings(self, settings):
if settings:
self.time_edit.setTime(QTime.fromString(settings['trigger_time'], 'HH:mm'))
def save_settings(self):
settings = {}
settings['trigger_time'] = self.time_edit.time().toString('HH:mm')
self.plugin_action.plugin_restart_required.emit('events_dialog', 'Timer event interval')
return settings
class TimeOfDayEvent(ChainEvent):
name = 'Time of Day'
time_triggered = pyqtSignal()
def __init__(self, plugin_action):
ChainEvent.__init__(self, plugin_action)
self.last_triggered_date = None
QTimer.singleShot(5*1000, self.check_time)
def get_target_time(self):
event_options = self.get_options()
target_time = event_options.get('trigger_time','08:00')
return target_time
def get_event_signal(self):
return self.time_triggered
def config_widget(self):
return ConfigWidget
def check_time(self):
now_time = QTime.currentTime()
today_str = now().date().isoformat()
if datetime.now().strftime('%H:%M') + '' == self.get_target_time():
if self.last_triggered_date != today_str:
if not self.plugin_action.chainStack:
QTimer.singleShot(0, self.time_triggered.emit)
self.last_triggered_date = today_str