Skip to content

Commit f2cebfd

Browse files
committed
Fixed pause, rewritten class. (need test)
ура теперь глаза не вытекают от кода
1 parent 06deccd commit f2cebfd

File tree

1 file changed

+77
-62
lines changed

1 file changed

+77
-62
lines changed

main.py

Lines changed: 77 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
CLIENT_ID_RU_DECLINED = '1269826362399522849' #Яндекс Музыку (склонение для активности "Слушает")
4040

4141
# Версия (tag) скрипта для проверки на актуальность через Github Releases
42-
CURRENT_VERSION = "v0.2"
42+
CURRENT_VERSION = "v0.2.1"
4343

4444
# Ссылка на репозиторий
4545
REPO_URL = "https://github.com/FozerG/YandexMusicRPC"
@@ -354,99 +354,114 @@ def start() -> None:
354354
Presence.discord_available()
355355
Presence.running = True
356356
Presence.currentTrack = None
357+
357358
while Presence.running:
358359
if not Presence.client:
359360
if not clientErrorShown:
360361
log("To work, you need to log in to your Yandex account. Tray -> Yandex Settings -> Login to account.", LogType.Error)
361362
clientErrorShown = True
362363
time.sleep(3)
363364
continue
365+
364366
currentTime = time.time()
365367
if not Presence.is_discord_running():
366-
Presence.discord_was_closed()
368+
Presence.discord_was_closed()
367369
if needRestart:
368370
needRestart = False
369371
Presence.restart()
372+
370373
try:
371374
ongoing_track = Presence.getTrack()
372-
if Presence.currentTrack != ongoing_track: # проверяем что песня не играла до этого, т.к она просто может быть снята с паузы.
373-
if ongoing_track['success']:
374-
if Presence.currentTrack is not None and 'label' in Presence.currentTrack and Presence.currentTrack['label'] is not None:
375-
if ongoing_track['label'] != Presence.currentTrack['label']:
376-
log(f"Changed track to {ongoing_track['label']}", LogType.Update_Status)
377-
else:
378-
log(f"Changed track to {ongoing_track['label']}", LogType.Update_Status)
375+
if ongoing_track['success']:
376+
is_new_track = (
377+
Presence.currentTrack is None or
378+
Presence.currentTrack.get('label') != ongoing_track.get('label')
379+
)
380+
is_start_time_changed = (
381+
Presence.currentTrack and
382+
Presence.currentTrack.get('start-time') != ongoing_track.get('start-time')
383+
)
384+
is_paused = ongoing_track["playback"] != PlaybackStatus.Playing
385+
is_playing = not is_paused
386+
387+
if is_new_track:
388+
log(f"Changed track to {ongoing_track['label']}", LogType.Update_Status)
389+
Presence.update_presence(ongoing_track, currentTime)
390+
Presence.currentTrack = ongoing_track
391+
Presence.paused = False
379392
Presence.paused_time = 0
380-
trackTime = currentTime
381-
start_time = currentTime - int(ongoing_track['start-time'].total_seconds())
382-
end_time = start_time + ongoing_track['durationSec']
383-
presence_args = {
384-
'activity_type': 2,
385-
'details': ongoing_track['title'],
386-
'state': ongoing_track['artist'],
387-
'start': start_time,
388-
'end': end_time,
389-
'large_image': ongoing_track['og-image'],
390-
}
391-
392-
if ongoing_track['album'] != ongoing_track['title']:
393-
presence_args['large_text'] = ongoing_track['album']
394-
395-
if button_config != ButtonConfig.NEITHER:
396-
presence_args['buttons'] = build_buttons(ongoing_track['link'])
397393

398-
presence_args['small_image'] = "https://github.com/FozerG/YandexMusicRPC/blob/main/assets/Playing.png?raw=true"
399-
presence_args['small_text'] = "Playing" if language_config == LanguageConfig.ENGLISH else "Проигрывается"
400-
Presence.rpc.update(**presence_args)
401-
else:
402-
Presence.rpc.clear()
403-
log(f"Clear RPC")
404-
405-
Presence.currentTrack = ongoing_track
394+
elif is_start_time_changed and not Presence.paused:
395+
Presence.update_presence(ongoing_track, currentTime)
396+
Presence.currentTrack = ongoing_track
397+
Presence.paused = False
398+
Presence.paused_time = 0
406399

