Now plays files to default audio and CABLE!

TODO: Show urls in buttons
This commit is contained in:
BarsTiger
2022-11-18 21:35:57 +02:00
parent 4213b7333d
commit 37b5a67a59
15 changed files with 951 additions and 484 deletions

View File

@@ -204,6 +204,59 @@ class Ui_MainWindow(object):
self.settings_page.setObjectName("settings_page")
self.content.addWidget(self.settings_page)
self.main_content_to_player_box_lay.addWidget(self.content)
self.player_box = QtWidgets.QWidget(self.main_content_to_player_box)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.player_box.sizePolicy().hasHeightForWidth())
self.player_box.setSizePolicy(sizePolicy)
self.player_box.setObjectName("player_box")
self.player_box_lay = QtWidgets.QVBoxLayout(self.player_box)
self.player_box_lay.setContentsMargins(0, 0, 0, 0)
self.player_box_lay.setObjectName("player_box_lay")
self.player_slider_horizontal_box = QtWidgets.QWidget(self.player_box)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.player_slider_horizontal_box.sizePolicy().hasHeightForWidth())
self.player_slider_horizontal_box.setSizePolicy(sizePolicy)
self.player_slider_horizontal_box.setObjectName("player_slider_horizontal_box")
self.player_slider_horizontal_lay = QtWidgets.QHBoxLayout(self.player_slider_horizontal_box)
self.player_slider_horizontal_lay.setContentsMargins(0, 0, 0, 0)
self.player_slider_horizontal_lay.setObjectName("player_slider_horizontal_lay")
self.play_pause_button = QtWidgets.QPushButton(self.player_slider_horizontal_box)
self.play_pause_button.setMinimumSize(QtCore.QSize(40, 40))
self.play_pause_button.setStyleSheet("")
self.play_pause_button.setText("")
icon9 = QtGui.QIcon()
icon9.addPixmap(QtGui.QPixmap(":/img/img/play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.play_pause_button.setIcon(icon9)
self.play_pause_button.setIconSize(QtCore.QSize(32, 32))
self.play_pause_button.setObjectName("play_pause_button")
self.player_slider_horizontal_lay.addWidget(self.play_pause_button)
self.player_time_slider = QtWidgets.QSlider(self.player_slider_horizontal_box)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.player_time_slider.sizePolicy().hasHeightForWidth())
self.player_time_slider.setSizePolicy(sizePolicy)
self.player_time_slider.setPageStep(1)
self.player_time_slider.setProperty("value", 0)
self.player_time_slider.setTracking(True)
self.player_time_slider.setOrientation(QtCore.Qt.Horizontal)
self.player_time_slider.setObjectName("player_time_slider")
self.player_slider_horizontal_lay.addWidget(self.player_time_slider)
self.volume_box = QtWidgets.QSpinBox(self.player_slider_horizontal_box)
self.volume_box.setMaximum(100)
self.volume_box.setProperty("value", 100)
self.volume_box.setObjectName("volume_box")
self.player_slider_horizontal_lay.addWidget(self.volume_box)
self.player_box_lay.addWidget(self.player_slider_horizontal_box)
self.main_content_to_player_box_lay.addWidget(self.player_box)
self.player_track_label = QtWidgets.QLabel(self.main_content_to_player_box)
self.player_track_label.setText("")
self.player_track_label.setObjectName("player_track_label")
self.main_content_to_player_box_lay.addWidget(self.player_track_label)
self.centralwidget_lay.addWidget(self.main_content_to_player_box)
MainWindow.setCentralWidget(self.centralwidget)

View File

@@ -265,6 +265,28 @@ QToolBox::tab {
border-radius: 5px;
border-color: #303030;
}
QSlider::groove:horizontal {
border-radius: 1px;
height: 10px;
margin: 0px;
background-color: #242424;
}
QSlider::groove:horizontal:hover {
background-color: #303030;
}
QSlider::handle:horizontal {
background-color: white;
border: none;
width: 5px;
border-radius: 40px;
}
QSlider::handle:horizontal:hover {
background-color: #bfbfbf;
}
QSlider::handle:horizontal:pressed {
background-color: #bfbfbf;
}
</string>
</property>
<widget class="QWidget" name="centralwidget">
@@ -678,6 +700,119 @@ QListWidget:item:selected {
<widget class="QWidget" name="settings_page"/>
</widget>
</item>
<item>
<widget class="QWidget" name="player_box" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="player_box_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="player_slider_horizontal_box" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="player_slider_horizontal_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="QPushButton" name="play_pause_button">
<property name="minimumSize">
<size>
<width>40</width>
<height>40</height>
</size>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="images.qrc">
<normaloff>:/img/img/play.png</normaloff>:/img/img/play.png</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="player_time_slider">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="pageStep">
<number>1</number>
</property>
<property name="value">
<number>0</number>
</property>
<property name="tracking">
<bool>true</bool>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="volume_box">
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>100</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="player_track_label">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>

View File

@@ -1,5 +1,7 @@
<RCC>
<qresource prefix="img">
<file>img/pause.png</file>
<file>img/play.png</file>
<file>img/kotopad.ico</file>
<file>img/download.png</file>
<file>img/stream.png</file>

File diff suppressed because it is too large Load Diff

BIN
gui/img/pause.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1006 B

BIN
gui/img/play.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -2,14 +2,18 @@ from gui.gui import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow
from gui.modules import menu
from gui.modules import pads
from gui.modules import player
from modules.player.player import Player
def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow):
def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
"""
Register all handlers
:param ui:
:param MainWindow:
:param p:
:return:
"""
menu.register_handlers(ui)
pads.register_handlers(ui, MainWindow)
pads.register_handlers(ui, MainWindow, p)
player.register_handlers(ui, MainWindow, p)

View File

@@ -3,8 +3,9 @@ from gui.modules.core.blur import GlobalBlur
from gui.modules.initialize import styles
from gui.modules.handlers import register
from PyQt5.QtWidgets import QMainWindow
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from modules.config import Config
from modules.player.player import Player
def on_load(ui: Ui_MainWindow, MainWindow: QMainWindow):
@@ -16,9 +17,15 @@ def on_load(ui: Ui_MainWindow, MainWindow: QMainWindow):
"""
ui.content.setCurrentIndex(0)
ui.player_track_label.hide()
MainWindow.setStyleSheet(styles.centralwidget())
ui.menu.setStyleSheet(styles.menupage())
if 'acrylic' in Config.get().theme:
GlobalBlur(MainWindow.winId(), acrylic=True)
register.register_handlers(ui, MainWindow)
ui.timer = QtCore.QTimer(MainWindow)
p = Player()
register.register_handlers(ui, MainWindow, p)

View File

@@ -287,6 +287,28 @@ QToolBox::tab {
border-radius: 5px;
border-color: rgba(48, 48, 48, 0);
}
QSlider::groove:horizontal {
border-radius: 1px;
height: 10px;
margin: 0px;
background-color: rgba(36, 36, 36, 0);
}
QSlider::groove:horizontal:hover {
background-color: rgba(48, 48, 48, 0);
}
QSlider::handle:horizontal {
background-color: white;
border: none;
width: 5px;
border-radius: 40px;
}
QSlider::handle:horizontal:hover {
background-color: rgba(191, 191, 191, 0);
}
QSlider::handle:horizontal:pressed {
background-color: rgba(191, 191, 191, 0);
}
"""
menupage_b = """
@@ -559,6 +581,28 @@ QToolBox::tab {
border-radius: 5px;
border-color: #303030;
}
QSlider::groove:horizontal {
border-radius: 1px;
height: 10px;
margin: 0px;
background-color: #242424;
}
QSlider::groove:horizontal:hover {
background-color: #303030;
}
QSlider::handle:horizontal {
background-color: white;
border: none;
width: 5px;
border-radius: 40px;
}
QSlider::handle:horizontal:hover {
background-color: #bfbfbf;
}
QSlider::handle:horizontal:pressed {
background-color: #bfbfbf;
}
"""
menupage_g = """

View File

@@ -3,44 +3,61 @@ from modules.padslist import Pads
from gui.gui import Ui_MainWindow
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtWidgets import QMainWindow
from modules.player.player import Player
def fill_pads(ui: Ui_MainWindow, MainWindow: QMainWindow):
def fill_pads(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
ui.first_pads_dict = dict()
ui.second_pads_dict = dict()
first_pads_list = \
[ui.edit_first_pads_collection_list.item(x).text() for x in range(ui.edit_first_pads_collection_list.count())]
for i in reversed(range(ui.pads_collection_1_lay.count())):
ui.pads_collection_1_lay.itemAt(i).widget().setParent(None)
for i in range(len(first_pads_list)):
item = first_pads_list[i]
if item == '':
continue
ui.first_pads_dict[os.path.split(item)[-1]] = item
ui.first_pads_dict[os.path.split(item)[-1][:24:]] = item
button = QtWidgets.QPushButton()
button.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
QtWidgets.QSizePolicy.Expanding))
button.setText(os.path.split(item)[-1] if os.path.exists(item) else "File doesn't exist")
button.clicked.connect(lambda: print(ui.first_pads_dict[MainWindow.sender().text()]
if MainWindow.sender().text() != "File doesn't exist" else None))
print('First: ', ui.first_pads_dict)
button.setText(os.path.split(item)[-1][:24:] if os.path.exists(item) else "File doesn't exist")
button.clicked.connect(
(
lambda: (
p.set_media(ui.first_pads_dict[MainWindow.sender().text()]),
p.play(ui)
) if MainWindow.sender().text() != "File doesn't exist" else None
)
)
Pads.update("first_pads", ui.first_pads_dict)
ui.pads_collection_1_lay.addWidget(button, i // 4, i % 4)
second_pads_list = \
[ui.edit_second_pads_collection_list.item(x).text() for x in range(ui.edit_second_pads_collection_list.count())]
for i in reversed(range(ui.pads_collection_2_lay.count())):
ui.pads_collection_2_lay.itemAt(i).widget().setParent(None)
for i in range(len(second_pads_list)):
item = second_pads_list[i]
if item == '':
continue
ui.second_pads_dict[os.path.split(item)[-1]] = item
ui.second_pads_dict[os.path.split(item)[-1][:24:]] = item
button = QtWidgets.QPushButton()
button.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
QtWidgets.QSizePolicy.Expanding))
button.setText(os.path.split(item)[-1] if os.path.exists(item) else "File doesn't exist")
button.clicked.connect(lambda: print(ui.second_pads_dict[MainWindow.sender().text()]
if MainWindow.sender().text() != "File doesn't exist" else None))
print('Second', ui.second_pads_dict)
button.setText(os.path.split(item)[-1][:24:] if os.path.exists(item) else "File doesn't exist")
button.clicked.connect(
(
lambda: (
p.set_media(ui.first_pads_dict[MainWindow.sender().text()]),
p.play(ui)
) if MainWindow.sender().text() != "File doesn't exist" else None
)
)
Pads.update("second_pads", ui.second_pads_dict)
ui.pads_collection_2_lay.addWidget(button, i // 4, i % 4)

View File

@@ -2,16 +2,11 @@ from gui.gui import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow
from .initialize_pads_settings import *
from .fill_pads_from_settings import *
from modules.player.player import Player
def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow):
"""
Register this module handlers
:param ui:
:param MainWindow:
:return:
"""
def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
fill_settings(ui)
fill_pads(ui, MainWindow)
ui.edit_first_pads_collection_list.itemChanged.connect(lambda: fill_pads(ui, MainWindow))
ui.edit_second_pads_collection_list.itemChanged.connect(lambda: fill_pads(ui, MainWindow))
fill_pads(ui, MainWindow, p)
ui.edit_first_pads_collection_list.itemChanged.connect(lambda: fill_pads(ui, MainWindow, p))
ui.edit_second_pads_collection_list.itemChanged.connect(lambda: fill_pads(ui, MainWindow, p))

View File

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

View File

@@ -0,0 +1,13 @@
from gui.gui import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow
from modules.player.player import Player
def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player):
"""
Register this module handlers
:param p:
:param ui:
:param MainWindow:
:return:
"""

View File

43
modules/player/player.py Normal file
View File

@@ -0,0 +1,43 @@
import vlc
from gui.gui import Ui_MainWindow
def get_instance() -> vlc.Instance:
return vlc.Instance()
def get_player(instance: vlc.Instance) -> vlc.MediaPlayer:
return instance.media_player_new()
def get_devices(mediaplayer: vlc.MediaPlayer) -> dict:
devices = dict()
device = mediaplayer.audio_output_device_enum()
while device:
devices[device.contents.description.decode("utf-8")] = device.contents.device
device = device.contents.next
return devices
class Player(object):
def __init__(self):
self.instance = get_instance()
self.mediaplayer_preview = get_player(self.instance)
self.mediaplayer_preview.audio_output_device_set(None, get_devices(self.mediaplayer_preview)['Default'])
self.mediaplayer_out = get_player(self.instance)
self.mediaplayer_out.audio_output_device_set(None, get_devices(
self.mediaplayer_out)['CABLE Input (VB-Audio Virtual Cable)'])
self.is_paused = False
def set_media(self, media: str) -> None:
self.mediaplayer_preview.set_media(self.instance.media_new(media))
self.mediaplayer_out.set_media(self.instance.media_new(media))
def play(self, ui: Ui_MainWindow):
self.mediaplayer_preview.play()
self.mediaplayer_out.play()
def get_length(self) -> int:
return int(self.mediaplayer_preview.get_length() / 1000)