X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fexceptions.h;h=213be6186d523a713a0a3f167f77127e0047164e;hb=4ba8772aef261da209bbb882325fd61a8b479fd7;hp=6920556e5c05a95a24eadfe398c226a4c0df3cb3;hpb=6809fdcbf8c65afe3c986b0e2b430d55ce7b124c;p=dcpomatic.git diff --git a/src/lib/exceptions.h b/src/lib/exceptions.h index 6920556e5..213be6186 100644 --- a/src/lib/exceptions.h +++ b/src/lib/exceptions.h @@ -17,8 +17,8 @@ */ -#ifndef DVDOMATIC_EXCEPTIONS_H -#define DVDOMATIC_EXCEPTIONS_H +#ifndef DCPOMATIC_EXCEPTIONS_H +#define DCPOMATIC_EXCEPTIONS_H /** @file src/exceptions.h * @brief Our exceptions. @@ -27,6 +27,7 @@ #include #include #include +#include #include extern "C" { #include @@ -87,7 +88,7 @@ public: /** @param m Error message. * @param f Name of the file that this exception concerns. */ - FileError (std::string m, std::string f) + FileError (std::string m, boost::filesystem::path f) : StringError (m) , _file (f) {} @@ -95,15 +96,22 @@ public: virtual ~FileError () throw () {} /** @return name of the file that this exception concerns */ - std::string file () const { + boost::filesystem::path file () const { return _file; } private: /** name of the file that this exception concerns */ - std::string _file; + boost::filesystem::path _file; +}; + +class JoinError : public StringError +{ +public: + JoinError (std::string s) + : StringError (s) + {} }; - /** @class OpenFileError. * @brief Indicates that some error occurred when trying to open a file. @@ -112,8 +120,7 @@ class OpenFileError : public FileError { public: /** @param f File that we were trying to open */ - /* XXX: should be boost::filesystem::path */ - OpenFileError (std::string f); + OpenFileError (boost::filesystem::path f); }; /** @class CreateFileError. @@ -123,7 +130,7 @@ class CreateFileError : public FileError { public: /** @param f File that we were trying to create */ - CreateFileError (std::string f); + CreateFileError (boost::filesystem::path f); }; @@ -136,7 +143,7 @@ public: /** @param f File that we were trying to read from. * @param e errno value, or 0. */ - ReadFileError (std::string f, int e = 0); + ReadFileError (boost::filesystem::path f, int e = 0); }; /** @class WriteFileError. @@ -148,7 +155,7 @@ public: /** @param f File that we were trying to write to. * @param e errno value, or 0. */ - WriteFileError (std::string f, int e); + WriteFileError (boost::filesystem::path f, int e); }; /** @class SettingError. @@ -209,23 +216,52 @@ public: {} }; +class KDMError : public StringError +{ +public: + KDMError (std::string s) + : StringError (s) + {} +}; + class PixelFormatError : public StringError { public: PixelFormatError (std::string o, AVPixelFormat f); }; +/** An error that occurs while parsing a SubRip file */ +class SubRipError : public FileError +{ +public: + SubRipError (std::string, std::string, boost::filesystem::path); +}; + +/** A parent class for classes which have a need to catch and + * re-throw exceptions. This is intended for classes + * which run their own thread; they should do something like + * + * void my_thread () + * try { + * // do things which might throw exceptions + * } catch (...) { + * store_current (); + * } + * + * and then in another thread call rethrow(). If any + * exception was thrown by my_thread it will be stored by + * store_current() and then rethrow() will re-throw it where + * it can be handled. + */ class ExceptionStore { public: - bool thrown () const { - boost::mutex::scoped_lock lm (_mutex); - return _exception; - } - void rethrow () { boost::mutex::scoped_lock lm (_mutex); - boost::rethrow_exception (_exception); + if (_exception) { + boost::rethrow_exception (_exception); + _exception = boost::exception_ptr (); + } } protected: