summaryrefslogtreecommitdiff
path: root/src/lib/dvd.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-07-21 11:56:23 +0100
committerCarl Hetherington <cth@carlh.net>2012-07-21 11:56:23 +0100
commit5ec26979d2547b7444c4e1f00aa76d86d22f4c84 (patch)
treeb3e3088c950fcbc5c3ca8433da9c5735398509e7 /src/lib/dvd.cc
parent8df04daf3f2ccb6950afcc4abac7eb3100799774 (diff)
Return title number from dvd_titles().
Diffstat (limited to 'src/lib/dvd.cc')
-rw-r--r--src/lib/dvd.cc31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/lib/dvd.cc b/src/lib/dvd.cc
index 629ba1ac8..19b59b588 100644
--- a/src/lib/dvd.cc
+++ b/src/lib/dvd.cc
@@ -20,6 +20,7 @@
#include <fstream>
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>
+#include "dvd.h"
using namespace std;
using namespace boost;
@@ -42,13 +43,13 @@ find_dvd ()
return "";
}
-vector<uint64_t>
+list<DVDTitle>
dvd_titles (string dvd)
{
filesystem::path video (dvd);
video /= "VIDEO_TS";
- vector<uint64_t> sizes;
+ list<DVDTitle> titles;
for (filesystem::directory_iterator i = filesystem::directory_iterator (video); i != filesystem::directory_iterator(); ++i) {
#if BOOST_FILESYSTEM_VERSION == 3
@@ -63,16 +64,32 @@ dvd_titles (string dvd)
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) {
+ continue;
}
- if (b > 0) {
- sizes[a] += size;
+ list<DVDTitle>::iterator j = titles.begin ();
+ while (j != titles.end() && j->number != a) {
+ ++j;
+ }
+
+ if (j == titles.end ()) {
+ titles.push_back (DVDTitle (a, size));
+ } else {
+ j->size += size;
}
}
}
}
+
+ titles.sort ();
- return sizes;
+ return titles;
+}
+
+
+bool
+operator< (DVDTitle const & a, DVDTitle const & b)
+{
+ return a.number < b.number;
}