X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fsend_problem_report_job.cc;h=d27609f0bdd715aac50fff167e7dbbaf40b2c042;hb=6ef1fc5f40567650ca9ef2b7644e4fdd97640ae6;hp=32fec69138fca3ecfca901ba7db98105feba0a40;hpb=90ec60c9e5b45453525368842345ad1a6498fa61;p=dcpomatic.git diff --git a/src/lib/send_problem_report_job.cc b/src/lib/send_problem_report_job.cc index 32fec6913..d27609f0b 100644 --- a/src/lib/send_problem_report_job.cc +++ b/src/lib/send_problem_report_job.cc @@ -1,19 +1,20 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2014-2017 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ @@ -23,7 +24,11 @@ #include "cross.h" #include "film.h" #include "log.h" -#include +#include "version.h" +#include "emailer.h" +#include "environment_info.h" +#include +#include #include "i18n.h" @@ -31,6 +36,10 @@ using std::string; using std::list; using boost::shared_ptr; +/** @param film Film thta the problem is with, or 0. + * @param from Email address to use for From: + * @param summary Summary of the problem. + */ SendProblemReportJob::SendProblemReportJob ( shared_ptr film, string from, @@ -43,54 +52,82 @@ SendProblemReportJob::SendProblemReportJob ( } +SendProblemReportJob::~SendProblemReportJob () +{ + stop_thread (); +} + string SendProblemReportJob::name () const { + if (!_film) { + return _("Email problem report"); + } + return String::compose (_("Email problem report for %1"), _film->name()); } +string +SendProblemReportJob::json_name () const +{ + return N_("send_problem_report"); +} + void SendProblemReportJob::run () { + sub (_("Sending email")); set_progress_unknown (); - - quickmail mail = quickmail_create (_from.c_str(), "DCP-o-matic problem report"); - - quickmail_add_to (mail, "carl@dcpomatic.com"); - - string body = _summary; - - body += "log head and tail:\n"; - body += "---<8----\n"; - body += _film->log()->head_and_tail (); - body += "---<8----\n\n"; - - FILE* ffprobe = fopen_boost (_film->file ("ffprobe.log"), "r"); - if (ffprobe) { - body += "ffprobe.log:\n"; + + string body = _summary + "\n\n"; + + body += "Version: " + string (dcpomatic_version) + " " + string (dcpomatic_git_commit) + "\n\n"; + + BOOST_FOREACH (string i, environment_info ()) { + body += i + "\n"; + } + + body += "\n"; + + if (_film) { + body += "log head and tail:\n"; body += "---<8----\n"; - uintmax_t const size = boost::filesystem::file_size (_film->file ("ffprobe.log")); - char* buffer = new char[size + 1]; - int const N = fread (buffer, size, 1, ffprobe); - buffer[N] = '\0'; - body += buffer; - delete[] buffer; + body += _film->log()->head_and_tail (4096); body += "---<8----\n\n"; - fclose (ffprobe); - } - - quickmail_set_body (mail, body.c_str()); - - char const* error = quickmail_send (mail, "main.carlh.net", 2525, 0, 0); - - if (error) { - set_state (FINISHED_ERROR); - set_error (error, ""); - } else { - set_state (FINISHED_OK); + + add_file (body, "ffprobe.log"); + + body += "---<8----\n"; + body += _film->metadata()->write_to_string_formatted("UTF-8"); + body += "---<8----\n"; } - - quickmail_destroy (mail); + + list to; + to.push_back ("carl@dcpomatic.com"); + + Emailer emailer (_from, to, "DCP-o-matic problem report", body); + emailer.send ("main.carlh.net", 2525, EMAIL_PROTOCOL_STARTTLS); set_progress (1); + set_state (FINISHED_OK); +} + +void +SendProblemReportJob::add_file (string& body, boost::filesystem::path file) const +{ + FILE* f = fopen_boost (_film->file (file), "r"); + if (!f) { + return; + } + + body += file.string() + ":\n"; + body += "---<8----\n"; + uintmax_t const size = boost::filesystem::file_size (_film->file (file)); + char* buffer = new char[size + 1]; + int const N = fread (buffer, 1, size, f); + buffer[N] = '\0'; + body += buffer; + delete[] buffer; + body += "---<8----\n\n"; + fclose (f); }