Explorar el Código

refactor music_folders_table

olinox hace 4 años
padre
commit
21286928e3
Se han modificado 7 ficheros con 518 adiciones y 1024 borrados
  1. 1 1
      core/repositories.py
  2. 11 3
      ui/qt/main.ui
  3. 5 3
      ui/qt/main_ui.py
  4. 420 966
      ui/qt/rsc_rc.py
  5. 75 0
      ui/qt/widgets/music_folders_table.py
  6. 1 0
      ui/qt/widgets/vlcframe_ui.py
  7. 5 51
      ui/window.py

+ 1 - 1
core/repositories.py

@@ -29,7 +29,7 @@ class Repository:
         return self.query().filter(field == val).all()
 
     def exists(self, field, val):
-        return self.query().filter(field == val).exists()
+        return self.query().filter(field == val).first() is not None
 
     def create(self, model, commit=False):
         self.session.add(model)

+ 11 - 3
ui/qt/main.ui

@@ -107,7 +107,7 @@
         <item>
          <widget class="QStackedWidget" name="stack">
           <property name="currentIndex">
-           <number>1</number>
+           <number>3</number>
           </property>
           <widget class="QWidget" name="page_1">
            <layout class="QHBoxLayout" name="horizontalLayout_2">
@@ -1341,7 +1341,7 @@
                    <bool>false</bool>
                   </attribute>
                   <attribute name="verticalHeaderVisible">
-                   <bool>true</bool>
+                   <bool>false</bool>
                   </attribute>
                   <column>
                    <property name="text">
@@ -1562,7 +1562,7 @@
                </widget>
               </item>
               <item>
-               <widget class="QTableWidget" name="settingsMusicFoldersTable">
+               <widget class="MusicFoldersTable" name="settingsMusicFoldersTable">
                 <property name="minimumSize">
                  <size>
                   <width>0</width>
@@ -1596,6 +1596,9 @@
                 <property name="cornerButtonEnabled">
                  <bool>false</bool>
                 </property>
+                <attribute name="horizontalHeaderVisible">
+                 <bool>false</bool>
+                </attribute>
                 <attribute name="horizontalHeaderCascadingSectionResizes">
                  <bool>true</bool>
                 </attribute>
@@ -1894,6 +1897,11 @@
    <extends>QTableWidget</extends>
    <header location="global">.widgets.tags_table.h</header>
   </customwidget>
+  <customwidget>
+   <class>MusicFoldersTable</class>
+   <extends>QTableWidget</extends>
+   <header location="global">.widgets.music_folders_table.h</header>
+  </customwidget>
  </customwidgets>
  <resources>
   <include location="rsc.qrc"/>

+ 5 - 3
ui/qt/main_ui.py

@@ -515,7 +515,7 @@ class Ui_mainWindow(object):
         item = QtWidgets.QTableWidgetItem()
         self.explorerPlaylist.setHorizontalHeaderItem(4, item)
         self.explorerPlaylist.horizontalHeader().setVisible(False)
-        self.explorerPlaylist.verticalHeader().setVisible(True)
+        self.explorerPlaylist.verticalHeader().setVisible(False)
         self.verticalLayout_12.addWidget(self.explorerPlaylist)
         self.horizontalLayout_22 = QtWidgets.QHBoxLayout()
         self.horizontalLayout_22.setObjectName("horizontalLayout_22")
@@ -597,7 +597,7 @@ class Ui_mainWindow(object):
         self.label_5.setFont(font)
         self.label_5.setObjectName("label_5")
         self.verticalLayout_6.addWidget(self.label_5)
-        self.settingsMusicFoldersTable = QtWidgets.QTableWidget(self.page_5)
+        self.settingsMusicFoldersTable = MusicFoldersTable(self.page_5)
         self.settingsMusicFoldersTable.setMinimumSize(QtCore.QSize(0, 192))
         self.settingsMusicFoldersTable.setMaximumSize(QtCore.QSize(16777215, 192))
         self.settingsMusicFoldersTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
@@ -616,6 +616,7 @@ class Ui_mainWindow(object):
         self.settingsMusicFoldersTable.setHorizontalHeaderItem(1, item)
         item = QtWidgets.QTableWidgetItem()
         self.settingsMusicFoldersTable.setHorizontalHeaderItem(2, item)
