result can now be automatically uploaded into a discord webhook
This commit is contained in:
parent
b26a399e8a
commit
dd0f546d9b
1 changed files with 27 additions and 7 deletions
|
@ -1,8 +1,13 @@
|
|||
import json
|
||||
import time
|
||||
import uuid
|
||||
import zlib
|
||||
from io import BytesIO
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
import nextcord
|
||||
import requests
|
||||
from PyQt6.QtCore import pyqtSignal
|
||||
from PyQt6.QtWidgets import QFrame, QVBoxLayout, QHBoxLayout, QPushButton, QProgressBar
|
||||
|
||||
|
@ -19,7 +24,7 @@ class FrameSurvey(QFrame):
|
|||
signal_skip = pyqtSignal()
|
||||
signal_success = pyqtSignal()
|
||||
|
||||
def __init__(self, survey_path: Path | str):
|
||||
def __init__(self, survey_path: Path | str): # TODO: real arguments here, cls.from_file ?
|
||||
super().__init__()
|
||||
|
||||
# signals
|
||||
|
@ -31,6 +36,7 @@ class FrameSurvey(QFrame):
|
|||
self.collected_datas: dict[str, dict] = {"time": time.time(), "surveys": {}}
|
||||
self.survey_screens: list[tuple[str, BaseSurvey]] = []
|
||||
self.current_survey_index = 0
|
||||
self.discord_webhook_result_url: Optional[str] = None
|
||||
|
||||
# set the layout
|
||||
self._layout = QVBoxLayout()
|
||||
|
@ -93,7 +99,7 @@ class FrameSurvey(QFrame):
|
|||
def load_file(self, survey_path: Path | str):
|
||||
# load the surveys screens
|
||||
with open(survey_path, encoding="utf-8") as file:
|
||||
surveys_data = json.load(file)
|
||||
data = json.load(file)
|
||||
|
||||
self.survey_screens = [
|
||||
(
|
||||
|
@ -107,12 +113,15 @@ class FrameSurvey(QFrame):
|
|||
}
|
||||
)
|
||||
)
|
||||
for survey_id, survey_data in surveys_data["surveys"].items()
|
||||
for survey_id, survey_data in data["surveys"].items()
|
||||
]
|
||||
self.current_survey_index = 0
|
||||
|
||||
# update the progress bar
|
||||
self.progress.setMaximum(len(surveys_data["surveys"]))
|
||||
self.progress.setMaximum(len(data["surveys"]))
|
||||
|
||||
# get the result webhook url
|
||||
self.discord_webhook_result_url = data.get("discord_webhook_result")
|
||||
|
||||
def next_survey(self):
|
||||
# get the collected data from the survey
|
||||
|
@ -155,9 +164,20 @@ class FrameSurvey(QFrame):
|
|||
old_frame_survey.deleteLater()
|
||||
|
||||
def finish_survey(self):
|
||||
# save the result in a json file
|
||||
with open(result_path / f"{uuid.uuid4()}.json", "w", encoding="utf-8") as file:
|
||||
json.dump(self.collected_datas, file, ensure_ascii=False)
|
||||
# TODO: page with indication and progress bar for upload
|
||||
# TODO: split into save_file() and upload_file()
|
||||
|
||||
# encode and compress the data
|
||||
data: bytes = zlib.compress(json.dumps(self.collected_datas, ensure_ascii=False).encode("utf-8"))
|
||||
|
||||
# save the result in a local file
|
||||
(result_path / f"{uuid.uuid4()}.rsl").write_bytes(data)
|
||||
|
||||
# if set, try to send the result to a discord webhook
|
||||
if self.discord_webhook_result_url is not None:
|
||||
with requests.Session() as session:
|
||||
webhook = nextcord.SyncWebhook.from_url(self.discord_webhook_result_url, session=session)
|
||||
message = webhook.send(file=nextcord.File(fp=BytesIO(data), filename="result.rsl"), wait=True)
|
||||
|
||||
self.quit()
|
||||
|
||||
|
|
Loading…
Reference in a new issue