olinox пре 4 година
родитељ
комит
79747b83e6

+ 4 - 3
core/indexer.py

@@ -162,10 +162,11 @@ class Indexer(Thread):
         title = vlc_media.get_meta(vlc.Meta.Title)
         if not title or title == '(null)' or title == filename.name:
             title = filename.stripext().name
-        track.title = title
+        track.title = title.strip()
         track.format = filename.ext
-        track.artist = vlc_media.get_meta(vlc.Meta.AlbumArtist) or vlc_media.get_meta(vlc.Meta.Artist)
-        track.album = vlc_media.get_meta(vlc.Meta.Album)
+        track.artist = (vlc_media.get_meta(vlc.Meta.AlbumArtist) or
+                        vlc_media.get_meta(vlc.Meta.Artist)).strip()
+        track.album = vlc_media.get_meta(vlc.Meta.Album).strip()
         track.track_num = vlc_media.get_meta(vlc.Meta.TrackNumber)
         track.duration = vlc_media.get_duration() // 1000
         track.note = ""

+ 3 - 10
notes

@@ -4,14 +4,7 @@ Bugs:
 
 * voir le bug avec is_subdir_of() lorsque c'est une rép réseau
 * windows: régler le bug vlc 'mmdevice audio output error: cannot initialize COM (error 0x80010106)'
-* s'assurer que les pistes
-* bug graphique: la liste de tracks de l'onglet 'ma séance' est noir ou bugué lorsqu'une séance vide est chargée
-* édition des metas d'une piste: "'str' object has no attribute abspath"
-* bug graphique slt: la dernière piste d'une session ne disparait pas même après avoir été retirée d'une séance
-* trim les noms d'artiste et d'albums avant de les regrouper dans l'arbre
-* liste déroulante "Filtrer par étiquettes" ne se met pas à jour à l'ajout d'un tag
-* le bouton 'rafraichir' de l'explorer de pistes ne réinitialise pas les filtres
-* changement de l'ordre des pistes de la séances: la listview de l'onglet ma session ne se met pas à jour
+
 
 Todos:
 
@@ -22,13 +15,13 @@ Todos:
 * afficher le nom de fichier de la piste sélectionnée quelque part
 * liste des tags: ajouter un raccourci vers la liste des tags si cette liste est vide
 * Création de tag: ajouter une inputbox avant l'ajout pour le nom
-* lors d'une recherche par tag, déplier tous les artistes / albums
 * le bouton 'ajouter à la playlist' est qd même pas tellement évident à trouver
 * le hash de deux pistes est différents si les metas sont différentes, faudrait trouver un autre système; contrôler piste + artiste + durée en plus?
+* ajouter un bouton pour forcer la réindexation
+* Mettre le nom du fichier dans le cas des `[\s\d\]+Piste[\s\d\]+`
 
 Fonctionnalités
 
-
 * implémenter les boutons 'éditer', 'suppr', 'dupliquer' et autres de la boite de dialogue 'sélectionner la séance'
 * Imprimer la séance
 * classer les séances par dossier

+ 1 - 1
ui/qt/dlg_meta_editor.py

@@ -28,7 +28,7 @@ class DlgMetaEditor(QtWidgets.QDialog):
 
         self.ui.lineTrackNum.setValidator(QIntValidator())
 
-        self.ui.lblPath.setText(self.track.path.abspath())
+        self.ui.lblPath.setText(Path(self.track.path).abspath())
 
         if self.track.status != Track.STATUS_UNAVAILABLE:
             self.ui.btnOpenTrackFolder.clicked.connect(self.openTrackFolder)

+ 1 - 1
ui/qt/dlg_meta_editor_ui.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'dlg_meta_editor.ui'
 #
-# Created by: PyQt5 UI code generator 5.15.2
+# Created by: PyQt5 UI code generator 5.15.4
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic5 is
 # run again.  Do not edit this file unless you know what you are doing.

+ 1 - 1
ui/qt/dlg_playlist_ui.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'dlg_playlist.ui'
 #
-# Created by: PyQt5 UI code generator 5.15.2
+# Created by: PyQt5 UI code generator 5.15.4
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic5 is
 # run again.  Do not edit this file unless you know what you are doing.

+ 1 - 1
ui/qt/dlg_select_playlist_ui.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'dlg_select_playlist.ui'
 #
