Added collab

This commit is contained in:
BarsTiger
2022-12-27 14:18:22 +02:00
parent 4507814fcd
commit b29a172bf8
17 changed files with 1150 additions and 34 deletions

View File

@@ -0,0 +1 @@
from .handlers import *

View File

@@ -0,0 +1,43 @@
from gui.gui import Ui_MainWindow
import json
import pysher
from gui.modules.core.popup import popup
import base64
from modules.player.player import Player
def on_url_music(url: str, p: Player, ui: Ui_MainWindow):
ui.collab_connect_logs.append(f"Received {url}")
p.set_media(url)
p.play(ui)
def handle_connection_to_server(ui: Ui_MainWindow, p: Player):
ui.collab_connect_logs.append(f'Connected to {ui.receiver_creds["name"]}')
channel = ui.receiver.subscribe(ui.collab_session_key_box.text())
channel.bind('sound', lambda _: on_url_music(_, p, ui))
channel.bind('stop', lambda _: (p.mediaplayer_preview.stop(),
p.mediaplayer_out.stop()))
def on_connect_clicked(ui: Ui_MainWindow, p: Player):
try:
creds = dict(json.loads(
base64.decodebytes(bytes(ui.collab_session_key_box.text().replace('-', '\n'), encoding='utf-8')
).decode('utf-8').replace("'", '"')
))
ui.collab_connect_logs.append(f'Loaded {creds["name"]}')
except Exception as e:
print(e)
popup("Error", 'Invalid connection key')
return
ui.receiver_creds = creds
ui.receiver = pysher.Pusher(
key=creds["key"],
cluster=creds["cluster"]
)
ui.receiver.connection.bind('pusher:connection_established', lambda _: handle_connection_to_server(ui, p))
ui.receiver.connect()
ui.collab_disconnect_button.setEnabled(True)

View File

@@ -0,0 +1,34 @@
from gui.gui import Ui_MainWindow
from modules.config.pusher import PusherConfig
from gui.modules.core.popup import popup
import base64
from gui.modules.collab.host import connect_to_host_admin
def on_create_session_clicked(ui: Ui_MainWindow):
if ui.create_session_name_box.text() == "":
popup("Error", "Specify room name")
return
connection_key = base64.encodebytes(
bytes(str(
{
"name": ui.create_session_name_box.text(),
"key": PusherConfig.get().key,
"cluster": PusherConfig.get().cluster
}
), encoding='utf-8')).decode('utf-8').strip().replace('\n', '-')
ui.new_connection_key_copy_box.setText(connection_key)
admin_key = base64.encodebytes(
bytes(str(
{
"connection_key": connection_key,
"app_id": PusherConfig.get().app_id,
"secret": PusherConfig.get().secret
}
), encoding='utf-8')).decode('utf-8').strip().replace('\n', '-')
ui.new_connection_admin_key_copy_box.setText(admin_key)
ui.collab_session_admin_key_box.setText(admin_key)
connect_to_host_admin(ui)

View File

@@ -0,0 +1,50 @@
from gui.gui import Ui_MainWindow
from PyQt5.QtWidgets import QFileDialog
from modules.player.player import Player
from modules.anonfiles.anonfiles import Anonfiles
from ezzthread import threaded
from gui.modules.core.qt_updater import call
from gui.modules.collab import create, host, connect
def register_handlers(ui: Ui_MainWindow, p: Player):
ui.send_to_users_admin_button.setEnabled(False)
ui.collab_disconnect_button.setEnabled(False)
ui.stop_all_button_admin.setEnabled(False)
ui.create_session_button.clicked.connect(
lambda: create.on_create_session_clicked(ui)
)
ui.connect_to_admin_session_button.clicked.connect(
lambda: host.connect_to_host_admin(ui)
)
ui.send_to_users_admin_button.clicked.connect(
lambda: host.on_send_sound_button(ui)
)
ui.stop_all_button_admin.clicked.connect(
lambda: host.on_stop_sound_button(ui)
)
ui.connect_to_session_button.clicked.connect(
lambda: connect.on_connect_clicked(ui, p)
)
ui.collab_disconnect_button.clicked.connect(
lambda: (ui.receiver.disconnect(),
ui.collab_disconnect_button.setEnabled(False),
ui.collab_connect_logs.append('Disconnected'))
)
ui.choose_upload_sound_button.clicked.connect(
lambda: ui.filename_to_upload_box.setText(
QFileDialog.getOpenFileName(caption='Choose file to upload')[0]
)
)
ui.upload_sound_button.clicked.connect(
lambda: threaded(
call(ui.anonfiles_uploaded_url_box.setText, Anonfiles.upload(ui.filename_to_upload_box.text()).url)
)
)

View File

@@ -0,0 +1,45 @@
from gui.gui import Ui_MainWindow
import pusher
import base64
import json
from gui.modules.core.popup import popup
def connect_to_host_admin(ui: Ui_MainWindow):
try:
creds = dict(json.loads(
base64.decodebytes(bytes(ui.collab_session_admin_key_box.text().replace('-', '\n'), encoding='utf-8')
).decode('utf-8').replace("'", '"')
))
creds_from_connection = dict(json.loads(
base64.decodebytes(bytes(creds['connection_key'].replace('-', '\n'), encoding='utf-8')
).decode('utf-8').replace("'", '"')
))
creds |= creds_from_connection
ui.control_admin_logs.append(f'Loaded {creds["name"]}')
except Exception as e:
print(e)
popup("Error", 'Invalid admin key')
return
ui.sender_creds = creds
ui.sender = pusher.Pusher(
app_id=creds["app_id"],
key=creds["key"],
secret=creds["secret"],
cluster=creds["cluster"]
)
ui.send_to_users_admin_button.setEnabled(True)
ui.stop_all_button_admin.setEnabled(True)
def on_send_sound_button(ui: Ui_MainWindow):
ui.sender.trigger(ui.sender_creds["connection_key"], 'sound',
ui.url_to_send_admin_box.text())
ui.control_admin_logs.append(f'Sent {ui.url_to_send_admin_box.text()}')
def on_stop_sound_button(ui: Ui_MainWindow):
ui.sender.trigger(ui.sender_creds["connection_key"], 'stop', None)
ui.control_admin_logs.append(f'Stopped sounds')