+        self.settingsMusicFoldersTable.horizontalHeader().setVisible(False)
         self.settingsMusicFoldersTable.horizontalHeader().setCascadingSectionResizes(True)
         self.settingsMusicFoldersTable.horizontalHeader().setDefaultSectionSize(70)
         self.settingsMusicFoldersTable.horizontalHeader().setStretchLastSection(True)
@@ -713,7 +714,7 @@ class Ui_mainWindow(object):
 
         self.retranslateUi(mainWindow)
         self.menu.setCurrentRow(-1)
-        self.stack.setCurrentIndex(1)
+        self.stack.setCurrentIndex(3)
         self.explorerFilterTags.setCurrentIndex(0)
         self.explorerTrackMetaStack.setCurrentIndex(1)
         QtCore.QMetaObject.connectSlotsByName(mainWindow)
@@ -799,6 +800,7 @@ class Ui_mainWindow(object):
         self.tagsTableAddButton.setText(_translate("mainWindow", "Ajouter"))
 from .widgets.explorertable import ExplorerTable
 from .widgets.frame_notes import FrameNotes
+from .widgets.music_folders_table import MusicFoldersTable
 from .widgets.playlist_table import PlaylistTable
 from .widgets.tags_table import TagsTable
 from .widgets.vlcframe import VlcFrame

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 420 - 966
ui/qt/rsc_rc.py


+ 75 - 0
ui/qt/widgets/music_folders_table.py

@@ -0,0 +1,75 @@
+from path import Path
+
+from PyQt5.QtGui import QIcon
+from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem, QFileDialog, QMessageBox
+
+from core.file_utilities import is_subdir_of
+from core.models import MusicFolder
+from core.repositories import MusicFolderRepository
+
+
+class MusicFoldersTable(QTableWidget):
+    music_folder_statuses = [
+        ('Inconnu', ':/img/rsc/unknown.png'),
+        ('Valide', ':/img/rsc/valid.png'),
+        ('Inaccessible', ':/img/rsc/invalid.png')
+    ]
+
+    def populate(self):
+        self.hideColumn(0)
+
+        music_folders = MusicFolderRepository().get_all()
+        self.clear()
+
+        row = 0
+
+        for music_folder in music_folders:
+            self.insertRow(row)
+            item = QTableWidgetItem()
+            item.setData(0, music_folder.id)
+            self.setItem(row, 0, item)
+
+            status_lbl, status_pic = self.music_folder_statuses[music_folder.status]
+            self.setItem(row, 1, QTableWidgetItem(QIcon(status_pic), status_lbl))
+
+            self.setItem(row, 2, QTableWidgetItem(music_folder.path))
+            row += 1
+
+    def selected_music_folder(self):
+        music_folder_id = self.item(self.currentRow(), 0).data(0)
+        if not music_folder_id:
+            return None
+        return MusicFolderRepository().get_by_id(int(music_folder_id))
+
+    def add_music_folder(self):
+        path = QFileDialog.getExistingDirectory(self, "Sélectionnez le dossier à ajouter")
+        if not path:
+            return
+
+        path = Path(path)
+
+        repo = MusicFolderRepository()
+        if repo.exists("path", str(path)):
+            QMessageBox.warning(self, "Ajout invalide",  "Ce dossier a déjà été ajouté")
+            return
+
+        folder = MusicFolder(path=path)
+        repo.create(folder, True)
+        self.populate()
+
+    def remove_music_folder(self):
+
+        music_folder = self.selected_music_folder()
+        if music_folder is None:
+            return
+
+        if QMessageBox.question(
+            self,
+            "Confirmer",
+            "Êtes-vous sûr(e) de vouloir supprimer ce dossier de la liste des dossiers à analyser?"
+        ) != QMessageBox.Yes:
+            return
+
+        repo = MusicFolderRepository()
+        repo.delete(music_folder, True)
+        self.populate()

+ 1 - 0
ui/qt/widgets/vlcframe_ui.py

@@ -71,6 +71,7 @@ class Ui_VlcFrame(object):
         self.verticalLayout_2.addLayout(self.horizontalLayout)
         self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
         self.horizontalLayout_3.setContentsMargins(12, -1, 12, -1)
+        self.horizontalLayout_3.setSpacing(12)
         self.horizontalLayout_3.setObjectName("horizontalLayout_3")
         self.btnPrevious = QtWidgets.QToolButton(VlcFrame)
         self.btnPrevious.setEnabled(False)

