summaryrefslogtreecommitdiff
path: root/tidal_dl_ng/gui/signals.py
blob: 4a8e43ab4d65cfe0323f5f5c9386f3ba22c8a338 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
"""Signals mixin for MainWindow.

Handles all Qt signal definitions and connections.
"""

from PySide6 import QtCore, QtWidgets
from tidalapi import Album, Artist, Track, Video

from tidal_dl_ng.helper.gui import get_results_media_item


class SignalsMixin:
    """Mixin containing Qt signal definitions and signal connection methods."""

    def _init_signals(self) -> None:
        """Connect signals to their respective slots."""
        self.pb_download.clicked.connect(lambda: self.thread_it(self.on_download_results))
        self.pb_download_list.clicked.connect(lambda: self.thread_it(self.playlist_manager.on_download_list_media))
        self.l_search.returnPressed.connect(
            lambda: self.search_manager.search_populate_results(self.l_search.text(), self.cb_search_type.currentData())
        )
        self.pb_search.clicked.connect(
            lambda: self.search_manager.search_populate_results(self.l_search.text(), self.cb_search_type.currentData())
        )
        self.cb_quality_audio.currentIndexChanged.connect(self.on_quality_set_audio)
        self.cb_quality_video.currentIndexChanged.connect(self.on_quality_set_video)
        self.s_spinner_start[QtWidgets.QWidget].connect(self.on_spinner_start)
        self.s_spinner_stop.connect(self.on_spinner_stop)
        self.s_item_advance.connect(self.on_progress_item)
        self.s_item_name.connect(self.on_progress_item_name)
        self.s_list_name.connect(self.on_progress_list_name)
        self.s_list_advance.connect(self.on_progress_list)
        self.s_pb_reset.connect(self.on_progress_reset)
        self.s_statusbar_message.connect(self.on_statusbar_message)
        self.s_tr_results_add_top_level_item.connect(self.on_tr_results_add_top_level_item)
        self.s_settings_save.connect(self.on_settings_save)
        self.s_pb_reload_status.connect(self.button_reload_status)
        self.s_update_check.connect(lambda: self.thread_it(self.on_update_check))
        self.s_update_show.connect(self.on_version)

        # Menubar
        self.a_exit.triggered.connect(self.close)
        self.a_version.triggered.connect(self.on_version)
        self.a_preferences.triggered.connect(self.on_preferences)
        self.a_logout.triggered.connect(self.on_logout)
        self.a_updates_check.triggered.connect(lambda: self.on_update_check(False))

        # Results
        self.tr_results.expanded.connect(self.on_tr_results_expanded)
        self.tr_results.clicked.connect(self.on_result_item_clicked)
        self.tr_results.doubleClicked.connect(lambda: self.thread_it(self.on_download_results))

        # Managers
        self.queue_manager.connect_signals()
        self.playlist_manager.connect_signals()
        self.info_tab_widget.s_search_in_app.connect(self.on_search_in_app)
        self.info_tab_widget.s_search_in_browser.connect(self.on_search_in_browser)

    def on_result_item_clicked(self, index: QtCore.QModelIndex) -> None:
        """Handle the event when a result item is clicked."""
        media: Track | Video | Album | Artist = get_results_media_item(
            index, self.proxy_tr_results, self.model_tr_results
        )

        self.info_tab_widget.update_on_selection(media)
        self.thread_it(self.cover_manager.load_cover, media)

    def on_quality_set_audio(self, index: int) -> None:
        """Set the audio quality for downloads."""
        from tidalapi import Quality

        quality_data = self.cb_quality_audio.itemData(index)
        self.settings.data.quality_audio = Quality(quality_data)
        self.settings.save()
        if self.tidal:
            self.tidal.settings_apply()

    def on_quality_set_video(self, index: int) -> None:
        """Set the video quality for downloads."""
        from tidal_dl_ng.constants import QualityVideo

        self.settings.data.quality_video = QualityVideo(self.cb_quality_video.itemData(index))
        self.settings.save()
        if self.tidal:
            self.tidal.settings_apply()