No-op; fix GPL address and use the explicit-program-name version.
[dcpomatic.git] / src / lib / exceptions.h
1 /*
2     Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
3
4     This file is part of DCP-o-matic.
5
6     DCP-o-matic is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     DCP-o-matic is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
18
19 */
20
21 /** @file  src/lib/exceptions.h
22  *  @brief Our exceptions.
23  */
24
25 #ifndef DCPOMATIC_EXCEPTIONS_H
26 #define DCPOMATIC_EXCEPTIONS_H
27
28 extern "C" {
29 #include <libavutil/pixfmt.h>
30 }
31 #include <boost/filesystem.hpp>
32 #include <stdexcept>
33 #include <cstring>
34
35 /** @class DecodeError
36  *  @brief A low-level problem with the decoder (possibly due to the nature
37  *  of a source file).
38  */
39 class DecodeError : public std::runtime_error
40 {
41 public:
42         DecodeError (std::string s)
43                 : std::runtime_error (s)
44         {}
45 };
46
47 /** @class EncodeError
48  *  @brief A low-level problem with an encoder.
49  */
50 class EncodeError : public std::runtime_error
51 {
52 public:
53         EncodeError (std::string s)
54                 : std::runtime_error (s)
55         {}
56 };
57
58 /** @class FileError.
59  *  @brief Parent class for file-related errors.
60  */
61 class FileError : public std::runtime_error
62 {
63 public:
64         /** @param m Error message.
65          *  @param f Name of the file that this exception concerns.
66          */
67         FileError (std::string m, boost::filesystem::path f)
68                 : std::runtime_error (m)
69                 , _file (f)
70         {}
71
72         virtual ~FileError () throw () {}
73
74         /** @return name of the file that this exception concerns */
75         boost::filesystem::path file () const {
76                 return _file;
77         }
78
79 private:
80         /** name of the file that this exception concerns */
81         boost::filesystem::path _file;
82 };
83
84 class JoinError : public std::runtime_error
85 {
86 public:
87         JoinError (std::string s)
88                 : std::runtime_error (s)
89         {}
90 };
91
92 /** @class OpenFileError.
93  *  @brief Indicates that some error occurred when trying to open a file.
94  */
95 class OpenFileError : public FileError
96 {
97 public:
98         /** @param f File that we were trying to open */
99         OpenFileError (boost::filesystem::path f);
100 };
101
102 /** @class CreateFileError.
103  *  @brief Indicates that some error occurred when trying to create a file.
104  */
105 class CreateFileError : public FileError
106 {
107 public:
108         /** @param f File that we were trying to create */
109         CreateFileError (boost::filesystem::path f);
110 };
111
112
113 /** @class ReadFileError.
114  *  @brief Indicates that some error occurred when trying to read from a file
115  */
116 class ReadFileError : public FileError
117 {
118 public:
119         /** @param f File that we were trying to read from.
120          *  @param e errno value, or 0.
121          */
122         ReadFileError (boost::filesystem::path f, int e = 0);
123 };
124
125 /** @class WriteFileError.
126  *  @brief Indicates that some error occurred when trying to write to a file
127  */
128 class WriteFileError : public FileError
129 {
130 public:
131         /** @param f File that we were trying to write to.
132          *  @param e errno value, or 0.
133          */
134         WriteFileError (boost::filesystem::path f, int e);
135 };
136
137 /** @class SettingError.
138  *  @brief Indicates that something is wrong with a setting.
139  */
140 class SettingError : public std::runtime_error
141 {
142 public:
143         /** @param s Name of setting that was required.
144          *  @param m Message.
145          */
146         SettingError (std::string s, std::string m)
147                 : std::runtime_error (m)
148                 , _setting (s)
149         {}
150
151         virtual ~SettingError () throw () {}
152
153         /** @return name of setting in question */
154         std::string setting () const {
155                 return _setting;
156         }
157
158 private:
159         std::string _setting;
160 };
161
162 /** @class MissingSettingError.
163  *  @brief Indicates that a Film is missing a setting that is required for some operation.
164  */
165 class MissingSettingError : public SettingError
166 {
167 public:
168         /** @param s Name of setting that was required */
169         MissingSettingError (std::string s);
170 };
171
172 /** @class BadSettingError
173  *  @brief Indicates that a setting is bad in some way.
174  */
175 class BadSettingError : public SettingError
176 {
177 public:
178         /** @param s Name of setting that is bad */
179         BadSettingError (std::string s, std::string m)
180                 : SettingError (s, m)
181         {}
182 };
183
184 /** @class NetworkError
185  *  @brief Indicates some problem with communication on the network.
186  */
187 class NetworkError : public std::runtime_error
188 {
189 public:
190         NetworkError (std::string s)
191                 : std::runtime_error (s)
192         {}
193 };
194
195 /** @class KDMError
196  *  @brief A problem with a KDM.
197  */
198 class KDMError : public std::runtime_error
199 {
200 public:
201         KDMError (std::string s)
202                 : std::runtime_error (s)
203         {}
204 };
205
206 /** @class PixelFormatError
207  *  @brief A problem with an unsupported pixel format.
208  */
209 class PixelFormatError : public std::runtime_error
210 {
211 public:
212         PixelFormatError (std::string o, AVPixelFormat f);
213 };
214
215 /** @class TextSubtitleError
216  *  @brief An error that occurs while parsing a TextSubtitleError file.
217  */
218 class TextSubtitleError : public FileError
219 {
220 public:
221         TextSubtitleError (std::string, std::string, boost::filesystem::path);
222 };
223
224 class DCPError : public std::runtime_error
225 {
226 public:
227         DCPError (std::string s)
228                 : std::runtime_error (s)
229         {}
230 };
231
232 class InvalidSignerError : public std::runtime_error
233 {
234 public:
235         InvalidSignerError ();
236 };
237
238 class ProgrammingError : public std::runtime_error
239 {
240 public:
241         ProgrammingError (std::string file, int line);
242 };
243
244 class TextEncodingError : public std::runtime_error
245 {
246 public:
247         TextEncodingError (std::string s)
248                 : std::runtime_error (s)
249         {}
250 };
251
252 #endif