dlg_meta_editor.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import os
  2. import webbrowser
  3. from PyQt5 import QtWidgets
  4. from PyQt5.QtGui import QIntValidator
  5. from path import Path
  6. from core import file_utilities
  7. from core.models import Track
  8. from core.repositories import TrackRepository
  9. from ui.qt.dlg_meta_editor_ui import Ui_dlgMetaEditor
  10. class DlgMetaEditor(QtWidgets.QDialog):
  11. def __init__(self, parent=None, track=None):
  12. super().__init__(parent)
  13. self.track = track
  14. self.createWidgets()
  15. def createWidgets(self):
  16. self.ui = Ui_dlgMetaEditor()
  17. self.ui.setupUi(self)
  18. self.ui.lineTitle.setText(self.track.title or "")
  19. self.ui.lineArtist.setText(self.track.artist or "")
  20. self.ui.lineAlbum.setText(self.track.album or "")
  21. self.ui.lineTrackNum.setText(str(self.track.track_num) if self.track.track_num is not None else "")
  22. self.ui.lineTrackNum.setValidator(QIntValidator())
  23. self.ui.lblPath.setText(Path(self.track.path).abspath())
  24. if self.track.status != Track.STATUS_UNAVAILABLE:
  25. self.ui.btnOpenTrackFolder.clicked.connect(self.openTrackFolder)
  26. self.ui.lblPath.setStyleSheet("")
  27. else:
  28. self.ui.btnOpenTrackFolder.setEnabled(False)
  29. self.ui.lblPath.setStyleSheet("QLabel { color : #cc0000; }")
  30. self.ui.btnSave.clicked.connect(self.ok)
  31. self.ui.btnCancel.clicked.connect(self.cancel)
  32. def openTrackFolder(self):
  33. folder = Path(self.track.path).parent
  34. file_utilities.open_file(folder)
  35. @classmethod
  36. def edit(cls, parent, track=None):
  37. dlg = cls(parent, track)
  38. return dlg.exec_()
  39. def ok(self):
  40. track_repo = TrackRepository()
  41. self.track.title = self.ui.lineTitle.text() or None
  42. self.track.artist = self.ui.lineArtist.text() or None
  43. self.track.album = self.ui.lineAlbum.text() or None
  44. num = self.ui.lineTrackNum.text()
  45. if num:
  46. self.track.track_num = int(num)
  47. track_repo.commit()
  48. self.done(1)
  49. def cancel(self):
  50. self.done(0)