Browse Source

playlist table added (ongoing)

olinox 4 years ago
parent
commit
6bc80f5832
7 changed files with 647 additions and 1046 deletions
  1. 1 0
      core/models.py
  2. 10 2
      core/repositories.py
  3. 21 2
      ui/qt/main.ui
  4. 23 12
      ui/qt/main_ui.py
  5. 548 1018
      ui/qt/rsc_rc.py
  6. 21 9
      ui/qt/widgets/playlist_table.py
  7. 23 3
      ui/window.py

+ 1 - 0
core/models.py

@@ -85,6 +85,7 @@ class SessionTrack(Model):
 
     track_id = Column(Integer)
     session_id = Column(Integer)
+    order = Column(Integer)
 
 
 if __name__ == "__main__":

+ 10 - 2
core/repositories.py

@@ -87,8 +87,9 @@ class TrackRepository(Repository):
     def get_by_session_id(self, session_id):
         return self.session.query(Track)\
             .join(SessionTrack, Track.id == SessionTrack.track_id)\
-            .filter(SessionTrack.session_id == session_id).\
-            all()
+            .filter(SessionTrack.session_id == session_id)\
+            .order_by(SessionTrack.order)\
+            .all()
 
     def get_artists(self):
         return self.session.query(Track).group_by(Track.artist).all()
@@ -103,6 +104,13 @@ class TrackRepository(Repository):
             .group_by(Track.album)\
             .all()
 
+    def add_to_playlist(self, track_id, session_id, order):
+        track_session = SessionTrack()
+        track_session.track_id = track_id
+        track_session.session_id = session_id
+        track_session.order = order
+        self.create(track_session)
+        self.commit()
 
 class SessionFolderRepository(Repository):
     MODEL_CLS = SessionFolder

+ 21 - 2
ui/qt/main.ui

@@ -663,14 +663,14 @@
                    <number>6</number>
                   </property>
                   <item>
-                   <widget class="QLabel" name="label_12">
+                   <widget class="QLabel" name="lblPlaylistName">
                     <property name="text">
                      <string>(pas de séance en cours)</string>
                     </property>
                    </widget>
                   </item>
                   <item>
-                   <widget class="QToolButton" name="btnOpenPlaylist">
+                   <widget class="QToolButton" name="btnSelectPlaylist">
                     <property name="minimumSize">
                      <size>
                       <width>28</width>
@@ -705,6 +705,25 @@
                     <height>0</height>
                    </size>
                   </property>
+                  <attribute name="horizontalHeaderVisible">
+                   <bool>false</bool>
+                  </attribute>
+                  <attribute name="horizontalHeaderStretchLastSection">
+                   <bool>true</bool>
+                  </attribute>
+                  <attribute name="verticalHeaderVisible">
+                   <bool>false</bool>
+                  </attribute>
+                  <column>
+                   <property name="text">
+                    <string>id</string>
+                   </property>
+                  </column>
+                  <column>
+                   <property name="text">
+                    <string>Label</string>
+                   </property>
+                  </column>
                  </widget>
                 </item>
                </layout>

+ 23 - 12
ui/qt/main_ui.py

@@ -300,24 +300,31 @@ class Ui_mainWindow(object):
         self.horizontalLayout_18 = QtWidgets.QHBoxLayout()
         self.horizontalLayout_18.setContentsMargins(6, -1, 6, -1)
         self.horizontalLayout_18.setObjectName("horizontalLayout_18")
