Merge branch 'master' of ssh://houllier/home/carl/git/dvdomatic
[dcpomatic.git] / src / lib / dvd.cc
index 629ba1ac8c21bb2ebb0736248c0a6c13e58050a8..19b59b5881daa7949b82a92047a60e02164c764b 100644 (file)
@@ -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;
 }