qol + discord crash bug fix
This commit is contained in:
@@ -5,7 +5,9 @@ files = [
|
||||
"core/headers.py",
|
||||
"core/updater.py",
|
||||
"core/web_search.py",
|
||||
"main.py"
|
||||
"main.py",
|
||||
"README.md",
|
||||
"requirements.txt"
|
||||
]
|
||||
|
||||
codeblock = "```"
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import time
|
||||
import threading
|
||||
from discordrp import Presence
|
||||
|
||||
class DiscordPresence:
|
||||
@@ -7,61 +8,89 @@ class DiscordPresence:
|
||||
self.presence = None
|
||||
self.running = False
|
||||
self.start_time = None
|
||||
self._thread = None
|
||||
self._stop_thread = threading.Event()
|
||||
|
||||
def start(self):
|
||||
"""Start the Discord Rich Presence"""
|
||||
if self.running:
|
||||
print("Presence is already running")
|
||||
return
|
||||
|
||||
self.start_time = int(time.time())
|
||||
self.presence = Presence(self.client_id)
|
||||
self.presence.__enter__()
|
||||
|
||||
self.presence.set(
|
||||
{
|
||||
"assets": {
|
||||
"large_image": "2ktanbig",
|
||||
"large_text": "CLARA"
|
||||
},
|
||||
"buttons": [
|
||||
{
|
||||
"label": "Let CLARA help you!",
|
||||
"url": "https://github.com/n0va-bot/CLARA"
|
||||
}
|
||||
]
|
||||
}
|
||||
)
|
||||
|
||||
self.running = True
|
||||
print("Discord presence started")
|
||||
self._stop_thread.clear()
|
||||
self._thread = threading.Thread(target=self._run_loop, daemon=True)
|
||||
self._thread.start()
|
||||
print("Discord presence manager started")
|
||||
|
||||
def _run_loop(self):
|
||||
while not self._stop_thread.is_set():
|
||||
try:
|
||||
with Presence(self.client_id) as presence:
|
||||
self.presence = presence
|
||||
print("Successfully connected to Discord RPC.")
|
||||
self.start_time = int(time.time())
|
||||
self._set_initial_presence()
|
||||
|
||||
while not self._stop_thread.is_set():
|
||||
time.sleep(15)
|
||||
|
||||
except Exception as e:
|
||||
self.presence = None
|
||||
print(f"Failed to connect to Discord RPC: {e}. Retrying in 30 seconds...")
|
||||
|
||||
for _ in range(30):
|
||||
if self._stop_thread.is_set():
|
||||
break
|
||||
time.sleep(1)
|
||||
|
||||
self.presence = None
|
||||
|
||||
def _set_initial_presence(self):
|
||||
if not self.presence:
|
||||
return
|
||||
|
||||
try:
|
||||
self.presence.set(
|
||||
{
|
||||
"assets": {
|
||||
"large_image": "2ktanbig",
|
||||
"large_text": "CLARA"
|
||||
},
|
||||
"buttons": [
|
||||
{
|
||||
"label": "Let CLARA help you!",
|
||||
"url": "https://github.com/n0va-bot/CLARA"
|
||||
}
|
||||
]
|
||||
}
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"Failed to set initial Discord presence: {e}")
|
||||
|
||||
def end(self):
|
||||
"""Stop the Discord Rich Presence"""
|
||||
if not self.running:
|
||||
print("Presence is not running")
|
||||
return
|
||||
|
||||
try:
|
||||
if self.presence:
|
||||
self.presence.__exit__(None, None, None)
|
||||
self.presence = None
|
||||
except Exception as e:
|
||||
print(f"Error closing presence: {e}")
|
||||
finally:
|
||||
self.running = False
|
||||
print("Discord presence stopped")
|
||||
print("Stopping Discord presence...")
|
||||
self._stop_thread.set()
|
||||
if self._thread and self._thread.is_alive():
|
||||
self._thread.join(timeout=5)
|
||||
|
||||
self.running = False
|
||||
self.presence = None
|
||||
print("Discord presence stopped")
|
||||
|
||||
def update(self, data):
|
||||
"""Update the presence with new data"""
|
||||
if not self.running or not self.presence:
|
||||
print("Presence is not running. Call start() first.")
|
||||
return
|
||||
|
||||
self.presence.set(data)
|
||||
try:
|
||||
self.presence.set(data)
|
||||
except Exception as e:
|
||||
print(f"Failed to update Discord presence: {e}")
|
||||
|
||||
def __del__(self):
|
||||
"""Cleanup when object is destroyed"""
|
||||
if self.running:
|
||||
self.end()
|
||||
|
||||
|
||||
24
main.py
24
main.py
@@ -362,6 +362,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
if not no_quit:
|
||||
right_menu.addAction("Quit", QtWidgets.QApplication.quit)
|
||||
self.tray.setContextMenu(right_menu)
|
||||
self.tray.activated.connect(self.handle_tray_activated)
|
||||
self.tray.show()
|
||||
|
||||
# LEFT MENU
|
||||
@@ -410,15 +411,26 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
elif event.button() == QtCore.Qt.RightButton: #type: ignore
|
||||
self.tray.contextMenu().popup(event.globalPosition().toPoint())
|
||||
|
||||
def handle_tray_activated(self, reason):
|
||||
if reason == QtWidgets.QSystemTrayIcon.ActivationReason.Trigger:
|
||||
self.left_menu.popup(QtGui.QCursor.pos())
|
||||
|
||||
def toggle_visible(self):
|
||||
self.setVisible(not self.isVisible())
|
||||
|
||||
def start_app_launcher(self):
|
||||
self.app_launcher_dialog = AppLauncherDialog(self)
|
||||
self.app_launcher_dialog.move(QtGui.QCursor.pos())
|
||||
self.app_launcher_dialog.show()
|
||||
|
||||
def start_file_search(self):
|
||||
pattern, ok = QtWidgets.QInputDialog.getText(self, "File Search", "Enter search pattern:")
|
||||
dialog = QtWidgets.QInputDialog(self)
|
||||
dialog.setWindowTitle("File Search")
|
||||
dialog.setLabelText("Enter search pattern:")
|
||||
dialog.move(QtGui.QCursor.pos())
|
||||
|
||||
ok = dialog.exec()
|
||||
pattern = dialog.textValue()
|
||||
|
||||
if ok and pattern:
|
||||
try:
|
||||
@@ -453,7 +465,14 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
QtWidgets.QMessageBox.information(self, "No Results", "Sorry, I couldn't find anything in the root folder either.")
|
||||
|
||||
def start_web_search(self):
|
||||
query, ok = QtWidgets.QInputDialog.getText(self, "Web Search", "Enter search query:")
|
||||
dialog = QtWidgets.QInputDialog(self)
|
||||
dialog.setWindowTitle("Web Search")
|
||||
dialog.setLabelText("Enter search query:")
|
||||
dialog.move(QtGui.QCursor.pos())
|
||||
|
||||
ok = dialog.exec()
|
||||
query = dialog.textValue()
|
||||
|
||||
if ok and query:
|
||||
try:
|
||||
QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) #type: ignore
|
||||
@@ -527,7 +546,6 @@ def main():
|
||||
|
||||
pet.show()
|
||||
|
||||
# Gracefully handle shutdown
|
||||
app.aboutToQuit.connect(presence.end)
|
||||
sys.exit(app.exec())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user