407-
else: #Песня не новая, проверяем статус паузы
408-
if ongoing_track['success'] and ongoing_track["playback"] != PlaybackStatus.Playing and not Presence.paused:
409-
Presence.paused = True
400+
elif is_paused and not Presence.paused:
410401
log(f"Track {ongoing_track['label']} on pause", LogType.Update_Status)
411-
if ongoing_track['success']:
412-
presence_args = {
413-
'activity_type': 2,
414-
'details': ongoing_track['title'],
415-
'state': ongoing_track['artist'],
416-
'large_image': ongoing_track['og-image'],
417-
'large_text': ongoing_track['album'],
418-
'small_image': "https://github.com/FozerG/YandexMusicRPC/blob/main/assets/Paused.png?raw=true",
419-
'small_text': "On pause" if language_config == LanguageConfig.ENGLISH else "На паузе"
420-
}
421-
if button_config != ButtonConfig.NEITHER:
422-
presence_args['buttons'] = build_buttons(ongoing_track['link'])
423-
424-
presence_args['large_text'] = f"{'On pause' if language_config == LanguageConfig.ENGLISH else 'На паузе'} {format_duration(int(ongoing_track['start-time'].total_seconds() * 1000))} / {ongoing_track['formatted_duration']}"
425-
426-
if int(ongoing_track['start-time'].total_seconds()) != 0:
427-
presence_args['small_text'] = f"{'On pause' if language_config == LanguageConfig.ENGLISH else 'На паузе'} {format_duration(int(ongoing_track['start-time'].total_seconds() * 1000))} / {ongoing_track['formatted_duration']}"
428-
429-
Presence.rpc.update(**presence_args)
402+
Presence.update_presence(ongoing_track, paused=True)
403+
Presence.paused = True
404+
trackTime = 0 # сброс времени трека
430405

431-
elif ongoing_track['success'] and ongoing_track["playback"] == PlaybackStatus.Playing and Presence.paused:
406+
elif is_playing and Presence.paused:
432407
log(f"Track {ongoing_track['label']} off pause.", LogType.Update_Status)
408+
Presence.update_presence(ongoing_track, currentTime)
433409
Presence.paused = False
410+
Presence.currentTrack = ongoing_track
434411

435-
elif ongoing_track['success'] and ongoing_track["playback"] != PlaybackStatus.Playing and Presence.paused and trackTime != 0:
412+
if Presence.paused and trackTime != 0:
436413
Presence.paused_time = currentTime - trackTime
437-
if Presence.paused_time > 5 * 60: # если пауза больше 5 минут
414+
if Presence.paused_time > 5 * 60: # Если пауза больше 5 минут
438415
trackTime = 0
439416
Presence.rpc.clear()
440417
log(f"Clear RPC due to paused for more than 5 minutes", LogType.Update_Status)
441418
else:
442-
Presence.paused_time = 0 # если трек продолжает играть, сбрасываем paused_time
443-
419+
Presence.paused_time = 0
420+
else:
421+
Presence.rpc.clear()
422+
log(f"Clear RPC by error")
444423
time.sleep(3)
445424
except pypresence.exceptions.PipeClosed:
446-
Presence.discord_was_closed()
425+
Presence.discord_was_closed()
447426
except Exception as e:
448427
log(f"Presence class stopped for a reason: {e}", LogType.Error)
449428

429+
@staticmethod
430+
def update_presence(ongoing_track, current_time=0, paused=False):
431+
start_time = current_time - int(ongoing_track['start-time'].total_seconds())
432+
end_time = start_time + ongoing_track['durationSec']
433+
434+
if language_config == LanguageConfig.RUSSIAN:
435+
playing_text = "Проигрывается"
436+
paused_text = "На паузе"
437+
else:
438+
playing_text = "Playing"
439+
paused_text = "On pause"
440+
441+
presence_args = {
442+
'activity_type': 2,
443+
'details': ongoing_track['title'],
444+
'state': ongoing_track['artist'],
445+
'large_image': ongoing_track['og-image'],
446+
'small_image': "https://github.com/FozerG/YandexMusicRPC/blob/main/assets/Paused.png?raw=true" if paused else "https://github.com/FozerG/YandexMusicRPC/blob/main/assets/Playing.png?raw=true",
447+
'small_text': paused_text if paused else playing_text
448+
}
449+
450+
if ongoing_track['album'] != ongoing_track['title']:
451+
presence_args['large_text'] = ongoing_track['album']
452+
453+
if paused:
454+
presence_args['large_text'] = f"{paused_text} {format_duration(int(ongoing_track['start-time'].total_seconds() * 1000))} / {ongoing_track['formatted_duration']}"
455+
else:
456+
presence_args['start'] = start_time
457+
presence_args['end'] = end_time
458+
459+
if button_config != ButtonConfig.NEITHER:
460+
presence_args['buttons'] = build_buttons(ongoing_track['link'])
461+
462+
Presence.rpc.update(**presence_args)
463+
464+
450465
# Метод для получения информации о текущем треке.
451466
@staticmethod
452467
def getTrack() -> dict:

0 commit comments

Comments
 (0)