[Git][debian-gis-team/osm-gps-map][master] 6 commits: New upstream version 1.2.1

Bas Couwenberg (@sebastic) gitlab at salsa.debian.org
Sat Aug 15 09:04:09 BST 2026



Bas Couwenberg pushed to branch master at Debian GIS Project / osm-gps-map


Commits:
82fe2b3a by Bas Couwenberg at 2026-08-15T09:47:51+02:00
New upstream version 1.2.1
- - - - -
809315eb by Bas Couwenberg at 2026-08-15T09:47:52+02:00
Update upstream source from tag 'upstream/1.2.1'

Update to upstream version '1.2.1'
with Debian dir 293221afcd3a2e422a4a11d22762b690f46885b9
- - - - -
360ca990 by Bas Couwenberg at 2026-08-15T09:48:20+02:00
New upstream release.

- - - - -
760fded9 by Bas Couwenberg at 2026-08-15T09:51:10+02:00
Drop patches included upstream.

- - - - -
ca60d1e8 by Bas Couwenberg at 2026-08-15T09:58:36+02:00
Mark 01-fix_LFS_support.patch as Forwarded.

- - - - -
9d53bcde by Bas Couwenberg at 2026-08-15T09:58:36+02:00
Set distribution to unstable.

- - - - -


27 changed files:

- .github/workflows/ci.yml
- + .github/workflows/pages.yml
- − .travis.yml
- Makefile.am
- NEWS
- catalog.xml
- configure.ac
- debian/changelog
- − debian/patches/0001-Drop-support-for-libsoup-older-than-2.42.patch
- − debian/patches/0001-Port-to-libsoup3.patch
- debian/patches/01-fix_LFS_support.patch
- − debian/patches/osm_gps_map_track_add_point.patch
- debian/patches/series
- docs/reference/Makefile.am
- examples/Makefile.am
- examples/mapviewer.py
- osmgpsmap-1.0.pc.in
- src/Makefile.am
- src/osm-gps-map-image.c
- src/osm-gps-map-osd.c
- src/osm-gps-map-polygon.c
- src/osm-gps-map-source.c
- src/osm-gps-map-source.h
- src/osm-gps-map-track.c
- src/osm-gps-map-track.h
- src/osm-gps-map-widget.c
- + tests/test.py


Changes:

=====================================
.github/workflows/ci.yml
=====================================
@@ -1,20 +1,21 @@
-name: C/C++ CI
+name: CI
 
 on:
   push:
-    branches: [ master ]
+    branches: [master]
   pull_request:
-    branches: [ master ]
+    branches: [master]
 
 jobs:
   build:
-
     runs-on: ubuntu-latest
-
     steps:
-      - name: install dependencies
+      - uses: actions/checkout at v5
+
+      - name: Install dependencies
         run: |
-          sudo apt-get -y install \
+          sudo apt-get update
+          sudo apt-get install -y \
             build-essential \
             autoconf \
             autoconf-archive \
@@ -23,14 +24,26 @@ jobs:
             gtk-doc-tools \
             libglib2.0-dev \
             libgtk-3-dev \
-            libsoup2.4-dev \
-            libgirepository1.0-dev
-      - uses: actions/checkout at v2
-      - name: autogen
-        run: ./autogen.sh
-      - name: make
-        run: make
+            libsoup-3.0-dev \
+            libgirepository1.0-dev \
+            python3-gi \
+            python3-cairo \
+            gir1.2-gtk-3.0 \
+            gir1.2-gdkpixbuf-2.0 \
+            xvfb
+
+      - name: Build
+        run: |
+          ./autogen.sh --prefix=/usr
+          make -j"$(nproc)"
+
       - name: make check
         run: make check
+
       - name: make distcheck
         run: make distcheck
+
+      - name: Install and run Python tests
+        run: |
+          sudo make install
+          xvfb-run --auto-servernum python3 -m unittest discover -v tests/


=====================================
.github/workflows/pages.yml
=====================================
@@ -0,0 +1,61 @@
+name: Pages
+
+# Deploy gtk-doc HTML to the gh-pages branch on every published release
+# (RC or final). Landing page + screenshots on gh-pages are preserved.
+on:
+  release:
+    types: [published]
+
+permissions:
+  contents: write
+
+jobs:
+  docs:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout release
+        uses: actions/checkout at v5
+
+      - name: Checkout gh-pages
+        uses: actions/checkout at v5
+        with:
+          ref: gh-pages
+          path: _gh-pages
+
+      - name: Install dependencies
+        run: |
+          sudo apt-get update
+          sudo apt-get install -y \
+            build-essential \
+            autoconf \
+            autoconf-archive \
+            automake \
+            libtool \
+            gtk-doc-tools \
+            libglib2.0-dev \
+            libgtk-3-dev \
+            libsoup-3.0-dev \
+            libgirepository1.0-dev
+
+      - name: Build documentation
+        run: |
+          ./autogen.sh --prefix=/usr --enable-gtk-doc
+          make -j"$(nproc)"
+
+      - name: Update API docs on gh-pages
+        run: |
+          set -e
+          test -d docs/reference/html
+          rm -rf _gh-pages/docs/reference/html
+          mkdir -p _gh-pages/docs/reference
+          cp -a docs/reference/html _gh-pages/docs/reference/
+          cd _gh-pages
+          git config user.name "github-actions[bot]"
+          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+          git add -A docs/reference/html
+          if git diff --staged --quiet; then
+            echo "No docs changes"
+            exit 0
+          fi
+          git commit -m "docs: API reference for ${{ github.event.release.tag_name }}"
+          git push origin HEAD:gh-pages


=====================================
.travis.yml deleted
=====================================
@@ -1,10 +0,0 @@
-language: c
-sudo: required
-dist: trusty
-before_install:
-- sudo apt-get -qq update
-- sudo apt-get -qq install gtk-doc-tools libglib2.0-dev libgtk-3-dev libsoup2.4-dev libgirepository1.0-dev
-before_script:
-- ./autogen.sh --enable-gtk-doc
-script:
-- make


=====================================
Makefile.am
=====================================
@@ -16,29 +16,30 @@ doc_DATA =                                      \
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = osmgpsmap-1.0.pc
 
+# Unit tests ship in the tarball (CI/git also run them in-tree).
+EXTRA_DIST = tests/test.py
+
 DISTCLEANFILES = gtk-doc.make
 
-# ChangeLog generation from nautils
+# Drop generated ChangeLog on VPATH distclean only.
 distclean-local:
 	if test "$(srcdir)" = "."; then :; else \
 		rm -f ChangeLog; \
 	fi
 
+# Build ChangeLog from full git history for dist. NEWS is the curated release notes.
 ChangeLog:
-	$(AM_V_GEN)if test -d "$(srcdir)/.git"; then \
-	  (GIT_DIR=$(top_srcdir)/.git ./missing --run git log 0.7.3.. --stat -M -C --name-status  --date=short --no-color) | fmt --split-only > $@.tmp \
+	$(AM_V_GEN)if test -d "$(top_srcdir)/.git"; then \
+	  (cd "$(top_srcdir)" && git log --stat -M -C --name-status --date=short --no-color) > $@.tmp \
 	  && mv -f $@.tmp $@ \
 	  || ($(RM) $@.tmp; \
-	      echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
-	      (test -f $@ || echo git-log is required to generate this file >> $@)); \
+	      echo "Failed to generate ChangeLog, your ChangeLog may be outdated" >&2; \
+	      (test -f $@ || echo "git-log is required to generate this file" >> $@)); \
 	else \
 	  test -f $@ || \
-	  (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
-	  echo A git checkout and git-log is required to generate this file >> $@); \
+	  (echo "A git checkout and git-log is required to generate ChangeLog" >&2 && \
+	   echo "A git checkout and git-log is required to generate this file" >> $@); \
 	fi
 
-release: dist
-	scp @PACKAGE at -@VERSION at .tar.gz root at greenbirdsystems.com:/var/www/johnstowers.co.nz/files/osm-gps-map/
-
 .PHONY: ChangeLog
 


