Try to fix comparison of encrypted sound assets.
[libdcp.git] / src / exceptions.h
index c1d47e51b6588ff04662eea9c08986073461280d..801bfb019a92d80f309407fe9fd7d754ed536398 100644 (file)
 namespace dcp
 {
 
-/** @brief An exception related to a file */
-class FileError : public std::exception
+/** @class FileError
+ *  @brief An exception related to a file
+ */
+class FileError : public std::runtime_error
 {
 public:
        FileError (std::string message, boost::filesystem::path filename, int number);
        ~FileError () throw () {}
 
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-       
        /** @return filename of file that was involved */
        boost::filesystem::path filename () const {
                return _filename;
@@ -52,14 +49,14 @@ public:
        }
 
 private:
-       /** message part */
-       std::string _message;
        /** filename of file that was involved */
        boost::filesystem::path _filename;
        int _number;
 };
 
-/** @brief An exception related to an MXF file */
+/** @class MXFFileError
+ *  @brief An exception related to an MXF file
+ */
 class MXFFileError : public FileError
 {
 public:
@@ -67,73 +64,95 @@ public:
                : FileError (message, filename, number)
        {}
 };
-       
-/** @brief A miscellaneous exception */
-class MiscError : public std::exception
+
+/** @class MiscError
+ *  @brief A miscellaneous exception
+ */
+class MiscError : public std::runtime_error
 {
 public:
-       MiscError (std::string message) : _message (message) {}
-       ~MiscError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-
-private:
-       /** error message */
-       std::string _message;
+       MiscError (std::string message)
+               : std::runtime_error (message)
+       {}
 };
 
-/** @brief A DCP read exception */
-class DCPReadError : public std::exception
+/** @class DCPReadError
+ *  @brief A DCP read exception
+ */
+class DCPReadError : public std::runtime_error
 {
 public:
-       DCPReadError (std::string message) : _message (message) {}
-       ~DCPReadError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-
-private:
-       /** error message */
-       std::string _message;
+       DCPReadError (std::string message)
+               : std::runtime_error (message)
+       {}
 };
 
-/** @brief An XML error */
-class XMLError : public std::exception
+/** @class MissingAssetError
+ *  @brief An error of a missing asset.
+ */
+class MissingAssetError : public DCPReadError
 {
 public:
-       XMLError (std::string message) : _message (message) {}
-       ~XMLError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
+       enum AssetType {
+               MAIN_PICTURE,  //< main picture is missing
+               MAIN_SOUND,    //< main sound is missing
+               MAIN_SUBTITLE, //< main subtitle is missing
+               UNKNOWN        //< something is missing but we don't know what
+       };
+
+       MissingAssetError (boost::filesystem::path, AssetType = UNKNOWN);
+       ~MissingAssetError () throw () {}
+};
 
-private:
-       /** error message */
-       std::string _message;
+/** @class XMLError
+ *  @brief An XML error
+ */
+class XMLError : public std::runtime_error
+{
+public:
+       XMLError (std::string message)
+               : std::runtime_error (message)
+       {}
 };
 
-class UnresolvedRefError : public std::exception
+/** @class UnresolvedRefError
+ *  @brief An exception caused by a reference (by UUID) to something which is not known
+ */
+class UnresolvedRefError : public std::runtime_error
 {
 public:
        UnresolvedRefError (std::string id);
-       ~UnresolvedRefError () throw () {}
+};
 
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
+/** @class TimeFormatError
+ *  @brief A an error with a string passed to LocalTime.
+ */
+class TimeFormatError : public std::runtime_error
+{
+public:
+       TimeFormatError (std::string bad_time);
+};
 
-private:
-       std::string _message;
+/** @class NotEncryptedError
+ *  @brief An error raised when creating a DecryptedKDM object for assets that are not
+ *  encrypted.
+ */
+class NotEncryptedError : public std::runtime_error
+{
+public:
+       NotEncryptedError (std::string const & what);
+       ~NotEncryptedError () throw () {}
+};
+
+/** @class ProgrammingError
+ *  @brief An exception thrown when a DCP_ASSERT fails; something that should not happen.
+ */
+class ProgrammingError : public std::runtime_error
+{
+public:
+       ProgrammingError (std::string file, int line);
 };
-       
+
 }
 
 #endif