Support handling events by monitoring an events folder for changes

This commit is contained in:
Micah Lee 2019-11-28 12:24:26 -08:00
parent d78d67adf6
commit e7c683528d
No known key found for this signature in database
GPG key ID: 403C2657CD994F73
7 changed files with 152 additions and 23 deletions

View file

@ -18,11 +18,13 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from PyQt5 import QtCore, QtWidgets, QtGui
from watchdog.observers import Observer
from onionshare import strings
from onionshare.mode_settings import ModeSettings
from .tab import Tab
from .event_handler import EventHandler
class TabWidget(QtWidgets.QTabWidget):
@ -30,6 +32,8 @@ class TabWidget(QtWidgets.QTabWidget):
A custom tab widget, that has a "+" button for adding new tabs
"""
bring_to_front = QtCore.pyqtSignal()
def __init__(self, common, system_tray, status_bar):
super(TabWidget, self).__init__()
self.common = common
@ -67,6 +71,14 @@ class TabWidget(QtWidgets.QTabWidget):
self.move_new_tab_button()
# Watch the events file for changes
self.event_handler = EventHandler(common)
self.event_handler.new_tab.connect(self.add_tab)
self.event_handler.new_share_tab.connect(self.new_share_tab)
self.observer = Observer()
self.observer.schedule(self.event_handler, self.common.gui.events_dir)
self.observer.start()
def move_new_tab_button(self):
# Find the width of all tabs
tabs_width = sum(
@ -95,6 +107,12 @@ class TabWidget(QtWidgets.QTabWidget):
mode_settings = ModeSettings(self.common, id=mode_settings_id)
self.add_tab(mode_settings)
def new_share_tab(self, filenames):
mode_settings = ModeSettings(self.common)
mode_settings.set("persistent", "mode", "share")
mode_settings.set("share", "filenames", filenames)
self.add_tab(mode_settings)
def add_tab(self, mode_settings=None):
tab = Tab(self.common, self.current_tab_id, self.system_tray, self.status_bar)
tab.change_title.connect(self.change_title)
@ -111,6 +129,9 @@ class TabWidget(QtWidgets.QTabWidget):
# If it's persistent, set the persistent image in the tab
self.change_persistent(tab.tab_id, tab.settings.get("persistent", "enabled"))
# Bring the window to front, in case this is being added by an event
self.bring_to_front.emit()
def change_title(self, tab_id, title):
index = self.indexOf(self.tabs[tab_id])
self.setTabText(index, title)