Export playlist working
This commit is contained in:
parent
9485b244f5
commit
436f6b4fa9
@ -296,7 +296,6 @@ 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
|
||||||
@ -315,7 +314,7 @@ class Playlists(Base):
|
|||||||
# row = self.next_free_row(session, self.id)
|
# row = self.next_free_row(session, self.id)
|
||||||
#
|
#
|
||||||
# xPlaylistTracks(session, self.id, track_id, row)
|
# xPlaylistTracks(session, self.id, track_id, row)
|
||||||
#
|
|
||||||
def close(self, session: Session) -> None:
|
def close(self, session: Session) -> None:
|
||||||
"""Mark playlist as unloaded"""
|
"""Mark playlist as unloaded"""
|
||||||
|
|
||||||
@ -511,40 +510,40 @@ class PlaylistRows(Base):
|
|||||||
# Ensure new row numbers are available to the caller
|
# Ensure new row numbers are available to the caller
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
@staticmethod
|
@classmethod
|
||||||
def get_played_rows(session: Session,
|
def get_played_rows(cls, session: Session,
|
||||||
playlist_id: int) -> List[int]:
|
playlist_id: int) -> List[int]:
|
||||||
"""
|
"""
|
||||||
For passed playlist, return a list of row numbers that
|
For passed playlist, return a list of rows that
|
||||||
have been played.
|
have been played.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
plrs = session.execute(
|
plrs = session.execute(
|
||||||
select(PlaylistRows.row_number)
|
select(cls)
|
||||||
.where(
|
.where(
|
||||||
PlaylistRows.playlist_id == playlist_id,
|
cls.playlist_id == playlist_id,
|
||||||
PlaylistRows.played.is_(True)
|
cls.played.is_(True)
|
||||||
)
|
)
|
||||||
.order_by(PlaylistRows.row_number)
|
.order_by(cls.row_number)
|
||||||
).scalars().all()
|
).scalars().all()
|
||||||
|
|
||||||
return plrs
|
return plrs
|
||||||
|
|
||||||
@staticmethod
|
@classmethod
|
||||||
def get_rows_with_tracks(session: Session,
|
def get_rows_with_tracks(cls, session: Session,
|
||||||
playlist_id: int) -> List[int]:
|
playlist_id: int) -> List[int]:
|
||||||
"""
|
"""
|
||||||
For passed playlist, return a list of all row numbers that
|
For passed playlist, return a list of rows that
|
||||||
contain tracks
|
contain tracks
|
||||||
"""
|
"""
|
||||||
|
|
||||||
plrs = session.execute(
|
plrs = session.execute(
|
||||||
select(PlaylistRows.row_number)
|
select(cls)
|
||||||
.where(
|
.where(
|
||||||
PlaylistRows.playlist_id == playlist_id,
|
cls.playlist_id == playlist_id,
|
||||||
PlaylistRows.track_id.is_not(None)
|
cls.track_id.is_not(None)
|
||||||
)
|
)
|
||||||
.order_by(PlaylistRows.row_number)
|
.order_by(cls.row_number)
|
||||||
).scalars().all()
|
).scalars().all()
|
||||||
|
|
||||||
return plrs
|
return plrs
|
||||||
|
|||||||
@ -172,10 +172,10 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
self.actionClosePlaylist.triggered.connect(self.close_playlist_tab)
|
self.actionClosePlaylist.triggered.connect(self.close_playlist_tab)
|
||||||
self.actionDownload_CSV_of_played_tracks.triggered.connect(
|
self.actionDownload_CSV_of_played_tracks.triggered.connect(
|
||||||
self.download_played_tracks)
|
self.download_played_tracks)
|
||||||
# ***kae
|
|
||||||
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)
|
||||||
@ -364,42 +364,45 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
# Enable controls
|
# Enable controls
|
||||||
self.enable_play_next_controls()
|
self.enable_play_next_controls()
|
||||||
#
|
|
||||||
# def export_playlist_tab(self) -> None:
|
def export_playlist_tab(self) -> None:
|
||||||
# """Export the current playlist to an m3u file"""
|
"""Export the current playlist to an m3u file"""
|
||||||
#
|
|
||||||
# if not self.visible_playlist_tab():
|
if not self.visible_playlist_tab():
|
||||||
# return
|
return
|
||||||
#
|
|
||||||
# with Session() as session:
|
playlist_id = self.visible_playlist_tab().playlist_id
|
||||||
# playlist = Playlists.get_by_id(
|
|
||||||
# session, self.visible_playlist_tab().playlist_id)
|
with Session() as session:
|
||||||
# # Get output filename
|
|
||||||
# pathspec: Tuple[str, str] = QFileDialog.getSaveFileName(
|
# Get output filename
|
||||||
# self, 'Save Playlist',
|
playlist = session.get(Playlists, playlist_id)
|
||||||
# directory=f"{playlist.name}.m3u",
|
pathspec = QFileDialog.getSaveFileName(
|
||||||
# filter="M3U files (*.m3u);;All files (*.*)"
|
self, 'Save Playlist',
|
||||||
# )
|
directory=f"{playlist.name}.m3u",
|
||||||
# if not pathspec:
|
filter="M3U files (*.m3u);;All files (*.*)"
|
||||||
# return
|
)
|
||||||
#
|
if not pathspec:
|
||||||
# path: str = pathspec[0]
|
return
|
||||||
# if not path.endswith(".m3u"):
|
path = pathspec[0]
|
||||||
# path += ".m3u"
|
if not path.endswith(".m3u"):
|
||||||
#
|
path += ".m3u"
|
||||||
# with open(path, "w") as f:
|
|
||||||
# # Required directive on first line
|
# Get list of track rows for this playlist
|
||||||
# f.write("#EXTM3U\n")
|
plrs = PlaylistRows.get_rows_with_tracks(session, playlist_id)
|
||||||
# for _, track in playlist.tracks.items():
|
with open(path, "w") as f:
|
||||||
# f.write(
|
# Required directive on first line
|
||||||
# "#EXTINF:"
|
f.write("#EXTM3U\n")
|
||||||
# f"{int(track.duration / 1000)},"
|
for track in [a.track for a in plrs]:
|
||||||
# f"{track.title} - "
|
f.write(
|
||||||
# f"{track.artist}"
|
"#EXTINF:"
|
||||||
# "\n"
|
f"{int(track.duration / 1000)},"
|
||||||
# f"{track.path}"
|
f"{track.title} - "
|
||||||
# "\n"
|
f"{track.artist}"
|
||||||
# )
|
"\n"
|
||||||
|
f"{track.path}"
|
||||||
|
"\n"
|
||||||
|
)
|
||||||
|
|
||||||
def fade(self) -> None:
|
def fade(self) -> None:
|
||||||
"""Fade currently playing track"""
|
"""Fade currently playing track"""
|
||||||
|
|||||||
@ -922,7 +922,10 @@ class PlaylistTab(QTableWidget):
|
|||||||
|
|
||||||
current_row: Optional[int] = self._get_current_track_row()
|
current_row: Optional[int] = self._get_current_track_row()
|
||||||
next_row: Optional[int] = self._get_next_track_row()
|
next_row: Optional[int] = self._get_next_track_row()
|
||||||
played = PlaylistRows.get_played_rows(session, self.playlist_id)
|
played = [
|
||||||
|
p.row_number for p in PlaylistRows.get_played_rows(
|
||||||
|
session, self.playlist_id)
|
||||||
|
]
|
||||||
unreadable: List[int] = self._get_unreadable_track_rows()
|
unreadable: List[int] = self._get_unreadable_track_rows()
|
||||||
|
|
||||||
if self.row_filter:
|
if self.row_filter:
|
||||||
@ -1336,9 +1339,14 @@ class PlaylistTab(QTableWidget):
|
|||||||
if starting_row is None:
|
if starting_row is None:
|
||||||
starting_row = 0
|
starting_row = 0
|
||||||
|
|
||||||
track_rows = PlaylistRows.get_rows_with_tracks(session,
|
track_rows = [
|
||||||
self.playlist_id)
|
p.row_number for p in PlaylistRows.get_rows_with_tracks(
|
||||||
played_rows = PlaylistRows.get_played_rows(session, self.playlist_id)
|
session, self.playlist_id)
|
||||||
|
]
|
||||||
|
played_rows = [
|
||||||
|
p.row_number for p in PlaylistRows.get_played_rows(
|
||||||
|
session, self.playlist_id)
|
||||||
|
]
|
||||||
for row in range(starting_row, self.rowCount()):
|
for row in range(starting_row, self.rowCount()):
|
||||||
if row not in track_rows or row in played_rows:
|
if row not in track_rows or row in played_rows:
|
||||||
continue
|
continue
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user