瀏覽代碼

Merge branch 'master' of https://git.xorion.net/olinox14/mew

# Conflicts:
#	ui/qt/rsc_rc.py
Olivier Massot 4 年之前
父節點
當前提交
a033d85794

+ 3 - 1
.gitignore

@@ -8,4 +8,6 @@ htmlcov/
 .coverage
 
 /.project
-*.log
+*.log
+
+venv/*

+ 1 - 1
core/constants.py

@@ -9,7 +9,7 @@ MUSIC_FOLDERS = [
 SUPPORTED_EXTENSIONS = ('mp3', 'wma', 'flac')
 
 # VLC
-VLC_PATH = APP_ROOT / 'core' / 'vlc-core'
+VLC_DLL_PATH = APP_ROOT / 'core' / 'vlc-core' / 'libvlc.dll'
 
 DATA_DIR = APP_ROOT / 'data'
 

+ 2 - 1
core/indexer.py

@@ -2,7 +2,7 @@ import time
 from collections import deque
 from threading import Thread, Timer, Event
 
-import vlc
+
 from PyQt5.QtCore import pyqtSignal, QObject
 from path import Path
 
@@ -12,6 +12,7 @@ from core.file_utilities import is_media_file_ext, hash_file
 from core.logging_ import Logger
 from core.models import Track
 from core.repositories import MusicFolderRepository, TrackRepository
+from core.vlc_ import vlc
 
 logger = Logger.get()
 

+ 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)

+ 7 - 0
core/vlc_.py

@@ -0,0 +1,7 @@
+import os
+
+from core import constants
+
+os.environ['PYTHON_VLC_LIB_PATH'] = constants.VLC_DLL_PATH
+if 1:
+    import vlc

二進制
data/default/youtube/(Ghost) Riders In the Sky (American Outlaws Live at Nassau Coliseum 1990).mp4


+ 17 - 9
ui/qt/main.ui

@@ -7,13 +7,13 @@
     <x>0</x>
     <y>0</y>
     <width>1029</width>
-    <height>784</height>
+    <height>615</height>
    </rect>
   </property>
   <property name="minimumSize">
    <size>
     <width>1029</width>
-    <height>784</height>
+    <height>615</height>
    </size>
   </property>
   <property name="font">
@@ -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">
@@ -1061,7 +1061,7 @@
                         <property name="minimumSize">
                          <size>
                           <width>0</width>
-                          <height>160</height>
+                          <height>60</height>
                          </size>
                         </property>
                         <property name="maximumSize">
@@ -1145,7 +1145,7 @@
                         <property name="minimumSize">
                          <size>
                           <width>218</width>
-                          <height>120</height>
+                          <height>60</height>
                          </size>
                         </property>
                         <property name="maximumSize">
@@ -1341,7 +1341,7 @@
                    <bool>false</bool>
                   </attribute>
                   <attribute name="verticalHeaderVisible">
-                   <bool>true</bool>
+                   <bool>false</bool>
                   </attribute>
                   <column>
                    <property name="text">
@@ -1562,11 +1562,11 @@
                </widget>
               </item>
               <item>
-               <widget class="QTableWidget" name="settingsMusicFoldersTable">
+               <widget class="MusicFoldersTable" name="settingsMusicFoldersTable">
                 <property name="minimumSize">
                  <size>
                   <width>0</width>
-                  <height>192</height>
+                  <height>100</height>
                  </size>
                 </property>
                 <property name="maximumSize">
@@ -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>
@@ -1707,7 +1710,7 @@
                 <property name="minimumSize">
                  <size>
                   <width>0</width>
-                  <height>192</height>
+                  <height>100</height>
                  </size>
                 </property>
                 <property name="maximumSize">
@@ -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"/>

+ 11 - 9
ui/qt/main_ui.py

@@ -14,8 +14,8 @@ from PyQt5 import QtCore, QtGui, QtWidgets
 class Ui_mainWindow(object):
     def setupUi(self, mainWindow):
         mainWindow.setObjectName("mainWindow")
-        mainWindow.resize(1029, 784)
-        mainWindow.setMinimumSize(QtCore.QSize(1029, 784))
+        mainWindow.resize(1029, 615)
+        mainWindow.setMinimumSize(QtCore.QSize(1029, 615))
         font = QtGui.QFont()
         font.setFamily("Verdana")
         font.setPointSize(8)
@@ -400,7 +400,7 @@ class Ui_mainWindow(object):
         self.horizontalLayout_19.addWidget(self.lineSearchTags)
         self.verticalLayout_9.addLayout(self.horizontalLayout_19)
         self.explorerTrackTagsTable = TagsTable(self.page_6)
-        self.explorerTrackTagsTable.setMinimumSize(QtCore.QSize(0, 160))
+        self.explorerTrackTagsTable.setMinimumSize(QtCore.QSize(0, 60))
         self.explorerTrackTagsTable.setMaximumSize(QtCore.QSize(16777215, 16777215))
         self.explorerTrackTagsTable.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
         self.explorerTrackTagsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
@@ -433,7 +433,7 @@ class Ui_mainWindow(object):
         self.label_10.setObjectName("label_10")
         self.verticalLayout_9.addWidget(self.label_10)
         self.explorerTrackNotepad = QtWidgets.QTextEdit(self.page_6)
-        self.explorerTrackNotepad.setMinimumSize(QtCore.QSize(218, 120))
+        self.explorerTrackNotepad.setMinimumSize(QtCore.QSize(218, 60))
         self.explorerTrackNotepad.setMaximumSize(QtCore.QSize(16777215, 120))
         self.explorerTrackNotepad.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.IBeamCursor))
         self.explorerTrackNotepad.setAutoFormatting(QtWidgets.QTextEdit.AutoAll)
@@ -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,8 +597,8 @@ 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.setMinimumSize(QtCore.QSize(0, 192))
+        self.settingsMusicFoldersTable = MusicFoldersTable(self.page_5)
+        self.settingsMusicFoldersTable.setMinimumSize(QtCore.QSize(0, 100))
         self.settingsMusicFoldersTable.setMaximumSize(QtCore.QSize(16777215, 192))
         self.settingsMusicFoldersTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
         self.settingsMusicFoldersTable.setProperty("showDropIndicator", False)
@@ -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)
@@ -655,7 +656,7 @@ class Ui_mainWindow(object):
         self.label_13.setObjectName("label_13")
         self.verticalLayout_6.addWidget(self.label_13)
         self.settingsTagsTableWidget = TagsTable(self.page_5)
-        self.settingsTagsTableWidget.setMinimumSize(QtCore.QSize(0, 192))
+        self.settingsTagsTableWidget.setMinimumSize(QtCore.QSize(0, 100))
         self.settingsTagsTableWidget.setMaximumSize(QtCore.QSize(16777215, 192))
         self.settingsTagsTableWidget.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
         self.settingsTagsTableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
@@ -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

File diff suppressed because it is too large
+ 821 - 114
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 - 1
ui/qt/widgets/vlcframe.py

@@ -1,7 +1,7 @@
 import time
 from collections import deque
 
-import vlc
+from core.vlc_ import vlc
 from PyQt5 import QtWidgets, QtGui, QtCore
 from PyQt5.QtCore import pyqtSignal
 from PyQt5.QtGui import QIcon

+ 8 - 53
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)
@@ -209,8 +208,9 @@ class MainWindow(QMainWindow):
         if self.selected_track:
             # refresh tables
             self.refresh_explorer_tree([self.selected_track])
-            self.ui.explorerPlaylist.update()
-            self.ui.sessionPlaylist.update()
+            if self.selected_playlist:
+                self.ui.explorerPlaylist.update()
+                self.ui.sessionPlaylist.update()
 
     def populate_explorer_filter_tags(self):
         tag_repo = TagRepository()
@@ -221,24 +221,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 +247,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 +361,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

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