X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fsend_problem_report_job.cc;h=ed78112e9ea5765eea15b84c768eeb6686d3c49d;hb=b87e2660d0776f3d1380532ff0d2f3a28ed9d764;hp=f0c34f590bca5f823dadabbfdc70863d9d5a84a1;hpb=bcf01bddc54da34425c727ed67f51cb946546ba6;p=dcpomatic.git diff --git a/src/lib/send_problem_report_job.cc b/src/lib/send_problem_report_job.cc index f0c34f590..ed78112e9 100644 --- a/src/lib/send_problem_report_job.cc +++ b/src/lib/send_problem_report_job.cc @@ -1,38 +1,48 @@ /* - Copyright (C) 2014-2015 Carl Hetherington + Copyright (C) 2014-2021 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 . */ -#include "send_problem_report_job.h" + #include "compose.hpp" -#include "film.h" #include "cross.h" +#include "email.h" +#include "environment_info.h" +#include "film.h" #include "film.h" #include "log.h" +#include "send_problem_report_job.h" +#include "variant.h" #include "version.h" -#include "emailer.h" +#include #include "i18n.h" -using std::string; + using std::list; -using boost::shared_ptr; +using std::shared_ptr; +using std::string; -/** @param film Film thta the problem is with, or 0 */ + +/** @param film Film that 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, @@ -45,6 +55,13 @@ SendProblemReportJob::SendProblemReportJob ( } + +SendProblemReportJob::~SendProblemReportJob () +{ + stop_thread (); +} + + string SendProblemReportJob::name () const { @@ -55,12 +72,14 @@ SendProblemReportJob::name () const return String::compose (_("Email problem report for %1"), _film->name()); } + string SendProblemReportJob::json_name () const { return N_("send_problem_report"); } + void SendProblemReportJob::run () { @@ -69,7 +88,13 @@ SendProblemReportJob::run () string body = _summary + "\n\n"; - body += "Version: " + string (dcpomatic_version) + " " + string (dcpomatic_git_commit) + "\n\n"; + body += "Version: " + string(dcpomatic_version) + " " + string(dcpomatic_git_commit) + "\n\n"; + + for (auto i: environment_info ()) { + body += i + "\n"; + } + + body += "\n"; if (_film) { body += "log head and tail:\n"; @@ -78,31 +103,29 @@ SendProblemReportJob::run () body += "---<8----\n\n"; add_file (body, "ffprobe.log"); - add_file (body, "metadata.xml"); + + body += "---<8----\n"; + body += _film->metadata()->write_to_string_formatted("UTF-8"); + body += "---<8----\n"; } - Emailer emailer (_from, "carl@dcpomatic.com", "DCP-o-matic problem report", body); - emailer.send (shared_from_this ()); + Email email(_from, {"carl@dcpomatic.com"}, variant::insert_dcpomatic("%1 problem report"), body); + email.send("main.carlh.net", 2525, EmailProtocol::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; + try { + body += dcp::file_to_string (_film->file(file)); + } catch (...) { + body += "[could not be read]\n"; + } body += "---<8----\n\n"; - fclose (f); }