=====================================
NEWS
=====================================
@@ -1,3 +1,19 @@
+Changes in 1.2.1
+  * Replace deprecated G_TYPE_INSTANCE_GET_PRIVATE and g_type_class_add_private (Patrick Salecker)
+  * Add python unit tests (Patrick Salecker)
+  * Fix python example addressing requiring map source (Jochen Sprickerhof)
+  * Fix setting custom map source (Patrick Salecker)
+  * Update catalog files (Davide Gessa)
+  * Make libsoup minimum version 2.42 (Hubert Kowalski)
+  * Manage segments across date change line (Paolo Benve)
+  * Remove unnecessary warning about 2nd setup (Tormod Volden)
+  * Add OpenTopoMap map source (Philipe Weyland)
+  * Port to libsoup-3 (Sébastien Noel)
+  * Fix pkg-config file (Sébastien Noel)
+  * Move libsoup-3.0 to Requires.private in pkg-config (Grimmauld)
+  * Make add_point a GObject Introspection method (loqs)
+  * Close PixbufLoader before get_pixbuf in unit tests; fixes Glycin test failure (loqs)
+
 Changes in 1.2.0
 ======================
   * Change max allowed zoom for various maps (Rolf Eike Beer, Philipe Weyland)


=====================================
catalog.xml
=====================================
@@ -13,4 +13,4 @@
     <glade-widget-group name="osmgpsmap" title="OsmGpsMap Widgets">
         <glade-widget-class-ref name="OsmGpsMap" />
     </glade-widget-group>
-</glade-catalog>
\ No newline at end of file
+</glade-catalog>


