summaryrefslogtreecommitdiff
path: root/src/lib/dvd.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-07-15 00:14:28 +0100
committerCarl Hetherington <cth@carlh.net>2012-07-15 00:14:28 +0100
commitbb767c7e338414beee132af3e96829c1448e214b (patch)
treebec2858dcc7225a9bcc2acd8170c25508f6df6cb /src/lib/dvd.cc
parent66c9be6bdb1361e5681e094a0c8170d268aa9518 (diff)
Move things round a bit.
Diffstat (limited to 'src/lib/dvd.cc')
-rw-r--r--src/lib/dvd.cc78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/lib/dvd.cc b/src/lib/dvd.cc
new file mode 100644
index 000000000..629ba1ac8
--- /dev/null
+++ b/src/lib/dvd.cc
@@ -0,0 +1,78 @@
+/*
+ Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+
+ This program 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,
+ 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.
+
+*/
+
+#include <fstream>
+#include <boost/filesystem.hpp>
+#include <boost/algorithm/string.hpp>
+
+using namespace std;
+using namespace boost;
+
+string
+find_dvd ()
+{
+ ifstream f ("/etc/mtab");
+ while (f.good ()) {
+ string s;
+ getline (f, s);
+ vector<string> b;
+ split (b, s, is_any_of (" "));
+ if (b.size() >= 3 && b[2] == "udf") {
+ replace_all (b[1], "\\040", " ");
+ return b[1];
+ }
+ }
+
+ return "";
+}
+
+vector<uint64_t>
+dvd_titles (string dvd)
+{
+ filesystem::path video (dvd);
+ video /= "VIDEO_TS";
+
+ vector<uint64_t> sizes;
+
+ for (filesystem::directory_iterator i = filesystem::directory_iterator (video); i != filesystem::directory_iterator(); ++i) {
+#if BOOST_FILESYSTEM_VERSION == 3
+ string const n = filesystem::path(*i).filename().generic_string();
+#else
+ string const n = filesystem::path(*i).filename();
+#endif
+ if (starts_with (n, "VTS_") && ends_with (n, ".VOB")) {
+ uint64_t const size = filesystem::file_size (filesystem::path (*i));
+ vector<string> p;
+ split (p, n, is_any_of ("_."));
+ if (p.size() == 4) {
+ int const a = atoi (p[1].c_str ());
+ int const b = atoi (p[2].c_str ());
+ while (a >= int (sizes.size())) {
+ sizes.push_back (0);
+ }
+
+ if (b > 0) {
+ sizes[a] += size;
+ }
+ }
+ }
+ }
+
+ return sizes;
+}