#include <boost/algorithm/string.hpp>
#include <boost/filesystem.hpp>
#include "copy_from_dvd_job.h"
-#include "film_state.h"
#include "dvd.h"
+#include "cross.h"
+#include "film.h"
-using namespace std;
-using namespace boost;
+using std::string;
+using std::list;
+using std::stringstream;
+using boost::shared_ptr;
-/** @param fs FilmState for the film to write DVD data into.
- * @param l Log that we can write to.
+/** @param f Film to write DVD data into.
*/
-CopyFromDVDJob::CopyFromDVDJob (shared_ptr<const FilmState> fs, Log* l)
- : Job (fs, shared_ptr<Options> (), l)
+CopyFromDVDJob::CopyFromDVDJob (shared_ptr<Film> f, shared_ptr<Job> req)
+ : Job (f, req)
{
}
CopyFromDVDJob::run ()
{
/* Remove any old DVD rips */
- filesystem::remove_all (_fs->dir ("dvd"));
+ boost::filesystem::remove_all (_film->dir ("dvd"));
string const dvd = find_dvd ();
if (dvd.empty ()) {
set_state (FINISHED_ERROR);
}
- vector<uint64_t> const t = dvd_titles (dvd);
+ list<DVDTitle> const t = dvd_titles (dvd);
if (t.empty ()) {
set_error ("no titles found on DVD");
set_state (FINISHED_ERROR);
int longest_title = 0;
uint64_t longest_size = 0;
- for (vector<int>::size_type i = 0; i < t.size(); ++i) {
- if (longest_size < t[i]) {
- longest_size = t[i];
- longest_title = i;
+ for (list<DVDTitle>::const_iterator i = t.begin(); i != t.end(); ++i) {
+ if (longest_size < i->size) {
+ longest_size = i->size;
+ longest_title = i->number;
}
}
stringstream c;
- c << "vobcopy -n " << longest_title << " -l -o \"" << _fs->dir ("dvd") << "\" 2>&1";
+ c << "vobcopy -n " << longest_title << " -l -o \"" << _film->dir ("dvd") << "\" 2>&1";
FILE* f = popen (c.str().c_str(), "r");
if (f == 0) {
}
}
+ const string dvd_dir = _film->dir ("dvd");
+
+ string largest_file;
+ uintmax_t largest_size = 0;
+ for (boost::filesystem::directory_iterator i = boost::filesystem::directory_iterator (dvd_dir); i != boost::filesystem::directory_iterator(); ++i) {
+ uintmax_t const s = boost::filesystem::file_size (*i);
+ if (s > largest_size) {
+
+#if BOOST_FILESYSTEM_VERSION == 3
+ largest_file = boost::filesystem::path(*i).generic_string();
+#else
+ largest_file = i->string ();
+#endif
+ largest_size = s;
+ }
+ }
+
+ _film->set_content (largest_file);
+
int const r = pclose (f);
if (WEXITSTATUS (r) != 0) {
set_error ("call to vobcopy failed");