+ 5 - 51
ui/window.py

@@ -74,7 +74,7 @@ class MainWindow(QMainWindow):
         self.ui.explorerTable.trackDoubleClicked.connect(self.play_track)
         self.ui.btnExplorerRefresh.clicked.connect(self.refresh_explorer_tree)
         self.ui.explorerLineSearch.editingFinished.connect(self.explorerFiltersChanged)
-        self.ui.explorerLineSearch.textChanged.connect(self.explorerFiltersChanged) # when search bar is cleared
+        self.ui.explorerLineSearch.textChanged.connect(self.explorerFiltersChanged)  # when search bar is cleared
         self.ui.explorerBtnSearch.clicked.connect(self.explorerFiltersChanged)
 
         self.populate_explorer_filter_tags()
@@ -104,10 +104,9 @@ class MainWindow(QMainWindow):
         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)
-        self.ui.musicFoldersRemoveButton.clicked.connect(self.remove_music_folder)
-        self.populate_music_folders_table()
+        self.ui.musicFoldersAddButton.clicked.connect(self.ui.settingsMusicFoldersTable.add_music_folder)
+        self.ui.musicFoldersRemoveButton.clicked.connect(self.ui.settingsMusicFoldersTable.remove_music_folder)
+        self.ui.settingsMusicFoldersTable.populate()
 
         self.ui.tagsTableAddButton.clicked.connect(self.addTag)
         self.ui.tableTagsRemoveButton.clicked.connect(self.removeTag)
@@ -221,24 +220,6 @@ class MainWindow(QMainWindow):
         for tag in tag_repo.get_all():
             self.ui.explorerFilterTags.addItem(tag.label, tag.id)
 
-    def populate_music_folders_table(self):
-        music_folders = MusicFolderRepository().get_all()
-        self.ui.settingsMusicFoldersTable.setRowCount(0)
-        self.ui.settingsMusicFoldersTable.setRowCount(len(music_folders))
-
-        music_folder_statuses = [
-            ('Inconnu', ':/img/rsc/unknown.png'),
-            ('Valide', ':/img/rsc/valid.png'),
-            ('Inaccessible', ':/img/rsc/invalid.png')
-        ]
-        for i, music_folder in enumerate(music_folders):
-            self.ui.settingsMusicFoldersTable.setItem(i, 0, QTableWidgetItem(music_folder.id))
-
-            status_lbl, status_pic = music_folder_statuses[music_folder.status]
-            self.ui.settingsMusicFoldersTable.setItem(i, 1, QTableWidgetItem(QIcon(status_pic), status_lbl))
-
-            self.ui.settingsMusicFoldersTable.setItem(i, 2, QTableWidgetItem(music_folder.path))
-
     def addTag(self):
         self.ui.settingsTagsTableWidget.add()
 
@@ -265,33 +246,6 @@ class MainWindow(QMainWindow):
         if r:
             self.update_meta()
 
-    def add_music_folder(self):
-        path = QFileDialog.getExistingDirectory(self, "Sélectionnez le dossier à ajouter")
-        if not path:
-            return
-        path = Path(path)
-
-        repo = MusicFolderRepository()
-
-        music_folders = repo.get_all()
-
-        # for folder in music_folders:
-        #     if path == Path(folder.path):
-        #         QMessageBox.warning(self, "Ajout invalide",  "Ce dossier a déjà été ajouté")
-        #         return
-        #
-        #     if is_subdir_of(path, Path(folder.path)):
-        #         QMessageBox.warning(self, "Ajout invalide",  "Ce dossier est contenu dans un dossier existant")
-        #         return
-
-        folder = MusicFolder(path=path)
-        repo.create(folder, True)
-
-        self.populate_music_folders_table()
-
-    def remove_music_folder(self):
-        pass
-
     def createOrEditPlaylist(self):
         r = DlgPlaylist.edit(self)
 
@@ -406,7 +360,7 @@ class MainWindow(QMainWindow):
         self.refresh_explorer_tree(tracks)
 
     def musicFolderStatusChanged(self, music_folder_id):
-        self.populate_music_folders_table()
+        self.ui.settingsMusicFoldersTable.populate()
 
     def currentSettings(self):
         volume = self.ui.vlcFrame.volume

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio