diff -Nru ubiquity-24.04.4/debian/changelog ubiquity-24.04.5/debian/changelog --- ubiquity-24.04.4/debian/changelog 2024-04-09 00:00:03.000000000 +0000 +++ ubiquity-24.04.5/debian/changelog 2024-04-14 18:21:18.000000000 +0000 @@ -1,3 +1,10 @@ +ubiquity (24.04.5) noble; urgency=medium + + [ Dave Jones ] + * plugins/ubi-timezone.py: Update to support libsoup3 API (LP: #1987454) + + -- Steve Langasek Sun, 14 Apr 2024 11:21:18 -0700 + ubiquity (24.04.4) noble; urgency=medium * Bump webkit gir dependency to 4.1. diff -Nru ubiquity-24.04.4/ubiquity/frontend/gtk_ui.py ubiquity-24.04.5/ubiquity/frontend/gtk_ui.py --- ubiquity-24.04.4/ubiquity/frontend/gtk_ui.py 2023-09-28 21:43:01.000000000 +0000 +++ ubiquity-24.04.5/ubiquity/frontend/gtk_ui.py 2024-04-14 18:18:16.000000000 +0000 @@ -963,7 +963,7 @@ return True def on_slideshow_link_clicked(self, web_view, decision, decision_type): - gi.require_version('WebKit2', '4.0') + gi.require_version('WebKit2', '4.1') from gi.repository import WebKit2 if decision_type == WebKit2.PolicyDecisionType.NEW_WINDOW_ACTION: request = decision.get_request() @@ -1000,7 +1000,7 @@ slides = 'file://%s#%s' % (slideshow_main, parameters_encoded) - gi.require_version('WebKit2', '4.0') + gi.require_version('WebKit2', '4.1') from gi.repository import WebKit2 # We have no significant browsing interface, so there isn't much point # in WebKit creating a memory-hungry cache. diff -Nru ubiquity-24.04.4/ubiquity/plugins/ubi-timezone.py ubiquity-24.04.5/ubiquity/plugins/ubi-timezone.py --- ubiquity-24.04.4/ubiquity/plugins/ubi-timezone.py 2024-04-08 23:47:54.000000000 +0000 +++ ubiquity-24.04.5/ubiquity/plugins/ubi-timezone.py 2024-04-14 18:18:23.000000000 +0000 @@ -95,7 +95,7 @@ def changed(self, entry): import gi gi.require_version('Soup', '3.0') - from gi.repository import Gtk, GObject, GLib, Soup + from gi.repository import Gtk, GObject, GLib, Gio, Soup text = misc.utf8(self.city_entry.get_text()) if not text: @@ -114,15 +114,17 @@ self.geoname_session = Soup.Session() url = _geoname_url % (quote(text), misc.get_release().version) message = Soup.Message.new('GET', url) - message.request_headers.append('User-agent', 'Ubiquity/1.0') + message.get_request_headers().replace('User-agent', 'Ubiquity/1.0') self.geoname_session.abort() if self.geoname_timeout_id is not None: GLib.source_remove(self.geoname_timeout_id) + cancellable = Gio.Cancellable() self.geoname_timeout_id = \ GLib.timeout_add_seconds(2, self.geoname_timeout, - (text, model)) - self.geoname_session.queue_message(message, self.geoname_cb, - (text, model)) + (text, model, cancellable)) + self.geoname_session.send_and_read_async( + message, GLib.PRIORITY_DEFAULT, cancellable, self.geoname_cb, + (text, model)) def geoname_add_tzdb(self, text, model): if len(model): @@ -147,16 +149,17 @@ str(loc.latitude), str(loc.longitude)]) def geoname_timeout(self, user_data): - text, model = user_data + text, model, cancellable = user_data + cancellable.cancel() self.geoname_add_tzdb(text, model) self.geoname_timeout_id = None self.city_entry.get_completion().set_model(model) return False - def geoname_cb(self, session, message, user_data): + def geoname_cb(self, session, result, user_data): import syslog import json - from gi.repository import GLib, Soup + from gi.repository import GLib, Gio, Soup text, model = user_data @@ -165,27 +168,37 @@ self.geoname_timeout_id = None self.geoname_add_tzdb(text, model) - if message.status_code == Soup.KnownStatusCode.CANCELLED: - # Silently ignore cancellation. - pass - elif message.status_code != Soup.KnownStatusCode.OK: - # Log but otherwise ignore failures. - syslog.syslog( - 'Geoname lookup for "%s" failed: %d %s' % - (text, message.status_code, message.reason_phrase)) + message = session.get_async_result_message(result) + try: + response = session.send_and_read_finish(result) + except GLib.GError as err: + if err.code == Gio.IOErrorEnum.CANCELLED: + # Silently ignore cancellation. + pass + else: + # Log but otherwise ignore failures. + syslog.syslog( + 'Geoname lookup for "%s" failed: %s' % (text, err.message)) else: - try: - for result in json.loads(message.response_body.data): - model.append([ - result['name'], result['admin1'], result['country'], - result['latitude'], result['longitude']]) - - # Only cache positive results. - self.geoname_cache[text] = model - - except ValueError: + if message.get_status() != Soup.Status.OK: + # Log but otherwise ignore failures syslog.syslog( - 'Server return does not appear to be valid JSON.') + 'Geoname lookup for "%s" failed: %s %s' % + (text, message.get_status(), message.get_reason_phrase())) + else: + try: + for result in json.loads(response.get_data().decode()): + model.append([ + result['name'], result['admin1'], + result['country'], result['latitude'], + result['longitude']]) + + # Only cache positive results. + self.geoname_cache[text] = model + + except ValueError: + syslog.syslog( + 'Server return does not appear to be valid JSON.') self.city_entry.get_completion().set_model(model)