From f302660dd0791d932ce0f49ef4eabc037567f911 Mon Sep 17 00:00:00 2001
From: Elliu <elliu@hashi.re>
Date: Sun, 24 Jul 2022 18:49:00 +0200
Subject: [PATCH] UI: Properly propagate line and syl changes to assDocument

---
 src/Lib/Ass/Line.cc                                 | 4 ++--
 src/Lib/Ass/Line.hh                                 | 2 +-
 src/Lib/Ass/Syl.cc                                  | 6 ++++++
 src/Lib/Ass/Syl.hh                                  | 2 ++
 src/Lib/Document/CRTPSubDocument.hh                 | 3 +--
 src/UI/DocumentViews/AudioVisualizer/TimingLine.cc  | 4 ++--
 src/UI/DocumentViews/AudioVisualizer/TimingLine.hh  | 4 ++--
 src/UI/DocumentViews/AudioVisualizer/TimingScene.cc | 4 ++--
 8 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/src/Lib/Ass/Line.cc b/src/Lib/Ass/Line.cc
index af9448cb..9e215edf 100644
--- a/src/Lib/Ass/Line.cc
+++ b/src/Lib/Ass/Line.cc
@@ -74,7 +74,7 @@ Line::updateContent() noexcept
 {
     ___contentAsText = "";
     for (const auto &syl : content)
-        ___contentAsText.append(syl.getContent());
+        ___contentAsText.append(syl.getAssText());
 }
 
 void
@@ -191,7 +191,7 @@ Line::getLineAsText() const noexcept
 }
 
 void
-Line::setContent(const QVector<Syl> &syls) noexcept
+Line::setContent(const QVector<Syl> syls) noexcept
 {
     content = syls;
     updateContent();
diff --git a/src/Lib/Ass/Line.hh b/src/Lib/Ass/Line.hh
index 48dfd1d8..9d84bc2a 100644
--- a/src/Lib/Ass/Line.hh
+++ b/src/Lib/Ass/Line.hh
@@ -46,7 +46,7 @@ public:
     StyleProperties getStyleProperties() const noexcept;
     StyleWeakPtr getStyle() const noexcept;
     const QVector<Syl> &getContent() const noexcept;
-    void setContent(const QVector<Syl> &) noexcept;
+    void setContent(const QVector<Syl>) noexcept;
 
     QVector<Syl> *getContentPtr() noexcept; // FIXME: remove me
 
diff --git a/src/Lib/Ass/Syl.cc b/src/Lib/Ass/Syl.cc
index f98b8289..dd8ba473 100644
--- a/src/Lib/Ass/Syl.cc
+++ b/src/Lib/Ass/Syl.cc
@@ -37,6 +37,12 @@ Syl::getContent() const noexcept
     return content;
 }
 
+QString
+Syl::getAssText() const noexcept
+{
+    return QString("{\\k%1}").arg(duration) + content;
+}
+
 quint64
 Syl::getDuration() const noexcept
 {
diff --git a/src/Lib/Ass/Syl.hh b/src/Lib/Ass/Syl.hh
index 1b00a40e..91600b12 100644
--- a/src/Lib/Ass/Syl.hh
+++ b/src/Lib/Ass/Syl.hh
@@ -32,6 +32,8 @@ public:
     QString getContent() const noexcept;
     quint64 getDuration() const noexcept;
 
+    QString getAssText() const noexcept;
+
     void setDuration(quint64) noexcept;
 
 private:
diff --git a/src/Lib/Document/CRTPSubDocument.hh b/src/Lib/Document/CRTPSubDocument.hh
index 169c1096..92954fab 100644
--- a/src/Lib/Document/CRTPSubDocument.hh
+++ b/src/Lib/Document/CRTPSubDocument.hh
@@ -142,8 +142,7 @@ public:
         } catch (const std::runtime_error &e) {
             ret->logDebug() << "Failed to init ASS subdocument from internal: " << e.what();
             ret.reset();
-            // FIXME: currently terminate, but should be changed to stop the loading of the document
-            throw e;
+            // FIXME: currently not re-throwing, but the loading of the document should be halted here
         }
 
         return ret;
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc b/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc
index ad2c0e57..2b41a8dc 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingLine.cc
@@ -9,9 +9,9 @@ using namespace Vivy;
     connect(sep, &TimingSeparator::enterPress, this, &TimingLine::sepEnterPress);                  \
     connect(sep, &TimingSeparator::exitPress, this, &TimingLine::sepExitPress);
 
-TimingLine::TimingLine(Ass::Line *lineptr, int index, QGraphicsItem *parent)
+TimingLine::TimingLine(Ass::Line& _line, int index, QGraphicsItem *parent)
     : QGraphicsObject(parent)
-    , line(*lineptr)
+    , line(_line)
     , lineIndex(index)
 {
     setPos(TimingUtils::posFromMs(int(line.getStart()) * 10), TimingUtils::axisHeight());
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh b/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh
index fbaf7f0e..3d438f3c 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingLine.hh
@@ -11,13 +11,13 @@ namespace Vivy
 class TimingLine final : public QGraphicsObject {
     Q_OBJECT
 public:
-    explicit TimingLine(Ass::Line *, int, QGraphicsItem * = nullptr);
+    explicit TimingLine(Ass::Line&, int, QGraphicsItem * = nullptr);
 
     QRectF boundingRect() const override;
     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
 
 private:
-    Ass::Line line;
+    Ass::Line& line;
     QVector<TimingSeparator *> seps;
     QVector<TimingSyl *> timingSyls;
     int lineIndex;
diff --git a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
index ea47784c..39760c37 100644
--- a/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
+++ b/src/UI/DocumentViews/AudioVisualizer/TimingScene.cc
@@ -63,8 +63,8 @@ TimingScene::rebuildScene()
     if (auto assDocument = rootVivyDocument.getAssSubDocument()) {
         QVector<Ass::LinePtr> lines = assDocument->getLines();
         for (int i = 0; i < lines.size(); ++i) {
-            if (auto line = lines.at(i).get()) {
-                TimingLine *l = new TimingLine(line, i);
+            if (auto line = lines.at(i)) {
+                TimingLine *l = new TimingLine(*line, i);
                 l->setVisible(false);
                 addItem(l);
                 timingLines.append(l);
-- 
GitLab