| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- """
- [Module documentaion here]
- @author:[author], [year]
- """
- from PyQt5.QtSql import QSqlDatabase
- from path import Path
- from PyQt5.QtGui import QIcon
- from PyQt5.QtWidgets import QMainWindow, QListWidgetItem, QTableWidgetItem, QFileDialog
- from core import constants
- from core.logging_ import Logger
- from core.models import MusicFolder
- from core.repositories import MusicFolderRepository, TrackRepository
- from ui.qt.main_ui import Ui_mainWindow
- logger = Logger.get()
- class MainWindow(QMainWindow):
- def __init__(self):
- super().__init__()
- # db
- # self.qdb = QSqlDatabase.addDatabase("QSQLITE")
- # self.qdb.setDatabaseName(constants.DB_PATH)
- # self.qdb.open()
- self.createWidgets()
- def createWidgets(self):
- self.ui = Ui_mainWindow()
- self.ui.setupUi(self)
- # Stack and menus
- self.ui.stack.setCurrentIndex(0)
- menu_items = [
- (':/img/rsc/dancing.png', 'Ma séance'),
- (':/img/rsc/writing-tool.png', 'Préparer'),
- (':/img/rsc/map.png', 'Explorer'),
- (':/img/rsc/calendar.png', 'Agenda'),
- (':/img/rsc/settings.png', 'Paramètres'),
- ]
- for i, item in enumerate(menu_items):
- icon, lbl = item
- item = QListWidgetItem(QIcon(icon), lbl)
- item.index = i
- self.ui.menu.addItem(item)
- # Menu item clicked
- self.ui.menu.itemClicked.connect(self.menu_item_selected)
- # Page 3 - explorer
- self.ui.explorerTable.populate()
- self.ui.explorerTable.trackSelected.connect(self.explorer_tree_selection_changed)
- self.ui.btnExplorerRefresh.clicked.connect(self.refresh_explorer_tree)
- self.ui.explorerTrackMetaStack.setCurrentIndex(0)
- self.ui.explorerTrackPlay.clicked.connect(self.play_track)
- # Page 5 - settings
- self.ui.musicFoldersTable.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()
- def menu_item_selected(self, e):
- self.ui.stack.setCurrentIndex(e.index)
- def indexation_started(self):
- self.ui.statusbar.setStatusTip("Indexation en cours...")
- def indexation_ended(self):
- self.ui.statusbar.setStatusTip("Indexation terminée.")
- def refresh_explorer_tree(self):
- self.ui.explorerTable.populate()
- def explorer_tree_selection_changed(self, track):
- if track:
- self.ui.explorerLblTrackTitle.setText(track.title)
- self.ui.explorerLblTrackArtist.setText(track.artist)
- self.ui.explorerLblTrackAlbum.setText(track.album)
- self.ui.explorerLblTrackNumber.setText(
- str(track.track_num if track.track_num is not None else "")
- )
- self.ui.explorerTrackMetaStack.setCurrentIndex(1)
- else:
- self.ui.explorerTrackMetaStack.setCurrentIndex(0)
- def populate_music_folders_table(self):
- music_folders = MusicFolderRepository().get_all()
- self.ui.musicFoldersTable.setRowCount(0)
- self.ui.musicFoldersTable.setRowCount(len(music_folders))
- music_folder_statuses = [
- ('Inconnu', 'status_unknown.png'),
- ('Valide', 'status_found.png'),
- ('Inaccessible', 'status_unavailable.png')
- ]
- for i, music_folder in enumerate(music_folders):
- self.ui.musicFoldersTable.setItem(i, 0, QTableWidgetItem(music_folder.id))
- status_lbl, status_pic = music_folder_statuses[music_folder.status]
- self.ui.musicFoldersTable.setItem(i, 1, QTableWidgetItem(QIcon(status_pic), status_lbl))
- self.ui.musicFoldersTable.setItem(i, 2, QTableWidgetItem(music_folder.path))
- def play_track(self):
- track = self.ui.explorerTable.selected_track()
- print("play ", track)
- self.ui.vlcFrame.play_track(track)
- 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 run(self):
- pass
- def __del__(self):
- if self.qdb.isOpen():
- self.qdb.close()
|