Compare commits

..

No commits in common. "930efbbe6e13756187b0a115e5549b1bacab8b27" and "436f6b4fa948da572742e4434d97e7b7c1bcb9e5" have entirely different histories.

3 changed files with 132 additions and 142 deletions

View File

@ -296,10 +296,11 @@ class Playlists(Base):
def __repr__(self) -> str: def __repr__(self) -> str:
return f"<Playlists(id={self.id}, name={self.name}>" return f"<Playlists(id={self.id}, name={self.name}>"
def __init__(self, session: Session, name: str) -> None: #
self.name = name # def __init__(self, session: Session, name: str) -> None:
session.add(self) # self.name = name
session.commit() # session.add(self)
# session.flush()
# #
# def add_track( # def add_track(
# self, session: Session, track_id: int, # self, session: Session, track_id: int,
@ -324,27 +325,19 @@ class Playlists(Base):
"""Returns a list of all playlists ordered by last use""" """Returns a list of all playlists ordered by last use"""
return ( return (
session.execute( session.query(cls).order_by(
select(cls) cls.loaded.desc(), cls.last_used.desc())
.order_by(cls.loaded.desc(), cls.last_used.desc()) ).all()
) #
.scalars() # @classmethod
.all() # def get_closed(cls, session: Session) -> List["Playlists"]:
) # """Returns a list of all closed playlists ordered by last use"""
#
@classmethod # return (
def get_closed(cls, session: Session) -> List["Playlists"]: # session.query(cls)
"""Returns a list of all closed playlists ordered by last use""" # .filter(cls.loaded.is_(False))
# .order_by(cls.last_used.desc())
return ( # ).all()
session.execute(
select(cls)
.filter(cls.loaded.is_(False))
.order_by(cls.last_used.desc())
)
.scalars()
.all()
)
@classmethod @classmethod
def get_open(cls, session: Session) -> List[Optional["Playlists"]]: def get_open(cls, session: Session) -> List[Optional["Playlists"]]:

View File

