@@ -59,8 +59,9 @@ MediaSourceActor::MediaSourceActor(caf::actor_config &cfg, const JsonStore &jsn)
5959 // What happens if media was added to the session before it was on-disk, but now it
6060 // is on disk? We need to re-scan for media metadata. Setting the
6161 // media_detadata_up_to_date_ flag here will allow for this.
62- media_metadata_up_to_date_ =
63- jsn[" store" ].contains (" metadata" ) && jsn[" store" ][" metadata" ].contains (" media" );
62+ if (jsn[" store" ].contains (" metadata" ) && jsn[" store" ][" metadata" ].contains (" media" )) {
63+ media_metadata_ref_checksum_ = base_.checksum ();
64+ }
6465 }
6566 link_to (json_store_);
6667 join_event_group (this , json_store_);
@@ -739,9 +740,9 @@ caf::message_handler MediaSourceActor::message_handler() {
739740
740741 if (mr != base_.media_reference () || force_change_signal) {
741742
742- base_.set_media_status (MS_UNKNOWN);
743+ if (mr. uri () != base_.media_reference (). uri () || mr. duration (). duration () == timebase::k_flicks_zero_seconds) {
743744
744- if (mr. uri () != base_.media_reference (). uri ()) {
745+ base_.set_media_status (MS_UNKNOWN);
745746
746747 // URI is changing! Need a full rebuild
747748 if (!mr.rate ().count ())
@@ -949,7 +950,7 @@ caf::message_handler MediaSourceActor::message_handler() {
949950 const std::vector<std::string> &paths) -> caf::result<JsonStore> {
950951 // multi json store value request
951952 auto rp = make_response_promise<JsonStore>();
952- if (!media_metadata_up_to_date_ ) {
953+ if (media_metadata_ref_checksum_ != base_. checksum () ) {
953954 mail (media_metadata::get_metadata_atom_v)
954955 .request (caf::actor_cast<actor>(this ), infinite)
955956 .then (
@@ -1036,7 +1037,7 @@ caf::message_handler MediaSourceActor::message_handler() {
10361037
10371038 [=](media_metadata::get_metadata_atom) -> caf::result<bool > {
10381039 auto rp = make_response_promise<bool >();
1039- if (media_metadata_up_to_date_ ) {
1040+ if (media_metadata_ref_checksum_ == base_. checksum () ) {
10401041 rp.deliver (true );
10411042 return rp;
10421043 }
@@ -1088,7 +1089,7 @@ caf::message_handler MediaSourceActor::message_handler() {
10881089 .request (json_store_, infinite)
10891090 .then (
10901091 [=](const bool &done) mutable {
1091- media_metadata_up_to_date_ = true ;
1092+ media_metadata_ref_checksum_ = base_. checksum () ;
10921093 rp.deliver (done);
10931094 // notify any watchers that metadata is updated
10941095 mail (
@@ -1151,7 +1152,7 @@ caf::message_handler MediaSourceActor::message_handler() {
11511152 .request (json_store_, infinite)
11521153 .then (
11531154 [=](const bool &done) mutable {
1154- media_metadata_up_to_date_ = true ;
1155+ media_metadata_ref_checksum_ = base_. checksum () ;
11551156 rp.deliver (done);
11561157 // notify any watchers that metadata is updated
11571158 mail (
@@ -1217,15 +1218,19 @@ caf::message_handler MediaSourceActor::message_handler() {
12171218 return mail (_get_group_atom).delegate (json_store_);
12181219 },
12191220
1220- [=](media::checksum_atom) -> std::tuple<std::string, std::string, uintmax_t > {
1221+ [=](media::checksum_atom) -> MediaSourceChecksum {
12211222 return base_.checksum ();
12221223 },
12231224
12241225 [=](media::checksum_atom, const std::pair<std::string, uintmax_t > &checksum) {
12251226
12261227 // force thumbnail update on change. Might cause double update..
12271228 auto old_size = std::get<2 >(base_.checksum ());
1228- if (base_.checksum (checksum) and old_size) {
1229+ if (base_.set_checksum (checksum) and old_size) {
1230+
1231+ // trigger re-fetch of media metadata. The (checksum is used to test if
1232+ // we really need to re-scan for metadata).
1233+ anon_mail (get_metadata_atom_v).send (caf::actor_cast<caf::actor>(this ));
12291234
12301235 mail (utility::event_atom_v, media_status_atom_v, base_.media_status ())
12311236 .send (base_.event_group ());
0 commit comments