-# Created by: PyQt5 UI code generator 5.15.2
+# Created by: PyQt5 UI code generator 5.15.4
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic5 is
 # run again.  Do not edit this file unless you know what you are doing.

+ 1 - 1
ui/qt/dlg_tag_editor_ui.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'dlg_tag_editor.ui'
 #
-# Created by: PyQt5 UI code generator 5.15.2
+# Created by: PyQt5 UI code generator 5.15.4
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic5 is
 # run again.  Do not edit this file unless you know what you are doing.

+ 1 - 1
ui/qt/dlg_tag_ui.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'dlg_tag.ui'
 #
-# Created by: PyQt5 UI code generator 5.15.2
+# Created by: PyQt5 UI code generator 5.15.4
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic5 is
 # run again.  Do not edit this file unless you know what you are doing.

+ 61 - 29
ui/qt/main.ui

@@ -107,7 +107,7 @@
         <item>
          <widget class="QStackedWidget" name="stack">
           <property name="currentIndex">
-           <number>3</number>
+           <number>1</number>
           </property>
           <widget class="QWidget" name="page_1">
            <layout class="QHBoxLayout" name="horizontalLayout_2">
@@ -477,7 +477,7 @@
                </layout>
               </item>
               <item>
-               <layout class="QVBoxLayout" name="verticalLayout_5" stretch="0,0,0">
+               <layout class="QVBoxLayout" name="verticalLayout_5" stretch="0,0">
                 <property name="leftMargin">
                  <number>10</number>
                 </property>
@@ -1007,6 +1007,64 @@
                         </layout>
                        </widget>
                       </item>
+                      <item>
+                       <spacer name="verticalSpacer_2">
+                        <property name="orientation">
+                         <enum>Qt::Vertical</enum>
+                        </property>
+                        <property name="sizeType">
+                         <enum>QSizePolicy::Fixed</enum>
+                        </property>
+                        <property name="sizeHint" stdset="0">
+                         <size>
+                          <width>20</width>
+                          <height>6</height>
+                         </size>
+                        </property>
+                       </spacer>
+                      </item>
+                      <item>
+                       <widget class="QPushButton" name="explorerAddToPlaylist">
+                        <property name="enabled">
+                         <bool>false</bool>
+                        </property>
+                        <property name="minimumSize">
+                         <size>
+                          <width>220</width>
+                          <height>26</height>
+                         </size>
+                        </property>
+                        <property name="maximumSize">
+                         <size>
+                          <width>16777215</width>
+                          <height>38</height>
+                         </size>
+                        </property>
+                        <property name="text">
+                         <string>  Ajouter à la playlist</string>
+                        </property>
+                        <property name="icon">
+                         <iconset resource="rsc.qrc">
+                          <normaloff>:/img/rsc/redo.png</normaloff>:/img/rsc/redo.png</iconset>
+                        </property>
+                       </widget>
+                      </item>
+                      <item>
+                       <spacer name="verticalSpacer_3">
+                        <property name="orientation">
+                         <enum>Qt::Vertical</enum>
+                        </property>
+                        <property name="sizeType">
+                         <enum>QSizePolicy::Fixed</enum>
+                        </property>
+                        <property name="sizeHint" stdset="0">
+                         <size>
+                          <width>20</width>
+                          <height>6</height>
+                         </size>
+                        </property>
+                       </spacer>
+                      </item>
                       <item>
                        <layout class="QHBoxLayout" name="horizontalLayout_19">
                         <item>
@@ -1185,7 +1243,7 @@
                   <property name="minimumSize">
                    <size>
                     <width>220</width>
-                    <height>38</height>
+                    <height>26</height>
                    </size>
                   </property>
                   <property name="maximumSize">
@@ -1209,32 +1267,6 @@
                   </property>
                  </widget>
                 </item>
-                <item>
-                 <widget class="QPushButton" name="explorerAddToPlaylist">
-                  <property name="enabled">
-                   <bool>false</bool>
-                  </property>
-                  <property name="minimumSize">
-                   <size>
-                    <width>220</width>
-                    <height>38</height>
-                   </size>
-                  </property>
-                  <property name="maximumSize">
-                   <size>
-                    <width>16777215</width>
-                    <height>38</height>
-                   </size>
-                  </property>
-                  <property name="text">
-                   <string>  Ajouter à la playlist</string>
-                  </property>
-                  <property name="icon">
-                   <iconset resource="rsc.qrc">
-                    <normaloff>:/img/rsc/plus.png</normaloff>:/img/rsc/plus.png</iconset>
-                  </property>
-                 </widget>
-                </item>
                </layout>
               </item>
               <item>