-        self.label_12 = QtWidgets.QLabel(self.page_3)
-        self.label_12.setObjectName("label_12")
-        self.horizontalLayout_18.addWidget(self.label_12)
-        self.btnOpenPlaylist = QtWidgets.QToolButton(self.page_3)
-        self.btnOpenPlaylist.setMinimumSize(QtCore.QSize(28, 28))
-        self.btnOpenPlaylist.setMaximumSize(QtCore.QSize(28, 28))
+        self.lblPlaylistName = QtWidgets.QLabel(self.page_3)
+        self.lblPlaylistName.setObjectName("lblPlaylistName")
+        self.horizontalLayout_18.addWidget(self.lblPlaylistName)
+        self.btnSelectPlaylist = QtWidgets.QToolButton(self.page_3)
+        self.btnSelectPlaylist.setMinimumSize(QtCore.QSize(28, 28))
+        self.btnSelectPlaylist.setMaximumSize(QtCore.QSize(28, 28))
         icon7 = QtGui.QIcon()
         icon7.addPixmap(QtGui.QPixmap(":/img/rsc/folder.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.btnOpenPlaylist.setIcon(icon7)
-        self.btnOpenPlaylist.setObjectName("btnOpenPlaylist")
-        self.horizontalLayout_18.addWidget(self.btnOpenPlaylist)
+        self.btnSelectPlaylist.setIcon(icon7)
+        self.btnSelectPlaylist.setObjectName("btnSelectPlaylist")
+        self.horizontalLayout_18.addWidget(self.btnSelectPlaylist)
         self.verticalLayout_12.addLayout(self.horizontalLayout_18)
         self.explorerPlaylist = PlaylistTable(self.page_3)
         self.explorerPlaylist.setEnabled(False)
         self.explorerPlaylist.setMinimumSize(QtCore.QSize(240, 0))
         self.explorerPlaylist.setObjectName("explorerPlaylist")
-        self.explorerPlaylist.setColumnCount(0)
+        self.explorerPlaylist.setColumnCount(2)
         self.explorerPlaylist.setRowCount(0)
+        item = QtWidgets.QTableWidgetItem()
+        self.explorerPlaylist.setHorizontalHeaderItem(0, item)
+        item = QtWidgets.QTableWidgetItem()
+        self.explorerPlaylist.setHorizontalHeaderItem(1, item)
+        self.explorerPlaylist.horizontalHeader().setVisible(False)
+        self.explorerPlaylist.horizontalHeader().setStretchLastSection(True)
+        self.explorerPlaylist.verticalHeader().setVisible(False)
         self.verticalLayout_12.addWidget(self.explorerPlaylist)
         self.horizontalLayout_6.addLayout(self.verticalLayout_12)
         self.horizontalLayout_6.setStretch(0, 1)
@@ -446,8 +453,12 @@ class Ui_mainWindow(object):
         self.explorerAddToPlaylist.setText(_translate("mainWindow", "  Ajouter à la playlist"))
         self.explorerRemoveFromPlaylist.setText(_translate("mainWindow", "  Retirer de la playlist"))
         self.label_9.setText(_translate("mainWindow", "Ma séance: "))
-        self.label_12.setText(_translate("mainWindow", "(pas de séance en cours)"))
-        self.btnOpenPlaylist.setText(_translate("mainWindow", "..."))
+        self.lblPlaylistName.setText(_translate("mainWindow", "(pas de séance en cours)"))
+        self.btnSelectPlaylist.setText(_translate("mainWindow", "..."))
+        item = self.explorerPlaylist.horizontalHeaderItem(0)
+        item.setText(_translate("mainWindow", "id"))
+        item = self.explorerPlaylist.horizontalHeaderItem(1)
+        item.setText(_translate("mainWindow", "Label"))
         self.label.setText(_translate("mainWindow", "Page 4"))
         self.label_5.setText(_translate("mainWindow", "Mes dossiers de musique"))
         item = self.musicFoldersTable.horizontalHeaderItem(0)

File diff suppressed because it is too large
+ 548 - 1018
ui/qt/rsc_rc.py


+ 21 - 9
ui/qt/widgets/playlist_table.py

@@ -1,20 +1,32 @@
-from PyQt5.QtWidgets import QTableWidget
+from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem
 
 from core import db
-from core.repositories import SessionRepository
+from core.repositories import TrackRepository
 
 
 class PlaylistTable(QTableWidget):
     def __init__(self, parent):
         super(QTableWidget, self).__init__(parent)
-
         self.playlist = None
 
-    def load_playlist(self, playlist):
-        session = db.Session()
-        playlist_repo = SessionRepository(session)
+    def populate(self, playlist):
+        track_repo = TrackRepository()
 
         self.clear()
-
-        playlists = playlist_repo.get_all()
-
+        self.hideColumn(0)
+
+        tracks = track_repo.get_by_session_id(playlist.id)
+
+        if not tracks:
+            self.insertRow(0)
+            self.setItem(0, 1, QTableWidgetItem("(la liste est vide, ajoutez y vos morceaux)"))
+            return
+
+        i = 0
+        for track in tracks:
+            self.insertRow(i)
+            item = QTableWidgetItem()
+            item.setData(0, track.id)
+            self.setItem(i, 0, item)
+            self.setItem(i, 1, QTableWidgetItem(track.title))
+            i += 1

+ 23 - 3
ui/window.py

@@ -65,7 +65,9 @@ class MainWindow(QMainWindow):
         self.ui.explorerTrackMetaStack.setCurrentIndex(0)
         self.ui.explorerTrackPlay.clicked.connect(self.explorerPlaySelected)
 
-        self.ui.btnOpenPlaylist.clicked.connect(self.openPlaylist)
+        self.ui.btnSelectPlaylist.clicked.connect(self.selectPlaylist)
+
+        self.ui.explorerAddToPlaylist.clicked.connect(self.add_to_playlist)
 
         # self.ui.explorerCreatePlaylist.clicked.connect(self.createOrEditPlaylist)
 
@@ -160,11 +162,29 @@ class MainWindow(QMainWindow):
     def createOrEditPlaylist(self):
         r = DlgPlaylist.edit(self)
 
-    def openPlaylist(self):
+    def selectPlaylist(self):
         playlist = DlgSelectPlaylist.select(self)
         if playlist:
-            print(playlist)
+            self.loadPlaylist(playlist)
+
+    def loadPlaylist(self, playlist):
+        self.ui.explorerPlaylist.setEnabled(True)
+        self.ui.lblPlaylistName.setText(playlist.name)
+        self.ui.explorerPlaylist.populate(playlist)
 
+    def add_to_playlist(self):
+        track = self.ui.explorerTable.selected_track()
+        if track is None:
+            return
+        playlist = self.ui.explorerTable.selected_track()
+        if track is None:
+            return
+        track_repo = TrackRepository()
+        track_repo.add_to_playlist(
+            track.id,
+            None,
+            None
+        )
 
     def run(self):
         pass

Some files were not shown because too many files changed in this diff