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

@@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object): class Ui_MainWindow(object):
def setupUi(self, MainWindow): def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow") MainWindow.setObjectName("MainWindow")
MainWindow.resize(815, 484) MainWindow.resize(815, 497)
icon = QtGui.QIcon() icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/img/img/kotopad.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon.addPixmap(QtGui.QPixmap(":/img/img/kotopad.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon) MainWindow.setWindowIcon(icon)
@@ -324,6 +324,153 @@ class Ui_MainWindow(object):
self.content.addWidget(self.stream_page) self.content.addWidget(self.stream_page)
self.collab_page = QtWidgets.QWidget() self.collab_page = QtWidgets.QWidget()
self.collab_page.setObjectName("collab_page") self.collab_page.setObjectName("collab_page")
self.collab_page_lay = QtWidgets.QVBoxLayout(self.collab_page)
self.collab_page_lay.setContentsMargins(0, 0, 0, 0)
self.collab_page_lay.setObjectName("collab_page_lay")
self.collab_tab_widget = QtWidgets.QTabWidget(self.collab_page)
self.collab_tab_widget.setObjectName("collab_tab_widget")
self.collab_connect_tab = QtWidgets.QWidget()
self.collab_connect_tab.setObjectName("collab_connect_tab")
self.collab_connect_tab_2 = QtWidgets.QVBoxLayout(self.collab_connect_tab)
self.collab_connect_tab_2.setContentsMargins(0, 0, 0, 0)
self.collab_connect_tab_2.setObjectName("collab_connect_tab_2")
self.connect_session_widget = QtWidgets.QWidget(self.collab_connect_tab)
self.connect_session_widget.setObjectName("connect_session_widget")
self.connect_session_widget_lay = QtWidgets.QHBoxLayout(self.connect_session_widget)
self.connect_session_widget_lay.setContentsMargins(0, 0, 0, 0)
self.connect_session_widget_lay.setObjectName("connect_session_widget_lay")
self.collab_session_key_box = QtWidgets.QLineEdit(self.connect_session_widget)
self.collab_session_key_box.setMinimumSize(QtCore.QSize(0, 35))
self.collab_session_key_box.setObjectName("collab_session_key_box")
self.connect_session_widget_lay.addWidget(self.collab_session_key_box)
self.connect_to_session_button = QtWidgets.QPushButton(self.connect_session_widget)
self.connect_to_session_button.setMinimumSize(QtCore.QSize(70, 35))
self.connect_to_session_button.setObjectName("connect_to_session_button")
self.connect_session_widget_lay.addWidget(self.connect_to_session_button)
self.collab_connect_tab_2.addWidget(self.connect_session_widget)
self.collab_connect_logs = QtWidgets.QTextBrowser(self.collab_connect_tab)
self.collab_connect_logs.setObjectName("collab_connect_logs")
self.collab_connect_tab_2.addWidget(self.collab_connect_logs)
self.collab_disconnect_button = QtWidgets.QPushButton(self.collab_connect_tab)
self.collab_disconnect_button.setMinimumSize(QtCore.QSize(0, 35))
self.collab_disconnect_button.setObjectName("collab_disconnect_button")
self.collab_connect_tab_2.addWidget(self.collab_disconnect_button)
self.collab_tab_widget.addTab(self.collab_connect_tab, "")
self.collab_host_tab = QtWidgets.QWidget()
self.collab_host_tab.setObjectName("collab_host_tab")
self.collab_host_tab_lay = QtWidgets.QVBoxLayout(self.collab_host_tab)
self.collab_host_tab_lay.setContentsMargins(0, 0, 0, 0)
self.collab_host_tab_lay.setObjectName("collab_host_tab_lay")
self.collab_host_tabs = QtWidgets.QTabWidget(self.collab_host_tab)
self.collab_host_tabs.setObjectName("collab_host_tabs")
self.collab_host_create_tab = QtWidgets.QWidget()
self.collab_host_create_tab.setObjectName("collab_host_create_tab")
self.collab_host_create_tab_lay = QtWidgets.QVBoxLayout(self.collab_host_create_tab)
self.collab_host_create_tab_lay.setContentsMargins(0, 0, 0, 0)
self.collab_host_create_tab_lay.setObjectName("collab_host_create_tab_lay")
self.create_session_widget = QtWidgets.QWidget(self.collab_host_create_tab)
self.create_session_widget.setObjectName("create_session_widget")
self.create_session_widget_lay = QtWidgets.QHBoxLayout(self.create_session_widget)
self.create_session_widget_lay.setContentsMargins(0, 0, 0, 0)
self.create_session_widget_lay.setObjectName("create_session_widget_lay")
self.create_session_name_box = QtWidgets.QLineEdit(self.create_session_widget)
self.create_session_name_box.setMinimumSize(QtCore.QSize(0, 35))
self.create_session_name_box.setMaxLength(25)
self.create_session_name_box.setObjectName("create_session_name_box")
self.create_session_widget_lay.addWidget(self.create_session_name_box)
self.create_session_button = QtWidgets.QPushButton(self.create_session_widget)
self.create_session_button.setMinimumSize(QtCore.QSize(70, 35))
self.create_session_button.setObjectName("create_session_button")
self.create_session_widget_lay.addWidget(self.create_session_button)
self.collab_host_create_tab_lay.addWidget(self.create_session_widget, 0, QtCore.Qt.AlignTop)
self.connection_key_label = QtWidgets.QLabel(self.collab_host_create_tab)
self.connection_key_label.setObjectName("connection_key_label")
self.collab_host_create_tab_lay.addWidget(self.connection_key_label, 0, QtCore.Qt.AlignTop)
self.new_connection_key_copy_box = QtWidgets.QLineEdit(self.collab_host_create_tab)
self.new_connection_key_copy_box.setMinimumSize(QtCore.QSize(0, 35))
self.new_connection_key_copy_box.setReadOnly(True)
self.new_connection_key_copy_box.setObjectName("new_connection_key_copy_box")
self.collab_host_create_tab_lay.addWidget(self.new_connection_key_copy_box)
self.admin_key_label = QtWidgets.QLabel(self.collab_host_create_tab)
self.admin_key_label.setObjectName("admin_key_label")
self.collab_host_create_tab_lay.addWidget(self.admin_key_label)
self.new_connection_admin_key_copy_box = QtWidgets.QLineEdit(self.collab_host_create_tab)
self.new_connection_admin_key_copy_box.setMinimumSize(QtCore.QSize(0, 35))
self.new_connection_admin_key_copy_box.setReadOnly(True)
self.new_connection_admin_key_copy_box.setObjectName("new_connection_admin_key_copy_box")
self.collab_host_create_tab_lay.addWidget(self.new_connection_admin_key_copy_box)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.collab_host_create_tab_lay.addItem(spacerItem1)
self.collab_host_tabs.addTab(self.collab_host_create_tab, "")
self.collab_host_control_tab = QtWidgets.QWidget()
self.collab_host_control_tab.setObjectName("collab_host_control_tab")
self.collab_host_control_tab_lay = QtWidgets.QVBoxLayout(self.collab_host_control_tab)
self.collab_host_control_tab_lay.setContentsMargins(0, 0, 0, 0)
self.collab_host_control_tab_lay.setObjectName("collab_host_control_tab_lay")
self.connect_admin_session_widget = QtWidgets.QWidget(self.collab_host_control_tab)
self.connect_admin_session_widget.setObjectName("connect_admin_session_widget")
self.connect_session_widget_lay_2 = QtWidgets.QHBoxLayout(self.connect_admin_session_widget)
self.connect_session_widget_lay_2.setContentsMargins(0, 0, 0, 0)
self.connect_session_widget_lay_2.setObjectName("connect_session_widget_lay_2")
self.collab_session_admin_key_box = QtWidgets.QLineEdit(self.connect_admin_session_widget)
self.collab_session_admin_key_box.setMinimumSize(QtCore.QSize(0, 35))
self.collab_session_admin_key_box.setObjectName("collab_session_admin_key_box")
self.connect_session_widget_lay_2.addWidget(self.collab_session_admin_key_box)
self.connect_to_admin_session_button = QtWidgets.QPushButton(self.connect_admin_session_widget)
self.connect_to_admin_session_button.setMinimumSize(QtCore.QSize(70, 35))
self.connect_to_admin_session_button.setObjectName("connect_to_admin_session_button")
self.connect_session_widget_lay_2.addWidget(self.connect_to_admin_session_button)
self.collab_host_control_tab_lay.addWidget(self.connect_admin_session_widget, 0, QtCore.Qt.AlignTop)
self.url_to_send_admin_box = QtWidgets.QLineEdit(self.collab_host_control_tab)
self.url_to_send_admin_box.setMinimumSize(QtCore.QSize(0, 35))
self.url_to_send_admin_box.setObjectName("url_to_send_admin_box")
self.collab_host_control_tab_lay.addWidget(self.url_to_send_admin_box, 0, QtCore.Qt.AlignTop)
self.send_to_users_admin_button = QtWidgets.QPushButton(self.collab_host_control_tab)
self.send_to_users_admin_button.setMinimumSize(QtCore.QSize(0, 35))
self.send_to_users_admin_button.setObjectName("send_to_users_admin_button")
self.collab_host_control_tab_lay.addWidget(self.send_to_users_admin_button)
self.stop_all_button_admin = QtWidgets.QPushButton(self.collab_host_control_tab)
self.stop_all_button_admin.setMinimumSize(QtCore.QSize(0, 35))
self.stop_all_button_admin.setObjectName("stop_all_button_admin")
self.collab_host_control_tab_lay.addWidget(self.stop_all_button_admin)
self.control_admin_logs = QtWidgets.QTextBrowser(self.collab_host_control_tab)
self.control_admin_logs.setObjectName("control_admin_logs")
self.collab_host_control_tab_lay.addWidget(self.control_admin_logs)
self.collab_host_tabs.addTab(self.collab_host_control_tab, "")
self.collab_host_upload_tab = QtWidgets.QWidget()
self.collab_host_upload_tab.setObjectName("collab_host_upload_tab")
self.collab_host_upload_tab_lay = QtWidgets.QVBoxLayout(self.collab_host_upload_tab)
self.collab_host_upload_tab_lay.setContentsMargins(0, 0, 0, 0)
self.collab_host_upload_tab_lay.setObjectName("collab_host_upload_tab_lay")
self.upload_sound_widget = QtWidgets.QWidget(self.collab_host_upload_tab)
self.upload_sound_widget.setObjectName("upload_sound_widget")
self.create_session_widget_lay_2 = QtWidgets.QHBoxLayout(self.upload_sound_widget)
self.create_session_widget_lay_2.setContentsMargins(0, 0, 0, 0)
self.create_session_widget_lay_2.setObjectName("create_session_widget_lay_2")
self.filename_to_upload_box = QtWidgets.QLineEdit(self.upload_sound_widget)
self.filename_to_upload_box.setMinimumSize(QtCore.QSize(0, 35))
self.filename_to_upload_box.setObjectName("filename_to_upload_box")
self.create_session_widget_lay_2.addWidget(self.filename_to_upload_box)
self.choose_upload_sound_button = QtWidgets.QPushButton(self.upload_sound_widget)
self.choose_upload_sound_button.setMinimumSize(QtCore.QSize(70, 35))
self.choose_upload_sound_button.setObjectName("choose_upload_sound_button")
self.create_session_widget_lay_2.addWidget(self.choose_upload_sound_button)
self.collab_host_upload_tab_lay.addWidget(self.upload_sound_widget)
self.upload_sound_button = QtWidgets.QPushButton(self.collab_host_upload_tab)
self.upload_sound_button.setMinimumSize(QtCore.QSize(0, 35))
self.upload_sound_button.setObjectName("upload_sound_button")
self.collab_host_upload_tab_lay.addWidget(self.upload_sound_button)
self.anonfiles_uploaded_url_box = QtWidgets.QLineEdit(self.collab_host_upload_tab)
self.anonfiles_uploaded_url_box.setMinimumSize(QtCore.QSize(0, 35))
self.anonfiles_uploaded_url_box.setReadOnly(True)
self.anonfiles_uploaded_url_box.setObjectName("anonfiles_uploaded_url_box")
self.collab_host_upload_tab_lay.addWidget(self.anonfiles_uploaded_url_box)
spacerItem2 = QtWidgets.QSpacerItem(20, 261, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.collab_host_upload_tab_lay.addItem(spacerItem2)
self.collab_host_tabs.addTab(self.collab_host_upload_tab, "")
self.collab_host_tab_lay.addWidget(self.collab_host_tabs)
self.collab_tab_widget.addTab(self.collab_host_tab, "")
self.collab_page_lay.addWidget(self.collab_tab_widget)
self.content.addWidget(self.collab_page) self.content.addWidget(self.collab_page)
self.download_page = QtWidgets.QWidget() self.download_page = QtWidgets.QWidget()
self.download_page.setObjectName("download_page") self.download_page.setObjectName("download_page")
@@ -445,8 +592,8 @@ class Ui_MainWindow(object):
self.use_original_streaming_method_desc.setWordWrap(True) self.use_original_streaming_method_desc.setWordWrap(True)
self.use_original_streaming_method_desc.setObjectName("use_original_streaming_method_desc") self.use_original_streaming_method_desc.setObjectName("use_original_streaming_method_desc")
self.audio_devices_settings_tab_lay.addWidget(self.use_original_streaming_method_desc, 0, QtCore.Qt.AlignTop) self.audio_devices_settings_tab_lay.addWidget(self.use_original_streaming_method_desc, 0, QtCore.Qt.AlignTop)
spacerItem1 = QtWidgets.QSpacerItem(20, 0, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) spacerItem3 = QtWidgets.QSpacerItem(20, 0, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.audio_devices_settings_tab_lay.addItem(spacerItem1) self.audio_devices_settings_tab_lay.addItem(spacerItem3)
self.settings_tabs_widget.addTab(self.audio_devices_settings_tab, "") self.settings_tabs_widget.addTab(self.audio_devices_settings_tab, "")
self.general_settings_tab = QtWidgets.QWidget() self.general_settings_tab = QtWidgets.QWidget()
self.general_settings_tab.setObjectName("general_settings_tab") self.general_settings_tab.setObjectName("general_settings_tab")
@@ -493,13 +640,58 @@ class Ui_MainWindow(object):
self.spotify_client_secret_box.setMinimumSize(QtCore.QSize(0, 30)) self.spotify_client_secret_box.setMinimumSize(QtCore.QSize(0, 30))
self.spotify_client_secret_box.setObjectName("spotify_client_secret_box") self.spotify_client_secret_box.setObjectName("spotify_client_secret_box")
self.spotify_api_settings_tab_lay.addWidget(self.spotify_client_secret_box) self.spotify_api_settings_tab_lay.addWidget(self.spotify_client_secret_box)
spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.spotify_api_settings_tab_lay.addItem(spacerItem4)
self.api_keys_settings_tabs_widget.addTab(self.spotify_api_settings_tab, "") self.api_keys_settings_tabs_widget.addTab(self.spotify_api_settings_tab, "")
self.pusher_settings_tab = QtWidgets.QWidget() self.pusher_settings_tab = QtWidgets.QWidget()
self.pusher_settings_tab.setObjectName("pusher_settings_tab") self.pusher_settings_tab.setObjectName("pusher_settings_tab")
self.pusher_settings_tab_lay = QtWidgets.QVBoxLayout(self.pusher_settings_tab)
self.pusher_settings_tab_lay.setContentsMargins(0, 0, 0, 0)
self.pusher_settings_tab_lay.setObjectName("pusher_settings_tab_lay")
self.pusher_app_id_label = QtWidgets.QLabel(self.pusher_settings_tab)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pusher_app_id_label.sizePolicy().hasHeightForWidth())
self.pusher_app_id_label.setSizePolicy(sizePolicy)
self.pusher_app_id_label.setMaximumSize(QtCore.QSize(16777215, 50))
self.pusher_app_id_label.setObjectName("pusher_app_id_label")
self.pusher_settings_tab_lay.addWidget(self.pusher_app_id_label)
self.pusher_app_id_box = QtWidgets.QLineEdit(self.pusher_settings_tab)
self.pusher_app_id_box.setMinimumSize(QtCore.QSize(0, 30))
self.pusher_app_id_box.setObjectName("pusher_app_id_box")
self.pusher_settings_tab_lay.addWidget(self.pusher_app_id_box)
self.pusher_key_label = QtWidgets.QLabel(self.pusher_settings_tab)
self.pusher_key_label.setObjectName("pusher_key_label")
self.pusher_settings_tab_lay.addWidget(self.pusher_key_label)
self.pusher_key_box = QtWidgets.QLineEdit(self.pusher_settings_tab)
self.pusher_key_box.setMinimumSize(QtCore.QSize(0, 30))
self.pusher_key_box.setObjectName("pusher_key_box")
self.pusher_settings_tab_lay.addWidget(self.pusher_key_box)
self.pusher_secret_label = QtWidgets.QLabel(self.pusher_settings_tab)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pusher_secret_label.sizePolicy().hasHeightForWidth())
self.pusher_secret_label.setSizePolicy(sizePolicy)
self.pusher_secret_label.setMaximumSize(QtCore.QSize(16777215, 50))
self.pusher_secret_label.setObjectName("pusher_secret_label")
self.pusher_settings_tab_lay.addWidget(self.pusher_secret_label)
self.pusher_secret_box = QtWidgets.QLineEdit(self.pusher_settings_tab)
self.pusher_secret_box.setMinimumSize(QtCore.QSize(0, 30))
self.pusher_secret_box.setObjectName("pusher_secret_box")
self.pusher_settings_tab_lay.addWidget(self.pusher_secret_box)
self.pusher_cluster_label = QtWidgets.QLabel(self.pusher_settings_tab)
self.pusher_cluster_label.setObjectName("pusher_cluster_label")
self.pusher_settings_tab_lay.addWidget(self.pusher_cluster_label)
self.pusher_cluster_box = QtWidgets.QLineEdit(self.pusher_settings_tab)
self.pusher_cluster_box.setMinimumSize(QtCore.QSize(0, 30))
self.pusher_cluster_box.setObjectName("pusher_cluster_box")
self.pusher_settings_tab_lay.addWidget(self.pusher_cluster_box)
self.api_keys_settings_tabs_widget.addTab(self.pusher_settings_tab, "") self.api_keys_settings_tabs_widget.addTab(self.pusher_settings_tab, "")
self.general_settings_tab_lay.addWidget(self.api_keys_settings_tabs_widget, 0, QtCore.Qt.AlignTop) self.general_settings_tab_lay.addWidget(self.api_keys_settings_tabs_widget, 0, QtCore.Qt.AlignTop)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) spacerItem5 = QtWidgets.QSpacerItem(20, 0, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.general_settings_tab_lay.addItem(spacerItem2) self.general_settings_tab_lay.addItem(spacerItem5)
self.clear_temp_button = QtWidgets.QPushButton(self.general_settings_tab) self.clear_temp_button = QtWidgets.QPushButton(self.general_settings_tab)
self.clear_temp_button.setMinimumSize(QtCore.QSize(0, 40)) self.clear_temp_button.setMinimumSize(QtCore.QSize(0, 40))
self.clear_temp_button.setObjectName("clear_temp_button") self.clear_temp_button.setObjectName("clear_temp_button")
@@ -566,7 +758,10 @@ class Ui_MainWindow(object):
self.pads_content.setCurrentIndex(0) self.pads_content.setCurrentIndex(0)
self.browser_page_tabs.setCurrentIndex(0) self.browser_page_tabs.setCurrentIndex(0)
self.collections_page_tabs.setCurrentIndex(0) self.collections_page_tabs.setCurrentIndex(0)
self.collab_tab_widget.setCurrentIndex(0)
self.collab_host_tabs.setCurrentIndex(0)
self.settings_tabs_widget.setCurrentIndex(0) self.settings_tabs_widget.setCurrentIndex(0)
self.api_keys_settings_tabs_widget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow): def retranslateUi(self, MainWindow):
@@ -611,6 +806,29 @@ class Ui_MainWindow(object):
self.collections_page_tabs.setTabText(self.collections_page_tabs.indexOf(self.edit_collections_tabs), _translate("MainWindow", "Edit collections")) self.collections_page_tabs.setTabText(self.collections_page_tabs.indexOf(self.edit_collections_tabs), _translate("MainWindow", "Edit collections"))
self.to_stream_url_box.setPlaceholderText(_translate("MainWindow", "URL (direct web file, YouTube or spotify link) or path to file")) self.to_stream_url_box.setPlaceholderText(_translate("MainWindow", "URL (direct web file, YouTube or spotify link) or path to file"))
self.play_stream_button.setText(_translate("MainWindow", "Play")) self.play_stream_button.setText(_translate("MainWindow", "Play"))
self.collab_session_key_box.setPlaceholderText(_translate("MainWindow", "Collab session key"))
self.connect_to_session_button.setText(_translate("MainWindow", "Connect"))
self.collab_disconnect_button.setText(_translate("MainWindow", "Disconnect"))
self.collab_tab_widget.setTabText(self.collab_tab_widget.indexOf(self.collab_connect_tab), _translate("MainWindow", "Connect"))
self.create_session_name_box.setPlaceholderText(_translate("MainWindow", "Collab session room name"))
self.create_session_button.setText(_translate("MainWindow", "Create"))
self.connection_key_label.setText(_translate("MainWindow", "Connection key. With this key, everyone can connect to the room"))
self.new_connection_key_copy_box.setPlaceholderText(_translate("MainWindow", "Create session first"))
self.admin_key_label.setText(_translate("MainWindow", "Control key, contains current pusher credentials. Do not share it"))
self.new_connection_admin_key_copy_box.setPlaceholderText(_translate("MainWindow", "Create session first"))
self.collab_host_tabs.setTabText(self.collab_host_tabs.indexOf(self.collab_host_create_tab), _translate("MainWindow", "Create"))
self.collab_session_admin_key_box.setPlaceholderText(_translate("MainWindow", "Admin session key"))
self.connect_to_admin_session_button.setText(_translate("MainWindow", "Connect"))
self.url_to_send_admin_box.setPlaceholderText(_translate("MainWindow", "Direct, Anonfiles, YouTube or Spotify URL"))
self.send_to_users_admin_button.setText(_translate("MainWindow", "Send URL"))
self.stop_all_button_admin.setText(_translate("MainWindow", "Stop playing"))
self.collab_host_tabs.setTabText(self.collab_host_tabs.indexOf(self.collab_host_control_tab), _translate("MainWindow", "Control"))
self.filename_to_upload_box.setPlaceholderText(_translate("MainWindow", "Path to file"))
self.choose_upload_sound_button.setText(_translate("MainWindow", "Pick file"))
self.upload_sound_button.setText(_translate("MainWindow", "Upload"))
self.anonfiles_uploaded_url_box.setPlaceholderText(_translate("MainWindow", "Upload file first"))
self.collab_host_tabs.setTabText(self.collab_host_tabs.indexOf(self.collab_host_upload_tab), _translate("MainWindow", "Upload sound"))
self.collab_tab_widget.setTabText(self.collab_tab_widget.indexOf(self.collab_host_tab), _translate("MainWindow", "Host"))
self.download_url_box.setPlaceholderText(_translate("MainWindow", "URL (direct web file, YouTube or spotify link) or path to file")) self.download_url_box.setPlaceholderText(_translate("MainWindow", "URL (direct web file, YouTube or spotify link) or path to file"))
self.download_to_path_box.setPlaceholderText(_translate("MainWindow", "File download folder")) self.download_to_path_box.setPlaceholderText(_translate("MainWindow", "File download folder"))
self.choose_download_path_button.setText(_translate("MainWindow", "Choose path")) self.choose_download_path_button.setText(_translate("MainWindow", "Choose path"))
@@ -635,6 +853,14 @@ class Ui_MainWindow(object):
self.spotify_client_secret_label.setText(_translate("MainWindow", "Client secret")) self.spotify_client_secret_label.setText(_translate("MainWindow", "Client secret"))
self.spotify_client_secret_box.setPlaceholderText(_translate("MainWindow", "212476d9b0f3472eaa762d90b19b0ba8")) self.spotify_client_secret_box.setPlaceholderText(_translate("MainWindow", "212476d9b0f3472eaa762d90b19b0ba8"))
self.api_keys_settings_tabs_widget.setTabText(self.api_keys_settings_tabs_widget.indexOf(self.spotify_api_settings_tab), _translate("MainWindow", "Spotify")) self.api_keys_settings_tabs_widget.setTabText(self.api_keys_settings_tabs_widget.indexOf(self.spotify_api_settings_tab), _translate("MainWindow", "Spotify"))
self.pusher_app_id_label.setText(_translate("MainWindow", "app_id"))
self.pusher_app_id_box.setPlaceholderText(_translate("MainWindow", "1699645"))
self.pusher_key_label.setText(_translate("MainWindow", "key"))
self.pusher_key_box.setPlaceholderText(_translate("MainWindow", "0c39944565451ae335d1"))
self.pusher_secret_label.setText(_translate("MainWindow", "secret"))
self.pusher_secret_box.setPlaceholderText(_translate("MainWindow", "5011da8cb2725b4b2298"))
self.pusher_cluster_label.setText(_translate("MainWindow", "cluster"))
self.pusher_cluster_box.setPlaceholderText(_translate("MainWindow", "us"))
self.api_keys_settings_tabs_widget.setTabText(self.api_keys_settings_tabs_widget.indexOf(self.pusher_settings_tab), _translate("MainWindow", "Pusher")) self.api_keys_settings_tabs_widget.setTabText(self.api_keys_settings_tabs_widget.indexOf(self.pusher_settings_tab), _translate("MainWindow", "Pusher"))
self.clear_temp_button.setText(_translate("MainWindow", "Clear KotoPad temporary files (use if sound doesn\'t play correctly)")) self.clear_temp_button.setText(_translate("MainWindow", "Clear KotoPad temporary files (use if sound doesn\'t play correctly)"))
self.settings_tabs_widget.setTabText(self.settings_tabs_widget.indexOf(self.general_settings_tab), _translate("MainWindow", "General")) self.settings_tabs_widget.setTabText(self.settings_tabs_widget.indexOf(self.general_settings_tab), _translate("MainWindow", "General"))

View File

@@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>815</width> <width>815</width>
<height>484</height> <height>497</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@@ -1072,7 +1072,469 @@ QListWidget:item:selected {
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="collab_page"/> <widget class="QWidget" name="collab_page">
<layout class="QVBoxLayout" name="collab_page_lay">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QTabWidget" name="collab_tab_widget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="collab_connect_tab">
<attribute name="title">
<string>Connect</string>
</attribute>
<layout class="QVBoxLayout" name="collab_connect_tab_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="connect_session_widget" native="true">
<layout class="QHBoxLayout" name="connect_session_widget_lay">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="collab_session_key_box">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="placeholderText">
<string>Collab session key</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="connect_to_session_button">
<property name="minimumSize">
<size>
<width>70</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>Connect</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QTextBrowser" name="collab_connect_logs"/>
</item>
<item>
<widget class="QPushButton" name="collab_disconnect_button">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>Disconnect</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="collab_host_tab">
<attribute name="title">
<string>Host</string>
</attribute>
<layout class="QVBoxLayout" name="collab_host_tab_lay">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QTabWidget" name="collab_host_tabs">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="collab_host_create_tab">
<attribute name="title">
<string>Create</string>
</attribute>
<layout class="QVBoxLayout" name="collab_host_create_tab_lay">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item alignment="Qt::AlignTop">
<widget class="QWidget" name="create_session_widget" native="true">
<layout class="QHBoxLayout" name="create_session_widget_lay">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="create_session_name_box">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="maxLength">
<number>25</number>
</property>
<property name="placeholderText">
<string>Collab session room name</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="create_session_button">
<property name="minimumSize">
<size>
<width>70</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>Create</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item alignment="Qt::AlignTop">
<widget class="QLabel" name="connection_key_label">
<property name="text">
<string>Connection key. With this key, everyone can connect to the room</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="new_connection_key_copy_box">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="placeholderText">
<string>Create session first</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="admin_key_label">
<property name="text">
<string>Control key, contains current pusher credentials. Do not share it</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="new_connection_admin_key_copy_box">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="placeholderText">
<string>Create session first</string>
</property>
</widget>
</item>
<item>
<spacer name="collab_host_create_tab_spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="collab_host_control_tab">
<attribute name="title">
<string>Control</string>
</attribute>
<layout class="QVBoxLayout" name="collab_host_control_tab_lay">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item alignment="Qt::AlignTop">
<widget class="QWidget" name="connect_admin_session_widget" native="true">
<layout class="QHBoxLayout" name="connect_session_widget_lay_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="collab_session_admin_key_box">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="placeholderText">
<string>Admin session key</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="connect_to_admin_session_button">
<property name="minimumSize">
<size>
<width>70</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>Connect</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item alignment="Qt::AlignTop">
<widget class="QLineEdit" name="url_to_send_admin_box">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="placeholderText">
<string>Direct, Anonfiles, YouTube or Spotify URL</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="send_to_users_admin_button">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>Send URL</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="stop_all_button_admin">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>Stop playing</string>
</property>
</widget>
</item>
<item>
<widget class="QTextBrowser" name="control_admin_logs"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="collab_host_upload_tab">
<attribute name="title">
<string>Upload sound</string>
</attribute>
<layout class="QVBoxLayout" name="collab_host_upload_tab_lay">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="upload_sound_widget" native="true">
<layout class="QHBoxLayout" name="create_session_widget_lay_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="filename_to_upload_box">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="placeholderText">
<string>Path to file</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="choose_upload_sound_button">
<property name="minimumSize">
<size>
<width>70</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>Pick file</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QPushButton" name="upload_sound_button">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="text">
<string>Upload</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="anonfiles_uploaded_url_box">
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
</size>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="placeholderText">
<string>Upload file first</string>
</property>
</widget>
</item>
<item>
<spacer name="collab_host_upload_tab_spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>261</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="download_page"> <widget class="QWidget" name="download_page">
<layout class="QVBoxLayout" name="download_page_lay"> <layout class="QVBoxLayout" name="download_page_lay">
<property name="leftMargin"> <property name="leftMargin">
@@ -1358,7 +1820,7 @@ QListWidget:item:selected {
</widget> </widget>
</item> </item>
<item> <item>
<spacer name="verticalSpacer"> <spacer name="audio_devices_settings_tab_spacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
</property> </property>
@@ -1430,6 +1892,9 @@ QListWidget:item:selected {
</item> </item>
<item alignment="Qt::AlignTop"> <item alignment="Qt::AlignTop">
<widget class="QTabWidget" name="api_keys_settings_tabs_widget"> <widget class="QTabWidget" name="api_keys_settings_tabs_widget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="spotify_api_settings_tab"> <widget class="QWidget" name="spotify_api_settings_tab">
<attribute name="title"> <attribute name="title">
<string>Spotify</string> <string>Spotify</string>
@@ -1499,12 +1964,143 @@ QListWidget:item:selected {
</property> </property>
</widget> </widget>
</item> </item>
<item>
<spacer name="spotify_api_settings_tab_spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="pusher_settings_tab"> <widget class="QWidget" name="pusher_settings_tab">
<attribute name="title"> <attribute name="title">
<string>Pusher</string> <string>Pusher</string>
</attribute> </attribute>
<layout class="QVBoxLayout" name="pusher_settings_tab_lay">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="pusher_app_id_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>50</height>
</size>
</property>
<property name="text">
<string>app_id</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="pusher_app_id_box">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="placeholderText">
<string>1699645</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="pusher_key_label">
<property name="text">
<string>key</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="pusher_key_box">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="placeholderText">
<string>0c39944565451ae335d1</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="pusher_secret_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>50</height>
</size>
</property>
<property name="text">
<string>secret</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="pusher_secret_box">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="placeholderText">
<string>5011da8cb2725b4b2298</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="pusher_cluster_label">
<property name="text">
<string>cluster</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="pusher_cluster_box">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="placeholderText">
<string>us</string>
</property>
</widget>
</item>
</layout>
</widget> </widget>
</widget> </widget>
</item> </item>
@@ -1516,7 +2112,7 @@ QListWidget:item:selected {
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
<width>20</width> <width>20</width>
<height>40</height> <height>0</height>
</size> </size>
</property> </property>
</spacer> </spacer>

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')

View File

@@ -13,6 +13,7 @@ import os
@threaded @threaded
def download_track(ui: Ui_MainWindow): def download_track(ui: Ui_MainWindow):
try:
url = ui.download_url_box.text() url = ui.download_url_box.text()
if not validators.url(url): if not validators.url(url):
@@ -40,3 +41,7 @@ def download_track(ui: Ui_MainWindow):
call(ui.download_track_button.setEnabled, True) call(ui.download_track_button.setEnabled, True)
call(ui.download_track_logs.append, f"Downloaded to {os.path.join(ui.download_to_path_box.text(), name)}") call(ui.download_track_logs.append, f"Downloaded to {os.path.join(ui.download_to_path_box.text(), name)}")
except Exception as e:
print(e)
call(ui.download_track_button.setEnabled, True)
call(ui.download_track_logs.append, f"Failed")

View File

@@ -9,6 +9,7 @@ from gui.modules import explorer
from gui.modules import collections from gui.modules import collections
from gui.modules import stream from gui.modules import stream
from gui.modules import download from gui.modules import download
from gui.modules import collab
from modules.player.player import Player from modules.player.player import Player
from modules.restream.restream import Restreamer from modules.restream.restream import Restreamer
@@ -23,3 +24,4 @@ def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player, rs:
collections.register_handlers(ui, p) collections.register_handlers(ui, p)
stream.register_handlers(ui, p) stream.register_handlers(ui, p)
download.register_handlers(ui) download.register_handlers(ui)
collab.register_handlers(ui, p)

View File

@@ -1,5 +1,6 @@
from gui.gui import Ui_MainWindow from gui.gui import Ui_MainWindow
from modules.config import Config from modules.config import Config
from modules.config.pusher import PusherConfig
from modules.spotify.config import SpotifyConfig from modules.spotify.config import SpotifyConfig
from modules.restream import get_streaming_devices from modules.restream import get_streaming_devices
from modules.player.player import get_devices, get_instance, get_player from modules.player.player import get_devices, get_instance, get_player
@@ -41,4 +42,9 @@ def fill_settings(ui: Ui_MainWindow):
ui.spotify_client_id_box.setText(SpotifyConfig.get().client_id) ui.spotify_client_id_box.setText(SpotifyConfig.get().client_id)
ui.spotify_client_secret_box.setText(SpotifyConfig.get().client_secret) ui.spotify_client_secret_box.setText(SpotifyConfig.get().client_secret)
ui.pusher_app_id_box.setText(PusherConfig.get().app_id)
ui.pusher_key_box.setText(PusherConfig.get().key)
ui.pusher_secret_box.setText(PusherConfig.get().secret)
ui.pusher_cluster_box.setText(PusherConfig.get().cluster)
ui.use_original_streaming_method_check.setChecked(Config.get().direct_stream) ui.use_original_streaming_method_check.setChecked(Config.get().direct_stream)

View File

@@ -1,5 +1,6 @@
from gui.gui import Ui_MainWindow from gui.gui import Ui_MainWindow
from modules.config import Config from modules.config import Config
from modules.config.pusher import PusherConfig
from modules.spotify.config import SpotifyConfig from modules.spotify.config import SpotifyConfig
import shutil import shutil
@@ -30,6 +31,19 @@ def register_handlers(ui: Ui_MainWindow):
lambda: SpotifyConfig.update("client_secret", ui.spotify_client_secret_box.text()) lambda: SpotifyConfig.update("client_secret", ui.spotify_client_secret_box.text())
) )
ui.pusher_app_id_box.textChanged.connect(
lambda: PusherConfig.update("app_id", ui.pusher_app_id_box.text())
)
ui.pusher_key_box.textChanged.connect(
lambda: PusherConfig.update("key", ui.pusher_key_box.text())
)
ui.pusher_secret_box.textChanged.connect(
lambda: PusherConfig.update("secret", ui.pusher_secret_box.text())
)
ui.pusher_cluster_box.textChanged.connect(
lambda: PusherConfig.update("cluster", ui.pusher_cluster_box.text())
)
ui.use_original_streaming_method_check.stateChanged.connect( ui.use_original_streaming_method_check.stateChanged.connect(
lambda: Config.update("direct_stream", ui.use_original_streaming_method_check.isChecked()) lambda: Config.update("direct_stream", ui.use_original_streaming_method_check.isChecked())
) )

View File

View File

@@ -0,0 +1,35 @@
import requests
from dataclasses import dataclass
from Direct_Download import Direct
@dataclass
class File:
url: str | None
id: str | None
name: str | None
class Anonfiles:
@staticmethod
def upload(path: str) -> File | None:
try:
r = requests.post("https://api.anonfiles.com/upload", files={'file': open(path, 'rb')}).json()
if not r["status"]:
return
return File(url=r["data"]["file"]["url"]["full"],
id=r["data"]["file"]["metadata"]["id"],
name=r["data"]["file"]["metadata"]["name"])
except Exception as e:
print(e)
return File(None, None, None)
@staticmethod
def get_direct(url: str) -> str | None:
try:
return Direct().anonfiles(url)['directDownload']
except Exception as e:
print(e)

View File

@@ -22,3 +22,12 @@ class PathsModel:
first_browser_path: str first_browser_path: str
second_browser_path: str second_browser_path: str
collections_list: List[str] collections_list: List[str]
@dataclass_json
@dataclass(frozen=True)
class PusherModel:
app_id: str
key: str
secret: str
cluster: str

45
modules/config/pusher.py Normal file
View File

@@ -0,0 +1,45 @@
from modules.config.model import PusherModel
import json
import os
class PusherConfig:
@staticmethod
def default():
return {
"app_id": str(),
"key": str(),
"secret": str(),
"cluster": str()
}
@staticmethod
def fix() -> None:
try:
with open("data/config.pusher", "w") as file:
json.dump(PusherConfig.default(), file)
except FileNotFoundError:
if not os.path.exists('data'):
os.mkdir('data')
PusherConfig.fix()
@staticmethod
def get() -> PusherModel:
try:
with open("data/config.pusher", "r") as file:
return PusherModel.from_dict(json.load(file))
except:
PusherConfig.fix()
return PusherConfig.get()
@staticmethod
def update(key: str, value: str | list | None) -> dict:
with open("data/config.pusher", "r") as file:
settings = json.load(file)
settings[key] = value
with open("data/config.pusher", "w") as file:
json.dump(settings, file)
return settings

View File

@@ -6,17 +6,19 @@ import pafy
import hashlib import hashlib
import os import os
from modules.spotify.spotify_dl import Spotify from modules.spotify.spotify_dl import Spotify
from modules.anonfiles.anonfiles import Anonfiles
import requests import requests
import urllib.parse
def get_raw_link(url): def get_raw_link(url):
if validators.url(url): if validators.url(url):
if 'spotify' in url: if 'spotify' in url.lower():
url = Spotify().get_youtube_url(url) url = Spotify().get_youtube_url(url)
print(url) if 'youtu' in url.lower():
if 'youtu' in url:
url = pafy.new(url).getbestaudio().url url = pafy.new(url).getbestaudio().url
print(url) if 'anonfiles' in url.lower():
url = urllib.parse.quote(Anonfiles.get_direct(url), safe=':/')
return url return url

View File

@@ -13,3 +13,6 @@ pafy
youtube-dl==2020.12.2 youtube-dl==2020.12.2
ezzthread ezzthread
qt-thread-updater qt-thread-updater
Direct-Download
pusher
pysher