diff -Nru ubiquity-23.10.4/debian/changelog ubiquity-23.10.10/debian/changelog --- ubiquity-23.10.4/debian/changelog 2023-09-15 20:16:45.000000000 +0200 +++ ubiquity-23.10.10/debian/changelog 2023-09-20 14:00:55.000000000 +0200 @@ -1,3 +1,9 @@ +ubiquity (23.10.10) mantic; urgency=medium + + * Migrate to Libsoup 3.0 (LP: #1987454). + + -- Nathan Pratta Teodosio Wed, 20 Sep 2023 14:00:55 +0200 + ubiquity (23.10.4) mantic; urgency=medium * Depend: on grub-pc. Currently, ubiquity depends on shim-signed, but diff -Nru ubiquity-23.10.4/debian/control ubiquity-23.10.10/debian/control --- ubiquity-23.10.4/debian/control 2023-09-15 20:15:32.000000000 +0200 +++ ubiquity-23.10.10/debian/control 2023-09-20 14:00:55.000000000 +0200 @@ -17,7 +17,7 @@ dh-python, dpkg-dev (>= 1.16.1~), gir1.2-nma-1.0, - gir1.2-soup-2.4, + gir1.2-soup-3.0, gir1.2-timezonemap-1.0, gir1.2-webkit2-4.0, gir1.2-xkl-1.0, @@ -135,7 +135,7 @@ gir1.2-gtk-3.0 (>= 3.20), gir1.2-nma-1.0, gir1.2-pango-1.0, - gir1.2-soup-2.4, + gir1.2-soup-3.0, gir1.2-timezonemap-1.0, gir1.2-vte-2.91, gir1.2-webkit2-4.0, diff -Nru ubiquity-23.10.4/d-i/update-control ubiquity-23.10.10/d-i/update-control --- ubiquity-23.10.4/d-i/update-control 2023-08-14 00:11:42.000000000 +0200 +++ ubiquity-23.10.10/d-i/update-control 2023-09-20 14:00:55.000000000 +0200 @@ -39,7 +39,7 @@ 'dh-python', 'dpkg-dev (>= 1.14.4)', 'gir1.2-nma-1.0', - 'gir1.2-soup-2.4', + 'gir1.2-soup-3.0', 'gir1.2-timezonemap-1.0', 'gir1.2-webkit2-4.0', 'intltool (>= 0.40.0)', diff -Nru ubiquity-23.10.4/ubiquity/plugins/ubi-timezone.py ubiquity-23.10.10/ubiquity/plugins/ubi-timezone.py --- ubiquity-23.10.4/ubiquity/plugins/ubi-timezone.py 2023-08-14 00:11:42.000000000 +0200 +++ ubiquity-23.10.10/ubiquity/plugins/ubi-timezone.py 2023-09-20 14:00:55.000000000 +0200 @@ -94,7 +94,7 @@ def changed(self, entry): import gi - gi.require_version('Soup', '2.4') + gi.require_version('Soup', '3.0') from gi.repository import Gtk, GObject, GLib, Soup text = misc.utf8(self.city_entry.get_text()) @@ -111,18 +111,24 @@ GObject.TYPE_STRING) if self.geoname_session is None: - self.geoname_session = Soup.SessionAsync() + 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') + headers = message.get_request_headers() + 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) 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)) + self.geoname_session.send_and_read_async( + message, + GLib.PRIORITY_DEFAULT, + None, + self.geoname_cb, + (text, model) + ) def geoname_add_tzdb(self, text, model): if len(model): @@ -153,10 +159,10 @@ 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, Soup, Gio text, model = user_data @@ -165,17 +171,31 @@ self.geoname_timeout_id = None self.geoname_add_tzdb(text, model) - if message.status_code == Soup.KnownStatusCode.CANCELLED: - # Silently ignore cancellation. + cancelled = false + try: + response_body = session.send_and_read_finish(result) + except GLib.GError as e: + cancelled = e.code == Gio.IOErrorEnum.CANCELLED + if (not cancelled): + # Silently ignore cancellation, log but otherwise ignore other + # failures. + syslog.syslog( + 'Geoname lookup for "%s" failed: %s' % (text, e.message) + ) + + message = session.get_async_result_message(result) + if cancelled: + # Silently ignore cancellation, log but otherwise ignore other + # failures. pass - elif message.status_code != Soup.KnownStatusCode.OK: + elif message.get_status() != Soup.Status.OK: # Log but otherwise ignore failures. syslog.syslog( 'Geoname lookup for "%s" failed: %d %s' % - (text, message.status_code, message.reason_phrase)) + (text, message.get_status(), message.get_reason_phrase())) else: try: - for result in json.loads(message.response_body.data): + for result in json.loads(response_body.decode()): model.append([ result['name'], result['admin1'], result['country'], result['latitude'], result['longitude']])