From 9fde75268f5c88ea5984b1ada4013e0c79356079 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sun, 25 Dec 2016 10:47:08 -0500 Subject: [PATCH] Define an AudacityException subclass for unready on-demand data --- mac/Audacity.xcodeproj/project.pbxproj | 6 ++++ src/Makefile.am | 2 ++ src/blockfile/NotYetAvailableException.cpp | 28 +++++++++++++++ src/blockfile/NotYetAvailableException.h | 34 +++++++++++++++++++ win/Projects/Audacity/Audacity.vcxproj | 2 ++ .../Audacity/Audacity.vcxproj.filters | 10 ++++-- 6 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 src/blockfile/NotYetAvailableException.cpp create mode 100644 src/blockfile/NotYetAvailableException.h diff --git a/mac/Audacity.xcodeproj/project.pbxproj b/mac/Audacity.xcodeproj/project.pbxproj index 5f44dd69e..467781143 100644 --- a/mac/Audacity.xcodeproj/project.pbxproj +++ b/mac/Audacity.xcodeproj/project.pbxproj @@ -1214,6 +1214,7 @@ 5E78388E1DE4995F003270C0 /* AudacityException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E78388D1DE4995E003270C0 /* AudacityException.cpp */; }; 5E79B3411D5CC38D001D677D /* ImportGStreamer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E79B33F1D5CC38D001D677D /* ImportGStreamer.cpp */; }; 5E94A1BA1D1F1C8400A8713A /* wxPanelWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E94A1B81D1F1C8400A8713A /* wxPanelWrapper.cpp */; }; + 5EC7ED061E101C5C0052CAE2 /* NotYetAvailableException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EC7ED041E101C5C0052CAE2 /* NotYetAvailableException.cpp */; }; 5ED1D0AD1CDE55BD00471E3C /* Overlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED1D0A91CDE55BD00471E3C /* Overlay.cpp */; }; 5ED1D0AE1CDE55BD00471E3C /* OverlayPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED1D0AB1CDE55BD00471E3C /* OverlayPanel.cpp */; }; 5ED1D0B11CDE560C00471E3C /* BackedPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED1D0AF1CDE560C00471E3C /* BackedPanel.cpp */; }; @@ -3003,6 +3004,8 @@ 5E94A1B81D1F1C8400A8713A /* wxPanelWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wxPanelWrapper.cpp; sourceTree = ""; }; 5E94A1B91D1F1C8400A8713A /* wxPanelWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wxPanelWrapper.h; sourceTree = ""; }; 5EB9EA281D5B81270050AF40 /* ImportForwards.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImportForwards.h; sourceTree = ""; }; + 5EC7ED041E101C5C0052CAE2 /* NotYetAvailableException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NotYetAvailableException.cpp; sourceTree = ""; }; + 5EC7ED051E101C5C0052CAE2 /* NotYetAvailableException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotYetAvailableException.h; sourceTree = ""; }; 5ECCE7651DE49834009900E9 /* AudacityException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudacityException.h; sourceTree = ""; }; 5ED18DB61CC16B1E00FAFE95 /* Reverb_libSoX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reverb_libSoX.h; sourceTree = ""; }; 5ED18DB71CC290AB00FAFE95 /* wxFileNameWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wxFileNameWrapper.h; sourceTree = ""; }; @@ -4054,6 +4057,8 @@ 1790AFDF09883BFD008A330A /* LegacyAliasBlockFile.h */, 1790AFE009883BFD008A330A /* LegacyBlockFile.cpp */, 1790AFE109883BFD008A330A /* LegacyBlockFile.h */, + 5EC7ED041E101C5C0052CAE2 /* NotYetAvailableException.cpp */, + 5EC7ED051E101C5C0052CAE2 /* NotYetAvailableException.h */, 186CCE6B0E51F47400659159 /* ODDecodeBlockFile.cpp */, 186CCE6C0E51F47400659159 /* ODDecodeBlockFile.h */, 1841B50F0E00AD8D00F386E9 /* ODPCMAliasBlockFile.cpp */, @@ -7402,6 +7407,7 @@ 1790B16109883BFD008A330A /* FFT.cpp in Sources */, 1790B16209883BFD008A330A /* FileFormats.cpp in Sources */, 1790B16309883BFD008A330A /* FreqWindow.cpp in Sources */, + 5EC7ED061E101C5C0052CAE2 /* NotYetAvailableException.cpp in Sources */, 1790B16509883BFD008A330A /* HistoryWindow.cpp in Sources */, 1790B16609883BFD008A330A /* ImageManipulation.cpp in Sources */, 5E79B3411D5CC38D001D677D /* ImportGStreamer.cpp in Sources */, diff --git a/src/Makefile.am b/src/Makefile.am index 75f53bda5..2dea3454f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -32,6 +32,8 @@ libaudacity_la_SOURCES = \ blockfile/LegacyAliasBlockFile.h \ blockfile/LegacyBlockFile.cpp \ blockfile/LegacyBlockFile.h \ + blockfile/NotYetAvailableException.cpp \ + blockfile/NotYetAvailableException.h \ blockfile/ODDecodeBlockFile.cpp \ blockfile/ODDecodeBlockFile.h \ blockfile/ODPCMAliasBlockFile.cpp \ diff --git a/src/blockfile/NotYetAvailableException.cpp b/src/blockfile/NotYetAvailableException.cpp new file mode 100644 index 000000000..81ebcc785 --- /dev/null +++ b/src/blockfile/NotYetAvailableException.cpp @@ -0,0 +1,28 @@ +// +// NotYetAvailableException.cpp +// +// +// Created by Paul Licameli on 12/25/16. +// +// + +#include "../Audacity.h" +#include "NotYetAvailableException.h" + +NotYetAvailableException::~NotYetAvailableException() +{ +} + +std::unique_ptr< AudacityException > NotYetAvailableException::Move() +{ + return std::unique_ptr< AudacityException > + { safenew NotYetAvailableException{ std::move( *this ) } }; +} + +wxString NotYetAvailableException::ErrorMessage() const +{ + return wxString::Format( + _("This operation cannot be done until importation of %s completes."), + mFileName.GetFullName() + ); +} diff --git a/src/blockfile/NotYetAvailableException.h b/src/blockfile/NotYetAvailableException.h new file mode 100644 index 000000000..c54c262e7 --- /dev/null +++ b/src/blockfile/NotYetAvailableException.h @@ -0,0 +1,34 @@ +// +// NotYetAvailableException.h +// +// +// Created by Paul Licameli on 12/25/16. +// +// + +#ifndef __AUDACITY_NOT_YET_AVAILABLE_EXCEPTION__ +#define __AUDACITY_NOT_YET_AVAILABLE_EXCEPTION__ + +#include "../FileException.h" +#include + +// This exception can be thrown when attempting read of on-demand block files +// that have not yet completed loading. +class NotYetAvailableException final : public FileException +{ +public: + NotYetAvailableException( const wxFileName &fileName ) + : FileException{ Cause::Read, fileName } {} + NotYetAvailableException(NotYetAvailableException &&that) + : FileException( std::move( that ) ) {} + ~NotYetAvailableException(); + +protected: + std::unique_ptr< AudacityException > Move() override; + wxString ErrorMessage() const override; + +private: + wxFileName mFileName; +}; + +#endif diff --git a/win/Projects/Audacity/Audacity.vcxproj b/win/Projects/Audacity/Audacity.vcxproj index 91fd9bb7a..59a432daa 100755 --- a/win/Projects/Audacity/Audacity.vcxproj +++ b/win/Projects/Audacity/Audacity.vcxproj @@ -134,6 +134,7 @@ + @@ -426,6 +427,7 @@ + diff --git a/win/Projects/Audacity/Audacity.vcxproj.filters b/win/Projects/Audacity/Audacity.vcxproj.filters index ea64b88f0..ff125be27 100755 --- a/win/Projects/Audacity/Audacity.vcxproj.filters +++ b/win/Projects/Audacity/Audacity.vcxproj.filters @@ -1,4 +1,4 @@ - + @@ -899,6 +899,9 @@ src + + src\blockfile + @@ -1825,6 +1828,9 @@ src + + src\blockfile + @@ -2048,4 +2054,4 @@ plug-ins - + \ No newline at end of file