@ -14,7 +14,7 @@ from PyQt5.QtWidgets import (
QApplication, QApplication,
QDialog, QDialog,
QFileDialog, QFileDialog,
QInputDialog, # QInputDialog,
QLabel, QLabel,
# QLineEdit, # QLineEdit,
QListWidgetItem, QListWidgetItem,
@ -175,23 +175,23 @@ class Window(QMainWindow, Ui_MainWindow):
self.actionEnable_controls.triggered.connect( self.actionEnable_controls.triggered.connect(
self.enable_play_next_controls) self.enable_play_next_controls)
self.actionExport_playlist.triggered.connect(self.export_playlist_tab) self.actionExport_playlist.triggered.connect(self.export_playlist_tab)
# ***kae
# self.actionImport.triggered.connect(self.import_track) # self.actionImport.triggered.connect(self.import_track)
self.actionFade.triggered.connect(self.fade) self.actionFade.triggered.connect(self.fade)
# self.actionMoveSelected.triggered.connect(self.move_selected) # self.actionMoveSelected.triggered.connect(self.move_selected)
self.actionNewPlaylist.triggered.connect(self.create_playlist) # self.actionNewPlaylist.triggered.connect(self.create_playlist)
self.actionOpenPlaylist.triggered.connect(self.open_playlist) # self.actionOpenPlaylist.triggered.connect(self.open_playlist)
self.actionPlay_next.triggered.connect(self.play_next) self.actionPlay_next.triggered.connect(self.play_next)
# self.actionSearch.triggered.connect(self.search_playlist) # self.actionSearch.triggered.connect(self.search_playlist)
# self.actionSearch_database.triggered.connect(self.search_database) # self.actionSearch_database.triggered.connect(self.search_database)
self.actionSelect_next_track.triggered.connect(self.select_next_row) # self.actionSelect_next_track.triggered.connect(self.select_next_row)
# self.actionSelect_played_tracks.triggered.connect(self.select_played) # self.actionSelect_played_tracks.triggered.connect(self.select_played)
self.actionSelect_previous_track.triggered.connect( # self.actionSelect_previous_track.triggered.connect(
self.select_previous_row) # self.select_previous_row)
# self.actionSelect_unplayed_tracks.triggered.connect( # self.actionSelect_unplayed_tracks.triggered.connect(
# self.select_unplayed) # self.select_unplayed)
self.actionSetNext.triggered.connect( self.actionSetNext.triggered.connect(
lambda: self.tabPlaylist.currentWidget().set_selected_as_next()) lambda: self.tabPlaylist.currentWidget().set_selected_as_next())
# ***kae
# self.actionSkip_next.triggered.connect(self.play_next) # self.actionSkip_next.triggered.connect(self.play_next)
self.actionStop.triggered.connect(self.stop) self.actionStop.triggered.connect(self.stop)
# self.btnDrop3db.clicked.connect(self.drop3db) # self.btnDrop3db.clicked.connect(self.drop3db)
@ -203,19 +203,19 @@ class Window(QMainWindow, Ui_MainWindow):
# self.txtSearch.textChanged.connect(self.search_playlist_update) # self.txtSearch.textChanged.connect(self.search_playlist_update)
# #
self.timer.timeout.connect(self.tick) self.timer.timeout.connect(self.tick)
#
def create_playlist(self) -> None: # def create_playlist(self) -> None:
"""Create new playlist""" # """Create new playlist"""
#
dlg = QInputDialog(self) # dlg = QInputDialog(self)
dlg.setInputMode(QInputDialog.TextInput) # dlg.setInputMode(QInputDialog.TextInput)
dlg.setLabelText("Playlist name:") # dlg.setLabelText("Playlist name:")
dlg.resize(500, 100) # dlg.resize(500, 100)
ok = dlg.exec() # ok = dlg.exec()
if ok: # if ok:
with Session() as session: # with Session() as session:
playlist = Playlists(session, dlg.textValue()) # playlist = Playlists(session, dlg.textValue())
self.create_playlist_tab(session, playlist) # self.create_playlist_tab(session, playlist)
def close_playlist_tab(self) -> None: def close_playlist_tab(self) -> None:
""" """
@ -651,32 +651,32 @@ class Window(QMainWindow, Ui_MainWindow):
# """Update search when search string changes""" # """Update search when search string changes"""
# #
# self.visible_playlist_tab().set_filter(self.txtSearch.text()) # self.visible_playlist_tab().set_filter(self.txtSearch.text())
#
def open_playlist(self): # def open_playlist(self):
with Session() as session: # with Session() as session:
playlists = Playlists.get_closed(session) # playlists = Playlists.get_closed(session)
dlg = SelectPlaylistDialog(self, playlists=playlists, # dlg = SelectPlaylistDialog(self, playlists=playlists,
session=session) # session=session)
dlg.exec() # dlg.exec()
playlist = dlg.playlist # playlist = dlg.playlist
if playlist: # if playlist:
playlist.mark_open(session) # playlist.mark_open(session)
self.create_playlist_tab(session, playlist) # self.create_playlist_tab(session, playlist)
#
def select_next_row(self) -> None: # def select_next_row(self) -> None:
"""Select next or first row in playlist""" # """Select next or first row in playlist"""
#
self.visible_playlist_tab().select_next_row() # self.visible_playlist_tab().select_next_row()
# #
# def select_played(self) -> None: # def select_played(self) -> None:
# """Select all played tracks in playlist""" # """Select all played tracks in playlist"""
# #
# self.visible_playlist_tab().select_played_tracks() # self.visible_playlist_tab().select_played_tracks()
# #
def select_previous_row(self) -> None: # def select_previous_row(self) -> None:
"""Select previous or first row in playlist""" # """Select previous or first row in playlist"""
#
self.visible_playlist_tab().select_previous_row() # self.visible_playlist_tab().select_previous_row()
# #
# def select_unplayed(self) -> None: # def select_unplayed(self) -> None:
# """Select all unplayed tracks in playlist""" # """Select all unplayed tracks in playlist"""

View File

@ -248,7 +248,6 @@ class PlaylistTab(QTableWidget):
if (event.type() == QEvent.MouseButtonPress and # noqa W504 if (event.type() == QEvent.MouseButtonPress and # noqa W504
event.buttons() == Qt.RightButton and # noqa W504 event.buttons() == Qt.RightButton and # noqa W504
source is self.viewport()): source is self.viewport()):
self.menu = QMenu(self)
item = self.itemAt(event.pos()) item = self.itemAt(event.pos())
if item is not None: if item is not None:
row_number = item.row() row_number = item.row()
@ -259,6 +258,8 @@ class PlaylistTab(QTableWidget):
else: else:
current = next_row = False current = next_row = False
self.menu = QMenu(self)
if track_id: if track_id:
# Info # Info
act_info = self.menu.addAction('Info') act_info = self.menu.addAction('Info')
@ -794,43 +795,41 @@ class PlaylistTab(QTableWidget):
# row, FIXUP.COL_USERDATA).data(self.CONTENT_OBJECT) # row, FIXUP.COL_USERDATA).data(self.CONTENT_OBJECT)
# playlist.add_track(session, track_id, row) # playlist.add_track(session, track_id, row)
# session.commit() # session.commit()
#
def select_next_row(self) -> None: # def select_next_row(self) -> None:
""" # """
Select next or first row. Don't select section headers. # Select next or first row. Don't select notes. Wrap at last row.
Wrap at last row. # """
""" #
# row: int
row: int # selected_rows: List[int]
selected_rows: List[int] #
# selected_rows = [row for row in
selected_rows = self._selected_rows() # set([a.row() for a in self.selectedItems()])]
# we will only handle zero or one selected rows # # we will only handle zero or one selected rows
if len(selected_rows) > 1: # if len(selected_rows) > 1:
return # return
# select first row if none selected # # select first row if none selected
if len(selected_rows) == 0: # if len(selected_rows) == 0:
row = 0 # row = 0
else: # else:
row = selected_rows[0] + 1 # row = selected_rows[0] + 1
if row >= self.rowCount(): # if row >= self.rowCount():
row = 0 # row = 0
#
# Don't select section headers # # Don't select notes
wrapped: bool = False # wrapped: bool = False
track_id = self._get_row_track_id(row) # while row in self._get_notes_rows():
while not track_id: # row += 1
row += 1 # if row >= self.rowCount():
if row >= self.rowCount(): # if wrapped:
if wrapped: # # we're already wrapped once, so there are no
# we're already wrapped once, so there are no # # non-notes
# non-notes # return
return # row = 0
row = 0 # wrapped = True
wrapped = True #
track_id = self._get_row_track_id(row) # self.selectRow(row)
self.selectRow(row)
# #
# def select_played_tracks(self) -> None: # def select_played_tracks(self) -> None:
# """Select all played tracks in playlist""" # """Select all played tracks in playlist"""
@ -841,44 +840,42 @@ class PlaylistTab(QTableWidget):
# finally: # finally:
# self.selecting_in_progress = False # self.selecting_in_progress = False
# self._select_event() # self._select_event()
#
def select_previous_row(self) -> None: # def select_previous_row(self) -> None:
""" # """
Select previous or last track. Don't select section headers. # Select previous or last track. Don't select notes. Wrap at first row.
Wrap at first row. # """
""" #
# row: int
row: int # selected_rows: List[int]
selected_rows: List[int] #
# selected_rows = [row for row in
selected_rows = self._selected_rows() # set([a.row() for a in self.selectedItems()])]
# we will only handle zero or one selected rows # # we will only handle zero or one selected rows
if len(selected_rows) > 1: # if len(selected_rows) > 1:
return # return
# select last row if none selected # # select last row if none selected
last_row = self.rowCount() - 1 # last_row: int = self.rowCount() - 1
if len(selected_rows) == 0: # if len(selected_rows) == 0:
row = last_row # row = last_row
else: # else:
row = selected_rows[0] - 1 # row = selected_rows[0] - 1
if row < 0: # if row < 0:
row = last_row # row = last_row
#
# Don't select section headers # # Don't select notes
wrapped: bool = False # wrapped: bool = False
track_id = self._get_row_track_id(row) # while row in self._get_notes_rows():
while not track_id: # row -= 1
row -= 1 # if row < 0:
if row < 0: # if wrapped:
if wrapped: # # we're already wrapped once, so there are no
# we're already wrapped once, so there are no # # non-notes
# non-notes # return
return # row = last_row
row = last_row # wrapped = True
wrapped = True #
track_id = self._get_row_track_id(row) # self.selectRow(row)
self.selectRow(row)
# #
# def select_unplayed_tracks(self) -> None: # def select_unplayed_tracks(self) -> None:
# """Select all unplayed tracks in playlist""" # """Select all unplayed tracks in playlist"""
@ -1754,7 +1751,7 @@ class PlaylistTab(QTableWidget):
else: else:
self.musicmuster.lblSumPlaytime.setText("") self.musicmuster.lblSumPlaytime.setText("")
def _selected_rows(self) -> List[int]: def _selected_rows(self) -> Optional[List[int]]:
"""Return a list of selected row numbers""" """Return a list of selected row numbers"""
# Use a set to deduplicate result (a selected row will have all # Use a set to deduplicate result (a selected row will have all