소스 검색

enable sorting in playlist

Olivier Massot 4 년 전
부모
커밋
b0d4024b68
6개의 변경된 파일458개의 추가작업 그리고 849개의 파일을 삭제
  1. 31 0
      core/repositories.py
  2. 1 1
      ui/qt/main.ui
  3. 7 7
      ui/qt/main_ui.py
  4. 388 839
      ui/qt/rsc_rc.py
  5. 25 0
      ui/qt/widgets/playlist_table.py
  6. 6 2
      ui/window.py

+ 31 - 0
core/repositories.py

@@ -130,6 +130,37 @@ class SessionTrackRepository(Repository):
             .order_by(SessionTrack.order)\
             .all()
 
+    def set_session_track_order(self, session_track, new_order, commit=False):
+        if new_order == session_track.order:
+            return
+
+        session_tracks = self.session.query(SessionTrack)\
+            .filter(SessionTrack.session_id == session_track.session_id)\
+            .order_by(SessionTrack.order)\
+            .all()
+
+        max_order = max(st.order for st in session_tracks)
+
+        new_order = max([new_order, 1])
+        new_order = min([new_order, max_order])
+
+        for other in session_tracks:
+            if new_order > session_track.order and new_order >= other.order > session_track.order:
+                other.order -= 1
+            elif new_order < session_track.order and new_order <= other.order < session_track.order:
+                other.order += 1
+
+        if new_order < 1:
+            new_order = 1
+        elif new_order > max_order:
+            new_order = max_order
+
+        session_track.order = new_order
+
+        if commit:
+            self.commit()
+
+
 class SessionFolderRepository(Repository):
     MODEL_CLS = SessionFolder
 

+ 1 - 1
ui/qt/main.ui

@@ -1394,7 +1394,7 @@
                    </widget>
                   </item>
                   <item>
-                   <widget class="QToolButton" name="btnPlaylistMoveToBelow">
+                   <widget class="QToolButton" name="btnPlaylistMoveDown">
                     <property name="minimumSize">
                      <size>
                       <width>28</width>

+ 7 - 7
ui/qt/main_ui.py

@@ -523,14 +523,14 @@ class Ui_mainWindow(object):
         self.btnPlaylistMoveUp.setIcon(icon8)
         self.btnPlaylistMoveUp.setObjectName("btnPlaylistMoveUp")
         self.horizontalLayout_22.addWidget(self.btnPlaylistMoveUp)
-        self.btnPlaylistMoveToBelow = QtWidgets.QToolButton(self.page_3)
-        self.btnPlaylistMoveToBelow.setMinimumSize(QtCore.QSize(28, 28))
-        self.btnPlaylistMoveToBelow.setMaximumSize(QtCore.QSize(28, 288))
+        self.btnPlaylistMoveDown = QtWidgets.QToolButton(self.page_3)
+        self.btnPlaylistMoveDown.setMinimumSize(QtCore.QSize(28, 28))
+        self.btnPlaylistMoveDown.setMaximumSize(QtCore.QSize(28, 288))
         icon9 = QtGui.QIcon()
         icon9.addPixmap(QtGui.QPixmap(":/img/rsc/arrow-down.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.btnPlaylistMoveToBelow.setIcon(icon9)
-        self.btnPlaylistMoveToBelow.setObjectName("btnPlaylistMoveToBelow")
-        self.horizontalLayout_22.addWidget(self.btnPlaylistMoveToBelow)
+        self.btnPlaylistMoveDown.setIcon(icon9)
+        self.btnPlaylistMoveDown.setObjectName("btnPlaylistMoveDown")
+        self.horizontalLayout_22.addWidget(self.btnPlaylistMoveDown)
         self.btnPlaylistMoveToBottom = QtWidgets.QToolButton(self.page_3)
         self.btnPlaylistMoveToBottom.setMinimumSize(QtCore.QSize(28, 28))
         self.btnPlaylistMoveToBottom.setMaximumSize(QtCore.QSize(28, 28))
@@ -755,7 +755,7 @@ class Ui_mainWindow(object):
         item.setText(_translate("mainWindow", "Label"))
         self.btnPlaylistMoveToTop.setText(_translate("mainWindow", "..."))
         self.btnPlaylistMoveUp.setText(_translate("mainWindow", "..."))
-        self.btnPlaylistMoveToBelow.setText(_translate("mainWindow", "..."))
+        self.btnPlaylistMoveDown.setText(_translate("mainWindow", "..."))
         self.btnPlaylistMoveToBottom.setText(_translate("mainWindow", "..."))
         self.btnPlaylistRemove.setText(_translate("mainWindow", "..."))
         self.label.setText(_translate("mainWindow", "Page 4"))

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 388 - 839
ui/qt/rsc_rc.py


+ 25 - 0
ui/qt/widgets/playlist_table.py

@@ -88,3 +88,28 @@ class PlaylistTable(DragDropTableWidget):
             else:
                 icon = QIcon()
             self.item(i, 2).setIcon(icon)
+
+    def update_session_track_order(self, session_track, new_order):
+        session_track_repo = SessionTrackRepository()
+        session_track_repo.set_session_track_order(session_track, new_order, True)
+        self.populate()
+
+    def move_selected_up(self, track):
+        session_track = self.selected_session_track()
+        if session_track:
+            self.update_session_track_order(session_track, session_track.order - 1)
+
+    def move_selected_down(self, track):
+        session_track = self.selected_session_track()
+        if session_track:
+            self.update_session_track_order(session_track, session_track.order + 1)
+
+    def move_selected_to_top(self, track):
+        session_track = self.selected_session_track()
+        if session_track:
+            self.update_session_track_order(session_track, 0)
+
+    def move_selected_to_bottom(self, track):
+        session_track = self.selected_session_track()
+        if session_track:
+            self.update_session_track_order(session_track, 99999999)

+ 6 - 2
ui/window.py

@@ -93,11 +93,15 @@ class MainWindow(QMainWindow):
 
         self.ui.explorerAddToPlaylist.clicked.connect(self.add_to_playlist)
 
-        self.ui.btnPlaylistRemove.clicked.connect(self.remove_from_playlist)
-
         self.ui.explorerPlaylist.trackSelected.connect(self.newTrackSelected)
         self.ui.explorerPlaylist.trackDoubleClicked.connect(self.play_playlist)
 
+        self.ui.btnPlaylistMoveToTop.clicked.connect(self.ui.explorerPlaylist.move_selected_to_top)
+        self.ui.btnPlaylistMoveUp.clicked.connect(self.ui.explorerPlaylist.move_selected_up)
+        self.ui.btnPlaylistMoveDown.clicked.connect(self.ui.explorerPlaylist.move_selected_down)
+        self.ui.btnPlaylistMoveToBottom.clicked.connect(self.ui.explorerPlaylist.move_selected_to_bottom)
+        self.ui.btnPlaylistRemove.clicked.connect(self.remove_from_playlist)
+
         # Page 5 - settings
         self.ui.settingsMusicFoldersTable.setColumnHidden(0, 1)
         self.ui.musicFoldersAddButton.clicked.connect(self.add_music_folder)

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.