Added collections

This commit is contained in:
BarsTiger
2022-12-22 21:42:26 +02:00
parent 144705d1c3
commit b90410f15f
9 changed files with 246 additions and 25 deletions

View File

@@ -187,9 +187,9 @@ class Ui_MainWindow(object):
self.content.addWidget(self.pads_page)
self.browser_page = QtWidgets.QWidget()
self.browser_page.setObjectName("browser_page")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.browser_page)
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.browser_page_lay = QtWidgets.QVBoxLayout(self.browser_page)
self.browser_page_lay.setContentsMargins(0, 0, 0, 0)
self.browser_page_lay.setObjectName("browser_page_lay")
self.browser_page_tabs = QtWidgets.QTabWidget(self.browser_page)
self.browser_page_tabs.setObjectName("browser_page_tabs")
self.first_filebrowser_tab = QtWidgets.QWidget()
@@ -218,11 +218,11 @@ class Ui_MainWindow(object):
self.browser_page_tabs.addTab(self.second_filebrowser_tab, "")
self.browser_page_options_tab = QtWidgets.QWidget()
self.browser_page_options_tab.setObjectName("browser_page_options_tab")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.browser_page_options_tab)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.browser_page_options_tab_lay = QtWidgets.QVBoxLayout(self.browser_page_options_tab)
self.browser_page_options_tab_lay.setObjectName("browser_page_options_tab_lay")
self.first_browser_parent_dir_path_label = QtWidgets.QLabel(self.browser_page_options_tab)
self.first_browser_parent_dir_path_label.setObjectName("first_browser_parent_dir_path_label")
self.verticalLayout_3.addWidget(self.first_browser_parent_dir_path_label)
self.browser_page_options_tab_lay.addWidget(self.first_browser_parent_dir_path_label)
self.first_browser_parent_dir_path_widget = QtWidgets.QWidget(self.browser_page_options_tab)
self.first_browser_parent_dir_path_widget.setObjectName("first_browser_parent_dir_path_widget")
self.first_browser_parent_dir_path_lay = QtWidgets.QHBoxLayout(self.first_browser_parent_dir_path_widget)
@@ -236,10 +236,10 @@ class Ui_MainWindow(object):
self.first_browser_parent_dir_button.setMinimumSize(QtCore.QSize(100, 30))
self.first_browser_parent_dir_button.setObjectName("first_browser_parent_dir_button")
self.first_browser_parent_dir_path_lay.addWidget(self.first_browser_parent_dir_button)
self.verticalLayout_3.addWidget(self.first_browser_parent_dir_path_widget)
self.browser_page_options_tab_lay.addWidget(self.first_browser_parent_dir_path_widget)
self.second_browser_parent_dir_path_label = QtWidgets.QLabel(self.browser_page_options_tab)
self.second_browser_parent_dir_path_label.setObjectName("second_browser_parent_dir_path_label")
self.verticalLayout_3.addWidget(self.second_browser_parent_dir_path_label)
self.browser_page_options_tab_lay.addWidget(self.second_browser_parent_dir_path_label)
self.second_browser_parent_dir_path_widget = QtWidgets.QWidget(self.browser_page_options_tab)
self.second_browser_parent_dir_path_widget.setObjectName("second_browser_parent_dir_path_widget")
self.second_browser_parent_dir_path_lay = QtWidgets.QHBoxLayout(self.second_browser_parent_dir_path_widget)
@@ -254,14 +254,50 @@ class Ui_MainWindow(object):
self.second_browser_parent_dir_button.setMinimumSize(QtCore.QSize(100, 30))
self.second_browser_parent_dir_button.setObjectName("second_browser_parent_dir_button")
self.second_browser_parent_dir_path_lay.addWidget(self.second_browser_parent_dir_button)
self.verticalLayout_3.addWidget(self.second_browser_parent_dir_path_widget)
self.browser_page_options_tab_lay.addWidget(self.second_browser_parent_dir_path_widget)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_3.addItem(spacerItem)
self.browser_page_options_tab_lay.addItem(spacerItem)
self.browser_page_tabs.addTab(self.browser_page_options_tab, "")
self.verticalLayout_2.addWidget(self.browser_page_tabs)
self.browser_page_lay.addWidget(self.browser_page_tabs)
self.content.addWidget(self.browser_page)
self.collections_page = QtWidgets.QWidget()
self.collections_page.setObjectName("collections_page")
self.collections_page_lay = QtWidgets.QVBoxLayout(self.collections_page)
self.collections_page_lay.setContentsMargins(0, 0, 0, 0)
self.collections_page_lay.setObjectName("collections_page_lay")
self.collections_page_tabs = QtWidgets.QTabWidget(self.collections_page)
self.collections_page_tabs.setObjectName("collections_page_tabs")
self.collections_tab_in_tabs = QtWidgets.QWidget()
self.collections_tab_in_tabs.setObjectName("collections_tab_in_tabs")
self.collections_tab_in_tabs_lay = QtWidgets.QHBoxLayout(self.collections_tab_in_tabs)
self.collections_tab_in_tabs_lay.setContentsMargins(0, 0, 0, 0)
self.collections_tab_in_tabs_lay.setObjectName("collections_tab_in_tabs_lay")
self.collections_listwidget = QtWidgets.QListWidget(self.collections_tab_in_tabs)
self.collections_listwidget.setEditTriggers(QtWidgets.QAbstractItemView.DoubleClicked|QtWidgets.QAbstractItemView.EditKeyPressed)
self.collections_listwidget.setObjectName("collections_listwidget")
self.collections_tab_in_tabs_lay.addWidget(self.collections_listwidget)
self.this_collection_listwidget = QtWidgets.QListWidget(self.collections_tab_in_tabs)
self.this_collection_listwidget.setObjectName("this_collection_listwidget")
self.collections_tab_in_tabs_lay.addWidget(self.this_collection_listwidget)
self.collections_tab_in_tabs_lay.setStretch(0, 1)
self.collections_tab_in_tabs_lay.setStretch(1, 3)
self.collections_page_tabs.addTab(self.collections_tab_in_tabs, "")
self.edit_collections_tabs = QtWidgets.QWidget()
self.edit_collections_tabs.setObjectName("edit_collections_tabs")
self.edit_collections_tabs_lay = QtWidgets.QVBoxLayout(self.edit_collections_tabs)
self.edit_collections_tabs_lay.setContentsMargins(0, 0, 0, 0)
self.edit_collections_tabs_lay.setObjectName("edit_collections_tabs_lay")
self.edit_collections_paths_label = QtWidgets.QLabel(self.edit_collections_tabs)
self.edit_collections_paths_label.setObjectName("edit_collections_paths_label")
self.edit_collections_tabs_lay.addWidget(self.edit_collections_paths_label)
self.edit_collections_paths = QtWidgets.QListWidget(self.edit_collections_tabs)
self.edit_collections_paths.setStyleSheet("font: 15pt \"Segoe UI\";")
self.edit_collections_paths.setEditTriggers(QtWidgets.QAbstractItemView.DoubleClicked|QtWidgets.QAbstractItemView.EditKeyPressed)
self.edit_collections_paths.setDragEnabled(False)
self.edit_collections_paths.setObjectName("edit_collections_paths")
self.edit_collections_tabs_lay.addWidget(self.edit_collections_paths)
self.collections_page_tabs.addTab(self.edit_collections_tabs, "")
self.collections_page_lay.addWidget(self.collections_page_tabs)
self.content.addWidget(self.collections_page)
self.stream_page = QtWidgets.QWidget()
self.stream_page.setObjectName("stream_page")
@@ -321,26 +357,26 @@ class Ui_MainWindow(object):
sizePolicy.setHeightForWidth(self.restream_options_group.sizePolicy().hasHeightForWidth())
self.restream_options_group.setSizePolicy(sizePolicy)
self.restream_options_group.setObjectName("restream_options_group")
self.verticalLayout = QtWidgets.QVBoxLayout(self.restream_options_group)
self.verticalLayout.setContentsMargins(-1, 5, -1, -1)
self.verticalLayout.setObjectName("verticalLayout")
self.restream_options_group_lay = QtWidgets.QVBoxLayout(self.restream_options_group)
self.restream_options_group_lay.setContentsMargins(-1, 5, -1, -1)
self.restream_options_group_lay.setObjectName("restream_options_group_lay")
self.restream_micro_checkbox = QtWidgets.QCheckBox(self.restream_options_group)
self.restream_micro_checkbox.setObjectName("restream_micro_checkbox")
self.verticalLayout.addWidget(self.restream_micro_checkbox)
self.restream_options_group_lay.addWidget(self.restream_micro_checkbox)
self.input_device_restream_label = QtWidgets.QLabel(self.restream_options_group)
self.input_device_restream_label.setObjectName("input_device_restream_label")
self.verticalLayout.addWidget(self.input_device_restream_label)
self.restream_options_group_lay.addWidget(self.input_device_restream_label)
self.input_device_restream_box = QtWidgets.QComboBox(self.restream_options_group)
self.input_device_restream_box.setMinimumSize(QtCore.QSize(0, 30))
self.input_device_restream_box.setObjectName("input_device_restream_box")
self.verticalLayout.addWidget(self.input_device_restream_box)
self.restream_options_group_lay.addWidget(self.input_device_restream_box)
self.output_device_restream_label = QtWidgets.QLabel(self.restream_options_group)
self.output_device_restream_label.setObjectName("output_device_restream_label")
self.verticalLayout.addWidget(self.output_device_restream_label)
self.restream_options_group_lay.addWidget(self.output_device_restream_label)
self.output_device_restream_box = QtWidgets.QComboBox(self.restream_options_group)
self.output_device_restream_box.setMinimumSize(QtCore.QSize(0, 30))
self.output_device_restream_box.setObjectName("output_device_restream_box")
self.verticalLayout.addWidget(self.output_device_restream_box)
self.restream_options_group_lay.addWidget(self.output_device_restream_box)
self.audio_devices_settings_tab_lay.addWidget(self.restream_options_group, 0, QtCore.Qt.AlignTop)
self.use_original_streaming_method_check = QtWidgets.QCheckBox(self.audio_devices_settings_tab)
self.use_original_streaming_method_check.setChecked(True)
@@ -473,8 +509,10 @@ class Ui_MainWindow(object):
self.retranslateUi(MainWindow)
self.menu.setCurrentRow(-1)
self.content.setCurrentIndex(0)
self.pads_content.setCurrentIndex(0)
self.browser_page_tabs.setCurrentIndex(0)
self.collections_page_tabs.setCurrentIndex(0)
self.settings_tabs_widget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
@@ -515,6 +553,9 @@ class Ui_MainWindow(object):
self.second_browser_parent_dir_box.setPlaceholderText(_translate("MainWindow", "C:\\"))
self.second_browser_parent_dir_button.setText(_translate("MainWindow", "Choose folder"))
self.browser_page_tabs.setTabText(self.browser_page_tabs.indexOf(self.browser_page_options_tab), _translate("MainWindow", "Options"))
self.collections_page_tabs.setTabText(self.collections_page_tabs.indexOf(self.collections_tab_in_tabs), _translate("MainWindow", "Collections"))
self.edit_collections_paths_label.setText(_translate("MainWindow", "Double click row to edit path to collection"))
self.collections_page_tabs.setTabText(self.collections_page_tabs.indexOf(self.edit_collections_tabs), _translate("MainWindow", "Edit collections"))
self.play_options_group.setTitle(_translate("MainWindow", "Play options"))
self.output_device_play_label.setText(_translate("MainWindow", "Output device (or virtual mic input)"))
self.preview_device_play_label.setText(_translate("MainWindow", "Preview device (your headphones)"))

