Implement search of playlist
This commit is contained in:
parent
871598efe6
commit
70287d15a6
@ -495,8 +495,8 @@ class Tracks(Base):
|
||||
path: str,
|
||||
title: Optional[str] = None,
|
||||
artist: Optional[str] = None,
|
||||
duration: Optional[int] = None,
|
||||
start_gap: Optional[int] = None,
|
||||
duration: int = 0,
|
||||
start_gap: int = 0,
|
||||
fade_at: Optional[int] = None,
|
||||
silence_at: Optional[int] = None,
|
||||
mtime: Optional[float] = None,
|
||||
|
||||
@ -64,7 +64,6 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
self.timer: QTimer = QTimer()
|
||||
self.even_tick: bool = True
|
||||
self.playing: bool = False
|
||||
self.connect_signals_slots()
|
||||
self.disable_play_next_controls()
|
||||
|
||||
self.music: music.Music = music.Music()
|
||||
@ -91,6 +90,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
self.enable_play_next_controls()
|
||||
self.check_audacity()
|
||||
self.timer.start(Config.TIMER_MS)
|
||||
self.connect_signals_slots()
|
||||
|
||||
def set_main_window_size(self) -> None:
|
||||
"""Set size of window from database"""
|
||||
@ -629,15 +629,24 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
dlg.exec()
|
||||
|
||||
def search_playlist(self):
|
||||
"""Show text box to search playlist"""
|
||||
|
||||
self.disable_play_next_controls()
|
||||
self.txtSearch.setHidden(False)
|
||||
self.txtSearch.setFocus()
|
||||
|
||||
def search_playlist_return(self):
|
||||
"""Close off search box when return pressed"""
|
||||
|
||||
self.txtSearch.setText("")
|
||||
self.txtSearch.setHidden(True)
|
||||
# TODO show all of playlist again
|
||||
self.enable_play_next_controls()
|
||||
self.visible_playlist_tab().set_filter("")
|
||||
|
||||
def search_playlist_update(self):
|
||||
print("search_playlist_update")
|
||||
"""Update search when search string changes"""
|
||||
|
||||
self.visible_playlist_tab().set_filter(self.txtSearch.text())
|
||||
|
||||
def open_playlist(self):
|
||||
with Session() as session:
|
||||
|
||||
@ -136,6 +136,7 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
self.itemSelectionChanged.connect(self._select_event)
|
||||
|
||||
self.row_filter: Optional[str] = None
|
||||
self.editing_cell: bool = False
|
||||
self.selecting_in_progress = False
|
||||
self.cellChanged.connect(self._cell_changed)
|
||||
@ -664,6 +665,13 @@ class PlaylistTab(QTableWidget):
|
||||
self.selecting_in_progress = False
|
||||
self._select_event()
|
||||
|
||||
def set_filter(self, text: Optional[str]) -> None:
|
||||
"""Filter rows to only show those containing text"""
|
||||
|
||||
self.row_filter = text
|
||||
with Session() as session:
|
||||
self.update_display(session)
|
||||
|
||||
def set_selected_as_next(self) -> None:
|
||||
"""Sets the select track as next to play"""
|
||||
|
||||
@ -723,6 +731,14 @@ class PlaylistTab(QTableWidget):
|
||||
if row in notes:
|
||||
# Extract note text from database to ignore section timings
|
||||
note_text = self._get_row_notes_object(row, session).note
|
||||
if self.row_filter:
|
||||
if self.row_filter not in note_text:
|
||||
self.hideRow(row)
|
||||
continue
|
||||
else:
|
||||
self.showRow(row)
|
||||
else:
|
||||
self.showRow(row)
|
||||
# Does the note have a start time?
|
||||
row_time = self._get_note_text_time(note_text)
|
||||
if row_time:
|
||||
@ -762,6 +778,20 @@ class PlaylistTab(QTableWidget):
|
||||
if section_start_row is not None:
|
||||
section_time += track.duration
|
||||
# Render current track
|
||||
if self.row_filter:
|
||||
try:
|
||||
if (track.title
|
||||
and self.row_filter not in track.title
|
||||
and track.artist
|
||||
and self.row_filter not in track.artist):
|
||||
self.hideRow(row)
|
||||
continue
|
||||
else:
|
||||
self.showRow(row)
|
||||
except TypeError:
|
||||
print(f"TypeError: {track=}")
|
||||
else:
|
||||
self.showRow(row)
|
||||
if row == current_row:
|
||||
# Set start time
|
||||
self._set_row_start_time(
|
||||
|
||||
@ -782,8 +782,6 @@ border: 1px solid rgb(85, 87, 83);</string>
|
||||
<addaction name="actionAdd_note"/>
|
||||
<addaction name="action_Clear_selection"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionSelect_previous_track"/>
|
||||
<addaction name="actionSelect_next_track"/>
|
||||
<addaction name="actionSetNext"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionSelect_unplayed_tracks"/>
|
||||
@ -795,6 +793,7 @@ border: 1px solid rgb(85, 87, 83);</string>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionSelect_next_track"/>
|
||||
<addaction name="actionSelect_previous_track"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionSearch"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menu_Music">
|
||||
@ -1038,7 +1037,7 @@ border: 1px solid rgb(85, 87, 83);</string>
|
||||
</action>
|
||||
<action name="actionSearch">
|
||||
<property name="text">
|
||||
<string>Search</string>
|
||||
<string>Search...</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>/</string>
|
||||
|
||||
@ -464,8 +464,6 @@ class Ui_MainWindow(object):
|
||||
self.menuPlaylist.addAction(self.actionAdd_note)
|
||||
self.menuPlaylist.addAction(self.action_Clear_selection)
|
||||
self.menuPlaylist.addSeparator()
|
||||
self.menuPlaylist.addAction(self.actionSelect_previous_track)
|
||||
self.menuPlaylist.addAction(self.actionSelect_next_track)
|
||||
self.menuPlaylist.addAction(self.actionSetNext)
|
||||
self.menuPlaylist.addSeparator()
|
||||
self.menuPlaylist.addAction(self.actionSelect_unplayed_tracks)
|
||||
@ -477,6 +475,7 @@ class Ui_MainWindow(object):
|
||||
self.menuPlaylist.addSeparator()
|
||||
self.menuPlaylist.addAction(self.actionSelect_next_track)
|
||||
self.menuPlaylist.addAction(self.actionSelect_previous_track)
|
||||
self.menuPlaylist.addSeparator()
|
||||
self.menuPlaylist.addAction(self.actionSearch)
|
||||
self.menu_Music.addAction(self.actionPlay_next)
|
||||
self.menu_Music.addAction(self.actionSkip_next)
|
||||
@ -566,6 +565,6 @@ class Ui_MainWindow(object):
|
||||
self.actionImport.setText(_translate("MainWindow", "Import..."))
|
||||
self.actionImport.setShortcut(_translate("MainWindow", "Ctrl+Shift+I"))
|
||||
self.actionDownload_CSV_of_played_tracks.setText(_translate("MainWindow", "Download CSV of played tracks..."))
|
||||
self.actionSearch.setText(_translate("MainWindow", "Search"))
|
||||
self.actionSearch.setText(_translate("MainWindow", "Search..."))
|
||||
self.actionSearch.setShortcut(_translate("MainWindow", "/"))
|
||||
import icons_rc
|
||||
|
||||
Loading…
Reference in New Issue
Block a user