Fix failure to update cinema screen information (#2944).
authorCarl Hetherington <cth@carlh.net>
Mon, 13 Jan 2025 19:11:13 +0000 (20:11 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 13 Jan 2025 19:11:13 +0000 (20:11 +0100)
src/lib/cinema_list.cc
src/lib/cinema_list.h
src/wx/screens_panel.cc
test/cinema_list_test.cc

index 41b9dbab3a3e6671ffbd849c727bf81a1d6b5f42..6805a42cdb4dc622bf5f208945e6ba60cbef6641 100644 (file)
@@ -421,15 +421,16 @@ CinemaList::cinema_by_name_or_email(std::string const& text) const
 
 
 void
-CinemaList::update_screen(ScreenID id, dcpomatic::Screen const& screen)
+CinemaList::update_screen(CinemaID cinema_id, ScreenID screen_id, dcpomatic::Screen const& screen)
 {
        SQLiteStatement statement(_db, _screens.update("WHERE id=?"));
 
-       statement.bind_text(1, screen.name);
-       statement.bind_text(2, screen.notes);
-       statement.bind_text(3, screen.recipient->certificate(true));
-       statement.bind_text(4, screen.recipient_file.get_value_or(""));
-       statement.bind_int64(5, id.get());
+       statement.bind_int64(1, cinema_id.get());
+       statement.bind_text(2, screen.name);
+       statement.bind_text(3, screen.notes);
+       statement.bind_text(4, screen.recipient->certificate(true));
+       statement.bind_text(5, screen.recipient_file.get_value_or(""));
+       statement.bind_int64(6, screen_id.get());
 
        statement.execute();
 }
index c91f2947613a388e20277c8346387f2886dba1e8..101f93607e9bc7ddb418812844403b4a622fd744 100644 (file)
@@ -99,7 +99,7 @@ public:
        boost::optional<std::pair<CinemaID, Cinema>> cinema_by_name_or_email(std::string const& text) const;
 
        ScreenID add_screen(CinemaID cinema_id, dcpomatic::Screen const& screen);
-       void update_screen(ScreenID id, dcpomatic::Screen const& screen);
+       void update_screen(CinemaID cinema_id, ScreenID screen_id, dcpomatic::Screen const& screen);
        void remove_screen(ScreenID id);
        boost::optional<dcpomatic::Screen> screen(ScreenID screen_id) const;
        std::vector<std::pair<ScreenID, dcpomatic::Screen>> screens(CinemaID cinema_id) const;
index 755132ef12086ad27810bf97e855bfc25d2f3ff3..812f5ae85a6b8bcc48837279eee358ff04b0d636 100644 (file)
@@ -465,7 +465,7 @@ ScreensPanel::edit_screen(CinemaID cinema_id, ScreenID screen_id)
        screen->recipient = dialog.recipient();
        screen->recipient_file = dialog.recipient_file();
        screen->trusted_devices = dialog.trusted_devices();
-       cinemas.update_screen(screen_id, *screen);
+       cinemas.update_screen(cinema_id, screen_id, *screen);
 
        auto item = screen_to_item(screen_id);
        DCPOMATIC_ASSERT (item);
index 46c9d51957857006a3d26d07b5d408fd946df616..c19b8831544b3ec85221b6a234f63796a8c4b287 100644 (file)
@@ -182,6 +182,37 @@ BOOST_AUTO_TEST_CASE(add_screen_test)
 }
 
 
+BOOST_AUTO_TEST_CASE(update_screen_test)
+{
+       auto const db = setup("update_screen_test");
+
+       CinemaList cinemas(db);
+       auto const cinema_id = cinemas.add_cinema({"Name", { "foo@bar.com" }, "", dcp::UTCOffset()});
+
+       auto screen = dcpomatic::Screen(
+               "Screen 1",
+               "Smells of popcorn",
+               dcp::Certificate(dcp::file_to_string("test/data/cert.pem")),
+               string("test/data/cert.pem"),
+               vector<TrustedDevice>{}
+               );
+
+       auto const screen_id = cinemas.add_screen(cinema_id, screen);
+
+       screen.name = "Screen 1 updated";
+       screen.notes = "Smells of popcorn and hope";
+       cinemas.update_screen(cinema_id, screen_id, screen);
+
+       auto check = cinemas.screens(cinema_id);
+       BOOST_REQUIRE_EQUAL(check.size(), 1U);
+       BOOST_CHECK(check[0].first == screen_id);
+       BOOST_CHECK_EQUAL(check[0].second.name, "Screen 1 updated");
+       BOOST_CHECK_EQUAL(check[0].second.notes, "Smells of popcorn and hope");
+       BOOST_CHECK(check[0].second.recipient == dcp::Certificate(dcp::file_to_string("test/data/cert.pem")));
+       BOOST_CHECK(check[0].second.recipient_file == string("test/data/cert.pem"));
+}
+
+
 BOOST_AUTO_TEST_CASE(cinemas_list_copy_from_xml_test)
 {
        ConfigRestorer cr("build/test/cinemas_list_copy_config");