C++11 tidying.
[dcpomatic.git] / src / lib / exceptions.h
index 0f8a2eda27a6b9fa7a42dab355331953ea51a691..5b7baf0e50fdc98d75f13608f4f558131601def3 100644 (file)
@@ -30,6 +30,7 @@ extern "C" {
 #include <libavutil/pixfmt.h>
 }
 #include <boost/filesystem.hpp>
+#include <boost/optional.hpp>
 #include <stdexcept>
 #include <cstring>
 
@@ -43,6 +44,14 @@ public:
        explicit DecodeError (std::string s)
                : std::runtime_error (s)
        {}
+
+       explicit DecodeError (std::string function, std::string caller)
+               : std::runtime_error (String::compose("%1 failed [%2", function, caller))
+       {}
+
+       explicit DecodeError (std::string function, std::string caller, int error)
+               : std::runtime_error (String::compose("%1 failed [%2] (%3)", function, caller, error))
+       {}
 };
 
 class CryptoError : public std::runtime_error
@@ -53,6 +62,7 @@ public:
        {}
 };
 
+
 /** @class EncodeError
  *  @brief A low-level problem with an encoder.
  */
@@ -62,8 +72,17 @@ public:
        explicit EncodeError (std::string s)
                : std::runtime_error (s)
        {}
+
+       explicit EncodeError (std::string function, std::string caller)
+               : std::runtime_error (String::compose("%1 failed [%2]", function, caller))
+       {}
+
+       explicit EncodeError (std::string function, std::string caller, int error)
+               : std::runtime_error (String::compose("%1 failed [%2] (%3)", function, caller, error))
+       {}
 };
 
+
 /** @class FileError.
  *  @brief Parent class for file-related errors.
  */
@@ -265,6 +284,21 @@ public:
        {}
 };
 
+
+/** @class ProjectFolderError
+ *  @brief An attempt has been made to read a DCP from a directory, but it looks
+ *  like the directory actually contains a DCP-o-matic project.
+ */
+class ProjectFolderError : public DCPError
+{
+public:
+       /* Code which catches this exception will provide their own message */
+       ProjectFolderError ()
+               : DCPError ("dummy")
+       {}
+};
+
+
 class InvalidSignerError : public std::runtime_error
 {
 public:
@@ -320,22 +354,33 @@ public:
 class CopyError : public std::runtime_error
 {
 public:
-       CopyError (std::string s, int n);
+       CopyError (std::string s, boost::optional<int> n = boost::optional<int>());
        virtual ~CopyError () throw () {}
 
        std::string message () const {
                return _message;
        }
 
-       int number () const {
+       boost::optional<int> number () const {
                return _number;
        }
 
 private:
        std::string _message;
-       int _number;
+       boost::optional<int> _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.
  */
@@ -357,4 +402,14 @@ private:
        std::string _message;
        int _number;
 };
+
+
+class PrivilegeError : public std::runtime_error
+{
+public:
+       explicit PrivilegeError (std::string s)
+                       : std::runtime_error (s)
+               {}
+};
+
 #endif