2018-10-29 05:12:45 +00:00
|
|
|
from apscheduler.schedulers.qt import QtScheduler
|
2018-10-29 06:59:24 +00:00
|
|
|
from apscheduler.triggers import cron
|
2018-10-29 13:23:42 +00:00
|
|
|
|
2018-11-03 08:55:38 +00:00
|
|
|
from vorta.borg.create import BorgCreateThread
|
2018-10-31 16:09:01 +00:00
|
|
|
from .models import BackupProfileMixin
|
2018-10-29 13:23:42 +00:00
|
|
|
|
2018-10-31 16:09:01 +00:00
|
|
|
|
|
|
|
class VortaScheduler(QtScheduler, BackupProfileMixin):
|
2018-10-31 11:14:12 +00:00
|
|
|
def __init__(self, parent):
|
|
|
|
super().__init__()
|
|
|
|
self.app = parent
|
2018-10-31 12:42:11 +00:00
|
|
|
self.start()
|
|
|
|
self.reload()
|
2018-10-29 05:12:45 +00:00
|
|
|
|
2018-10-31 11:14:12 +00:00
|
|
|
def reload(self):
|
|
|
|
self.remove_all_jobs()
|
2018-11-01 01:10:11 +00:00
|
|
|
trigger = None
|
2018-11-04 08:23:17 +00:00
|
|
|
if self.profile().schedule_mode == 'interval':
|
|
|
|
trigger = cron.CronTrigger(hour=f'*/{self.profile().schedule_interval_hours}',
|
|
|
|
minute=self.profile().schedule_interval_minutes)
|
|
|
|
elif self.profile().schedule_mode == 'fixed':
|
|
|
|
trigger = cron.CronTrigger(hour=self.profile().schedule_fixed_hour,
|
|
|
|
minute=self.profile().schedule_fixed_minute)
|
2018-10-29 13:23:42 +00:00
|
|
|
|
2018-11-01 01:10:11 +00:00
|
|
|
if trigger is not None:
|
|
|
|
self.add_job(self.create_backup, trigger, id='create-backup', misfire_grace_time=180)
|
2018-10-31 16:09:01 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def next_job(self):
|
2018-10-31 12:42:11 +00:00
|
|
|
job = self.get_job('create-backup')
|
2018-11-01 01:10:11 +00:00
|
|
|
if job is None:
|
|
|
|
return 'Manual Backups'
|
|
|
|
else:
|
|
|
|
return job.next_run_time.strftime('%Y-%m-%d %H:%M')
|
2018-10-31 16:09:01 +00:00
|
|
|
|
2018-11-04 08:23:17 +00:00
|
|
|
def create_backup(self):
|
2018-11-02 13:44:49 +00:00
|
|
|
msg = BorgCreateThread.prepare()
|
2018-10-31 16:09:01 +00:00
|
|
|
if msg['ok']:
|
2018-11-02 13:44:49 +00:00
|
|
|
thread = BorgCreateThread(msg['cmd'], msg['params'])
|
2018-10-31 16:09:01 +00:00
|
|
|
thread.start()
|
|
|
|
thread.wait()
|
2018-11-04 08:23:17 +00:00
|
|
|
|