diff --git a/bulk_reminders/gui.py b/bulk_reminders/gui.py index 2e4e10d..c75318a 100644 --- a/bulk_reminders/gui.py +++ b/bulk_reminders/gui.py @@ -15,6 +15,7 @@ logging.basicConfig(format='[%(asctime)s] [%(levelname)s] [%(threadName)s] %(mes logger = logging.getLogger(__file__) logger.setLevel(logging.DEBUG) + class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, *args, **kwargs): # Initial UI setup @@ -77,22 +78,27 @@ class MainWindow(QMainWindow, Ui_MainWindow): dial = LoadDialog() dial.plainTextEdit.setPlainText(self.cachedLoadText) result = dial.exec() + if result == QMessageBox.Accepted: self.cachedLoadText = dial.plainTextEdit.toPlainText() self.readyEvents = dial.parsed self.populate() - elif result == QMessageBox.Cancel: - pass def undo(self) -> None: - # Get the latest undo stage and delete all events in that stage + """Get the latest undo stage and delete all events in that stage""" latest = self.history.pop() - for entry in latest.events: + logging.info(f'Deleting {len(latest.events)} Events from Calendar {latest.commonCalendar}') + + self.progressBar.show() + self.progressBar.setMaximum(len(latest.events)) + for i, entry in enumerate(latest.events): + logging.debug(f'Deleting Event {entry.eventID}') self.calendar.service.events().delete(calendarId=entry.calendarID, eventId=entry.eventID).execute() + self.progressBar.setValue(i + 1) + self.progressBar.hide() # Disable the undo button until undo stages are available self.undoButton.setDisabled(len(self.history) == 0) - self.populate() # Refresh def getForeign(self) -> Iterator[IDPair]: @@ -105,10 +111,18 @@ class MainWindow(QMainWindow, Ui_MainWindow): def submit(self) -> None: newStage = Stage(index=self.history.nextIndex(), commonCalendar=self.currentCalendarID) - while self.readyEvents: - event: Event = self.readyEvents.pop(0) + logger.info(f'Submitting {len(self.readyEvents)} events to API') + + self.progressBar.show() + self.progressBar.setMaximum(len(self.readyEvents)) + for i, event in enumerate(self.readyEvents): + logger.debug(f'Submitting "{event.summary}" scheduled to start on {event.start.isoformat()}....') result = self.calendar.service.events().insert(calendarId=self.currentCalendarID, body=event.body).execute() newStage.events.append(IDPair(self.currentCalendarID, result.get('id'))) + self.progressBar.setValue(i + 1) + + self.readyEvents.clear() + self.progressBar.hide() self.history.addStage(newStage) self.populate() @@ -129,6 +143,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): for row, event in enumerate(events): event.fill_row(row, self.eventsView) + self.submitButton.setDisabled(len(self.readyEvents) < 0) + @QtCore.pyqtSlot(int) def comboBoxChanged(self, row) -> None: """When the Calendar Selection combobox""" diff --git a/bulk_reminders/gui.ui b/bulk_reminders/gui.ui index 2786cbd..d46ed27 100644 --- a/bulk_reminders/gui.ui +++ b/bulk_reminders/gui.ui @@ -6,7 +6,7 @@ 0 0 - 672 + 844 553 @@ -82,17 +82,17 @@ - - - Qt::Horizontal + + + 0 - - - 30 - 20 - + + 0 - + + false + + @@ -112,7 +112,7 @@ 0 0 - 672 + 844 21 diff --git a/bulk_reminders/gui_base.py b/bulk_reminders/gui_base.py index 6ba4199..d023b64 100644 --- a/bulk_reminders/gui_base.py +++ b/bulk_reminders/gui_base.py @@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") - MainWindow.resize(672, 553) + MainWindow.resize(844, 553) self.centralwidget = QtWidgets.QWidget(MainWindow) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(1) @@ -60,8 +60,12 @@ class Ui_MainWindow(object): self.eventCountLabel.setSizePolicy(sizePolicy) self.eventCountLabel.setObjectName("eventCountLabel") self.horizontalLayout.addWidget(self.eventCountLabel) - spacerItem = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout.addItem(spacerItem) + self.progressBar = QtWidgets.QProgressBar(self.centralwidget) + self.progressBar.setMaximum(0) + self.progressBar.setProperty("value", 0) + self.progressBar.setTextVisible(False) + self.progressBar.setObjectName("progressBar") + self.horizontalLayout.addWidget(self.progressBar) self.undoButton = QtWidgets.QPushButton(self.centralwidget) self.undoButton.setObjectName("undoButton") self.horizontalLayout.addWidget(self.undoButton) @@ -69,7 +73,7 @@ class Ui_MainWindow(object): self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 672, 21)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 844, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) diff --git a/bulk_reminders/load.py b/bulk_reminders/load.py index ba3a920..6f19dd2 100644 --- a/bulk_reminders/load.py +++ b/bulk_reminders/load.py @@ -14,7 +14,7 @@ logger = logging.getLogger(__file__) logger.setLevel(logging.DEBUG) REGEX = re.compile( - r'\s*([\w\d\s,.;\'!\[\]()]{1,})\s+\|\s+(\d{4}-\d{2}-\d{2})\s+(\d{1,2}:\d{2}(?:AM|PM))?\s*(\d{4}-\d{2}-\d{2})(\d{1,2}:\d{2}(?:AM|PM))?') + r'\s*([\w\d\s,-.;\'!\[\]()]{1,})\s+\|\s+(\d{4}-\d{2}-\d{2})\s+(\d{1,2}:\d{2}(?:AM|PM))?\s*(\d{4}-\d{2}-\d{2})(\d{1,2}:\d{2}(?:AM|PM))?') class LoadDialog(QDialog, Ui_Dialog): diff --git a/bulk_reminders/undo.py b/bulk_reminders/undo.py index 1dcbd09..d5d4a82 100644 --- a/bulk_reminders/undo.py +++ b/bulk_reminders/undo.py @@ -31,7 +31,7 @@ class HistoryManager(object): """Save data to the undo history file.""" logger.info('Saving to undo history file.') with open(self.file, 'w') as file: - file.write(jsonpickle.encode(self.stages)) + file.write(jsonpickle.encode(self.stages, indent=4)) def getTotal(self) -> int: """Returns the total number of undoable events known."""