Selaa lähdekoodia

playlist notes are only saved when focus is lost

Olivier Massot 4 vuotta sitten
vanhempi
commit
0dea6140ca
3 muutettua tiedostoa jossa 522 lisäystä ja 569 poistoa
  1. 484 553
      ui/qt/rsc_rc.py
  2. 37 3
      ui/qt/widgets/frame_notes.py
  3. 1 13
      ui/window.py

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 484 - 553
ui/qt/rsc_rc.py


+ 37 - 3
ui/qt/widgets/frame_notes.py

@@ -1,14 +1,19 @@
 from PyQt5 import QtWidgets
 from PyQt5.QtCore import pyqtSignal
 from PyQt5.QtGui import QFont
-from PyQt5.QtWidgets import QTextEdit
+from PyQt5.QtWidgets import QTextEdit, QApplication
 
+from core.repositories import SessionRepository
 from ui.qt.widgets.frame_notes_ui import Ui_frameNotes
 
 
 class FrameNotes(QtWidgets.QFrame):
+    notesChanged = pyqtSignal()
+
     def __init__(self, parent=None):
         super().__init__(parent)
+        self.dirty = False
+        self.playlist = None
         self.createWidgets()
 
     def createWidgets(self):
@@ -33,6 +38,9 @@ class FrameNotes(QtWidgets.QFrame):
         self.ui.btnUndo.clicked.connect(self.ui.sessionNotes.undo)
         self.ui.btnRedo.clicked.connect(self.ui.sessionNotes.redo)
 
+        self.ui.sessionNotes.textChanged.connect(self.notes_changed)
+        QtWidgets.qApp.focusChanged.connect(self.focus_changed)
+
         # A list of all format-related widgets/actions, so we can disable/enable signals when updating.
         self._format_actions = [
             self.ui.btnBold,
@@ -63,9 +71,35 @@ class FrameNotes(QtWidgets.QFrame):
         """
         # # Disable signals for all format widgets, so changing values here does not trigger further formatting.
         self._block_signals(self._format_actions, True)
-
         self.ui.btnItalic.setChecked(self.ui.sessionNotes.fontItalic())
         self.ui.btnItalic.setChecked(self.ui.sessionNotes.fontUnderline())
         self.ui.btnBold.setChecked(self.ui.sessionNotes.fontWeight() == QFont.Bold)
-
         self._block_signals(self._format_actions, False)
+
+    def notes(self):
+        return self.ui.sessionNotes.toHtml()
+
+    def set_notes(self, html):
+        self.ui.sessionNotes.textChanged.disconnect(self.notes_changed)
+        self.ui.sessionNotes.setHtml(html)
+        self.ui.sessionNotes.textChanged.connect(self.notes_changed)
+
+    def set_playlist(self, playlist):
+        self.playlist = playlist
+        self.set_notes(playlist.notes)
+
+    def focus_changed(self, old, now):
+        if old is self.ui.sessionNotes and self.dirty:
+            self.save()
+
+    def notes_changed(self):
+        self.dirty = True
+
+    def save(self):
+        print("save notes")
+        notes = self.notes()
+        session_repo = SessionRepository()
+        self.playlist.notes = notes
+        session_repo.commit()
+        self.dirty = False
+

+ 1 - 13
ui/window.py

@@ -65,8 +65,6 @@ class MainWindow(QMainWindow):
         self.ui.sessionPlaylist.trackDoubleClicked.connect(self.play_playlist)
         self.ui.sessionBtnChange.clicked.connect(self.selectPlaylist)
 
-        self.ui.frameNotes.ui.sessionNotes.textChanged.connect(self.sessionNotesChanged)
-
         self.ui.btnSessionStart.clicked.connect(self.play_playlist)
 
         # Page 3 - explorer
@@ -277,9 +275,7 @@ class MainWindow(QMainWindow):
         self.ui.sessionLblTitle.setText(playlist.name)
         self.ui.sessionPlaylist.populate(playlist)
 
-        self.ui.frameNotes.ui.sessionNotes.textChanged.disconnect(self.sessionNotesChanged)
-        self.ui.frameNotes.ui.sessionNotes.setHtml(playlist.notes)
-        self.ui.frameNotes.ui.sessionNotes.textChanged.connect(self.sessionNotesChanged)
+        self.ui.frameNotes.set_playlist(playlist)
 
         # explorer page
         self.ui.explorerPlaylist.setEnabled(True)
@@ -354,14 +350,6 @@ class MainWindow(QMainWindow):
         track_tag_repo.query().filter(TrackTag.track_id == track_id).filter(TrackTag.tag_id == tag_id).delete()
         track_tag_repo.commit()
 
-    def sessionNotesChanged(self):
-        if not self.selected_playlist:
-            return
-        notes = self.ui.frameNotes.ui.sessionNotes.toHtml()
-        session_repo = SessionRepository()
-        self.selected_playlist.notes = notes
-        session_repo.commit()
-
     def explorerTrackNotesChanged(self):
         if not self.selected_track:
             return

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä