Files
bulk-reminders/bulk_reminders/load.py

53 lines
1.8 KiB
Python

import os
import re
from typing import List
from PyQt5.QtCore import QSize, QTimer
from PyQt5.QtGui import QMovie
from PyQt5.QtWidgets import QApplication, QDialog, QLabel
from bulk_reminders.api import Event
from bulk_reminders.load_base import Ui_Dialog
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))?')
class LoadDialog(QDialog, Ui_Dialog):
def __init__(self, *args, **kwargs):
super(QDialog, self).__init__(*args, **kwargs)
self.setupUi(self)
self.spinner = QLabel()
path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'loading.gif')
self.movie = QMovie(path)
self.movie.setScaledSize(QSize(26, 26))
self.spinner.setMovie(self.movie)
self.movie.start()
self.spinner.hide()
self.spinner.setFixedSize(23, 23)
self.horizontalLayout.addWidget(self.spinner)
self.plainTextEdit.textChanged.connect(self.edited)
self.parseTimer = QTimer()
self.parseTimer.timeout.connect(self.parse)
self.parseTimer.setSingleShot(True)
self.show()
self.parse()
self.parsed: List[Event] = []
def parse(self) -> None:
"""Parse the events entered into the dialog"""
self.spinner.hide()
results = [result.groups() for result in re.finditer(REGEX, self.plainTextEdit.toPlainText())]
self.eventCountLabel.setText(f'{len(results)} group{"s" if len(results) != 0 else ""} found.')
self.parsed = list(map(Event.parse_raw, results))
def edited(self) -> None:
"""Prepare a timer to be fired to parse the edited text"""
self.parseTimer.stop()
self.spinner.show()
self.parseTimer.start(500) # 0.5 seconds