147 lines
5.4 KiB
Python
147 lines
5.4 KiB
Python
from PyQt6.QtWidgets import QWidget, QVBoxLayout, QTextEdit, QPushButton, QLabel, QMessageBox, QHBoxLayout
|
|
from PyQt6.QtCore import Qt, QThread, pyqtSignal
|
|
import time
|
|
import smtplib
|
|
import os
|
|
from email.mime.text import MIMEText
|
|
from email.mime.multipart import MIMEMultipart
|
|
from app.core.main_manager import MainManager, NotificationType
|
|
|
|
class EmailSender(QThread):
|
|
success = pyqtSignal()
|
|
error = pyqtSignal(str)
|
|
|
|
def __init__(self, subject, message):
|
|
super().__init__()
|
|
self.subject = subject
|
|
self.message = message
|
|
|
|
def run(self):
|
|
try:
|
|
# Get email configuration from environment variables
|
|
password = 'xprqegxuqixgljyi'
|
|
email = 'louismazindev@gmail.com'
|
|
smtp_server = 'smtp.gmail.com'
|
|
smtp_port = 587
|
|
|
|
if not password:
|
|
# Fallback to simulation if no credentials are configured
|
|
self._simulate_email_sending()
|
|
return
|
|
|
|
# Create message
|
|
msg = MIMEMultipart()
|
|
msg['From'] = email
|
|
msg['To'] = email
|
|
msg['Subject'] = self.subject
|
|
|
|
# Add body to email
|
|
msg.attach(MIMEText(self.message, 'plain'))
|
|
|
|
# Create SMTP session
|
|
server = smtplib.SMTP(smtp_server, smtp_port)
|
|
server.starttls() # Enable TLS encryption
|
|
# Login with app password
|
|
server.login(email, password)
|
|
# Send email
|
|
text = msg.as_string()
|
|
server.sendmail(email, email, text)
|
|
server.quit()
|
|
|
|
self.success.emit()
|
|
except Exception as e:
|
|
self.error.emit()
|
|
|
|
def _simulate_email_sending(self):
|
|
"""Fallback simulation when no email credentials are configured"""
|
|
time.sleep(2) # Simulate network delay
|
|
|
|
print("=== EMAIL SIMULATION (No credentials configured) ===")
|
|
print(f"Subject: {self.subject}")
|
|
print(f"Message: {self.message}")
|
|
print("=" * 55)
|
|
|
|
self.success.emit()
|
|
|
|
class SuggestionWindow(QWidget):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.main_manager = MainManager.get_instance()
|
|
self.language_manager = self.main_manager.get_language_manager()
|
|
self.settings_manager = self.main_manager.get_settings_manager()
|
|
|
|
self.observer_manager = self.main_manager.get_observer_manager()
|
|
self.observer_manager.subscribe(NotificationType.LANGUAGE, self.update_language)
|
|
|
|
self.setup_ui()
|
|
|
|
def setup_ui(self):
|
|
layout = QVBoxLayout(self)
|
|
layout.setAlignment(Qt.AlignmentFlag.AlignTop)
|
|
layout.setSpacing(20)
|
|
layout.setContentsMargins(20, 20, 20, 20)
|
|
|
|
# Title
|
|
self.title_label = QLabel(self.language_manager.get_text("suggestion_text"), self)
|
|
self.title_label.setStyleSheet("font-size: 18px; font-weight: bold; margin-bottom: 10px;")
|
|
layout.addWidget(self.title_label)
|
|
|
|
# Text area for suggestion
|
|
self.text_edit = QTextEdit(self)
|
|
self.text_edit.setPlaceholderText(self.language_manager.get_text("suggestion_placeholder"))
|
|
self.text_edit.setMinimumHeight(200)
|
|
layout.addWidget(self.text_edit)
|
|
|
|
# Button layout
|
|
button_layout = QHBoxLayout()
|
|
button_layout.addStretch()
|
|
|
|
# Send button
|
|
self.send_button = QPushButton(self.language_manager.get_text("send_suggestion"), self)
|
|
self.send_button.clicked.connect(self.send_suggestion)
|
|
button_layout.addWidget(self.send_button)
|
|
|
|
layout.addLayout(button_layout)
|
|
layout.addStretch()
|
|
|
|
def send_suggestion(self):
|
|
message = self.text_edit.toPlainText().strip()
|
|
|
|
if not message:
|
|
return
|
|
|
|
# Disable send button during sending
|
|
self.send_button.setEnabled(False)
|
|
self.send_button.setText(self.language_manager.get_text("sending"))
|
|
|
|
# Create subject with app name
|
|
subject = f"Suggestion for {self.settings_manager.get_config('app_name')}"
|
|
|
|
# Create and start email sender thread
|
|
self.email_sender = EmailSender(subject, message)
|
|
self.email_sender.success.connect(self.on_email_sent)
|
|
self.email_sender.error.connect(self.on_email_error)
|
|
self.email_sender.start()
|
|
|
|
def on_email_sent(self):
|
|
self.send_button.setEnabled(True)
|
|
self.send_button.setText(self.language_manager.get_text("send_suggestion"))
|
|
|
|
QMessageBox.information(self,
|
|
self.language_manager.get_text("success"),
|
|
self.language_manager.get_text("suggestion_sent_success"))
|
|
self.text_edit.clear()
|
|
|
|
def on_email_error(self):
|
|
self.send_button.setEnabled(True)
|
|
self.send_button.setText(self.language_manager.get_text("send_suggestion"))
|
|
|
|
QMessageBox.critical(self,
|
|
self.language_manager.get_text("error"),
|
|
f"{self.language_manager.get_text('suggestion_send_error')}")
|
|
|
|
def update_language(self):
|
|
self.title_label.setText(self.language_manager.get_text("suggestion_text"))
|
|
self.text_edit.setPlaceholderText(self.language_manager.get_text("suggestion_placeholder"))
|
|
self.send_button.setText(self.language_manager.get_text("send_suggestion"))
|