Added collab
This commit is contained in:
1
gui/modules/collab/__init__.py
Normal file
1
gui/modules/collab/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from .handlers import *
|
||||
43
gui/modules/collab/connect.py
Normal file
43
gui/modules/collab/connect.py
Normal 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)
|
||||
34
gui/modules/collab/create.py
Normal file
34
gui/modules/collab/create.py
Normal 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)
|
||||
50
gui/modules/collab/handlers.py
Normal file
50
gui/modules/collab/handlers.py
Normal 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)
|
||||
)
|
||||
)
|
||||
45
gui/modules/collab/host.py
Normal file
45
gui/modules/collab/host.py
Normal 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')
|
||||
Reference in New Issue
Block a user