I'm definitely against the idea of loop settings altering cached track lengths. But I suppose changing default length for tracks that have no length is a valid reason to update cached data.
Adding something like this to open() is at least one way to achieve info update.
try {
auto mio = metadb_io_v2::get();
auto mdb = metadb::get();
service_ptr_t<metadb_hint_list> hint_list = mio->create_hint_list();
metadb_hint_list_v3::ptr hint_list_v3;
hint_list_v3 ^= hint_list;
metadb_handle_ptr track;
mdb->handle_create(track, make_playable_location(p_path, 0));
if (track.is_valid()) {
file_info_impl info;
get_info(info, p_abort);
// info.set_length(new_length); // you can force a new length here if get_info() doesn't return the value you want
hint_list_v3->add_hint_forced(track, info, get_file_stats(p_abort), true);
fb2k::inMainThread([=] {hint_list->on_done(); });
}
} catch (pfc::exception) {}