Guest: never publish twice when host is already relayed; log guest transitions once
Browse files
app.py
CHANGED
|
@@ -470,6 +470,17 @@ def _guest_source(user, own):
|
|
| 470 |
nick=str((own or {}).get('nickname') or hobs.get('nickname') or user)
|
| 471 |
return {**hobs,'nickname':nick}, host
|
| 472 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 473 |
def _oauth_automation_on():
|
| 474 |
try:return bool(youtube.journal.read().get('enabled'))
|
| 475 |
except Exception:return False
|
|
@@ -848,13 +859,19 @@ def _check_account(user):
|
|
| 848 |
if top:log(user,'[SOURCE] @%s selected %s'%(user,brief))
|
| 849 |
if prev_room and prev_room!=obs.get('room_id') and relaying:
|
| 850 |
log(user,'[MONITOR] @%s session/room changed; source will be refreshed'%user)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 851 |
if relaying:
|
| 852 |
with _direct_guard:cur_src=(_direct_handles.get(user) or {}).get('src','')
|
| 853 |
if cur_src!=src_host:
|
| 854 |
_stop_direct(user, 'guest source switch')
|
| 855 |
log(user,'[GUEST] @%s source switch: %s'%(user, ('guest on @%s'%src_host) if src_host else 'own room'))
|
| 856 |
-
|
| 857 |
-
log(user,'[GUEST] @%s is a guest on @%s; relaying host stream'%(user,src_host))
|
| 858 |
_set_state(user,'LIVE','LIVE' if not src_host else 'LIVE · ضيف عند @%s'%src_host,**extra)
|
| 859 |
_maybe_start_direct(user, obs, src_host)
|
| 860 |
if _oauth_automation_on() and not hub.busy(user) and (obs.get('sources') or []):
|
|
|
|
| 470 |
nick=str((own or {}).get('nickname') or hobs.get('nickname') or user)
|
| 471 |
return {**hobs,'nickname':nick}, host
|
| 472 |
|
| 473 |
+
_guest_logged={}
|
| 474 |
+
|
| 475 |
+
def _guest_note(user, host):
|
| 476 |
+
"""Log guest transitions only (the monitor runs every cycle)."""
|
| 477 |
+
if host:
|
| 478 |
+
if _guest_logged.get(user)!=host:
|
| 479 |
+
_guest_logged[user]=host
|
| 480 |
+
log(user,'[GUEST] @%s is a guest on @%s'%(user,host))
|
| 481 |
+
else:
|
| 482 |
+
_guest_logged.pop(user,None)
|
| 483 |
+
|
| 484 |
def _oauth_automation_on():
|
| 485 |
try:return bool(youtube.journal.read().get('enabled'))
|
| 486 |
except Exception:return False
|
|
|
|
| 859 |
if top:log(user,'[SOURCE] @%s selected %s'%(user,brief))
|
| 860 |
if prev_room and prev_room!=obs.get('room_id') and relaying:
|
| 861 |
log(user,'[MONITOR] @%s session/room changed; source will be refreshed'%user)
|
| 862 |
+
if src_host and hub.busy(src_host):
|
| 863 |
+
# Host is already published by this project on the single RTMPS key: never publish twice.
|
| 864 |
+
if relaying:
|
| 865 |
+
_stop_direct(user, 'guest on @%s (host already relayed)'%src_host)
|
| 866 |
+
_guest_note(user, src_host)
|
| 867 |
+
_set_state(user,'LIVE','LIVE · ضيف عند @%s (البث عبر @%s)'%(src_host,src_host),**extra)
|
| 868 |
+
return
|
| 869 |
if relaying:
|
| 870 |
with _direct_guard:cur_src=(_direct_handles.get(user) or {}).get('src','')
|
| 871 |
if cur_src!=src_host:
|
| 872 |
_stop_direct(user, 'guest source switch')
|
| 873 |
log(user,'[GUEST] @%s source switch: %s'%(user, ('guest on @%s'%src_host) if src_host else 'own room'))
|
| 874 |
+
_guest_note(user, src_host)
|
|
|
|
| 875 |
_set_state(user,'LIVE','LIVE' if not src_host else 'LIVE · ضيف عند @%s'%src_host,**extra)
|
| 876 |
_maybe_start_direct(user, obs, src_host)
|
| 877 |
if _oauth_automation_on() and not hub.busy(user) and (obs.get('sources') or []):
|