Trim unused stuff.
[dcpomatic.git] / src / lib / util.cc
index 344a9f97d00d49f539adfcda688799f34322335e..e03b4756870c33969013ae2c89d5dc886de564e8 100644 (file)
  *  @brief Some utility functions and classes.
  */
 
-#include <iomanip>
-#include <iostream>
-#include <fstream>
-#include <climits>
-#include <stdexcept>
-#ifdef DCPOMATIC_POSIX
-#include <execinfo.h>
-#include <cxxabi.h>
-#endif
-#include <libssh/libssh.h>
-#include <signal.h>
-#include <boost/algorithm/string.hpp>
-#include <boost/bind.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/thread.hpp>
-#include <boost/filesystem.hpp>
-#ifdef DCPOMATIC_WINDOWS
-#include <boost/locale.hpp>
-#endif
-#include <glib.h>
-#include <openjpeg.h>
-#include <pangomm/init.h>
-#include <magick/MagickCore.h>
-#include <magick/version.h>
-#include <dcp/version.h>
-#include <dcp/util.h>
-#include <dcp/signer.h>
-#include <dcp/raw_convert.h>
-extern "C" {
-#include <libavcodec/avcodec.h>
-#include <libavformat/avformat.h>
-#include <libswscale/swscale.h>
-#include <libavfilter/avfiltergraph.h>
-#include <libavutil/pixfmt.h>
-}
 #include "util.h"
 #include "exceptions.h"
 #include "scaler.h"
@@ -75,6 +40,46 @@ extern "C" {
 #ifdef DCPOMATIC_WINDOWS
 #include "stack.hpp"
 #endif
+#include <dcp/version.h>
+#include <dcp/util.h>
+#include <dcp/signer.h>
+#include <dcp/raw_convert.h>
+extern "C" {
+#include <libavcodec/avcodec.h>
+#include <libavformat/avformat.h>
+#include <libswscale/swscale.h>
+#include <libavfilter/avfiltergraph.h>
+#include <libavutil/pixfmt.h>
+}
+#include <glib.h>
+#include <openjpeg.h>
+#include <pangomm/init.h>
+#ifdef DCPOMATIC_IMAGE_MAGICK
+#include <magick/MagickCore.h>
+#else
+#include <magick/common.h>
+#include <magick/magick_config.h>
+#endif
+#include <magick/version.h>
+#include <libssh/libssh.h>
+#include <boost/algorithm/string.hpp>
+#include <boost/bind.hpp>
+#include <boost/lambda/lambda.hpp>
+#include <boost/thread.hpp>
+#include <boost/filesystem.hpp>
+#ifdef DCPOMATIC_WINDOWS
+#include <boost/locale.hpp>
+#endif
+#include <signal.h>
+#include <iomanip>
+#include <iostream>
+#include <fstream>
+#include <climits>
+#include <stdexcept>
+#ifdef DCPOMATIC_POSIX
+#include <execinfo.h>
+#include <cxxabi.h>
+#endif
 
 #include "i18n.h"
 
@@ -83,20 +88,14 @@ using std::setfill;
 using std::ostream;
 using std::endl;
 using std::vector;
-using std::hex;
-using std::setw;
-using std::ios;
 using std::min;
 using std::max;
 using std::list;
 using std::multimap;
-using std::map;
 using std::istream;
-using std::numeric_limits;
 using std::pair;
 using std::cout;
 using std::bad_alloc;
-using std::streampos;
 using std::set_terminate;
 using boost::shared_ptr;
 using boost::thread;
@@ -125,9 +124,9 @@ seconds_to_hms (int s)
        SafeStringStream hms;
        hms << h << N_(":");
        hms.width (2);
-       hms << std::setfill ('0') << m << N_(":");
+       hms << setfill ('0') << m << N_(":");
        hms.width (2);
-       hms << std::setfill ('0') << s;
+       hms << setfill ('0') << s;
 
        return hms.str ();
 }
