qol + discord crash bug fix
This commit is contained in:
@@ -5,7 +5,9 @@ files = [
|
|||||||
"core/headers.py",
|
"core/headers.py",
|
||||||
"core/updater.py",
|
"core/updater.py",
|
||||||
"core/web_search.py",
|
"core/web_search.py",
|
||||||
"main.py"
|
"main.py",
|
||||||
|
"README.md",
|
||||||
|
"requirements.txt"
|
||||||
]
|
]
|
||||||
|
|
||||||
codeblock = "```"
|
codeblock = "```"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import time
|
import time
|
||||||
|
import threading
|
||||||
from discordrp import Presence
|
from discordrp import Presence
|
||||||
|
|
||||||
class DiscordPresence:
|
class DiscordPresence:
|
||||||
@@ -7,61 +8,89 @@ class DiscordPresence:
|
|||||||
self.presence = None
|
self.presence = None
|
||||||
self.running = False
|
self.running = False
|
||||||
self.start_time = None
|
self.start_time = None
|
||||||
|
self._thread = None
|
||||||
|
self._stop_thread = threading.Event()
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
"""Start the Discord Rich Presence"""
|
|
||||||
if self.running:
|
if self.running:
|
||||||
print("Presence is already running")
|
print("Presence is already running")
|
||||||
return
|
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
|
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):
|
def end(self):
|
||||||
"""Stop the Discord Rich Presence"""
|
|
||||||
if not self.running:
|
if not self.running:
|
||||||
print("Presence is not running")
|
print("Presence is not running")
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
print("Stopping Discord presence...")
|
||||||
if self.presence:
|
self._stop_thread.set()
|
||||||
self.presence.__exit__(None, None, None)
|
if self._thread and self._thread.is_alive():
|
||||||
self.presence = None
|
self._thread.join(timeout=5)
|
||||||
except Exception as e:
|
|
||||||
print(f"Error closing presence: {e}")
|
self.running = False
|
||||||
finally:
|
self.presence = None
|
||||||
self.running = False
|
print("Discord presence stopped")
|
||||||
print("Discord presence stopped")
|
|
||||||
|
|
||||||
def update(self, data):
|
def update(self, data):
|
||||||
"""Update the presence with new data"""
|
|
||||||
if not self.running or not self.presence:
|
if not self.running or not self.presence:
|
||||||
print("Presence is not running. Call start() first.")
|
|
||||||
return
|
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):
|
def __del__(self):
|
||||||
"""Cleanup when object is destroyed"""
|
|
||||||
if self.running:
|
if self.running:
|
||||||
self.end()
|
self.end()
|
||||||
|
|
||||||
|
|||||||
24
main.py
24
main.py
@@ -362,6 +362,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||||||
if not no_quit:
|
if not no_quit:
|
||||||
right_menu.addAction("Quit", QtWidgets.QApplication.quit)
|
right_menu.addAction("Quit", QtWidgets.QApplication.quit)
|
||||||
self.tray.setContextMenu(right_menu)
|
self.tray.setContextMenu(right_menu)
|
||||||
|
self.tray.activated.connect(self.handle_tray_activated)
|
||||||
self.tray.show()
|
self.tray.show()
|
||||||
|
|
||||||
# LEFT MENU
|
# LEFT MENU
|
||||||
@@ -410,15 +411,26 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||||||
elif event.button() == QtCore.Qt.RightButton: #type: ignore
|
elif event.button() == QtCore.Qt.RightButton: #type: ignore
|
||||||
self.tray.contextMenu().popup(event.globalPosition().toPoint())
|
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):
|
def toggle_visible(self):
|
||||||
self.setVisible(not self.isVisible())
|
self.setVisible(not self.isVisible())
|
||||||
|
|
||||||
def start_app_launcher(self):
|
def start_app_launcher(self):
|
||||||
self.app_launcher_dialog = AppLauncherDialog(self)
|
self.app_launcher_dialog = AppLauncherDialog(self)
|
||||||
|
self.app_launcher_dialog.move(QtGui.QCursor.pos())
|
||||||
self.app_launcher_dialog.show()
|
self.app_launcher_dialog.show()
|
||||||
|
|
||||||
def start_file_search(self):
|
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:
|
if ok and pattern:
|
||||||
try:
|
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.")
|
QtWidgets.QMessageBox.information(self, "No Results", "Sorry, I couldn't find anything in the root folder either.")
|
||||||
|
|
||||||
def start_web_search(self):
|
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:
|
if ok and query:
|
||||||
try:
|
try:
|
||||||
QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) #type: ignore
|
QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) #type: ignore
|
||||||
@@ -527,7 +546,6 @@ def main():
|
|||||||
|
|
||||||
pet.show()
|
pet.show()
|
||||||
|
|
||||||
# Gracefully handle shutdown
|
|
||||||
app.aboutToQuit.connect(presence.end)
|
app.aboutToQuit.connect(presence.end)
|
||||||
sys.exit(app.exec())
|
sys.exit(app.exec())
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user