Skip to content

Commit

Permalink
refonction si discord n'est pas installé
Browse files Browse the repository at this point in the history
  • Loading branch information
Paullux committed Jan 2, 2024
1 parent e45f771 commit ea71942
Show file tree
Hide file tree
Showing 3 changed files with 119 additions and 46 deletions.
42 changes: 41 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,54 @@ Petit lecteur de musique écrit en Python et sans prétention.
- Fonctionnalité de volume réglable.
- Interface utilisateur personnalisée avec des boutons de contrôle de la fenêtre (minimiser, maximiser, fermer).
## Prérequis
Pour exécuter ce lecteur de musique, vous aurez besoin de :
Pour exécuter ce lecteur de musique, assurez-vous d'avoir installé les éléments suivants :

### Pour tous les systèmes :
- Python 3.x
- PyQt5
- Pygame
- PyDub
- Mutagen
- Pyqtgraph

### Pour Windows :
- FFmpeg :
- Vous pouvez installer FFmpeg via l'un des gestionnaires de paquets en ligne de commande suivants :
- Chocolatey :
```
choco install ffmpeg
```
- Winget (Essentials Build) :
```
winget install "FFmpeg (Essentials Build)"
```
- Winget (Full Build) :
```
winget install ffmpeg
```
- Scoop (Full Build) :
```
scoop install ffmpeg
```
- Scoop (Shared Build) :
```
scoop install ffmpeg-shared
```
- Pour les builds de développement (Git Master) :
```
scoop install ffmpeg-gyan-nightly
```
- Alternativement, vous pouvez télécharger FFmpeg manuellement depuis [le site officiel](https://ffmpeg.org/download.html), l'extraire et ajouter le dossier `bin` à la variable d'environnement `Path`.
- Vérifiez l'installation avec `ffmpeg -version`.

### Pour Linux :
- FFmpeg :
- Installez FFmpeg en utilisant le gestionnaire de paquets de votre distribution.
Par exemple, sur Ubuntu/Debian, utilisez :
```bash
sudo apt-get install ffmpeg
```
- Vérifiez l'installation avec `ffmpeg -version`.
## Installation
1. Clonez ce dépôt ou téléchargez-le en tant qu'archive ZIP.
2. Installez les dépendances nécessaires en exécutant `pip install -r requirements.txt`.
Expand Down
120 changes: 76 additions & 44 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import platform
if platform.system() == 'Linux':
import subprocess
elif platform.system() == 'Windows':
import psutil
import sys
import os
import random
import platform
import numpy as np
from pydub import AudioSegment
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QLabel, QPushButton, QVBoxLayout, QSlider, QHBoxLayout, QFileDialog, QListWidget
Expand All @@ -13,7 +17,6 @@
from mutagen.mp3 import MP3
from mutagen.easyid3 import EasyID3
import glob
from pypresence import Presence
from filebrowser_client import FilebrowserClient
import qasync
import asyncio
Expand All @@ -24,12 +27,34 @@
# Charge les variables d'environnement du fichier .env
load_dotenv()

def is_discord_running():
# Cette fonction vérifie si Discord est en cours d'exécution sur l'ordinateur
if platform.system() == 'Linux':
try:
# Remplacer par la méthode appropriée pour votre système d'exploitation
process = subprocess.check_output(["pgrep", "Discord"])
return process is not None
except subprocess.CalledProcessError:
return False
elif platform.system() == 'Windows':
for process in psutil.process_iter(['name']):
try:
if process.info['name'] == 'Discord.exe':
return True
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return False

if is_discord_running():
from pypresence import Presence

def update_discord_rpc(title, artist, image, mainwindow):
try:
mainwindow.RPC.update(details=title, state=artist, large_image=image, large_text="Entrain d'écouter")
print("Réussite de la mise à jour du RPC Discord")
except Exception as e:
print(f"Erreur lors de la mise à jour du RPC Discord: {e}")
if not is_discord_running():
try:
mainwindow.RPC.update(details=title, state=artist, large_image=image, large_text="Entrain d'écouter")
print("Réussite de la mise à jour du RPC Discord")
except Exception as e:
print(f"Erreur lors de la mise à jour du RPC Discord: {e}")

class WaveformWorker(QThread):
waveformReady = pyqtSignal(np.ndarray)
Expand Down Expand Up @@ -97,10 +122,13 @@ def __init__(self):
self.setWindowFlags(Qt.FramelessWindowHint)
self.setAttribute(Qt.WA_TranslucentBackground)

client_id = os.getenv('DISCORD_CLIENT_ID') # Remplacez par votre ID client Discord
self.RPC = Presence(client_id)
self.RPC.connect()
self.uploaded_images_cache = {}
if is_discord_running():
client_id = os.getenv('DISCORD_CLIENT_ID') # Remplacez par votre ID client Discord
self.RPC = Presence(client_id)
self.RPC.connect()
self.uploaded_images_cache = {}
else:
print('Discord n\'a pas été détecté sur votre système d\'exploitation, vous ne pouvez donc pas profiter de Discord Rich Presence sur cette ordinateur.')

self.movableWidget = QWidget()
vbox = QVBoxLayout(self.movableWidget)
Expand Down Expand Up @@ -171,37 +199,38 @@ def __init__(self):
pygame.mixer.init()

async def envoyer_image(self, chemin_fichier, title, artist):
try:
uploaded_image = None
image_path_sans_prefixe = chemin_fichier[7:] if chemin_fichier.startswith("file://") else chemin_fichier
if image_path_sans_prefixe in self.uploaded_images_cache:
print(f"L'image a déjà été téléchargée. URL: {self.uploaded_images_cache[image_path_sans_prefixe]}")
uploaded_image = self.uploaded_images_cache[image_path_sans_prefixe]
client_id = os.getenv('IMGUR_CLIENT_ID')
if not client_id:
raise ValueError("La clé API d'Imgur n'est pas définie dans les variables d'environnement.")

if is_discord_running():
try:
# Téléchargez l'image et mettez à jour le cache
im = pyimgur.Imgur(client_id)
if uploaded_image is None:
uploaded_image = im.upload_image(image_path_sans_prefixe, title="Uploaded with PyImgur")
self.uploaded_images_cache[image_path_sans_prefixe] = uploaded_image.link
print(f"Image téléchargée avec succès. URL: {uploaded_image.link}")
uploaded_image = uploaded_image.link
uploaded_image = None
image_path_sans_prefixe = chemin_fichier[7:] if chemin_fichier.startswith("file://") else chemin_fichier
if image_path_sans_prefixe in self.uploaded_images_cache:
print(f"L'image a déjà été téléchargée. URL: {self.uploaded_images_cache[image_path_sans_prefixe]}")
uploaded_image = self.uploaded_images_cache[image_path_sans_prefixe]
client_id = os.getenv('IMGUR_CLIENT_ID')
if not client_id:
raise ValueError("La clé API d'Imgur n'est pas définie dans les variables d'environnement.")

try:
# Téléchargez l'image et mettez à jour le cache
im = pyimgur.Imgur(client_id)
if uploaded_image is None:
uploaded_image = im.upload_image(image_path_sans_prefixe, title="Uploaded with PyImgur")
self.uploaded_images_cache[image_path_sans_prefixe] = uploaded_image.link
print(f"Image téléchargée avec succès. URL: {uploaded_image.link}")
uploaded_image = uploaded_image.link
except Exception as e:
print(f"Une erreur est survenue lors du téléchargement de l'image : {e}")
return None
if uploaded_image:
# Mettez à jour Discord RPC avec l'image Imgur
print("Réussite du téléchargement de l'image sur Imgur également")
else:
print("Échec du téléchargement de l'image sur Imgur également")
uploaded_image = "music_bot"
except Exception as e:
print(f"Une erreur est survenue lors du téléchargement de l'image : {e}")
return None
if uploaded_image:
# Mettez à jour Discord RPC avec l'image Imgur
print("Réussite du téléchargement de l'image sur Imgur également")
else:
print("Échec du téléchargement de l'image sur Imgur également")
print(f"Échec de la connexion ou du téléchargement de l'image : {e}")
uploaded_image = "music_bot"
except Exception as e:
print(f"Échec de la connexion ou du téléchargement de l'image : {e}")
uploaded_image = "music_bot"
threading.Thread(target=update_discord_rpc, args=(title, artist, uploaded_image, self)).start()
threading.Thread(target=update_discord_rpc, args=(title, artist, uploaded_image, self)).start()

def check_playback_status(self):
if not pygame.mixer.music.get_busy() and self.is_playing and not self.is_manual_track_change:
Expand Down Expand Up @@ -781,8 +810,9 @@ def on_clear_clicked(self):
self.btnPlayPause.clicked.connect(self.load_music_slot_connect)
self.waveformPlot.getAxis('left').setVisible(False)
self.waveformPlot.getAxis('bottom').setVisible(False)
if self.RPC is not None:
self.RPC.close()
if is_discord_running():
if self.RPC is not None:
self.RPC.close()


def apply_style_to_button(self, button, activate):
Expand Down Expand Up @@ -867,8 +897,9 @@ def load_music(self):
folder_path = QFileDialog.getExistingDirectory(None, "Select Folder", default_music_folder)
if not folder_path:
return
if self.RPC is None:
self.RPC.connect()
if is_discord_running():
if self.RPC is None:
self.RPC.connect()
if not self.track_list:
first = True
else:
Expand Down Expand Up @@ -1104,7 +1135,8 @@ def play_track(self, index):
else:
print("Aucune image de pochette trouvée.")
self.total_duration = int(self.get_audio_length(self.filePath) * 1000) # Durée totale en millisecondes
asyncio.create_task(self.play_track_async(cover_path, title, artist))
if is_discord_running():
asyncio.create_task(self.play_track_async(cover_path, title, artist))

def on_repeat_clicked(self):
if self.repeat_state < 2:
Expand Down
3 changes: 2 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ qasync==0.27.1
asyncio==3.4.3
pyimgur==0.6.0
requests==2.31.0
python-dotenv==1.0.0
python-dotenv==1.0.0
psutil==5.9.5

0 comments on commit ea71942

Please sign in to comment.