Browse Source

Automatically reload source if changed outside

master
Denis Tereshkin 7 years ago
parent
commit
1507d29437
  1. 37
      src/nailab/ui/strategywidget.py

37
src/nailab/ui/strategywidget.py

@ -1,4 +1,6 @@
import os.path
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qsci import * from PyQt5.Qsci import *
@ -6,8 +8,20 @@ from ui_gen.strategywidget import Ui_StrategyWidget
from ui.newdatasourcedialog import NewDataSourceDialog from ui.newdatasourcedialog import NewDataSourceDialog
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
ROLE_FEED_ID = QtCore.Qt.UserRole + 1 ROLE_FEED_ID = QtCore.Qt.UserRole + 1
class FileModifiedHandler(FileSystemEventHandler):
def __init__(self, callback):
super().__init__()
self.callback = callback
def on_modified(self, event):
self.callback(event.src_path)
class StrategyWidget(QtWidgets.QWidget): class StrategyWidget(QtWidgets.QWidget):
def __init__(self, datasourcemanager, source_file, parent=None, content=None): def __init__(self, datasourcemanager, source_file, parent=None, content=None):
@ -42,6 +56,10 @@ class StrategyWidget(QtWidgets.QWidget):
self.result = [] self.result = []
self.result_widget = None self.result_widget = None
self.watchdog_handler = FileModifiedHandler(self.file_modified)
self.watchdog = None
self.update_watchdog()
try: try:
if s.value("time_window") is not None: if s.value("time_window") is not None:
(from_time, to_time) = s.value("time_window") (from_time, to_time) = s.value("time_window")
@ -194,3 +212,22 @@ class StrategyWidget(QtWidgets.QWidget):
self.ui.te_notes.clear() self.ui.te_notes.clear()
self.ui.te_notes.appendPlainText(errmsg) self.ui.te_notes.appendPlainText(errmsg)
def update_watchdog(self):
if self.watchdog is not None:
self.watchdog.stop()
self.watchdog.join()
if self.source_file is not None:
self.watchdog = Observer()
self.watchdog.schedule(self.watchdog_handler, os.path.dirname(self.source_file), recursive=False)
self.watchdog.start()
def file_modified(self, fname):
try:
if self.source_file is not None and os.path.samefile(self.source_file, fname):
with open(self.source_file, "r") as f:
self.ui.editor.setText(f.read())
except:
# Saving file from the outside generates a lot of events, as temporary and backup files are created and removed.
# Hence, we ignore errors
pass

Loading…
Cancel
Save