Extract part of the content change job to Content.
authorCarl Hetherington <cth@carlh.net>
Sat, 27 Nov 2021 00:04:37 +0000 (01:04 +0100)
committerCarl Hetherington <cth@carlh.net>
Sun, 28 Nov 2021 20:12:00 +0000 (21:12 +0100)
src/lib/check_content_change_job.cc
src/lib/content.cc
src/lib/content.h

index c4d050c0e19ea09b7dc6d7e6c8d42568d8876a7f..967291bb37344a3a455708aae7175da37a2fedd3 100644 (file)
@@ -63,23 +63,9 @@ CheckContentChangeJob::run ()
 {
        set_progress_unknown ();
 
-       list<shared_ptr<Content> > changed;
-
-       for (auto i: _film->content()) {
-               bool ic = false;
-               for (size_t j = 0; j < i->number_of_paths(); ++j) {
-                       if (boost::filesystem::last_write_time(i->path(j)) != i->last_write_time(j)) {
-                               ic = true;
-                               break;
-                       }
-               }
-               if (!ic && i->calculate_digest() != i->digest()) {
-                       ic = true;
-               }
-               if (ic) {
-                       changed.push_back (i);
-               }
-       }
+       auto content = _film->content();
+       std::vector<shared_ptr<Content>> changed;
+       std::copy_if (content.begin(), content.end(), std::back_inserter(changed), [](shared_ptr<Content> c) { return c->changed(); });
 
        if (!changed.empty()) {
                if (_gui) {
index b6f7ebbaafa1284bbce648ebe7e58829d0b2fbbe..370139d12b72579f180837466458556fe88f7f81 100644 (file)
@@ -545,3 +545,18 @@ Content::add_path (boost::filesystem::path p)
        auto last_write = boost::filesystem::last_write_time(p, ec);
        _last_write_times.push_back (ec ? 0 : last_write);
 }
+
+
+bool
+Content::changed () const
+{
+       bool write_time_changed = false;
+       for (auto i = 0U; i < _paths.size(); ++i) {
+               if (boost::filesystem::last_write_time(_paths[i]) != last_write_time(i)) {
+                       write_time_changed = true;
+                       break;
+               }
+       }
+
+       return (write_time_changed || calculate_digest() != digest());
+}
index 550b3cd9cf52770e7a9acb7786a86dac3829130d..d17b0d0e5a22f86360e8a678073add3a620f9084 100644 (file)
@@ -202,6 +202,9 @@ public:
        std::shared_ptr<TextContent> only_text () const;
        std::shared_ptr<TextContent> text_of_original_type (TextType type) const;
 
+       /** @return true if this content has changed since it was last examined */
+       bool changed () const;
+
 protected:
 
        virtual void add_properties (std::shared_ptr<const Film> film, std::list<UserProperty> &) const;