=====================================
configure.ac
=====================================
@@ -1,6 +1,6 @@
 AC_PREREQ([2.63])
 AC_INIT([osm-gps-map],
-        [1.2.0],
+        [1.2.1],
         [http://github.com/nzjrs/osm-gps-map/issues],
         [osm-gps-map])
 
@@ -25,7 +25,7 @@ AM_SILENT_RULES([yes])
 PKG_CHECK_MODULES(GLIB,     [glib-2.0 >= 2.16])
 PKG_CHECK_MODULES(GTK,      [gtk+-3.0 >= 3.0])
 PKG_CHECK_MODULES(CAIRO,    [cairo >= 1.8])
-PKG_CHECK_MODULES(SOUP24,   [libsoup-2.4])
+PKG_CHECK_MODULES(SOUP30,   [libsoup-3.0])
 
 # The mapviewer demo also calls g_thread_init, so it needs to link against
 # libgthread-2.0.
@@ -52,7 +52,7 @@ AM_CONDITIONAL(OS_WIN32, [test $os_win32 = yes])
 # - If binary compatibility has been broken (eg removed or changed interfaces)
 #   change to C+1:0:0
 # - If the interface is the same as the previous version, change to C:R+1:A
-LT_VERSION_INFO=2:0:1
+LT_VERSION_INFO=2:1:1
 AC_SUBST(LT_VERSION_INFO)
 
 GOBJECT_INTROSPECTION_REQS=0.10.0


=====================================
debian/changelog
=====================================
@@ -1,6 +1,7 @@
-osm-gps-map (1.2.0-5) UNRELEASED; urgency=medium
+osm-gps-map (1.2.1-1) unstable; urgency=medium
 
   * Team upload.
+  * New upstream release.
   * Mark libosmgpsmap-1.0-dev as Multi-Arch: same.
   * Drop libgirepository1.0-dev build dependency.
     (closes: #1118902)
@@ -9,8 +10,9 @@ osm-gps-map (1.2.0-5) UNRELEASED; urgency=medium
   * Use test-build-validate-cleanup instead of test-build-twice.
   * Drop Priority: optional, default since dpkg 1.22.13.
   * Bump Standards-Version to 4.7.4, changes: priority.
+  * Drop patches included upstream.
 
- -- Bas Couwenberg <sebastic at debian.org>  Fri, 18 Jul 2025 13:32:20 +0200
+ -- Bas Couwenberg <sebastic at debian.org>  Sat, 15 Aug 2026 09:51:15 +0200
 
 osm-gps-map (1.2.0-4) unstable; urgency=medium
 


=====================================
debian/patches/0001-Drop-support-for-libsoup-older-than-2.42.patch deleted
=====================================
@@ -1,64 +0,0 @@
-Description: Drop support for libsoup older than 2.42
- libsoup 2.42 is old enough that no current LTS distro even carries it.
-Author: Hubert Kowalski <h.kowalski at hakger.pl>
-Origin: https://github.com/nzjrs/osm-gps-map/commit/118fd8052f1df6fde7baa0fbeaf1a8cd97c94ab3
-Bug: https://github.com/nzjrs/osm-gps-map/issues/85
-
---- a/configure.ac
-+++ b/configure.ac
-@@ -27,7 +27,7 @@ AC_SYS_LARGEFILE
- PKG_CHECK_MODULES(GLIB,     [glib-2.0 >= 2.16])
- PKG_CHECK_MODULES(GTK,      [gtk+-3.0 >= 3.0])
- PKG_CHECK_MODULES(CAIRO,    [cairo >= 1.8])
--PKG_CHECK_MODULES(SOUP24,   [libsoup-2.4])
-+PKG_CHECK_MODULES(SOUP24,   [libsoup-2.4 >= 2.42])
- 
- # The mapviewer demo also calls g_thread_init, so it needs to link against
- # libgthread-2.0.
---- a/osmgpsmap-1.0.pc.in
-+++ b/osmgpsmap-1.0.pc.in
-@@ -6,6 +6,6 @@ includedir=@includedir@
- Name: @PACKAGE_NAME@
- Description: Moving map widget using openstreet map data
- Version: @PACKAGE_VERSION@
--Requires: gtk+-3.0 libsoup-2.4
-+Requires: gtk+-3.0 libsoup-2.4 >= 2.42
- Libs: -L${libdir} -losmgpsmap-1.0
- Cflags: -I${includedir}/osmgpsmap-1.0
---- a/src/osm-gps-map-widget.c
-+++ b/src/osm-gps-map-widget.c
-@@ -150,15 +150,6 @@
- #define MAX_DOWNLOAD_TILES          10000
- #define DOT_RADIUS                  4.0
- 
--#ifndef SOUP_CHECK_VERSION
--// SOUP_CHECK_VERSION was introduced only in 2.42
--#define SOUP_CHECK_VERSION(x, y, z) false
--#endif
--
--#if !SOUP_CHECK_VERSION(2, 42, 0)
--#define SOUP_OLD_SESSION
--#endif
--
- struct _OsmGpsMapPrivate
- {
-     GHashTable *tile_queue;
-@@ -1680,18 +1671,11 @@ osm_gps_map_init (OsmGpsMap *object)
- 
- 
-     /* set the user agent */
--#ifdef SOUP_OLD_SESSION
--    // libsoup pre 2.42.0 had explicit syn/async session
--    priv->soup_session =
--        soup_session_async_new_with_options(SOUP_SESSION_USER_AGENT,
--                                            USER_AGENT, NULL);
--#else
-     // lisoup since 2.42.0 has universal session, only methods can be sync/async
-     // and we use async
-     priv->soup_session =
-         soup_session_new_with_options(SOUP_SESSION_USER_AGENT,
-                                             USER_AGENT, NULL);
--#endif
- 
-     /* Hash table which maps tile d/l URIs to SoupMessage requests, the hashtable
-        must free the key, the soup session unrefs the message */


=====================================
debian/patches/0001-Port-to-libsoup3.patch deleted
=====================================
@@ -1,279 +0,0 @@
-Subject: Port to libsoup3
-Author: Sébastien Noel <sebastien at twolife.be>
-Origin: https://github.com/nzjrs/osm-gps-map/pull/99
-Bug: https://github.com/nzjrs/osm-gps-map/issues/96
-
---- a/.github/workflows/ci.yml
-+++ b/.github/workflows/ci.yml
-@@ -23,7 +23,7 @@ jobs:
-             gtk-doc-tools \
-             libglib2.0-dev \
-             libgtk-3-dev \
--            libsoup2.4-dev \
-+            libsoup-3.0-dev \
-             libgirepository1.0-dev
-       - uses: actions/checkout at v2
-       - name: autogen
---- a/configure.ac
-+++ b/configure.ac
-@@ -27,7 +27,7 @@ AC_SYS_LARGEFILE
- PKG_CHECK_MODULES(GLIB,     [glib-2.0 >= 2.16])
- PKG_CHECK_MODULES(GTK,      [gtk+-3.0 >= 3.0])
- PKG_CHECK_MODULES(CAIRO,    [cairo >= 1.8])
--PKG_CHECK_MODULES(SOUP24,   [libsoup-2.4 >= 2.42])
-+PKG_CHECK_MODULES(SOUP30,   [libsoup-3.0])
- 
- # The mapviewer demo also calls g_thread_init, so it needs to link against
- # libgthread-2.0.
---- a/docs/reference/Makefile.am
-+++ b/docs/reference/Makefile.am
-@@ -71,12 +71,12 @@ AM_CFLAGS=-I$(top_srcdir) -I$(top_buildd
- 	$(GLIB_CFLAGS) \
- 	$(GTK_CFLAGS) \
- 	$(CAIRO_CFLAGS) \
--	$(SOUP24_CFLAGS)
-+	$(SOUP30_CFLAGS)
- GTKDOC_LIBS=$(top_builddir)/src/libosmgpsmap-1.0.la \
- 	$(GLIB_LIBS) \
- 	$(GTK_LIBS) \
- 	$(CAIRO_LIBS) \
--	$(SOUP24_LIBS)
-+	$(SOUP30_LIBS)
- 
- # This includes the standard gtk-doc make rules, copied by gtkdocize.
- include $(top_srcdir)/gtk-doc.make
---- a/examples/Makefile.am
-+++ b/examples/Makefile.am
-@@ -4,13 +4,13 @@ OSMGPSMAP_CFLAGS =          \
-     $(GLIB_CFLAGS)          \
-     $(GTK_CFLAGS)           \
-     $(CAIRO_CFLAGS)         \
--    $(SOUP24_CFLAGS)
-+    $(SOUP30_CFLAGS)
- 
- OSMGPSMAP_LIBS =            \
-     $(GLIB_LIBS)            \
-     $(GTK_LIBS)             \
-     $(CAIRO_LIBS)           \
--    $(SOUP24_LIBS)
-+    $(SOUP30_LIBS)
- 
- ## Demo Application
- noinst_PROGRAMS = mapviewer polygon editable_track
---- a/osmgpsmap-1.0.pc.in
-+++ b/osmgpsmap-1.0.pc.in
-@@ -6,6 +6,6 @@ includedir=@includedir@
- Name: @PACKAGE_NAME@
- Description: Moving map widget using openstreet map data
- Version: @PACKAGE_VERSION@
--Requires: gtk+-3.0 libsoup-2.4 >= 2.42
-+Requires: gtk+-3.0 libsoup-3.0
- Libs: -L${libdir} -losmgpsmap-1.0
- Cflags: -I${includedir}/osmgpsmap-1.0
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -5,13 +5,13 @@ OSMGPSMAP_CFLAGS =          \
- 	$(GLIB_CFLAGS)          \
- 	$(GTK_CFLAGS)           \
- 	$(CAIRO_CFLAGS)         \
--    $(SOUP24_CFLAGS)
-+    $(SOUP30_CFLAGS)
- 
- OSMGPSMAP_LIBS =            \
-     $(GLIB_LIBS)            \
-     $(GTK_LIBS)             \
-     $(CAIRO_LIBS)           \
--    $(SOUP24_LIBS)
-+    $(SOUP30_LIBS)
- 
- ## Shared library
- libosmgpsmap_1_0_la_CFLAGS =    \
---- a/src/osm-gps-map-widget.c
-+++ b/src/osm-gps-map-widget.c
-@@ -315,7 +315,7 @@ G_DEFINE_TYPE (OsmGpsMap, osm_gps_map, G
-  */
- static gchar    *replace_string(const gchar *src, const gchar *from, const gchar *to);
- static gchar    *replace_map_uri(OsmGpsMap *map, const gchar *uri, int zoom, int x, int y);
--static void     osm_gps_map_tile_download_complete (SoupSession *session, SoupMessage *msg, gpointer user_data);
-+static void     osm_gps_map_tile_download_complete (SoupSession *session, GAsyncResult *result, gpointer user_data);
- static void     osm_gps_map_download_tile (OsmGpsMap *map, int zoom, int x, int y, gboolean redraw);
- static GdkPixbuf* osm_gps_map_render_tile_upscaled (OsmGpsMap *map, GdkPixbuf *tile, int tile_zoom, int zoom, int x, int y);
- 
-@@ -731,12 +731,10 @@ osm_gps_map_blit_tile(OsmGpsMap *map, Gd
-     }
- }
- 
--#define MSG_RESPONSE_BODY(a)    ((a)->response_body->data)
--#define MSG_RESPONSE_LEN(a)     ((a)->response_body->length)
- #define MSG_RESPONSE_LEN_FORMAT "%"G_GOFFSET_FORMAT
- 
- static void
--osm_gps_map_tile_download_complete (SoupSession *session, SoupMessage *msg, gpointer user_data)
-+osm_gps_map_tile_download_complete (SoupSession *session, GAsyncResult *result, gpointer user_data)
- {
-     FILE *file;
-     OsmTileDownload *dl = (OsmTileDownload *)user_data;
-@@ -744,15 +742,23 @@ osm_gps_map_tile_download_complete (Soup
-     OsmGpsMapPrivate *priv = map->priv;
-     gboolean file_saved = FALSE;
- 
--    if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
-+    GError *error = NULL;
-+    SoupMessage *msg = soup_session_get_async_result_message(session, result);
-+    SoupStatus soup_status = soup_message_get_status(msg);
-+    GBytes *body = soup_session_send_and_read_finish (session, result, &error);
-+
-+    GCancellable *cancellable = (GCancellable *)g_hash_table_lookup(priv->tile_queue, dl->uri);
-+    g_object_unref (cancellable);
-+
-+    if (SOUP_STATUS_IS_SUCCESSFUL (soup_status)) {
-         /* save tile into cachedir if one has been specified */
-         if (priv->cache_dir) {
-             if (g_mkdir_with_parents(dl->folder,0700) == 0) {
-                 file = g_fopen(dl->filename, "wb");
-                 if (file != NULL) {
--                    fwrite (MSG_RESPONSE_BODY(msg), 1, MSG_RESPONSE_LEN(msg), file);
-+                    fwrite (g_bytes_get_data(body, NULL), 1, g_bytes_get_size(body), file);
-                     file_saved = TRUE;
--                    g_debug("Wrote "MSG_RESPONSE_LEN_FORMAT" bytes to %s", MSG_RESPONSE_LEN(msg), dl->filename);
-+                    g_debug("Wrote "MSG_RESPONSE_LEN_FORMAT" bytes to %s", g_bytes_get_size(body), dl->filename);
-                     fclose (file);
- 
-                 }
-@@ -777,7 +783,7 @@ osm_gps_map_tile_download_complete (Soup
-                 /* parse file directly from memory */
-                 if (extension) {
-                     loader = gdk_pixbuf_loader_new_with_type (extension+1, NULL);
--                    if (!gdk_pixbuf_loader_write (loader, (unsigned char*)MSG_RESPONSE_BODY(msg), MSG_RESPONSE_LEN(msg), NULL))
-+                    if (!gdk_pixbuf_loader_write (loader, (unsigned char*)g_bytes_get_data(body, NULL), g_bytes_get_size(body), NULL))
-                     {
-                         g_warning("Error: Decoding of image failed");
-                     }
-@@ -815,21 +821,21 @@ osm_gps_map_tile_download_complete (Soup
-         g_free(dl->filename);
-         g_free(dl);
-     } else {
--        if ((msg->status_code == SOUP_STATUS_NOT_FOUND) || (msg->status_code == SOUP_STATUS_FORBIDDEN)) {
-+        if ((soup_status == SOUP_STATUS_NOT_FOUND) || (soup_status == SOUP_STATUS_FORBIDDEN)) {
-             g_hash_table_insert(priv->missing_tiles, dl->uri, NULL);
-             g_hash_table_remove(priv->tile_queue, dl->uri);
-             g_object_notify(G_OBJECT(map), "tiles-queued");
--        } else if (msg->status_code == SOUP_STATUS_CANCELLED) {
-+        } else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
-             /* called as application exit or after osm_gps_map_download_cancel_all */
-             g_hash_table_remove(priv->tile_queue, dl->uri);
-             g_object_notify(G_OBJECT(map), "tiles-queued");
-         } else {
--            g_warning("Error downloading tile: %d - %s", msg->status_code, msg->reason_phrase);
--            dl->ttl--;
--            if (dl->ttl) {
--                soup_session_requeue_message(session, msg);
--                return;
--            }
-+            g_warning("Error downloading tile: %d - %s", soup_status, soup_status_get_phrase(soup_status));
-+            //dl->ttl--;
-+            //if (dl->ttl) {
-+            //    soup_session_requeue_message(session, msg);
-+            //    return;
-+            //}
- 
-             g_hash_table_remove(priv->tile_queue, dl->uri);
-             g_object_notify(G_OBJECT(map), "tiles-queued");
-@@ -879,21 +885,26 @@ osm_gps_map_download_tile (OsmGpsMap *ma
-             if (priv->is_google) {
-                 //Set maps.google.com as the referrer
-                 g_debug("Setting Google Referrer");
--                soup_message_headers_append(msg->request_headers, "Referer", "http://maps.google.com/");
-+                soup_message_headers_append(soup_message_get_request_headers(msg), "Referer", "http://maps.google.com/");
-                 //For google satelite also set the appropriate cookie value
-                 if (priv->uri_format & URI_HAS_Q) {
-                     const char *cookie = g_getenv("GOOGLE_COOKIE");
-                     if (cookie) {
-                         g_debug("Adding Google Cookie");
--                        soup_message_headers_append(msg->request_headers, "Cookie", cookie);
-+                        soup_message_headers_append(soup_message_get_request_headers(msg), "Cookie", cookie);
-                     }
-                 }
-             }
- 
--            g_hash_table_insert (priv->tile_queue, dl->uri, msg);
-+            GCancellable *cancellable = g_cancellable_new ();
-+            g_hash_table_insert (priv->tile_queue, dl->uri, cancellable);
-             g_object_notify (G_OBJECT (map), "tiles-queued");
-             /* the soup session unrefs the message when the download finishes */
--            soup_session_queue_message (priv->soup_session, msg, osm_gps_map_tile_download_complete, dl);
-+            soup_session_send_and_read_async(priv->soup_session, msg,
-+                                    G_PRIORITY_DEFAULT,
-+                                    cancellable,
-+                                    (GAsyncReadyCallback)osm_gps_map_tile_download_complete,
-+                                    dl);
-         } else {
-             g_warning("Could not create soup message");
-             g_free(dl->uri);
-@@ -1671,11 +1682,8 @@ osm_gps_map_init (OsmGpsMap *object)
- 
- 
-     /* set the user agent */
--    // lisoup since 2.42.0 has universal session, only methods can be sync/async
--    // and we use async
--    priv->soup_session =
--        soup_session_new_with_options(SOUP_SESSION_USER_AGENT,
--                                            USER_AGENT, NULL);
-+    priv->soup_session = soup_session_new ();
-+    soup_session_set_user_agent (priv->soup_session, USER_AGENT);
- 
-     /* Hash table which maps tile d/l URIs to SoupMessage requests, the hashtable
-        must free the key, the soup session unrefs the message */
-@@ -1906,10 +1914,10 @@ osm_gps_map_set_property (GObject *objec
-                 g_debug("Setting proxy server: %s", priv->proxy_uri);
- 
-                 GValue val = {0};
--                SoupURI* uri = soup_uri_new(priv->proxy_uri);
--                g_value_init(&val, SOUP_TYPE_URI);
-+                GUri* uri = g_uri_parse(priv->proxy_uri, SOUP_HTTP_URI_FLAGS, NULL);
-+                g_value_init(&val, G_TYPE_URI);
-                 g_value_take_boxed(&val, uri);
--                g_object_set_property(G_OBJECT(priv->soup_session),SOUP_SESSION_PROXY_URI,&val);
-+                g_object_set_property(G_OBJECT(priv->soup_session),"proxy-resolver",&val);
- 
-             } else {
-                 g_free(priv->proxy_uri);
-@@ -1929,7 +1937,7 @@ osm_gps_map_set_property (GObject *objec
-                 priv->user_agent = NULL;
-                 g_value_set_string (&full_user_agent, USER_AGENT);
-             }
--            g_object_set_property(G_OBJECT(priv->soup_session),SOUP_SESSION_USER_AGENT, &full_user_agent);
-+            g_object_set_property(G_OBJECT(priv->soup_session),"user-agent", &full_user_agent);
-             break;
-         case PROP_TILE_CACHE_DIR:
-             if ( g_value_get_string(value) ) {
-@@ -2971,9 +2979,9 @@ osm_gps_map_download_maps (OsmGpsMap *ma
- }
- 
- static void
--cancel_message (char *key, SoupMessage *value, SoupSession *user_data)
-+cancel_message (char *key, GCancellable *cancellable, void *userdata)
- {
--    soup_session_cancel_message (user_data, value, SOUP_STATUS_CANCELLED);
-+    g_cancellable_cancel(cancellable);
- }
- 
- /**
-@@ -2981,7 +2989,7 @@ cancel_message (char *key, SoupMessage *
-  * @map: a #OsmGpsMap widget
-  *
-  * Cancels all tiles currently being downloaded. Typically used if you wish to
-- * cacel a large number of tiles queued using osm_gps_map_download_maps()
-+ * cancel a large number of tiles queued using osm_gps_map_download_maps()
-  *
-  * Since: 0.7.0
-  **/
-@@ -2989,7 +2997,7 @@ void
- osm_gps_map_download_cancel_all (OsmGpsMap *map)
- {
-     OsmGpsMapPrivate *priv = map->priv;
--    g_hash_table_foreach (priv->tile_queue, (GHFunc)cancel_message, priv->soup_session);
-+    g_hash_table_foreach (priv->tile_queue, (GHFunc)cancel_message, NULL);
- }
- 
- /**


=====================================
debian/patches/01-fix_LFS_support.patch
=====================================
@@ -1,11 +1,7 @@
 From: David Paleino <dapal at debian.org>
 Subject: correctly support LFS
 Origin: vendor
-Forwarded: no
-
----
- configure.ac |    2 ++
- 1 file changed, 2 insertions(+)
+Forwarded: https://github.com/nzjrs/osm-gps-map/pull/114
 
 --- a/configure.ac
 +++ b/configure.ac


=====================================
debian/patches/osm_gps_map_track_add_point.patch deleted
=====================================
@@ -1,16 +0,0 @@
-Description: Mark first parameter of osm_gps_map_track_add_point as in.
-Author: loqs (https://github.com/loqs)
-Bug: https://github.com/nzjrs/osm-gps-map/issues/106
-Bug-Debian: https://bugs.debian.org/1103354
-
---- a/src/osm-gps-map-track.h
-+++ b/src/osm-gps-map-track.h
-@@ -72,7 +72,7 @@ GType osm_gps_map_track_get_type (void) G_GNUC_CONST;
- OsmGpsMapTrack *    osm_gps_map_track_new           (void);
- /**
-  * osm_gps_map_track_add_point:
-- * @track: (inout): a #OsmGpsMapTrack
-+ * @track: (in): a #OsmGpsMapTrack
-  * @point: (in): a #OsmGpsMapPoint point to add
-  *
-  * Add a point to track


=====================================
debian/patches/series
=====================================
@@ -1,4 +1 @@
 01-fix_LFS_support.patch
-0001-Drop-support-for-libsoup-older-than-2.42.patch
-0001-Port-to-libsoup3.patch
-osm_gps_map_track_add_point.patch


=====================================
docs/reference/Makefile.am
=====================================
@@ -71,12 +71,12 @@ AM_CFLAGS=-I$(top_srcdir) -I$(top_builddir) \
 	$(GLIB_CFLAGS) \
 	$(GTK_CFLAGS) \
 	$(CAIRO_CFLAGS) \
-	$(SOUP24_CFLAGS)
+	$(SOUP30_CFLAGS)
 GTKDOC_LIBS=$(top_builddir)/src/libosmgpsmap-1.0.la \
 	$(GLIB_LIBS) \
 	$(GTK_LIBS) \
 	$(CAIRO_LIBS) \
-	$(SOUP24_LIBS)
+	$(SOUP30_LIBS)
 
 # This includes the standard gtk-doc make rules, copied by gtkdocize.
 include $(top_srcdir)/gtk-doc.make


=====================================
examples/Makefile.am
=====================================
@@ -4,13 +4,13 @@ OSMGPSMAP_CFLAGS =          \
     $(GLIB_CFLAGS)          \
     $(GTK_CFLAGS)           \
     $(CAIRO_CFLAGS)         \
-    $(SOUP24_CFLAGS)
+    $(SOUP30_CFLAGS)
 
 OSMGPSMAP_LIBS =            \
     $(GLIB_LIBS)            \
     $(GTK_LIBS)             \
     $(CAIRO_LIBS)           \
-    $(SOUP24_LIBS)
+    $(SOUP30_LIBS)
 
 ## Demo Application
 noinst_PROGRAMS = mapviewer polygon editable_track


=====================================
examples/mapviewer.py
=====================================
@@ -35,6 +35,7 @@ from gi.repository import (
 
 print(f"using library: {osmgpsmap.__file__} (version {osmgpsmap._version})")
 
+assert osmgpsmap._version == "1.0"
 
 class DummyMapNoGpsPoint(osmgpsmap.Map):
     def do_draw_gps_point(self, drawable):
@@ -84,6 +85,7 @@ class UI(Gtk.Window):
                              show_zoom=True,
                              show_crosshair=True)
         )
+        self.osm.set_property("map-source", osmgpsmap.MapSource_t.OPENSTREETMAP)
         self.osm.layer_add(DummyLayer())
 
         self.last_image = None
@@ -217,7 +219,6 @@ from in the box below. Special metacharacters may be included in this url
                 self.osm = osmgpsmap.Map()
 
             self.vbox.pack_start(self.osm, True, True, 0)
-            self.osm.connect("button_release_event", self.map_clicked)
             self.osm.show()
 
     def print_tiles(self):


=====================================
osmgpsmap-1.0.pc.in
=====================================
@@ -6,6 +6,7 @@ includedir=@includedir@
 Name: @PACKAGE_NAME@
 Description: Moving map widget using openstreet map data
 Version: @PACKAGE_VERSION@
-Requires: gtk+-3.0 libsoup-2.4
+Requires: gtk+-3.0
+Requires.private: libsoup-3.0
 Libs: -L${libdir} -losmgpsmap-1.0
 Cflags: -I${includedir}/osmgpsmap-1.0


=====================================
src/Makefile.am
=====================================
@@ -5,13 +5,13 @@ OSMGPSMAP_CFLAGS =          \
 	$(GLIB_CFLAGS)          \
 	$(GTK_CFLAGS)           \
 	$(CAIRO_CFLAGS)         \
-    $(SOUP24_CFLAGS)
+    $(SOUP30_CFLAGS)
 
 OSMGPSMAP_LIBS =            \
     $(GLIB_LIBS)            \
     $(GTK_LIBS)             \
     $(CAIRO_LIBS)           \
-    $(SOUP24_LIBS)
+    $(SOUP30_LIBS)
 
 ## Shared library
 libosmgpsmap_1_0_la_CFLAGS =    \


=====================================
src/osm-gps-map-image.c
=====================================
@@ -34,8 +34,6 @@
 #include "osm-gps-map-track.h"
 #include "osm-gps-map-image.h"
 
-G_DEFINE_TYPE (OsmGpsMapImage, osm_gps_map_image, G_TYPE_OBJECT)
-
 enum
 {
     PROP_0,
@@ -59,6 +57,8 @@ struct _OsmGpsMapImagePrivate
     float           rotation;
 };
 
+G_DEFINE_TYPE_WITH_PRIVATE (OsmGpsMapImage, osm_gps_map_image, G_TYPE_OBJECT)
+
 static void
 osm_gps_map_image_get_property (GObject    *object,
                                 guint       property_id,
@@ -149,8 +149,6 @@ osm_gps_map_image_class_init (OsmGpsMapImageClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-    g_type_class_add_private (klass, sizeof (OsmGpsMapImagePrivate));
-
     object_class->get_property = osm_gps_map_image_get_property;
     object_class->set_property = osm_gps_map_image_set_property;
     object_class->dispose = osm_gps_map_image_dispose;
@@ -216,7 +214,7 @@ osm_gps_map_image_class_init (OsmGpsMapImageClass *klass)
 static void
 osm_gps_map_image_init (OsmGpsMapImage *self)
 {
-    self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self), OSM_TYPE_GPS_MAP_IMAGE, OsmGpsMapImagePrivate);
+    self->priv = osm_gps_map_image_get_instance_private (self);
 }
 
 OsmGpsMapImage *


=====================================
src/osm-gps-map-osd.c
=====================================
@@ -29,10 +29,6 @@
 
 static void osm_gps_map_osd_interface_init (OsmGpsMapLayerIface *iface);
 
-G_DEFINE_TYPE_WITH_CODE (OsmGpsMapOsd, osm_gps_map_osd, G_TYPE_OBJECT,
-         G_IMPLEMENT_INTERFACE (OSM_TYPE_GPS_MAP_LAYER,
-                                osm_gps_map_osd_interface_init));
-
 enum
 {
 	PROP_0,
@@ -104,6 +100,11 @@ struct _OsmGpsMapOsdPrivate
 	gboolean            show_copyright;
 };
 
+G_DEFINE_TYPE_WITH_CODE (OsmGpsMapOsd, osm_gps_map_osd, G_TYPE_OBJECT,
+         G_ADD_PRIVATE(OsmGpsMapOsd)
+         G_IMPLEMENT_INTERFACE (OSM_TYPE_GPS_MAP_LAYER,
+                                osm_gps_map_osd_interface_init));
+
 static void                 osm_gps_map_osd_render       (OsmGpsMapLayer *osd, OsmGpsMap *map);
 static void                 osm_gps_map_osd_draw         (OsmGpsMapLayer *osd, OsmGpsMap *map, cairo_t *cr);
 static gboolean             osm_gps_map_osd_busy         (OsmGpsMapLayer *osd);
@@ -322,8 +323,6 @@ osm_gps_map_osd_class_init (OsmGpsMapOsdClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	g_type_class_add_private (klass, sizeof (OsmGpsMapOsdPrivate));
-
 	object_class->get_property = osm_gps_map_osd_get_property;
 	object_class->set_property = osm_gps_map_osd_set_property;
 	object_class->constructor = osm_gps_map_osd_constructor;
@@ -473,9 +472,7 @@ osm_gps_map_osd_class_init (OsmGpsMapOsdClass *klass)
 static void
 osm_gps_map_osd_init (OsmGpsMapOsd *self)
 {
-	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
-	                                          OSM_TYPE_GPS_MAP_OSD,
-	                                          OsmGpsMapOsdPrivate);
+	self->priv = osm_gps_map_osd_get_instance_private (self);
 }
 
 static void


=====================================
src/osm-gps-map-polygon.c
=====================================
@@ -21,8 +21,6 @@
 #include "converter.h"
 #include "osm-gps-map-polygon.h"
 
-G_DEFINE_TYPE (OsmGpsMapPolygon, osm_gps_map_polygon, G_TYPE_OBJECT)
-
 enum
 {
     PROP_0,
@@ -44,6 +42,8 @@ struct _OsmGpsMapPolygonPrivate
     gboolean breakable;
 };
 
+G_DEFINE_TYPE_WITH_PRIVATE (OsmGpsMapPolygon, osm_gps_map_polygon, G_TYPE_OBJECT)
+
 #define DEFAULT_R   (60000)
 #define DEFAULT_G   (0)
 #define DEFAULT_B   (0)
@@ -136,8 +136,6 @@ osm_gps_map_polygon_class_init (OsmGpsMapPolygonClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-    g_type_class_add_private (klass, sizeof (OsmGpsMapPolygonPrivate));
-
     object_class->get_property = osm_gps_map_polygon_get_property;
     object_class->set_property = osm_gps_map_polygon_set_property;
     object_class->dispose = osm_gps_map_polygon_dispose;
@@ -198,7 +196,7 @@ osm_gps_map_polygon_class_init (OsmGpsMapPolygonClass *klass)
 static void
 osm_gps_map_polygon_init (OsmGpsMapPolygon *self)
 {
-    self->priv = G_TYPE_INSTANCE_GET_PRIVATE((self), OSM_TYPE_GPS_MAP_POLYGON, OsmGpsMapPolygonPrivate);
+    self->priv = osm_gps_map_polygon_get_instance_private(self);
 	self->priv->track = osm_gps_map_track_new();
 }
 


=====================================
src/osm-gps-map-source.c
=====================================
@@ -35,6 +35,8 @@ osm_gps_map_source_get_friendly_name(OsmGpsMapSource_t source)
             return "OpenAerialMap";
         case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP:
             return "OpenCycleMap";
+        case OSM_GPS_MAP_SOURCE_OPENTOPOMAP: 
+            return "OpenTopoMap";
         case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT:
             return "Public Transport";
         case OSM_GPS_MAP_SOURCE_OSMC_TRAILS:
@@ -75,6 +77,8 @@ osm_gps_map_source_get_copyright(OsmGpsMapSource_t source)
             return "Maps © ÖPNVKarte, Data © OpenStreetMap contributors";
         case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE:
             return "Maps © Maps-For-Free";
+        case OSM_GPS_MAP_SOURCE_OPENTOPOMAP:
+            return "© OpenTopoMap (CC-BY-SA)";
         case OSM_GPS_MAP_SOURCE_GOOGLE_STREET:
             return "Map provided by Google";
         case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE:
@@ -124,6 +128,8 @@ osm_gps_map_source_get_repo_uri(OsmGpsMapSource_t source)
             return NULL;
         case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE:
             return "https://maps-for-free.com/layer/relief/z#Z/row#Y/#Z_#X-#Y.jpg";
+        case OSM_GPS_MAP_SOURCE_OPENTOPOMAP:
+            return "https://a.tile.opentopomap.org/#Z/#X/#Y.png";
         case OSM_GPS_MAP_SOURCE_GOOGLE_STREET:
             return "http://mt#R.google.com/vt/lyrs=m&hl=en&x=#X&s=&y=#Y&z=#Z";
         case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID:
@@ -153,6 +159,7 @@ osm_gps_map_source_get_image_format(OsmGpsMapSource_t source)
         case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP:
         case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT:
         case OSM_GPS_MAP_SOURCE_OSMC_TRAILS:
+        case OSM_GPS_MAP_SOURCE_OPENTOPOMAP:
             return "png";
         case OSM_GPS_MAP_SOURCE_OPENAERIALMAP:
         case OSM_GPS_MAP_SOURCE_GOOGLE_STREET:
@@ -191,6 +198,7 @@ osm_gps_map_source_get_max_zoom(OsmGpsMapSource_t source)
             return OSM_MAX_ZOOM;
         case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER:
         case OSM_GPS_MAP_SOURCE_OPENAERIALMAP:
+        case OSM_GPS_MAP_SOURCE_OPENTOPOMAP:
             return 17;
         case OSM_GPS_MAP_SOURCE_GOOGLE_STREET:
         case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE:


=====================================
src/osm-gps-map-source.h
=====================================
@@ -31,6 +31,7 @@ typedef enum {
     OSM_GPS_MAP_SOURCE_OPENAERIALMAP,
     OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE,
     OSM_GPS_MAP_SOURCE_OPENCYCLEMAP,
+    OSM_GPS_MAP_SOURCE_OPENTOPOMAP,
     OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT,
     OSM_GPS_MAP_SOURCE_GOOGLE_STREET,
     OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE,


=====================================
src/osm-gps-map-track.c
=====================================
@@ -34,8 +34,6 @@
 #include "converter.h"
 #include "osm-gps-map-track.h"
 
-G_DEFINE_TYPE (OsmGpsMapTrack, osm_gps_map_track, G_TYPE_OBJECT)
-
 enum
 {
     PROP_0,
@@ -68,6 +66,8 @@ struct _OsmGpsMapTrackPrivate
     gboolean editable;
 };
 
+G_DEFINE_TYPE_WITH_PRIVATE(OsmGpsMapTrack, osm_gps_map_track, G_TYPE_OBJECT)
+
 #define DEFAULT_R   (0.6)
 #define DEFAULT_G   (0)
 #define DEFAULT_B   (0)
@@ -168,8 +168,6 @@ osm_gps_map_track_class_init (OsmGpsMapTrackClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-    g_type_class_add_private (klass, sizeof (OsmGpsMapTrackPrivate));
-
     object_class->get_property = osm_gps_map_track_get_property;
     object_class->set_property = osm_gps_map_track_set_property;
     object_class->dispose = osm_gps_map_track_dispose;
@@ -282,7 +280,7 @@ osm_gps_map_track_class_init (OsmGpsMapTrackClass *klass)
 static void
 osm_gps_map_track_init (OsmGpsMapTrack *self)
 {
-    self->priv = G_TYPE_INSTANCE_GET_PRIVATE((self), OSM_TYPE_GPS_MAP_TRACK, OsmGpsMapTrackPrivate);
+    self->priv = osm_gps_map_track_get_instance_private(self);
 
     self->priv->color.red = DEFAULT_R;
     self->priv->color.green = DEFAULT_G;


=====================================
src/osm-gps-map-track.h
=====================================
@@ -72,7 +72,7 @@ GType osm_gps_map_track_get_type (void) G_GNUC_CONST;
 OsmGpsMapTrack *    osm_gps_map_track_new           (void);
 /**
  * osm_gps_map_track_add_point:
- * @track: (inout): a #OsmGpsMapTrack
+ * @track: (in): a #OsmGpsMapTrack
  * @point: (in): a #OsmGpsMapPoint point to add
  *
  * Add a point to track


=====================================
src/osm-gps-map-widget.c
=====================================
@@ -150,15 +150,6 @@
 #define MAX_DOWNLOAD_TILES          10000
 #define DOT_RADIUS                  4.0
 
-#ifndef SOUP_CHECK_VERSION
-// SOUP_CHECK_VERSION was introduced only in 2.42
-#define SOUP_CHECK_VERSION(x, y, z) false
-#endif
-
-#if !SOUP_CHECK_VERSION(2, 42, 0)
-#define SOUP_OLD_SESSION
-#endif
-
 struct _OsmGpsMapPrivate
 {
     GHashTable *tile_queue;
@@ -317,14 +308,14 @@ enum
     PROP_SHOW_GPS_POINT
 };
 
-G_DEFINE_TYPE (OsmGpsMap, osm_gps_map, GTK_TYPE_DRAWING_AREA);
+G_DEFINE_TYPE_WITH_PRIVATE (OsmGpsMap, osm_gps_map, GTK_TYPE_DRAWING_AREA);
 
 /*
  * Drawing function forward defintions
  */
 static gchar    *replace_string(const gchar *src, const gchar *from, const gchar *to);
 static gchar    *replace_map_uri(OsmGpsMap *map, const gchar *uri, int zoom, int x, int y);
-static void     osm_gps_map_tile_download_complete (SoupSession *session, SoupMessage *msg, gpointer user_data);
+static void     osm_gps_map_tile_download_complete (SoupSession *session, GAsyncResult *result, gpointer user_data);
 static void     osm_gps_map_download_tile (OsmGpsMap *map, int zoom, int x, int y, gboolean redraw);
 static GdkPixbuf* osm_gps_map_render_tile_upscaled (OsmGpsMap *map, GdkPixbuf *tile, int tile_zoom, int zoom, int x, int y);
 
@@ -740,12 +731,10 @@ osm_gps_map_blit_tile(OsmGpsMap *map, GdkPixbuf *pixbuf, cairo_t *cr, int offset
     }
 }
 
-#define MSG_RESPONSE_BODY(a)    ((a)->response_body->data)
-#define MSG_RESPONSE_LEN(a)     ((a)->response_body->length)
 #define MSG_RESPONSE_LEN_FORMAT "%"G_GOFFSET_FORMAT
 
 static void
-osm_gps_map_tile_download_complete (SoupSession *session, SoupMessage *msg, gpointer user_data)
+osm_gps_map_tile_download_complete (SoupSession *session, GAsyncResult *result, gpointer user_data)
 {
     FILE *file;
     OsmTileDownload *dl = (OsmTileDownload *)user_data;
@@ -753,15 +742,23 @@ osm_gps_map_tile_download_complete (SoupSession *session, SoupMessage *msg, gpoi
     OsmGpsMapPrivate *priv = map->priv;
     gboolean file_saved = FALSE;
 
-    if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
+    GError *error = NULL;
+    SoupMessage *msg = soup_session_get_async_result_message(session, result);
+    SoupStatus soup_status = soup_message_get_status(msg);
+    GBytes *body = soup_session_send_and_read_finish (session, result, &error);
+
+    GCancellable *cancellable = (GCancellable *)g_hash_table_lookup(priv->tile_queue, dl->uri);
+    g_object_unref (cancellable);
+
+    if (SOUP_STATUS_IS_SUCCESSFUL (soup_status)) {
         /* save tile into cachedir if one has been specified */
         if (priv->cache_dir) {
             if (g_mkdir_with_parents(dl->folder,0700) == 0) {
                 file = g_fopen(dl->filename, "wb");
                 if (file != NULL) {
-                    fwrite (MSG_RESPONSE_BODY(msg), 1, MSG_RESPONSE_LEN(msg), file);
+                    fwrite (g_bytes_get_data(body, NULL), 1, g_bytes_get_size(body), file);
                     file_saved = TRUE;
-                    g_debug("Wrote "MSG_RESPONSE_LEN_FORMAT" bytes to %s", MSG_RESPONSE_LEN(msg), dl->filename);
+                    g_debug("Wrote "MSG_RESPONSE_LEN_FORMAT" bytes to %s", g_bytes_get_size(body), dl->filename);
                     fclose (file);
 
                 }
@@ -786,7 +783,7 @@ osm_gps_map_tile_download_complete (SoupSession *session, SoupMessage *msg, gpoi
                 /* parse file directly from memory */
                 if (extension) {
                     loader = gdk_pixbuf_loader_new_with_type (extension+1, NULL);
-                    if (!gdk_pixbuf_loader_write (loader, (unsigned char*)MSG_RESPONSE_BODY(msg), MSG_RESPONSE_LEN(msg), NULL))
+                    if (!gdk_pixbuf_loader_write (loader, (unsigned char*)g_bytes_get_data(body, NULL), g_bytes_get_size(body), NULL))
                     {
                         g_warning("Error: Decoding of image failed");
                     }
@@ -824,21 +821,21 @@ osm_gps_map_tile_download_complete (SoupSession *session, SoupMessage *msg, gpoi
         g_free(dl->filename);
         g_free(dl);
     } else {
-        if ((msg->status_code == SOUP_STATUS_NOT_FOUND) || (msg->status_code == SOUP_STATUS_FORBIDDEN)) {
+        if ((soup_status == SOUP_STATUS_NOT_FOUND) || (soup_status == SOUP_STATUS_FORBIDDEN)) {
             g_hash_table_insert(priv->missing_tiles, dl->uri, NULL);
             g_hash_table_remove(priv->tile_queue, dl->uri);
             g_object_notify(G_OBJECT(map), "tiles-queued");
-        } else if (msg->status_code == SOUP_STATUS_CANCELLED) {
+        } else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
             /* called as application exit or after osm_gps_map_download_cancel_all */
             g_hash_table_remove(priv->tile_queue, dl->uri);
             g_object_notify(G_OBJECT(map), "tiles-queued");
         } else {
-            g_warning("Error downloading tile: %d - %s", msg->status_code, msg->reason_phrase);
-            dl->ttl--;
-            if (dl->ttl) {
-                soup_session_requeue_message(session, msg);
-                return;
-            }
+            g_warning("Error downloading tile: %d - %s", soup_status, soup_status_get_phrase(soup_status));
+            //dl->ttl--;
+            //if (dl->ttl) {
+            //    soup_session_requeue_message(session, msg);
+            //    return;
+            //}
 
             g_hash_table_remove(priv->tile_queue, dl->uri);
             g_object_notify(G_OBJECT(map), "tiles-queued");
@@ -888,21 +885,26 @@ osm_gps_map_download_tile (OsmGpsMap *map, int zoom, int x, int y, gboolean redr
             if (priv->is_google) {
                 //Set maps.google.com as the referrer
                 g_debug("Setting Google Referrer");
-                soup_message_headers_append(msg->request_headers, "Referer", "http://maps.google.com/");
+                soup_message_headers_append(soup_message_get_request_headers(msg), "Referer", "http://maps.google.com/");
                 //For google satelite also set the appropriate cookie value
                 if (priv->uri_format & URI_HAS_Q) {
                     const char *cookie = g_getenv("GOOGLE_COOKIE");
                     if (cookie) {
                         g_debug("Adding Google Cookie");
-                        soup_message_headers_append(msg->request_headers, "Cookie", cookie);
+                        soup_message_headers_append(soup_message_get_request_headers(msg), "Cookie", cookie);
                     }
                 }
             }
 
-            g_hash_table_insert (priv->tile_queue, dl->uri, msg);
+            GCancellable *cancellable = g_cancellable_new ();
+            g_hash_table_insert (priv->tile_queue, dl->uri, cancellable);
             g_object_notify (G_OBJECT (map), "tiles-queued");
             /* the soup session unrefs the message when the download finishes */
-            soup_session_queue_message (priv->soup_session, msg, osm_gps_map_tile_download_complete, dl);
+            soup_session_send_and_read_async(priv->soup_session, msg,
+                                    G_PRIORITY_DEFAULT,
+                                    cancellable,
+                                    (GAsyncReadyCallback)osm_gps_map_tile_download_complete,
+                                    dl);
         } else {
             g_warning("Could not create soup message");
             g_free(dl->uri);
@@ -1051,7 +1053,7 @@ osm_gps_map_load_tile (OsmGpsMap *map, cairo_t *cr, int zoom, int x, int y, int
 
     g_debug("Load actual tile %d,%d (%d,%d) z:%d", x, y, offset_x, offset_y, zoom);
 
-    if (priv->map_source == OSM_GPS_MAP_SOURCE_NULL) {
+    if (priv->map_source == OSM_GPS_MAP_SOURCE_NULL && priv->repo_uri == NULL) {
         osm_gps_map_blit_tile(map, priv->null_tile, cr, offset_x, offset_y,
                               priv->map_zoom, target_x, target_y);
         return;
@@ -1181,6 +1183,10 @@ osm_gps_map_print_track (OsmGpsMap *map, OsmGpsMapTrack *track, cairo_t *cr)
     map_y0 = priv->map_y - EXTRA_BORDER;
 
     int last_x = 0, last_y = 0;
+    int x_pi = lon2pixel(priv->map_zoom, M_PI) - map_x0;
+    int x_minus_pi = lon2pixel(priv->map_zoom, - M_PI) - map_x0;
+    int double_pi = x_pi - x_minus_pi;
+    float last_lon;
     for(pt = points; pt != NULL; pt = pt->next)
     {
         OsmGpsMapPoint *tp = pt->data;
@@ -1190,7 +1196,33 @@ osm_gps_map_print_track (OsmGpsMap *map, OsmGpsMapTrack *track, cairo_t *cr)
 
         /* first time through loop */
         if (pt == points)
+        {
             cairo_move_to(cr, x, y);
+        }
+        else if (fabs(tp->rlon - last_lon) > M_PI && x != last_x)
+        {
+            /* instead of drawing to (x, y), draw a first segment to the date change line,
+               and a second segment from the other date change line to (x, y) */
+            int interm_y;
+            if (last_lon > 0)
+            {
+                /* tp->rlon is < 0 */
+                interm_y = (int)(last_y + (float)(y - last_y) / (float)((x + double_pi) - last_x) * (float)(x_pi - last_x));
+                cairo_line_to(cr, x_pi, interm_y);
+                cairo_stroke(cr);
+                cairo_move_to(cr, x_minus_pi, interm_y);
+            }
+            else
+            {
+                /* tp->rlon is > 0 */
+                interm_y = (int)(last_y + (float)(y - last_y) / (float)((x - double_pi) - last_x) * (float)(x_minus_pi - last_x));
+                cairo_line_to(cr, x_minus_pi, interm_y);
+                cairo_stroke(cr);
+                cairo_move_to(cr, x_pi, interm_y);
+            }
+            max_x = x_pi;
+            min_x = x_minus_pi;
+        }
 
         cairo_line_to(cr, x, y);
         cairo_stroke(cr);
@@ -1217,6 +1249,7 @@ osm_gps_map_print_track (OsmGpsMap *map, OsmGpsMapTrack *track, cairo_t *cr)
 
         last_x = x;
         last_y = y;
+        last_lon = tp->rlon;
     }
 
     gtk_widget_queue_draw_area (
@@ -1643,7 +1676,7 @@ osm_gps_map_init (OsmGpsMap *object)
     int i;
     OsmGpsMapPrivate *priv;
 
-    priv = G_TYPE_INSTANCE_GET_PRIVATE (object, OSM_TYPE_GPS_MAP, OsmGpsMapPrivate);
+    priv = osm_gps_map_get_instance_private (object);
     object->priv = priv;
 
     priv->pixmap = NULL;
@@ -1680,18 +1713,8 @@ osm_gps_map_init (OsmGpsMap *object)
 
 
     /* set the user agent */
-#ifdef SOUP_OLD_SESSION
-    // libsoup pre 2.42.0 had explicit syn/async session
-    priv->soup_session =
-        soup_session_async_new_with_options(SOUP_SESSION_USER_AGENT,
-                                            USER_AGENT, NULL);
-#else
-    // lisoup since 2.42.0 has universal session, only methods can be sync/async
-    // and we use async
-    priv->soup_session =
-        soup_session_new_with_options(SOUP_SESSION_USER_AGENT,
-                                            USER_AGENT, NULL);
-#endif
+    priv->soup_session = soup_session_new ();
+    soup_session_set_user_agent (priv->soup_session, USER_AGENT);
 
     /* Hash table which maps tile d/l URIs to SoupMessage requests, the hashtable
        must free the key, the soup session unrefs the message */
@@ -1922,10 +1945,10 @@ osm_gps_map_set_property (GObject *object, guint prop_id, const GValue *value, G
                 g_debug("Setting proxy server: %s", priv->proxy_uri);
 
                 GValue val = {0};
-                SoupURI* uri = soup_uri_new(priv->proxy_uri);
-                g_value_init(&val, SOUP_TYPE_URI);
+                GUri* uri = g_uri_parse(priv->proxy_uri, SOUP_HTTP_URI_FLAGS, NULL);
+                g_value_init(&val, G_TYPE_URI);
                 g_value_take_boxed(&val, uri);
-                g_object_set_property(G_OBJECT(priv->soup_session),SOUP_SESSION_PROXY_URI,&val);
+                g_object_set_property(G_OBJECT(priv->soup_session),"proxy-resolver",&val);
 
             } else {
                 g_free(priv->proxy_uri);
@@ -1945,7 +1968,7 @@ osm_gps_map_set_property (GObject *object, guint prop_id, const GValue *value, G
                 priv->user_agent = NULL;
                 g_value_set_string (&full_user_agent, USER_AGENT);
             }
-            g_object_set_property(G_OBJECT(priv->soup_session),SOUP_SESSION_USER_AGENT, &full_user_agent);
+            g_object_set_property(G_OBJECT(priv->soup_session),"user-agent", &full_user_agent);
             break;
         case PROP_TILE_CACHE_DIR:
             if ( g_value_get_string(value) ) {
@@ -2010,9 +2033,6 @@ osm_gps_map_set_property (GObject *object, guint prop_id, const GValue *value, G
                priv->map_source >= OSM_GPS_MAP_SOURCE_NULL &&
                priv->map_source <= OSM_GPS_MAP_SOURCE_LAST) {
 
-                if (!priv->is_constructed)
-                    g_critical("Map source setup called twice");
-
                 /* we now have to switch the entire map */
                 osm_gps_map_setup(map);
 
@@ -2509,8 +2529,6 @@ osm_gps_map_class_init (OsmGpsMapClass *klass)
     GObjectClass* object_class;
     GtkWidgetClass *widget_class;
 
-    g_type_class_add_private (klass, sizeof (OsmGpsMapPrivate));
-
     object_class = G_OBJECT_CLASS (klass);
     object_class->dispose = osm_gps_map_dispose;
     object_class->finalize = osm_gps_map_finalize;
@@ -2987,9 +3005,9 @@ osm_gps_map_download_maps (OsmGpsMap *map, OsmGpsMapPoint *pt1, OsmGpsMapPoint *
 }
 
 static void
-cancel_message (char *key, SoupMessage *value, SoupSession *user_data)
+cancel_message (char *key, GCancellable *cancellable, void *userdata)
 {
-    soup_session_cancel_message (user_data, value, SOUP_STATUS_CANCELLED);
+    g_cancellable_cancel(cancellable);
 }
 
 /**
@@ -2997,7 +3015,7 @@ cancel_message (char *key, SoupMessage *value, SoupSession *user_data)
  * @map: a #OsmGpsMap widget
  *
  * Cancels all tiles currently being downloaded. Typically used if you wish to
- * cacel a large number of tiles queued using osm_gps_map_download_maps()
+ * cancel a large number of tiles queued using osm_gps_map_download_maps()
  *
  * Since: 0.7.0
  **/
@@ -3005,7 +3023,7 @@ void
 osm_gps_map_download_cancel_all (OsmGpsMap *map)
 {
     OsmGpsMapPrivate *priv = map->priv;
-    g_hash_table_foreach (priv->tile_queue, (GHFunc)cancel_message, priv->soup_session);
+    g_hash_table_foreach (priv->tile_queue, (GHFunc)cancel_message, NULL);
 }
 
 /**


=====================================
tests/test.py
=====================================
@@ -0,0 +1,126 @@
+#!/usr/bin/env python3
+import unittest
+import cairo
+import io
+
+import gi
+gi.require_version('OsmGpsMap', '1.0')
+
+from gi.repository import OsmGpsMap
+from gi.repository import Gdk, GdkPixbuf, Gtk
+
+class TestOsmGpsMap(unittest.TestCase):
+	def setUp(self):
+		self.lat = 50
+		self.lon = 13
+		self.zoom = 15
+		self.osm = OsmGpsMap.Map(user_agent="test/0.1")
+		
+	def test_map(self):
+		test_window = Gtk.Window()
+		test_window.set_title("OsmGpsMap")
+		test_window.connect("destroy", Gtk.main_quit)
+		test_window.show()
+		test_window.set_size_request(640, 480)
+		test_window.add(self.osm)
+		test_window.show_all()
+		
+		self.osm.set_zoom(self.zoom)
+		self.assertEqual(self.osm.get_property('zoom'), self.zoom)
+		self.osm.zoom_in()
+		self.assertEqual(self.osm.get_property('zoom'), self.zoom+1)
+		self.osm.zoom_out()
+		self.assertEqual(self.osm.get_property('zoom'), self.zoom)
+		
+		self.osm.set_center_and_zoom(self.lat, self.lon, self.zoom)
+		self.assertEqual(self.osm.get_property("latitude"), self.lat)
+		self.assertEqual(self.osm.get_property("longitude"), self.lon)
+		
+		self.lat += 1
+		self.lon += 1
+		self.osm.set_center(self.lat, self.lon)
+		self.assertEqual(self.osm.get_property("latitude"), self.lat)
+		self.assertEqual(self.osm.get_property("longitude"), self.lon)
+		
+		self.osm.set_property("map-source", OsmGpsMap.MapSource_t.OPENCYCLEMAP)
+		self.osm.set_property("map-source", OsmGpsMap.MapSource_t.OPENSTREETMAP)
+		
+		self.osm.set_property("auto-center", False)
+		self.osm.set_property("auto-center", True)
+
+		self.osm.set_property("user-agent", "test/0.2")
+		self.assertEqual(self.osm.get_property("user-agent"), "test/0.2")
+		self.osm.set_property("user-agent", None)
+		self.assertEqual(self.osm.get_property("user-agent"), None)
+		
+		self.osm.gps_add(self.lat, self.lon, heading=OsmGpsMap.MAP_INVALID);
+		track = self.osm.gps_get_track()
+		self.assertEqual(type(track), OsmGpsMap.MapTrack)
+		self.osm.gps_clear()
+		
+	def test_layer(self):
+		osd = OsmGpsMap.MapOsd(show_zoom=True, show_coordinates=False, show_scale=False, show_dpad=True, show_gps_in_dpad=True)
+		self.osm.layer_add(osd)
+		self.osm.layer_remove(osd)
+		
+	def test_image(self):
+		size = 16
+		drawable = cairo.ImageSurface(cairo.FORMAT_RGB24, size, size)
+		ctx = cairo.Context(drawable)
+		# transparent background
+		ctx.set_source_rgba(1, 1, 1, 1)
+		ctx.rectangle(0, 0, size, size)
+		ctx.fill()
+		ctx.stroke()
+		# red arc
+		ctx.set_source_rgb(1, 0, 0)
+		ctx.arc(size/2, size/2, size/2-1, 0, 3.14*2)
+		ctx.fill()
+		ctx.stroke()
+		
+		# convert the cairo context to a GdkPixbuf
+		buffer = io.BytesIO()
+		drawable.write_to_png(buffer)
+		loader = GdkPixbuf.PixbufLoader.new_with_type('png')
+		loader.write(buffer.getvalue())
+		buffer.close()
+		loader.close()
+		pixbuf = loader.get_pixbuf()
+		image = pixbuf.add_alpha(True , 255, 255, 255)
+		
+		for x in range(0, 5):
+			pointer = self.osm.image_add(self.lat+x, self.lon+x, image)
+		
+		self.osm.image_remove(pointer)
+		self.osm.image_remove_all()
+		
+	def test_track(self):
+		track = OsmGpsMap.MapTrack()
+		self.osm.track_add(track)
+		
+		color = Gdk.RGBA(1, 0, 1, 0)
+		track.set_property('color', color)
+		color2 = track.get_color()
+		self.assertEqual(color, color2)
+		
+		points = []
+		for x in range(0, 5):
+			point = OsmGpsMap.MapPoint.new_degrees(self.lat+x, self.lon+x)
+			track.add_point(point)
+			points.append(point)
+		
+		self.assertEqual(track.n_points(), 5)
+		self.assertEqual(track.get_length(), 522318.175858659)
+		
+		track.remove_point(3)
+		self.assertEqual(track.n_points(), 4)
+		
+		self.assertEqual(type(track.get_point(3)), OsmGpsMap.MapPoint)
+		
+		returned_points = track.get_points()
+		self.assertEqual(len(returned_points), 4)
+		
+		self.osm.track_remove(track)
+
+if __name__ == "__main__":
+	unittest.main()



View it on GitLab: https://salsa.debian.org/debian-gis-team/osm-gps-map/-/compare/b097a63b35c99f442b5ff67e3d6cdd3f2f929a95...9d53bcde173236f9747d8a4b03a2a843db23ed9a

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/osm-gps-map/-/compare/b097a63b35c99f442b5ff67e3d6cdd3f2f929a95...9d53bcde173236f9747d8a4b03a2a843db23ed9a
You're receiving this email because of your account on salsa.debian.org. Manage all notifications: https://salsa.debian.org/-/profile/notifications | Help: https://salsa.debian.org/help


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20260815/47561ce2/attachment-0001.htm>


More information about the Pkg-grass-devel mailing list