mirror of
https://github.com/Xevion/bulk-reminders.git
synced 2025-12-10 08:06:42 -06:00
Add ProgressBar to GUI for Event Insertion/Deletion
- Added logging to GUI Undo functionality - Added support for hyphens in data input - Indent encoded JSONPickle output
This commit is contained in:
@@ -15,6 +15,7 @@ logging.basicConfig(format='[%(asctime)s] [%(levelname)s] [%(threadName)s] %(mes
|
|||||||
logger = logging.getLogger(__file__)
|
logger = logging.getLogger(__file__)
|
||||||
logger.setLevel(logging.DEBUG)
|
logger.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
|
|
||||||
class MainWindow(QMainWindow, Ui_MainWindow):
|
class MainWindow(QMainWindow, Ui_MainWindow):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
# Initial UI setup
|
# Initial UI setup
|
||||||
@@ -77,22 +78,27 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||||||
dial = LoadDialog()
|
dial = LoadDialog()
|
||||||
dial.plainTextEdit.setPlainText(self.cachedLoadText)
|
dial.plainTextEdit.setPlainText(self.cachedLoadText)
|
||||||
result = dial.exec()
|
result = dial.exec()
|
||||||
|
|
||||||
if result == QMessageBox.Accepted:
|
if result == QMessageBox.Accepted:
|
||||||
self.cachedLoadText = dial.plainTextEdit.toPlainText()
|
self.cachedLoadText = dial.plainTextEdit.toPlainText()
|
||||||
self.readyEvents = dial.parsed
|
self.readyEvents = dial.parsed
|
||||||
self.populate()
|
self.populate()
|
||||||
elif result == QMessageBox.Cancel:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def undo(self) -> None:
|
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()
|
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.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
|
# Disable the undo button until undo stages are available
|
||||||
self.undoButton.setDisabled(len(self.history) == 0)
|
self.undoButton.setDisabled(len(self.history) == 0)
|
||||||
|
|
||||||
self.populate() # Refresh
|
self.populate() # Refresh
|
||||||
|
|
||||||
def getForeign(self) -> Iterator[IDPair]:
|
def getForeign(self) -> Iterator[IDPair]:
|
||||||
@@ -105,10 +111,18 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
def submit(self) -> None:
|
def submit(self) -> None:
|
||||||
newStage = Stage(index=self.history.nextIndex(), commonCalendar=self.currentCalendarID)
|
newStage = Stage(index=self.history.nextIndex(), commonCalendar=self.currentCalendarID)
|
||||||
while self.readyEvents:
|
logger.info(f'Submitting {len(self.readyEvents)} events to API')
|
||||||
event: Event = self.readyEvents.pop(0)
|
|
||||||
|
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()
|
result = self.calendar.service.events().insert(calendarId=self.currentCalendarID, body=event.body).execute()
|
||||||
newStage.events.append(IDPair(self.currentCalendarID, result.get('id')))
|
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.history.addStage(newStage)
|
||||||
self.populate()
|
self.populate()
|
||||||
@@ -129,6 +143,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||||||
for row, event in enumerate(events):
|
for row, event in enumerate(events):
|
||||||
event.fill_row(row, self.eventsView)
|
event.fill_row(row, self.eventsView)
|
||||||
|
|
||||||
|
self.submitButton.setDisabled(len(self.readyEvents) < 0)
|
||||||
|
|
||||||
@QtCore.pyqtSlot(int)
|
@QtCore.pyqtSlot(int)
|
||||||
def comboBoxChanged(self, row) -> None:
|
def comboBoxChanged(self, row) -> None:
|
||||||
"""When the Calendar Selection combobox"""
|
"""When the Calendar Selection combobox"""
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>672</width>
|
<width>844</width>
|
||||||
<height>553</height>
|
<height>553</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@@ -82,17 +82,17 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer">
|
<widget class="QProgressBar" name="progressBar">
|
||||||
<property name="orientation">
|
<property name="maximum">
|
||||||
<enum>Qt::Horizontal</enum>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
<property name="value">
|
||||||
<size>
|
<number>0</number>
|
||||||
<width>30</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
<property name="textVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="undoButton">
|
<widget class="QPushButton" name="undoButton">
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>672</width>
|
<width>844</width>
|
||||||
<height>21</height>
|
<height>21</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
|||||||
class Ui_MainWindow(object):
|
class Ui_MainWindow(object):
|
||||||
def setupUi(self, MainWindow):
|
def setupUi(self, MainWindow):
|
||||||
MainWindow.setObjectName("MainWindow")
|
MainWindow.setObjectName("MainWindow")
|
||||||
MainWindow.resize(672, 553)
|
MainWindow.resize(844, 553)
|
||||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||||
sizePolicy.setHorizontalStretch(1)
|
sizePolicy.setHorizontalStretch(1)
|
||||||
@@ -60,8 +60,12 @@ class Ui_MainWindow(object):
|
|||||||
self.eventCountLabel.setSizePolicy(sizePolicy)
|
self.eventCountLabel.setSizePolicy(sizePolicy)
|
||||||
self.eventCountLabel.setObjectName("eventCountLabel")
|
self.eventCountLabel.setObjectName("eventCountLabel")
|
||||||
self.horizontalLayout.addWidget(self.eventCountLabel)
|
self.horizontalLayout.addWidget(self.eventCountLabel)
|
||||||
spacerItem = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
|
||||||
self.horizontalLayout.addItem(spacerItem)
|
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 = QtWidgets.QPushButton(self.centralwidget)
|
||||||
self.undoButton.setObjectName("undoButton")
|
self.undoButton.setObjectName("undoButton")
|
||||||
self.horizontalLayout.addWidget(self.undoButton)
|
self.horizontalLayout.addWidget(self.undoButton)
|
||||||
@@ -69,7 +73,7 @@ class Ui_MainWindow(object):
|
|||||||
self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)
|
self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)
|
||||||
MainWindow.setCentralWidget(self.centralwidget)
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
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")
|
self.menubar.setObjectName("menubar")
|
||||||
MainWindow.setMenuBar(self.menubar)
|
MainWindow.setMenuBar(self.menubar)
|
||||||
self.statusbar = QtWidgets.QStatusBar(MainWindow)
|
self.statusbar = QtWidgets.QStatusBar(MainWindow)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ logger = logging.getLogger(__file__)
|
|||||||
logger.setLevel(logging.DEBUG)
|
logger.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
REGEX = re.compile(
|
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):
|
class LoadDialog(QDialog, Ui_Dialog):
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class HistoryManager(object):
|
|||||||
"""Save data to the undo history file."""
|
"""Save data to the undo history file."""
|
||||||
logger.info('Saving to undo history file.')
|
logger.info('Saving to undo history file.')
|
||||||
with open(self.file, 'w') as 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:
|
def getTotal(self) -> int:
|
||||||
"""Returns the total number of undoable events known."""
|
"""Returns the total number of undoable events known."""
|
||||||
|
|||||||
Reference in New Issue
Block a user