Compare commits
3 Commits
436f6b4fa9
...
930efbbe6e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
930efbbe6e | ||
|
|
cb5eedd8c8 | ||
|
|
c7034cf35a |
@ -296,11 +296,10 @@ 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:
|
||||||
# def __init__(self, session: Session, name: str) -> None:
|
self.name = name
|
||||||
# self.name = name
|
session.add(self)
|
||||||
# session.add(self)
|
session.commit()
|
||||||
# session.flush()
|
|
||||||
#
|
#
|
||||||
# def add_track(
|
# def add_track(
|
||||||
# self, session: Session, track_id: int,
|
# self, session: Session, track_id: int,
|
||||||
@ -325,19 +324,27 @@ 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.query(cls).order_by(
|
session.execute(
|
||||||
cls.loaded.desc(), cls.last_used.desc())
|
select(cls)
|
||||||
).all()
|
.order_by(cls.loaded.desc(), cls.last_used.desc())
|
||||||
#
|
)
|
||||||
# @classmethod
|
.scalars()
|
||||||
# def get_closed(cls, session: Session) -> List["Playlists"]:
|
.all()
|
||||||
# """Returns a list of all closed playlists ordered by last use"""
|
)
|
||||||
#
|
|
||||||
# return (
|
@classmethod
|
||||||
# session.query(cls)
|
def get_closed(cls, session: Session) -> List["Playlists"]:
|
||||||
# .filter(cls.loaded.is_(False))
|
"""Returns a list of all closed playlists ordered by last use"""
|
||||||
# .order_by(cls.last_used.desc())
|
|
||||||
# ).all()
|
return (
|
||||||
|
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"]]:
|
||||||
|
|||||||
@ -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"""
|
||||||
|
|||||||
151
app/playlists.py
151
app/playlists.py
@ -248,6 +248,7 @@ 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()
|
||||||
@ -258,8 +259,6 @@ 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')
|
||||||
@ -795,41 +794,43 @@ 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 notes. Wrap at last row.
|
Select next or first row. Don't select section headers.
|
||||||
# """
|
Wrap at last row.
|
||||||
#
|
"""
|
||||||
# row: int
|
|
||||||
# selected_rows: List[int]
|
row: int
|
||||||
#
|
selected_rows: List[int]
|
||||||
# selected_rows = [row for row in
|
|
||||||
# set([a.row() for a in self.selectedItems()])]
|
selected_rows = self._selected_rows()
|
||||||
# # 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 notes
|
# Don't select section headers
|
||||||
# wrapped: bool = False
|
wrapped: bool = False
|
||||||
# while row in self._get_notes_rows():
|
track_id = self._get_row_track_id(row)
|
||||||
# row += 1
|
while not track_id:
|
||||||
# if row >= self.rowCount():
|
row += 1
|
||||||
# if wrapped:
|
if row >= self.rowCount():
|
||||||
# # we're already wrapped once, so there are no
|
if wrapped:
|
||||||
# # non-notes
|
# we're already wrapped once, so there are no
|
||||||
# return
|
# non-notes
|
||||||
# row = 0
|
return
|
||||||
# wrapped = True
|
row = 0
|
||||||
#
|
wrapped = True
|
||||||
# self.selectRow(row)
|
track_id = self._get_row_track_id(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"""
|
||||||
@ -840,42 +841,44 @@ 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 notes. Wrap at first row.
|
Select previous or last track. Don't select section headers.
|
||||||
# """
|
Wrap at first row.
|
||||||
#
|
"""
|
||||||
# row: int
|
|
||||||
# selected_rows: List[int]
|
row: int
|
||||||
#
|
selected_rows: List[int]
|
||||||
# selected_rows = [row for row in
|
|
||||||
# set([a.row() for a in self.selectedItems()])]
|
selected_rows = self._selected_rows()
|
||||||
# # 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: int = self.rowCount() - 1
|
last_row = 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 notes
|
# Don't select section headers
|
||||||
# wrapped: bool = False
|
wrapped: bool = False
|
||||||
# while row in self._get_notes_rows():
|
track_id = self._get_row_track_id(row)
|
||||||
# row -= 1
|
while not track_id:
|
||||||
# if row < 0:
|
row -= 1
|
||||||
# if wrapped:
|
if row < 0:
|
||||||
# # we're already wrapped once, so there are no
|
if wrapped:
|
||||||
# # non-notes
|
# we're already wrapped once, so there are no
|
||||||
# return
|
# non-notes
|
||||||
# row = last_row
|
return
|
||||||
# wrapped = True
|
row = last_row
|
||||||
#
|
wrapped = True
|
||||||
# self.selectRow(row)
|
track_id = self._get_row_track_id(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"""
|
||||||
@ -1751,7 +1754,7 @@ class PlaylistTab(QTableWidget):
|
|||||||
else:
|
else:
|
||||||
self.musicmuster.lblSumPlaytime.setText("")
|
self.musicmuster.lblSumPlaytime.setText("")
|
||||||
|
|
||||||
def _selected_rows(self) -> Optional[List[int]]:
|
def _selected_rows(self) -> 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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user