X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fexceptions.h;h=98534bb32d410db108c2d8bd8f00fe220822074f;hb=87d5a977da0696fbe73b96b2679b7cbb471e7255;hp=5efb045b74906cdbb77e782d61023ba709c6c77d;hpb=a69d242f3f00207d6ea7320e6723775f4b0dbfb3;p=dcpomatic.git diff --git a/src/lib/exceptions.h b/src/lib/exceptions.h index 5efb045b7..98534bb32 100644 --- a/src/lib/exceptions.h +++ b/src/lib/exceptions.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2014 Carl Hetherington + Copyright (C) 2012-2020 Carl Hetherington This file is part of DCP-o-matic. @@ -25,10 +25,12 @@ #ifndef DCPOMATIC_EXCEPTIONS_H #define DCPOMATIC_EXCEPTIONS_H +#include "compose.hpp" extern "C" { #include } #include +#include #include #include @@ -44,6 +46,14 @@ public: {} }; +class CryptoError : public std::runtime_error +{ +public: + explicit CryptoError (std::string s) + : std::runtime_error (s) + {} +}; + /** @class EncodeError * @brief A low-level problem with an encoder. */ @@ -65,7 +75,7 @@ public: * @param f Name of the file that this exception concerns. */ FileError (std::string m, boost::filesystem::path f) - : std::runtime_error (m) + : std::runtime_error (String::compose("%1 with %2", m, f.string())) , _file (f) {} @@ -95,11 +105,33 @@ public: class OpenFileError : public FileError { public: + enum Mode { + READ, + WRITE, + READ_WRITE + }; + /** @param f File that we were trying to open. * @param error Code of error that occurred. - * @param reading true if we were opening to read, false if opening to write. + * @param mode Mode that we tried to open the file in. */ - OpenFileError (boost::filesystem::path f, int error, bool reading); + OpenFileError (boost::filesystem::path f, int error, Mode mode); +}; + +class FileNotFoundError : public std::runtime_error +{ +public: + FileNotFoundError (boost::filesystem::path f); + virtual ~FileNotFoundError () throw () {} + + /** @return name of the file that this exception concerns */ + boost::filesystem::path file () const { + return _file; + } + +private: + /** name of the file that this exception concerns */ + boost::filesystem::path _file; }; /** @class ReadFileError. @@ -192,9 +224,20 @@ public: class KDMError : public std::runtime_error { public: - explicit KDMError (std::string s) - : std::runtime_error (s) - {} + KDMError (std::string s, std::string d); + ~KDMError () throw() {} + + std::string summary () const { + return _summary; + } + + std::string detail () const { + return _detail; + } + +private: + std::string _summary; + std::string _detail; }; /** @class PixelFormatError @@ -244,6 +287,14 @@ public: {} }; +class MetadataError : public std::runtime_error +{ +public: + explicit MetadataError (std::string s) + : std::runtime_error (s) + {} +}; + class OldFormatError : public std::runtime_error { public: @@ -258,4 +309,64 @@ public: KDMAsContentError (); }; +class GLError : public std::runtime_error +{ +public: + GLError (char const * last, int e); +}; + +/** @class CopyError + * @brief An error which occurs when copying a DCP to a distribution drive. + */ +class CopyError : public std::runtime_error +{ +public: + CopyError (std::string s, boost::optional n = boost::optional()); + virtual ~CopyError () throw () {} + + std::string message () const { + return _message; + } + + boost::optional number () const { + return _number; + } + +private: + std::string _message; + boost::optional _number; +}; + + +/** @class CommunicationFailedError + * @brief Communcation between dcpomatic2_disk and _disk_writer failed somehow. + */ +class CommunicationFailedError : public CopyError +{ +public: + CommunicationFailedError (); +}; + + +/** @class VerifyError + * @brief An error which occurs when verifying a DCP that we copied to a distribution drive. + */ +class VerifyError : public std::runtime_error +{ +public: + VerifyError (std::string s, int n); + virtual ~VerifyError () throw () {} + + std::string message () const { + return _message; + } + + int number () const { + return _number; + } + +private: + std::string _message; + int _number; +}; #endif