Comment 0 for bug 1987454

Revision history for this message
Jeremy BĂ­cha (jbicha) wrote : Port ubiquity to libsoup3

libsoup3 is a new major API-incompatible release of libsoup. We want to remove libsoup2.4 from main. Even if we drop ubiquity from main, we want to remove libsoup2.4 from Ubuntu completely (Fedora for instance hopes to do this by late 2023.)

Therefore, ubiquity needs to switch to the newer library.

Prerequisites
-------------
You'll need libtimezonemap 0.4.6-4 from Debian Experimental.

Update debian/control to require that version.
Update debian/control and ubiquity/frontend/gtk_ui.py to use the 4.1 API of webkit2gtk instead of 4.0. Fortunately, there are no other changes required: the 4.1 API is the same as 4.0 except we're using libsoup3.

And update debian/control to use gir1.2-soup-3.0 instead of 2.4
There's another file d-i/update-control which should have its package versions updated too.

Error
-----
libsoup is only directly used briefly in ubi-timezone.py.

Traceback (most recent call last):
  File "/usr/lib/ubiquity/plugins/ubi-timezone.py", line 112, in changed
    self.geoname_session = Soup.SessionAsync()
  File "/usr/lib/python3/dist-packages/gi/module.py", line 123, in __getattr__
    raise AttributeError("%r object has no attribute %r" % (
AttributeError: 'gi.repository.Soup' object has no attribute 'SessionAsync'

libsoup3 has dropped the SessionAsync methods. The documentation suggests that we should use GLib.MainLoop instead. Some of the examples I've seen also use dbus.mainloop.glib to help with using the glib loop.

Documentation
-------------
- https://libsoup.org/libsoup-3.0/client-basic.html
- https://libsoup.org/libsoup-3.0/migrating-from-libsoup-2.html
- https://gitlab.gnome.org/GNOME/libsoup/-/issues/218