@@ -151,14 +150,11 @@ seconds_to_approximate_hms (int s)
 
        if (hours) {
                if (m > 30 && !minutes) {
-                       ap << (h + 1) << N_(" ") << _("hours");
+                       /// TRANSLATORS: h here is an abbreviation for hours
+                       ap << (h + 1) << _("h");
                } else {
-                       ap << h << N_(" ");
-                       if (h == 1) {
-                               ap << _("hour");
-                       } else {
-                               ap << _("hours");
-                       }
+                       /// TRANSLATORS: h here is an abbreviation for hours
+                       ap << h << _("h");
                }
 
                if (minutes | seconds) {
@@ -169,14 +165,11 @@ seconds_to_approximate_hms (int s)
        if (minutes) {
                /* Minutes */
                if (s > 30 && !seconds) {
-                       ap << (m + 1) << N_(" ") << _("minutes");
+                       /// TRANSLATORS: m here is an abbreviation for minutes
+                       ap << (m + 1) << _("m");
                } else {
-                       ap << m << N_(" ");
-                       if (m == 1) {
-                               ap << _("minute");
-                       } else {
-                               ap << _("minutes");
-                       }
+                       /// TRANSLATORS: m here is an abbreviation for minutes
+                       ap << m << _("m");
                }
 
                if (seconds) {
@@ -186,12 +179,8 @@ seconds_to_approximate_hms (int s)
 
        if (seconds) {
                /* Seconds */
-               ap << s << N_(" ");
-               if (s == 1) {
-                       ap << _("second");
-               } else {
-                       ap << _("seconds");
-               }
+               /// TRANSLATORS: s here is an abbreviation for seconds
+               ap << s << _("s");
        }
 
        return ap.str ();
@@ -287,6 +276,12 @@ LONG WINAPI exception_handler(struct _EXCEPTION_POINTERS *)
 }
 #endif
 
+void
+set_backtrace_file (boost::filesystem::path p)
+{
+       backtrace_file = p;
+}
+
 /* From http://stackoverflow.com/questions/2443135/how-do-i-find-where-an-exception-was-thrown-in-c */
 void
 terminate ()
@@ -322,8 +317,9 @@ void
 dcpomatic_setup ()
 {
 #ifdef DCPOMATIC_WINDOWS
-       backtrace_file /= g_get_user_config_dir ();
-       backtrace_file /= "backtrace.txt";
+       boost::filesystem::path p = g_get_user_config_dir ();
+       p /= "backtrace.txt";
+       set_backtrace_file (p);
        SetUnhandledExceptionFilter(exception_handler);
 
        /* Dark voodoo which, I think, gets boost::filesystem::path to
@@ -565,7 +561,7 @@ Socket::accept (int port)
        _acceptor->async_accept (_socket, boost::lambda::var(ec) = boost::lambda::_1);
        do {
                _io_service.run_one ();
-       } while (ec == boost::asio::error::would_block );
+       } while (ec == boost::asio::error::would_block);
 
        delete _acceptor;
        _acceptor = 0;
@@ -765,10 +761,9 @@ audio_channel_name (int c)
 {
        assert (MAX_DCP_AUDIO_CHANNELS == 12);
 
-       /* TRANSLATORS: these are the names of audio channels; Lfe (sub) is the low-frequency
-          enhancement channel (sub-woofer).  HI is the hearing-impaired audio track and
-          VI is the visually-impaired audio track (audio describe).
-       */
+       /// TRANSLATORS: these are the names of audio channels; Lfe (sub) is the low-frequency
+       /// enhancement channel (sub-woofer).  HI is the hearing-impaired audio track and
+       /// VI is the visually-impaired audio track (audio describe).
        string const channels[] = {
                _("Left"),
                _("Right"),
@@ -792,7 +787,19 @@ valid_image_file (boost::filesystem::path f)
 {
        string ext = f.extension().string();
        transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
-       return (ext == ".tif" || ext == ".tiff" || ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".bmp" || ext == ".tga" || ext == ".dpx");
+       return (
+               ext == ".tif" || ext == ".tiff" || ext == ".jpg" || ext == ".jpeg" ||
+               ext == ".png" || ext == ".bmp" || ext == ".tga" || ext == ".dpx" ||
+               ext == ".j2c" || ext == ".j2k"
+               );
+}
+
+bool
+valid_j2k_file (boost::filesystem::path f)
+{
+       string ext = f.extension().string();
+       transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
+       return (ext == ".j2k" || ext == ".j2c");
 }
 
 string
@@ -810,52 +817,6 @@ tidy_for_filename (string f)
        return t;
 }
 
-map<string, string>
-split_get_request (string url)
-{
-       enum {
-               AWAITING_QUESTION_MARK,
-               KEY,
-               VALUE
-       } state = AWAITING_QUESTION_MARK;
-       
-       map<string, string> r;
-       string k;
-       string v;
-       for (size_t i = 0; i < url.length(); ++i) {
-               switch (state) {
-               case AWAITING_QUESTION_MARK:
-                       if (url[i] == '?') {
-                               state = KEY;
-                       }
-                       break;
-               case KEY:
-                       if (url[i] == '=') {
-                               v.clear ();
-                               state = VALUE;
-                       } else {
-                               k += url[i];
-                       }
-                       break;
-               case VALUE:
-                       if (url[i] == '&') {
-                               r.insert (make_pair (k, v));
-                               k.clear ();
-                               state = KEY;
-                       } else {
-                               v += url[i];
-                       }
-                       break;
-               }
-       }
-
-       if (state == VALUE) {
-               r.insert (make_pair (k, v));
-       }
-
-       return r;
-}
-
 dcp::Size
 fit_ratio_within (float ratio, dcp::Size full_frame, int round)
 {