Rename mxf filename ignoring stuff slightly.
[libdcp.git] / src / exceptions.h
index bc5e83d17e3855326799650ef31037aa3ea34715..9b2617eee3d7c85d1b39595ffbc1d09dad177233 100644 (file)
 namespace dcp
 {
 
+class StringError : public std::exception
+{
+public:
+       StringError () {}
+       StringError (std::string message)
+               : _message (message)
+       {}
+                           
+       ~StringError () throw () {}
+
+       /** @return error message */
+       char const * what () const throw () {
+               return _message.c_str ();
+       }
+
+protected:
+       std::string _message;
+};
+
 /** @class FileError
  *  @brief An exception related to a file
  */
-class FileError : public std::exception
+class FileError : public StringError
 {
 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;
@@ -54,8 +68,6 @@ public:
        }
 
 private:
-       /** message part */
-       std::string _message;
        /** filename of file that was involved */
        boost::filesystem::path _filename;
        int _number;
@@ -75,78 +87,91 @@ public:
 /** @class MiscError
  *  @brief A miscellaneous exception
  */
-class MiscError : public std::exception
+class MiscError : public StringError
 {
 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)
+               : StringError (message)
+       {}
 };
 
 /** @class DCPReadError
  *  @brief A DCP read exception
  */
-class DCPReadError : public std::exception
+class DCPReadError : public StringError
 {
 public:
-       DCPReadError (std::string message) : _message (message) {}
-       ~DCPReadError () throw () {}
+       DCPReadError (std::string message)
+               : StringError (message)
+       {}
 
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
+protected:
+       DCPReadError () {}
+};
+
+/** @class MissingAssetError
+ *  @brief An error of a missing asset.
+ */
+class MissingAssetError : public DCPReadError
+{
+public:
+       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;
+       boost::filesystem::path _path;
+       AssetType _type;
 };
 
 /** @class XMLError
  *  @brief An XML error
  */
-class XMLError : public std::exception
+class XMLError : public StringError
 {
 public:
-       XMLError (std::string message) : _message (message) {}
-       ~XMLError () throw () {}
-
-       /** @return error message */
-       char const * what () const throw () {
-               return _message.c_str ();
-       }
-
-private:
-       /** error message */
-       std::string _message;
+       XMLError (std::string message)
+               : StringError (message)
+       {}
 };
 
 /** @class UnresolvedRefError
  *  @brief An exception caused by a reference (by UUID) to something which is not known
  */
-class UnresolvedRefError : public std::exception
+class UnresolvedRefError : public StringError
 {
 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 StringError
+{
+public:
+       TimeFormatError (std::string bad_time);
+};
 
-private:
-       std::string _message;
+class NotEncryptedError : public StringError
+{
+public:
+       NotEncryptedError (std::string const & what);
+       ~NotEncryptedError () throw () {}
 };
        
+class ProgrammingError : public StringError
+{
+public:
+       ProgrammingError (std::string file, int line);
+};
+
 }
 
 #endif