View File

@@ -482,6 +482,9 @@ QListWidget:item:selected {
</property>
<item>
<widget class="QStackedWidget" name="content">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="pads_page">
<layout class="QVBoxLayout" name="pads_page_lay">
<property name="leftMargin">
@@ -707,7 +710,7 @@ QListWidget:item:selected {
</layout>
</widget>
<widget class="QWidget" name="browser_page">
<layout class="QVBoxLayout" name="verticalLayout_2">
<layout class="QVBoxLayout" name="browser_page_lay">
<property name="leftMargin">
<number>0</number>
</property>
@@ -779,7 +782,7 @@ QListWidget:item:selected {
<attribute name="title">
<string>Options</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<layout class="QVBoxLayout" name="browser_page_options_tab_lay">
<item>
<widget class="QLabel" name="first_browser_parent_dir_path_label">
<property name="text">
@@ -904,7 +907,97 @@ QListWidget:item:selected {
</item>
</layout>
</widget>
<widget class="QWidget" name="collections_page"/>
<widget class="QWidget" name="collections_page">
<layout class="QVBoxLayout" name="collections_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="collections_page_tabs">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="collections_tab_in_tabs">
<attribute name="title">
<string>Collections</string>
</attribute>
<layout class="QHBoxLayout" name="collections_tab_in_tabs_lay" stretch="1,3">
<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="QListWidget" name="collections_listwidget">
<property name="editTriggers">
<set>QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed</set>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="this_collection_listwidget"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="edit_collections_tabs">
<attribute name="title">
<string>Edit collections</string>
</attribute>
<layout class="QVBoxLayout" name="edit_collections_tabs_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="edit_collections_paths_label">
<property name="text">
<string>Double click row to edit path to collection</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="edit_collections_paths">
<property name="styleSheet">
<string notr="true">font: 15pt &quot;Segoe UI&quot;;</string>
</property>
<property name="editTriggers">
<set>QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed</set>
</property>
<property name="dragEnabled">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="stream_page"/>
<widget class="QWidget" name="collab_page"/>
<widget class="QWidget" name="download_page"/>
@@ -1013,7 +1106,7 @@ QListWidget:item:selected {
<property name="title">
<string>Microphone restream options</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="restream_options_group_lay">
<property name="topMargin">
<number>5</number>
</property>

View File

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

View File

@@ -0,0 +1,36 @@
from gui.gui import Ui_MainWindow
from modules.config import PathsConfig
import os
from gui.modules.core import popup
from modules.player.player import Player
def update_collections_lw(ui: Ui_MainWindow):
ui.all_collections_list = list()
ui.collections_listwidget.clear()
for item in PathsConfig.get().collections_list:
ui.all_collections_list.append([item.replace("\\", "/").split("/")[-1], item])
ui.collections_listwidget.addItem(item.replace("\\", "/").split("/")[-1])
def on_collection_click(ui: Ui_MainWindow):
ui.this_collection_listwidget.clear()
try:
ui.this_collection_listwidget.addItems(
[f for f in os.listdir(
ui.all_collections_list[ui.collections_listwidget.currentRow()][1]
)
if os.path.isfile(os.path.join(ui.all_collections_list[ui.collections_listwidget.currentRow()][1], f))]
)
except Exception as e:
print(e)
popup.popup("Error", "Cannot access files in this folder")
def on_collection_item_double(ui: Ui_MainWindow, p: Player):
p.set_media(os.path.join(
os.path.join(ui.all_collections_list[ui.collections_listwidget.currentRow()][1],
ui.this_collection_listwidget.currentItem().text())
))
p.play(ui)

View File

@@ -0,0 +1,11 @@
from gui.modules.collections.initialize import fill_collections_paths, on_path_setting_collection_change
from gui.modules.collections.collections import *
def register_handlers(ui: Ui_MainWindow, p: Player):
fill_collections_paths(ui)
update_collections_lw(ui)
ui.collections_page_tabs.currentChanged.connect(lambda: on_path_setting_collection_change(ui))
ui.collections_listwidget.itemClicked.connect(lambda: on_collection_click(ui))
ui.this_collection_listwidget.itemDoubleClicked.connect(lambda: on_collection_item_double(ui, p))

View File

@@ -0,0 +1,34 @@
from gui.gui import Ui_MainWindow
from modules.config import PathsConfig
from PyQt5 import QtWidgets, QtCore
from gui.modules.collections.collections import update_collections_lw
def on_path_setting_collection_change(ui: Ui_MainWindow):
all_collections = list(
filter(
lambda a: a != "",
list(
map(
lambda x: x.text(),
[ui.edit_collections_paths.item(x) for x in range(ui.edit_collections_paths.count())]
)
)
)
)
PathsConfig.update("collections_list", all_collections)
fill_collections_paths(ui)
update_collections_lw(ui)
def fill_collections_paths(ui: Ui_MainWindow):
ui.edit_collections_paths.clear()
collections = PathsConfig.get().collections_list
for i in range(420):
item = QtWidgets.QListWidgetItem()
item.setFlags(
QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled
)
item.setText(collections[i] if i < len(collections) else "")
ui.edit_collections_paths.addItem(item)

View File

@@ -6,6 +6,7 @@ from gui.modules import player
from gui.modules import settings
from gui.modules import restreammic
from gui.modules import explorer
from gui.modules import collections
from modules.player.player import Player
from modules.restream.restream import Restreamer
@@ -17,3 +18,4 @@ def register_handlers(ui: Ui_MainWindow, MainWindow: QMainWindow, p: Player, rs:
settings.register_handlers(ui)
restreammic.register_handlers(ui, MainWindow, rs)
explorer.register_handlers(ui, p)
collections.register_handlers(ui, p)

View File

@@ -1,5 +1,6 @@
from dataclasses import dataclass
from dataclasses_json import dataclass_json
from typing import List
@dataclass_json
@@ -20,3 +21,4 @@ class ConfigModel:
class PathsModel:
first_browser_path: str
second_browser_path: str
collections_list: List[str]

View File

@@ -8,7 +8,8 @@ class PathsConfig:
def default():
return {
"first_browser_path": "",
"second_browser_path": ""
"second_browser_path": "",
"collections_list": list()
}
@staticmethod
@@ -31,7 +32,7 @@ class PathsConfig:
return PathsConfig.get()
@staticmethod
def update(key: str, value: str | None) -> dict:
def update(key: str, value: str | list | None) -> dict:
with open("data/config.path", "r") as file:
settings = json.load(file)