+ 32 - 26
ui/qt/main_ui.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'main.ui'
 #
-# Created by: PyQt5 UI code generator 5.15.2
+# Created by: PyQt5 UI code generator 5.15.4
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic5 is
 # run again.  Do not edit this file unless you know what you are doing.
@@ -380,6 +380,19 @@ class Ui_mainWindow(object):
         self.hLayoutMissingFileWarning.addItem(spacerItem3)
         self.horizontalLayout_3.addLayout(self.hLayoutMissingFileWarning)
         self.verticalLayout_9.addWidget(self.frameMissingFileWarning)
+        spacerItem4 = QtWidgets.QSpacerItem(20, 6, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
+        self.verticalLayout_9.addItem(spacerItem4)
+        self.explorerAddToPlaylist = QtWidgets.QPushButton(self.page_6)
+        self.explorerAddToPlaylist.setEnabled(False)
+        self.explorerAddToPlaylist.setMinimumSize(QtCore.QSize(220, 26))
+        self.explorerAddToPlaylist.setMaximumSize(QtCore.QSize(16777215, 38))
+        icon5 = QtGui.QIcon()
+        icon5.addPixmap(QtGui.QPixmap(":/img/rsc/redo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.explorerAddToPlaylist.setIcon(icon5)
+        self.explorerAddToPlaylist.setObjectName("explorerAddToPlaylist")
+        self.verticalLayout_9.addWidget(self.explorerAddToPlaylist)
+        spacerItem5 = QtWidgets.QSpacerItem(20, 6, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
+        self.verticalLayout_9.addItem(spacerItem5)
         self.horizontalLayout_19 = QtWidgets.QHBoxLayout()
         self.horizontalLayout_19.setObjectName("horizontalLayout_19")
         self.label_12 = QtWidgets.QLabel(self.page_6)
@@ -446,23 +459,14 @@ class Ui_mainWindow(object):
         self.verticalLayout_5.addWidget(self.explorerTrackMetaStack)
         self.btnPlaySelectedTrack = QtWidgets.QPushButton(self.page_3)
         self.btnPlaySelectedTrack.setEnabled(False)
-        self.btnPlaySelectedTrack.setMinimumSize(QtCore.QSize(220, 38))
+        self.btnPlaySelectedTrack.setMinimumSize(QtCore.QSize(220, 26))
         self.btnPlaySelectedTrack.setMaximumSize(QtCore.QSize(16777215, 38))
-        icon5 = QtGui.QIcon()
-        icon5.addPixmap(QtGui.QPixmap(":/img/rsc/play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.btnPlaySelectedTrack.setIcon(icon5)
+        icon6 = QtGui.QIcon()
+        icon6.addPixmap(QtGui.QPixmap(":/img/rsc/play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnPlaySelectedTrack.setIcon(icon6)
         self.btnPlaySelectedTrack.setIconSize(QtCore.QSize(12, 12))
         self.btnPlaySelectedTrack.setObjectName("btnPlaySelectedTrack")
         self.verticalLayout_5.addWidget(self.btnPlaySelectedTrack)
-        self.explorerAddToPlaylist = QtWidgets.QPushButton(self.page_3)
-        self.explorerAddToPlaylist.setEnabled(False)
-        self.explorerAddToPlaylist.setMinimumSize(QtCore.QSize(220, 38))
-        self.explorerAddToPlaylist.setMaximumSize(QtCore.QSize(16777215, 38))
-        icon6 = QtGui.QIcon()
-        icon6.addPixmap(QtGui.QPixmap(":/img/rsc/plus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.explorerAddToPlaylist.setIcon(icon6)
-        self.explorerAddToPlaylist.setObjectName("explorerAddToPlaylist")
-        self.verticalLayout_5.addWidget(self.explorerAddToPlaylist)
         self.horizontalLayout_6.addLayout(self.verticalLayout_5)
         self.verticalLayout_12 = QtWidgets.QVBoxLayout()
         self.verticalLayout_12.setObjectName("verticalLayout_12")
@@ -551,8 +555,8 @@ class Ui_mainWindow(object):
         self.btnPlaylistMoveToBottom.setIcon(icon10)
         self.btnPlaylistMoveToBottom.setObjectName("btnPlaylistMoveToBottom")
         self.horizontalLayout_22.addWidget(self.btnPlaylistMoveToBottom)
-        spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
-        self.horizontalLayout_22.addItem(spacerItem4)
+        spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout_22.addItem(spacerItem6)
         self.btnPlaylistRemove = QtWidgets.QToolButton(self.page_3)
         self.btnPlaylistRemove.setMinimumSize(QtCore.QSize(28, 28))
         self.btnPlaylistRemove.setMaximumSize(QtCore.QSize(28, 28))
@@ -632,11 +636,13 @@ class Ui_mainWindow(object):
         self.musicFoldersRemoveButton.setIcon(icon12)
         self.musicFoldersRemoveButton.setObjectName("musicFoldersRemoveButton")
         self.horizontalLayout_7.addWidget(self.musicFoldersRemoveButton)
-        spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
-        self.horizontalLayout_7.addItem(spacerItem5)
+        spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout_7.addItem(spacerItem7)
         self.musicFoldersAddButton = QtWidgets.QPushButton(self.page_5)
         self.musicFoldersAddButton.setMinimumSize(QtCore.QSize(128, 32))
-        self.musicFoldersAddButton.setIcon(icon6)
+        icon13 = QtGui.QIcon()
+        icon13.addPixmap(QtGui.QPixmap(":/img/rsc/plus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.musicFoldersAddButton.setIcon(icon13)
         self.musicFoldersAddButton.setObjectName("musicFoldersAddButton")
         self.horizontalLayout_7.addWidget(self.musicFoldersAddButton)
         self.verticalLayout_6.addLayout(self.horizontalLayout_7)
@@ -683,17 +689,17 @@ class Ui_mainWindow(object):
         self.tableTagsRemoveButton.setIcon(icon12)
         self.tableTagsRemoveButton.setObjectName("tableTagsRemoveButton")
         self.horizontalLayout_20.addWidget(self.tableTagsRemoveButton)
-        spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
-        self.horizontalLayout_20.addItem(spacerItem6)
+        spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout_20.addItem(spacerItem8)
         self.tagsTableAddButton = QtWidgets.QPushButton(self.page_5)
         self.tagsTableAddButton.setMinimumSize(QtCore.QSize(128, 32))
         self.tagsTableAddButton.setMaximumSize(QtCore.QSize(128, 32))
-        self.tagsTableAddButton.setIcon(icon6)
+        self.tagsTableAddButton.setIcon(icon13)
         self.tagsTableAddButton.setObjectName("tagsTableAddButton")
         self.horizontalLayout_20.addWidget(self.tagsTableAddButton)
         self.verticalLayout_6.addLayout(self.horizontalLayout_20)
-        spacerItem7 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
-        self.verticalLayout_6.addItem(spacerItem7)
+        spacerItem9 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+        self.verticalLayout_6.addItem(spacerItem9)
         self.horizontalLayout_5.addLayout(self.verticalLayout_6)
         self.stack.addWidget(self.page_5)
         self.verticalLayout_7.addWidget(self.stack)
@@ -714,7 +720,7 @@ class Ui_mainWindow(object):
 
         self.retranslateUi(mainWindow)
         self.menu.setCurrentRow(-1)
-        self.stack.setCurrentIndex(3)
+        self.stack.setCurrentIndex(1)
         self.explorerFilterTags.setCurrentIndex(0)
         self.explorerTrackMetaStack.setCurrentIndex(1)
         QtCore.QMetaObject.connectSlotsByName(mainWindow)
@@ -749,6 +755,7 @@ class Ui_mainWindow(object):
         self.label_7.setText(_translate("mainWindow", "Album"))
         self.label_8.setText(_translate("mainWindow", "N°"))
         self.label_14.setText(_translate("mainWindow", "Fichier introuvable"))
+        self.explorerAddToPlaylist.setText(_translate("mainWindow", "  Ajouter à la playlist"))
         self.label_12.setText(_translate("mainWindow", "Etiquettes"))
         self.lineSearchTags.setPlaceholderText(_translate("mainWindow", "Rechercher..."))
         item = self.explorerTrackTagsTable.horizontalHeaderItem(0)
@@ -760,7 +767,6 @@ class Ui_mainWindow(object):
         self.label_10.setText(_translate("mainWindow", "Notes"))
         self.explorerTrackNotepad.setPlaceholderText(_translate("mainWindow", "Mes notes sur ce morceau..."))
         self.btnPlaySelectedTrack.setText(_translate("mainWindow", "  Lire le morceau sélectionné"))
-        self.explorerAddToPlaylist.setText(_translate("mainWindow", "  Ajouter à la playlist"))
         self.label_9.setText(_translate("mainWindow", "Ma séance: "))
         self.explorerLblPlaylistTitle.setText(_translate("mainWindow", "(pas de séance en cours)"))
         self.btnSelectPlaylist.setText(_translate("mainWindow", "..."))

+ 57 - 56
ui/qt/rsc.qrc

@@ -1,58 +1,59 @@
 <RCC>
-  <qresource prefix="/img">
-    <file>rsc/trash.png</file>
-    <file>rsc/double-below-arrow.png</file>
-    <file>rsc/double-up-arrow.png</file>
-    <file>rsc/arrow-down.png</file>
-    <file>rsc/arrow-up.png</file>
-    <file>rsc/unknown.png</file>
-    <file>rsc/valid.png</file>
-    <file>rsc/invalid.png</file>
-    <file>rsc/audio-file.png</file>
-    <file>rsc/filter.png</file>
-    <file>rsc/search.png</file>
-    <file>rsc/undo-arrow.png</file>
-    <file>rsc/redo-arrow.png</file>
-    <file>rsc/underline.png</file>
-    <file>rsc/italic-text.png</file>
-    <file>rsc/bold.png</file>
-    <file>rsc/repeat.png</file>
-    <file>rsc/shuffle.png</file>
-    <file>rsc/rewind.png</file>
-    <file>rsc/fast-forward.png</file>
-    <file>rsc/duplicate.png</file>
-    <file>rsc/create_folder.png</file>
-    <file>rsc/double-left-arrows-symbol.png</file>
-    <file>rsc/double-right-arrows-symbol.png</file>
-    <file>rsc/sound-frecuency.png</file>
-    <file>rsc/playlist.png</file>
-    <file>rsc/mute.png</file>
-    <file>rsc/volume.png</file>
-    <file>rsc/pause.png</file>
-    <file>rsc/calendar.png</file>
-    <file>rsc/minus.png</file>
-    <file>rsc/map.png</file>
-    <file>rsc/settings.png</file>
-    <file>rsc/writing-tool.png</file>
-    <file>rsc/dance.png</file>
-    <file>rsc/delete.png</file>
-    <file>rsc/email.png</file>
-    <file>rsc/folder.png</file>
-    <file>rsc/hourglass.png</file>
-    <file>rsc/artist.png</file>
-    <file>rsc/album.png</file>
-    <file>rsc/music.png</file>
-    <file>rsc/next.png</file>
-    <file>rsc/pdf.png</file>
-    <file>rsc/plus.png</file>
-    <file>rsc/previous.png</file>
-    <file>rsc/question.png</file>
-    <file>rsc/refresh-page-option.png</file>
-    <file>rsc/remove.png</file>
-    <file>rsc/save.png</file>
-    <file>rsc/edit.png</file>
-    <file>rsc/swap.png</file>
-    <file>rsc/constellations.svg</file>
-    <file>rsc/play.png</file>
-  </qresource>
+    <qresource prefix="/img">
+        <file>rsc/trash.png</file>
+        <file>rsc/double-below-arrow.png</file>
+        <file>rsc/double-up-arrow.png</file>
+        <file>rsc/arrow-down.png</file>
+        <file>rsc/arrow-up.png</file>
+        <file>rsc/unknown.png</file>
+        <file>rsc/valid.png</file>
+        <file>rsc/invalid.png</file>
+        <file>rsc/audio-file.png</file>
+        <file>rsc/filter.png</file>
+        <file>rsc/search.png</file>
+        <file>rsc/undo-arrow.png</file>
+        <file>rsc/redo-arrow.png</file>
+        <file>rsc/underline.png</file>
+        <file>rsc/italic-text.png</file>
+        <file>rsc/bold.png</file>
+        <file>rsc/repeat.png</file>
+        <file>rsc/shuffle.png</file>
+        <file>rsc/rewind.png</file>
+        <file>rsc/fast-forward.png</file>
+        <file>rsc/duplicate.png</file>
+        <file>rsc/create_folder.png</file>
+        <file>rsc/double-left-arrows-symbol.png</file>
+        <file>rsc/double-right-arrows-symbol.png</file>
+        <file>rsc/sound-frecuency.png</file>
+        <file>rsc/playlist.png</file>
+        <file>rsc/mute.png</file>
+        <file>rsc/volume.png</file>
+        <file>rsc/pause.png</file>
+        <file>rsc/calendar.png</file>
+        <file>rsc/minus.png</file>
+        <file>rsc/map.png</file>
+        <file>rsc/settings.png</file>
+        <file>rsc/writing-tool.png</file>
+        <file>rsc/dance.png</file>
+        <file>rsc/delete.png</file>
+        <file>rsc/email.png</file>
+        <file>rsc/folder.png</file>
+        <file>rsc/hourglass.png</file>
+        <file>rsc/artist.png</file>
+        <file>rsc/album.png</file>
+        <file>rsc/music.png</file>
+        <file>rsc/next.png</file>
+        <file>rsc/pdf.png</file>
+        <file>rsc/plus.png</file>
+        <file>rsc/previous.png</file>
+        <file>rsc/question.png</file>
+        <file>rsc/refresh-page-option.png</file>
+        <file>rsc/remove.png</file>
+        <file>rsc/save.png</file>
+        <file>rsc/edit.png</file>
+        <file>rsc/swap.png</file>
+        <file>rsc/constellations.svg</file>
+        <file>rsc/play.png</file>
+        <file>rsc/redo.png</file>
+    </qresource>
 </RCC>

BIN
ui/qt/rsc/redo.png


Разлика између датотеке није приказан због своје велике величине
+ 771 - 1275
ui/qt/rsc_rc.py


+ 5 - 5
ui/qt/widgets/explorertable.py

@@ -102,14 +102,14 @@ class ExplorerTable(QTreeWidget):
             track = TrackRepository().get_by_id(int(track_id))
             self.trackDoubleClicked.emit(track)
 
-    def filterBy(self, tag_id=None, searchText=""):
+    def filterBy(self, tag_id=None, search_text=""):
 
         track_ids = []
         if tag_id:
             track_repo = TrackRepository()
             track_ids = [t.id for t in track_repo.get_by_tag_id(tag_id)]
 
-        searchText = norm_search(searchText)
+        search_text = norm_search(search_text)
 
         self.setUpdatesEnabled(False)
 
@@ -135,7 +135,7 @@ class ExplorerTable(QTreeWidget):
                     keys.append(grand_parent_item.text(1))
 
                 s = norm_search(" ".join(keys))
-                hide = (searchText and searchText not in s) \
+                hide = (search_text and search_text not in s) \
                        or (tag_id and item.data(2, 0) not in track_ids)
 
                 track_item.setHidden(hide)
@@ -162,9 +162,9 @@ class ExplorerTable(QTreeWidget):
             else:
                 break
 
-        if searchText:
+        if search_text or tag_id:
             self.expandAll()
         else:
             self.collapseAll()
 
-        self.setUpdatesEnabled(True)
+        self.setUpdatesEnabled(True)

+ 1 - 1
ui/qt/widgets/frame_notes_ui.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'widgets/frame_notes.ui'
 #
-# Created by: PyQt5 UI code generator 5.15.2
+# Created by: PyQt5 UI code generator 5.15.4
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic5 is
 # run again.  Do not edit this file unless you know what you are doing.

+ 6 - 3
ui/qt/widgets/playlist_table.py

@@ -44,12 +44,12 @@ class PlaylistTable(SQTableWidget):
         track_repo = TrackRepository()
 
         session_tracks = session_track_repo.get_by_session_id(self.playlist.id)
-
         if not session_tracks:
+            self.clear()
+            self.setUpdatesEnabled(True)
             return
 
         loaded = {self.item(row, 0).data(0): row for row in self.rows()}
-
         for session_track_id, row in loaded.items():
             if session_track_id not in [st.id for st in session_tracks]:
                 self.removeRow(row)
@@ -107,7 +107,10 @@ class PlaylistTable(SQTableWidget):
             self.trackDoubleClicked.emit(track)
 
     def selected_session_track(self):
-        session_track_id = self.item(self.currentRow(), 0).data(0)
+        item = self.item(self.currentRow(), 0)
+        if not item:
+            return None
+        session_track_id = item.data(0)
         if not session_track_id:
             return None
         return SessionTrackRepository().get_by_id(int(session_track_id))

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

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'widgets/vlcframe.ui'
 #
-# Created by: PyQt5 UI code generator 5.15.2
+# Created by: PyQt5 UI code generator 5.15.4
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic5 is
 # run again.  Do not edit this file unless you know what you are doing.

+ 16 - 5
ui/window.py

@@ -5,15 +5,14 @@
     @author:[author], [year]
 """
 from PyQt5 import QtWidgets
-from PyQt5.QtCore import QSize
 from path import Path
 
 from PyQt5.QtGui import QIcon
-from PyQt5.QtWidgets import QMainWindow, QListWidgetItem, QTableWidgetItem, QFileDialog, QMessageBox
+from PyQt5.QtWidgets import QMainWindow, QListWidgetItem, QMessageBox
 
 from core.logging_ import Logger
-from core.models import MusicFolder, TrackTag, Track
-from core.repositories import MusicFolderRepository, TrackRepository, SessionTrackRepository, SessionRepository, \
+from core.models import TrackTag, Track
+from core.repositories import TrackRepository, SessionTrackRepository, SessionRepository, \
     TrackTagRepository, TagRepository
 from ui.qt.dlg_meta_editor import DlgMetaEditor
 from ui.qt.dlg_playlist import DlgPlaylist
@@ -78,7 +77,6 @@ class MainWindow(QMainWindow):
         self.ui.explorerBtnSearch.clicked.connect(self.explorerFiltersChanged)
 
         self.populate_explorer_filter_tags()
-        self.ui.explorerFilterTags.currentIndexChanged.connect(self.explorerFiltersChanged)
 
         self.ui.explorerTrackEdit.clicked.connect(self.showMetaEditor)
 
@@ -101,6 +99,12 @@ class MainWindow(QMainWindow):
         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.btnPlaylistMoveToTop.clicked.connect(self.ui.sessionPlaylist.update)
+        self.ui.btnPlaylistMoveUp.clicked.connect(self.ui.sessionPlaylist.update)
+        self.ui.btnPlaylistMoveDown.clicked.connect(self.ui.sessionPlaylist.update)
+        self.ui.btnPlaylistMoveToBottom.clicked.connect(self.ui.sessionPlaylist.update)
+
         self.ui.btnPlaylistRemove.clicked.connect(self.remove_from_playlist)
 
         # Page 5 - settings
@@ -113,6 +117,7 @@ class MainWindow(QMainWindow):
         self.ui.settingsTagsTableWidget.selectable = False
         self.ui.settingsTagsTableWidget.populate()
         self.ui.settingsTagsTableWidget.contentChanged.connect(self.ui.explorerTrackTagsTable.populate)
+        self.ui.settingsTagsTableWidget.contentChanged.connect(self.populate_explorer_filter_tags)
 
         # vlc frame
         self.ui.vlcFrame.trackStarted.connect(self.vlcTrackStarted)
@@ -148,6 +153,7 @@ class MainWindow(QMainWindow):
         else:
             self.ui.explorerTable.populate()
         self.ui.explorerLineSearch.clear()
+        self.ui.explorerFilterTags.setCurrentIndex(0)
 
     def newTrackSelected(self, track=None):
         sender = self.sender()
@@ -214,12 +220,17 @@ class MainWindow(QMainWindow):
 
     def populate_explorer_filter_tags(self):
         tag_repo = TagRepository()
+        try:
+            self.ui.explorerFilterTags.currentIndexChanged.disconnect(self.explorerFiltersChanged)
+        except TypeError:
+            pass
         self.ui.explorerFilterTags.clear()
 
         self.ui.explorerFilterTags.addItem("Toutes les étiquettes", 0)
         self.ui.explorerFilterTags.setCurrentIndex(0)
         for tag in tag_repo.get_all():
             self.ui.explorerFilterTags.addItem(tag.label, tag.id)
+        self.ui.explorerFilterTags.currentIndexChanged.connect(self.explorerFiltersChanged)
 
     def addTag(self):
         self.ui.settingsTagsTableWidget.add()

Неке датотеке нису приказане због велике количине промена