From 865c8b8a11c4bea3ddb1c82e1f95139211b8eba6 Mon Sep 17 00:00:00 2001 From: Bryan Tan Date: Sat, 26 Oct 2019 22:42:08 -0700 Subject: [PATCH] Fix audio playback failure not showing message to user --- src/gui/PageView.cpp | 10 ++++++++++ src/gui/PageViewFindObjectHelper.h | 18 +++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/gui/PageView.cpp b/src/gui/PageView.cpp index a66ac8f5..29ed49ff 100644 --- a/src/gui/PageView.cpp +++ b/src/gui/PageView.cpp @@ -43,6 +43,7 @@ #include "pixbuf-utils.h" #include "util/cpp14memory.h" +#include "util/XojMsgBox.h" #include @@ -413,6 +414,15 @@ bool XojPageView::onButtonPressEvent(const PositionInputData& pos) { PlayObject play(this); play.at(x, y); + if (play.playbackStatus) + { + auto& status = *play.playbackStatus; + if (!status.success) + { + string message = FS(_F("Unable to play audio recording {1}") % status.filename); + XojMsgBox::showErrorToUser(this->xournal->getControl()->getGtkWindow(), message); + } + } } } else if (h->getToolType() == TOOL_TEXT) diff --git a/src/gui/PageViewFindObjectHelper.h b/src/gui/PageViewFindObjectHelper.h index 2ca58ce5..251af5d8 100644 --- a/src/gui/PageViewFindObjectHelper.h +++ b/src/gui/PageViewFindObjectHelper.h @@ -14,6 +14,7 @@ // No include needed, this is included after PageView.h #include +#include class BaseSelectObject { @@ -143,7 +144,8 @@ class PlayObject : public BaseSelectObject { public: PlayObject(XojPageView* view) - : BaseSelectObject(view) + : BaseSelectObject(view) + , playbackStatus() { } @@ -151,6 +153,14 @@ public: { } + struct Status + { + bool success; + std::string filename; + }; + + std::optional playbackStatus; + public: bool at(double x, double y) { @@ -182,8 +192,10 @@ protected: fn = path.str(); } - view->getXournal()->getControl()->getAudioController()->startPlayback(fn, (unsigned int) ts); - return true; + auto* ac = view->getXournal()->getControl()->getAudioController(); + bool success = ac->startPlayback(fn, (unsigned int) ts); + playbackStatus = {success, fn}; + return success; } } return false;