Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package liferea for openSUSE:Factory checked 
in at 2026-05-30 22:55:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/liferea (Old)
 and      /work/SRC/openSUSE:Factory/.liferea.new.1937 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "liferea"

Sat May 30 22:55:59 2026 rev:20 rq:1355928 version:1.16.10

Changes:
--------
--- /work/SRC/openSUSE:Factory/liferea/liferea.changes  2026-05-05 
15:17:27.504304805 +0200
+++ /work/SRC/openSUSE:Factory/.liferea.new.1937/liferea.changes        
2026-05-30 22:57:50.103533832 +0200
@@ -1,0 +2,9 @@
+Tue May 26 07:46:22 UTC 2026 - Bjørn Lie <[email protected]>
+
+- Update to version 1.16.10:
+  + Fix glib >= 2.86 required
+  + Fix duplicate favicon fetch
+  + Fix update state persistence that caused unnecessary feed
+    updates.
+
+-------------------------------------------------------------------

Old:
----
  liferea-1.16.9.tar.xz

New:
----
  liferea-1.16.10.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ liferea.spec ++++++
--- /var/tmp/diff_new_pack.u0hf7Y/_old  2026-05-30 22:57:51.395586846 +0200
+++ /var/tmp/diff_new_pack.u0hf7Y/_new  2026-05-30 22:57:51.399587010 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           liferea
-Version:        1.16.9
+Version:        1.16.10
 Release:        0
 Summary:        Linux Feed Reader
 License:        GPL-2.0-only
@@ -33,7 +33,7 @@
 BuildRequires:  intltool >= 0.40.0
 BuildRequires:  libtool
 BuildRequires:  pkgconfig(fribidi)
-BuildRequires:  pkgconfig(glib-2.0) >= 2.74.0
+BuildRequires:  pkgconfig(glib-2.0) >= 2.86.0
 BuildRequires:  pkgconfig(gobject-introspection-1.0)
 BuildRequires:  pkgconfig(gsettings-desktop-schemas)
 BuildRequires:  pkgconfig(gtk+-3.0) >= 3.4.0

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.u0hf7Y/_old  2026-05-30 22:57:51.431588323 +0200
+++ /var/tmp/diff_new_pack.u0hf7Y/_new  2026-05-30 22:57:51.439588651 +0200
@@ -1,5 +1,5 @@
-mtime: 1777797182
-commit: b0927c9bf0872373c97cda93e0ae909f5a6dad88ad134c49da2471369c60bc2f
+mtime: 1779781721
+commit: d062e45e54b230ecc88a830ea7b262bffb350cd7e7ce52cb9713c3bde647e151
 url: https://src.opensuse.org/GNOME/liferea
 revision: factory
 

++++++ _service ++++++
--- /var/tmp/diff_new_pack.u0hf7Y/_old  2026-05-30 22:57:51.467589800 +0200
+++ /var/tmp/diff_new_pack.u0hf7Y/_new  2026-05-30 22:57:51.471589964 +0200
@@ -3,7 +3,7 @@
   <service name="obs_scm" mode="manual">
     <param name="scm">git</param>
     <param name="url">https://github.com/lwindolf/liferea.git</param>
-    <param name="revision">v1.16.9</param>
+    <param name="revision">v1.16.10</param>
     <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
     <param name="versionrewrite-pattern">v?(.*)\+0</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-05-26 09:48:41.000000000 +0200
@@ -0,0 +1,4 @@
+*.obscpio
+*.osc
+_build.*
+.pbuild

++++++ liferea-1.16.9.tar.xz -> liferea-1.16.10.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/liferea-1.16.9/ChangeLog 
new/liferea-1.16.10/ChangeLog
--- old/liferea-1.16.9/ChangeLog        2026-05-02 14:18:21.000000000 +0200
+++ new/liferea-1.16.10/ChangeLog       2026-05-25 18:49:20.000000000 +0200
@@ -1,3 +1,17 @@
+2026-05-25  Lars Windolf <[email protected]>
+
+       Version 1.16.10
+
+       * Fixes #1516: glib >= 2.86 required
+         (Lars Windolf)
+
+       * Fixes #1508: Duplicate favicon fetch
+         (Lars Windolf)
+
+       * Fixes update state persistence that caused unnecessary feed updates. 
+         (Lars Windolf)
+
+
 2026-05-02  Lars Windolf <[email protected]>
 
        Version 1.16.9
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/liferea-1.16.9/configure.ac 
new/liferea-1.16.10/configure.ac
--- old/liferea-1.16.9/configure.ac     2026-05-02 14:18:21.000000000 +0200
+++ new/liferea-1.16.10/configure.ac    2026-05-25 18:49:20.000000000 +0200
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 
-AC_INIT([liferea],[1.16.9])
+AC_INIT([liferea],[1.16.10])
 AC_CANONICAL_HOST
 AC_CONFIG_SRCDIR([src/feedlist.c])
 
@@ -44,7 +44,7 @@
 # Mandatory library dependencies
 
 pkg_modules="  gtk+-3.0 >= 3.24.0
-               glib-2.0 >= 2.68.0
+               glib-2.0 >= 2.86.0
                gio-2.0 >= 2.50.0
                pango >= 1.4.0 
                libxml-2.0 >= 2.6.27
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/liferea-1.16.9/src/db.c new/liferea-1.16.10/src/db.c
--- old/liferea-1.16.9/src/db.c 2026-05-02 14:18:21.000000000 +0200
+++ new/liferea-1.16.10/src/db.c        2026-05-25 18:49:20.000000000 +0200
@@ -1,7 +1,7 @@
 /**
  * @file db.c sqlite backend
  *
- * Copyright (C) 2007-2024  Lars Windolf <[email protected]>
+ * Copyright (C) 2007-2026  Lars Windolf <[email protected]>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -472,9 +472,9 @@
        /* 1. Create tables if they do not exist yet */
        db_exec ("CREATE TABLE items ("
                 "   item_id            INTEGER PRIMARY KEY AUTOINCREMENT,"
-                        "   parent_item_id     INTEGER,"
+                "   parent_item_id     INTEGER,"
                 "   node_id            TEXT," /* FIXME: migrate node ids to 
real integers */
-                        "   parent_node_id     TEXT," /* FIXME: migrate node 
ids to real integers */
+                "   parent_node_id     TEXT," /* FIXME: migrate node ids to 
real integers */
                 "   title              TEXT,"
                 "   read               INTEGER,"
                 "   updated            INTEGER,"
@@ -486,7 +486,7 @@
                 "   description        TEXT,"
                 "   date               INTEGER,"
                 "   comment_feed_id    TEXT,"
-                        "   comment            INTEGER"
+                "   comment            INTEGER"
                 ");");
 
        db_exec ("CREATE INDEX items_idx ON items (source_id);");
@@ -547,6 +547,21 @@
                 "   PRIMARY KEY (node_id, item_id)"
                 ");");
 
+       db_exec ("CREATE TABLE update_state ("
+                "   node_id            STRING,"
+                "   last_modified      STRING,"
+                "   last_poll          INTEGER,"
+                "   last_favicon_poll  INTEGER,"
+                "   cookies            STRING,"
+                "   etag               STRING,"
+                "   last_update        INTEGER,"
+                "   max_age_minutes    INTEGER,"
+                "   syn_frequency      INTEGER,"
+                "   syn_period         INTEGER,"
+                "   ttl                INTEGER,"
+                "   PRIMARY KEY (node_id)"
+                ");");
+
        db_end_transaction ();
 
        /* 2. Removing old triggers */
@@ -607,6 +622,7 @@
                 "   DELETE FROM node WHERE node_id = old.node_id; "
                 "   DELETE FROM subscription_metadata WHERE node_id = 
old.node_id; "
                 "   DELETE FROM search_folder_items WHERE parent_node_id = 
old.node_id; "
+                "   DELETE FROM update_state WHERE node_id = old.node_id; "
                 "END;");
 
        /* Note: view counting triggers are set up in the view preparation code 
(see db_view_create()) */
@@ -752,6 +768,26 @@
        db_new_statement ("nodeRemoveStmt",
                          "DELETE FROM node WHERE node_id = ?;");
 
+       db_new_statement ("updateStateLoadStmt",
+                         "SELECT "
+                         "last_modified,"
+                         "last_poll,"
+                         "last_favicon_poll,"
+                         "cookies,"
+                         "etag,"
+                         "last_update,"
+                         "max_age_minutes,"
+                         "syn_frequency,"
+                         "syn_period,"
+                         "ttl "
+                         "FROM update_state "
+                         "WHERE node_id = ?");
+                        
+       db_new_statement ("updateStateSaveStmt",
+                         "REPLACE INTO update_state "
+                         
"(node_id,last_modified,last_poll,last_favicon_poll,cookies,etag,max_age_minutes,syn_frequency,syn_period,ttl)
 "
+                         "VALUES (?,?,?,?,?,?,?,?,?,?)");
+
        g_assert (sqlite3_get_autocommit (db));
 
 }
@@ -1438,6 +1474,67 @@
        return count;
 }
 
+gboolean
+db_update_state_load (const gchar *id,
+                      updateStatePtr updateState)
+{
+       sqlite3_stmt    *stmt;
+       gint            res;
+
+       debug (DEBUG_DB, "loading subscription %s update state", id);
+
+       stmt = db_get_statement ("updateStateLoadStmt");
+       sqlite3_bind_text (stmt, 1, id, -1, SQLITE_TRANSIENT);
+
+       res = sqlite3_step (stmt);
+       if (SQLITE_ROW == res) {
+               updateState->lastModified       = g_strdup ((const gchar *) 
sqlite3_column_text (stmt, 0));
+               updateState->lastPoll           = sqlite3_column_int64 (stmt, 
1);
+               updateState->lastFaviconPoll    = sqlite3_column_int64 (stmt, 
2);
+               updateState->cookies            = g_strdup ((const gchar *) 
sqlite3_column_text (stmt, 3));
+               updateState->etag               = g_strdup ((const gchar *) 
sqlite3_column_text (stmt, 4));
+               updateState->maxAgeMinutes      = sqlite3_column_int (stmt, 5);
+               updateState->synFrequency       = sqlite3_column_int (stmt, 6);
+               updateState->synPeriod          = sqlite3_column_int (stmt, 7);
+               updateState->timeToLive         = sqlite3_column_int (stmt, 8);
+       } else {
+               debug (DEBUG_DB, "Could not load update state for subscription 
%s (error code %d)!", id, res);
+       }
+
+       sqlite3_finalize (stmt);
+
+       return (SQLITE_ROW == res);
+}
+
+void
+db_update_state_save (const gchar *id,
+                      updateStatePtr updateState)
+{
+       sqlite3_stmt    *stmt;
+       gint            res;
+
+       debug (DEBUG_DB, "saving subscription %s update state", id);
+
+       stmt = db_get_statement ("updateStateSaveStmt");
+
+       sqlite3_bind_text  (stmt, 1, id, -1, SQLITE_TRANSIENT);
+       sqlite3_bind_text  (stmt, 2, updateState->lastModified, -1, 
SQLITE_TRANSIENT);
+       sqlite3_bind_int64 (stmt, 3, updateState->lastPoll);
+       sqlite3_bind_int64 (stmt, 4, updateState->lastFaviconPoll);
+       sqlite3_bind_text  (stmt, 5, updateState->cookies, -1, 
SQLITE_TRANSIENT);
+       sqlite3_bind_text  (stmt, 6, updateState->etag, -1, SQLITE_TRANSIENT);
+       sqlite3_bind_int   (stmt, 7, updateState->maxAgeMinutes);
+       sqlite3_bind_int   (stmt, 8, updateState->synFrequency);
+       sqlite3_bind_int   (stmt, 9, updateState->synPeriod);
+       sqlite3_bind_int   (stmt, 10, updateState->timeToLive);
+
+       res = sqlite3_step (stmt);
+       if (SQLITE_DONE != res)
+               g_warning ("Could not save update state for subscription %s 
(error code %d)!", id, res);
+
+       sqlite3_finalize (stmt);
+}
+
 static GSList *
 db_subscription_metadata_load (const gchar *id)
 {
@@ -1491,6 +1588,7 @@
 void
 db_subscription_load (subscriptionPtr subscription)
 {
+       db_update_state_load (subscription->node->id, 
subscription->updateState);
        if (subscription->metadata)
                metadata_list_free (subscription->metadata);
        subscription->metadata = db_subscription_metadata_load 
(subscription->node->id);
@@ -1522,6 +1620,7 @@
 
        sqlite3_finalize (stmt);
 
+       db_update_state_save (subscription->node->id, 
subscription->updateState);
        db_subscription_metadata_update (subscription);
 
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/liferea-1.16.9/src/favicon.c 
new/liferea-1.16.10/src/favicon.c
--- old/liferea-1.16.9/src/favicon.c    2026-05-02 14:18:21.000000000 +0200
+++ new/liferea-1.16.10/src/favicon.c   2026-05-25 18:49:20.000000000 +0200
@@ -146,6 +146,26 @@
        return slashes;
 }
 
+/* takes ownership of url if not in list, otherwise free's it */
+static GSList *
+favicon_urls_append (const gchar *info, GSList *urls, gchar *url)
+{
+       g_return_val_if_fail (url != NULL, urls);
+
+       /* Remove trailing slash from URL */
+       if (strlen(url) > 0 && url[strlen(url) - 1] == '/')
+               url[strlen(url) - 1] = 0;
+
+       if (!g_slist_find_custom (urls, url, (GCompareFunc)g_strcmp0)) {
+               debug (DEBUG_UPDATE, "%s: %s", info, url);
+               urls = g_slist_append (urls, url);
+       } else {
+               g_free (url);
+       }
+
+       return urls;
+}
+
 /*
  * This code tries to download from a series of URLs. If there are no
  * favicons, this will make five downloads, three of which will be 404
@@ -169,15 +189,13 @@
        /* case 1: the feed parser passed us an icon URL in the subscription 
metadata */
        if (metadata_list_get (subscription->metadata, "icon")) {
                tmp = g_strstrip (g_strdup (metadata_list_get 
(subscription->metadata, "icon")));
-               urls = g_slist_append (urls, tmp);
-               debug (DEBUG_UPDATE, "(1) adding favicon search URL: %s", tmp);
+               urls = favicon_urls_append ("(1) adding favicon search URL", 
urls, tmp);
        }
 
        /* case 2: */
        if (html_url && g_strstr_len (html_url, -1, "://")) {
                tmp = g_strstrip (g_strdup (html_url));
-               urls = g_slist_append (urls, tmp);
-               debug (DEBUG_UPDATE, "(2) adding favicon search URL: %s", tmp);
+               urls = favicon_urls_append ("(2) adding favicon search URL", 
urls, tmp);
        }
 
        /* case 3: */
@@ -191,8 +209,7 @@
                tmp = strrchr (tmp, '/');
                if (tmp) {
                        *tmp = 0;
-                       urls = g_slist_append (urls, g_strdup (tmp2));
-                       debug (DEBUG_UPDATE, "(3) adding favicon search URL: 
%s", tmp2);
+                       urls = favicon_urls_append ("(3) adding favicon search 
URL", urls, g_strdup (tmp2));
                }
                g_free (tmp2);
        }
@@ -206,13 +223,10 @@
                                tmp = strchr (tmp + 3, '/');
                                if (tmp) {
                                        *tmp = 0;
-                                       tmp = tmp2;
-                                       tmp2 = g_strdup_printf 
("%s/favicon.ico", tmp);
-                                       urls = g_slist_append (urls, tmp2);
-                                       debug (DEBUG_UPDATE, "(4) adding 
favicon source URL: %s", tmp2);
+                                       urls = favicon_urls_append ("(4) adding 
favicon source URL:", urls, g_strdup_printf ("%s/favicon.ico", tmp2));
                                }
                        }
-                       g_free (tmp);
+                       g_free (tmp2);
                }
        }
 
@@ -222,12 +236,9 @@
                tmp = strrchr(tmp, '/');
                if (tmp) {
                        *tmp = 0;
-                       tmp = tmp2;
-                       tmp2 = g_strdup_printf ("%s/favicon.ico", tmp);
-                       urls = g_slist_append (urls, tmp2);
-                       debug (DEBUG_UPDATE, "(5) adding favicon source URL: 
%s", tmp2);
+                       urls = favicon_urls_append ("(5) adding favicon source 
URL", urls, g_strdup_printf ("%s/favicon.ico", tmp2));
                }
-               g_free (tmp);
+               g_free (tmp2);
 
                /* case 6: */
                tmp = tmp2 = g_strstrip (g_strdup (source_url));
@@ -236,13 +247,10 @@
                        tmp = strchr (tmp + 3, '/');    /* to skip to first 
subpath */
                        if (tmp) {
                                *tmp = 0;
-                               tmp = tmp2;
-                               tmp2 = g_strdup_printf ("%s/favicon.ico", tmp);
-                               urls = g_slist_append (urls, tmp2);
-                               debug (DEBUG_UPDATE, "(6) adding favicon source 
URL: %s", tmp2);
+                               urls = favicon_urls_append ("(6) adding favicon 
source URL", urls, g_strdup_printf ("%s/favicon.ico", tmp2));
                        }
                }
-               g_free (tmp);
+               g_free (tmp2);
        }
        return urls;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/liferea-1.16.9/src/net.c 
new/liferea-1.16.10/src/net.c
--- old/liferea-1.16.9/src/net.c        2026-05-02 14:18:21.000000000 +0200
+++ new/liferea-1.16.10/src/net.c       2026-05-25 18:49:20.000000000 +0200
@@ -1,7 +1,7 @@
 /**
  * @file net.c  HTTP network access using libsoup
  *
- * Copyright (C) 2007-2023 Lars Windolf <[email protected]>
+ * Copyright (C) 2007-2026 Lars Windolf <[email protected]>
  * Copyright (C) 2009 Emilio Pozuelo Monfort <[email protected]>
  * Copyright (C) 2021 Lorenzo L. Ancora <[email protected]>
  *
@@ -75,7 +75,6 @@
        SoupSession             *session = SOUP_SESSION (obj);
        SoupMessage             *msg;
        UpdateJob *             job = (UpdateJob *)user_data;
-       GDateTime               *last_modified;
        const gchar             *tmp = NULL;
        GHashTable              *params;
        gboolean                revalidated = FALSE;
@@ -127,32 +126,17 @@
 
        job->result->contentType = g_strdup 
(soup_message_headers_get_content_type (soup_message_get_response_headers 
(msg), NULL));
 
-       /* Update last-modified date */
-       if (revalidated) {
-                job->result->updateState->lastModified = 
update_state_get_lastmodified (job->request->updateState);
-       } else {
-               tmp = soup_message_headers_get_one 
(soup_message_get_response_headers (msg), "Last-Modified");
-               if (tmp) {
-                       /* The string may be badly formatted, which will make
-                       * soup_date_new_from_string() return NULL */
-                       last_modified = soup_date_time_new_from_http_string 
(tmp);
-                       if (last_modified) {
-                               job->result->updateState->lastModified = 
g_date_time_to_unix (last_modified);
-                               g_date_time_unref (last_modified);
-                       }
-               }
-       }
-
-       /* Update ETag value */
+       /* Update last-modified and etag */
        if (revalidated) {
+               job->result->updateState->lastModified = g_strdup 
(update_state_get_lastmodified (job->request->updateState));
                job->result->updateState->etag = g_strdup 
(update_state_get_etag (job->request->updateState));
        } else {
-               tmp = soup_message_headers_get_one 
(soup_message_get_response_headers (msg), "ETag");
-               if (tmp) {
-                       job->result->updateState->etag = g_strdup (tmp);
-               }
+               update_state_set_lastmodified (job->result->updateState, 
soup_message_headers_get_one (soup_message_get_response_headers (msg), 
"Last-Modified"));
+               update_state_set_etag (job->result->updateState, 
soup_message_headers_get_one (soup_message_get_response_headers (msg), "ETag"));
        }
 
+       /* No cookie persisting, we support only cookie sending! */
+
        /* Update cache max-age  */
        tmp = soup_message_headers_get_list (soup_message_get_response_headers 
(msg), "Cache-Control");
        if (tmp) {
@@ -267,14 +251,9 @@
 
        /* Set the If-Modified-Since: header */
        if (job->request->updateState && update_state_get_lastmodified 
(job->request->updateState)) {
-               g_autofree gchar *datestr = NULL;
-               g_autoptr(GDateTime) date;
-
-               date = g_date_time_new_from_unix_utc 
(update_state_get_lastmodified (job->request->updateState));
-               datestr = soup_date_time_to_string (date, SOUP_DATE_HTTP);
                soup_message_headers_append (request_headers,
                                             "If-Modified-Since",
-                                            datestr);
+                                            update_state_get_lastmodified 
(job->request->updateState));
        }
 
        /* Set the If-None-Match header */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/liferea-1.16.9/src/tests/favicon.c 
new/liferea-1.16.10/src/tests/favicon.c
--- old/liferea-1.16.9/src/tests/favicon.c      2026-05-02 14:18:21.000000000 
+0200
+++ new/liferea-1.16.10/src/tests/favicon.c     2026-05-25 18:49:20.000000000 
+0200
@@ -1,7 +1,7 @@
 /**
  * @file favicon.c  Test cases for favicon auto discovery
  *
- * Copyright (C) 2020 Lars Windolf <[email protected]>
+ * Copyright (C) 2020-2026 Lars Windolf <[email protected]>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@
 
 #include <glib.h>
 
+#include "debug.h"
 #include "favicon.h"
 #include "metadata.h"
 #include "subscription.h"
@@ -53,12 +54,8 @@
        "https://slashdot.org/";,
        NULL,
        {
-               // 1.) is missing
-               "https://slashdot.org/";,
                "https://slashdot.org";,
                "https://slashdot.org/favicon.ico";,
-               "https://slashdot.org/favicon.ico";,
-               "https://slashdot.org/favicon.ico";,
                NULL
        }
 };
@@ -70,11 +67,9 @@
        "https://slashdot.org/favicon.ico";,
        {
                "https://slashdot.org/favicon.ico";,
-               "https://slashdot.org/news/";,
+               "https://slashdot.org/news";,
                "https://slashdot.org/feed";,
-               "https://slashdot.org/favicon.ico";,
                "https://slashdot.org/feed/favicon.ico";,
-               "https://slashdot.org/favicon.ico";,
                NULL
        }
 };
@@ -85,12 +80,10 @@
        "https://news.com/news/";,
        NULL,
        {
-               // 1.) is missing
-               "https://news.com/news/";,
+               "https://news.com/news";,
                "https://example.com";,
                "https://news.com/favicon.ico";,
                "https://example.com/favicon.ico";,
-               "https://example.com/favicon.ico";,
                NULL
        }
 };
@@ -178,6 +171,10 @@
 {
        g_test_init (&argc, &argv, NULL);
 
+        if (g_strv_contains ((const gchar **)argv, "--debug"))
+               debug_set_flags (DEBUG_UPDATE | DEBUG_HTML | DEBUG_PARSING);
+
+
        g_test_add_data_func ("/favicon/tc1", &tc1, &tc_favicon_get_urls);
        g_test_add_data_func ("/favicon/tc2", &tc2, &tc_favicon_get_urls);
        g_test_add_data_func ("/favicon/tc3", &tc3, &tc_favicon_get_urls);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/liferea-1.16.9/src/ui/liferea_browser.c 
new/liferea-1.16.10/src/ui/liferea_browser.c
--- old/liferea-1.16.9/src/ui/liferea_browser.c 2026-05-02 14:18:21.000000000 
+0200
+++ new/liferea-1.16.10/src/ui/liferea_browser.c        2026-05-25 
18:49:20.000000000 +0200
@@ -1,7 +1,7 @@
 /*
  * @file liferea_browser.c  Liferea embedded browser
  *
- * Copyright (C) 2003-2025 Lars Windolf <[email protected]>
+ * Copyright (C) 2003-2026 Lars Windolf <[email protected]>
  * Copyright (C) 2005-2006 Nathan J. Conrad <[email protected]>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -603,6 +603,8 @@
        tmp = g_string_new (liferea_browser_get_template (browser, name));
        g_string_replace (tmp, "REPLACE_MARKER", script, 1);
 
+       // do not use liferea_browser_write() as we need to write XHTML here
+       // which is produced by intltool
        liferea_webkit_write_html (browser->renderWidget, tmp->str, strlen 
(tmp->str), baseURL, "text/html");
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/liferea-1.16.9/src/update.c 
new/liferea-1.16.10/src/update.c
--- old/liferea-1.16.9/src/update.c     2026-05-02 14:18:21.000000000 +0200
+++ new/liferea-1.16.10/src/update.c    2026-05-25 18:49:20.000000000 +0200
@@ -1,7 +1,7 @@
 /**
  * @file update.c  generic update request and state processing
  *
- * Copyright (C) 2003-2024 Lars Windolf <[email protected]>
+ * Copyright (C) 2003-2026 Lars Windolf <[email protected]>
  * Copyright (C) 2004-2006 Nathan J. Conrad <[email protected]>
  * Copyright (C) 2009 Adrian Bunk <[email protected]>
  *
@@ -30,16 +30,19 @@
        return g_new0 (struct updateState, 1);
 }
 
-glong
+const gchar *
 update_state_get_lastmodified (updateStatePtr state)
 {
        return state->lastModified;
 }
 
 void
-update_state_set_lastmodified (updateStatePtr state, glong lastModified)
+update_state_set_lastmodified (updateStatePtr state, const gchar *lastModified)
 {
-       state->lastModified = lastModified;
+       g_free (state->lastModified);
+       state->lastModified = NULL;
+       if (lastModified)
+               state->lastModified = g_strdup (lastModified);
 }
 
 const gchar *
@@ -54,7 +57,7 @@
        g_free (state->etag);
        state->etag = NULL;
        if (etag)
-               state->etag = g_strdup(etag);
+               state->etag = g_strdup (etag);
 }
 
 void
@@ -106,6 +109,7 @@
        if (!updateState)
                return;
 
+       g_free (updateState->lastModified);
        g_free (updateState->cookies);
        g_free (updateState->etag);
        g_free (updateState);
@@ -238,4 +242,4 @@
        self->contentType = NULL;
        self->filterErrors = NULL;
        self->updateState = update_state_new ();
-}
\ No newline at end of file
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/liferea-1.16.9/src/update.h 
new/liferea-1.16.10/src/update.h
--- old/liferea-1.16.9/src/update.h     2026-05-02 14:18:21.000000000 +0200
+++ new/liferea-1.16.10/src/update.h    2026-05-25 18:49:20.000000000 +0200
@@ -1,7 +1,7 @@
 /**
  * @file update_request.h  generic update request processing
  *
- * Copyright (C) 2003-2024 Lars Windolf <[email protected]>
+ * Copyright (C) 2003-2026 Lars Windolf <[email protected]>
  * Copyright (C) 2004-2006 Nathan J. Conrad <[email protected]>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -54,7 +54,7 @@
 
 /* defines all state data an updatable object (e.g. a feed) needs */
 typedef struct updateState {
-       glong           lastModified;           /*<< Last modified string as 
sent by the server */
+       gchar           *lastModified;          /*<< Last modified as sent by 
the server */
        gint64          lastPoll;               /*<< time at which the feed was 
last updated */
        gint64          lastFaviconPoll;        /*<< time at which the feeds 
favicon was last updated */
        gchar           *cookies;               /*<< cookies to be used */
@@ -109,8 +109,8 @@
  */
 updateStatePtr update_state_copy (updateStatePtr state);
 
-glong update_state_get_lastmodified (updateStatePtr state);
-void update_state_set_lastmodified (updateStatePtr state, glong lastmodified);
+const gchar * update_state_get_lastmodified (updateStatePtr state);
+void update_state_set_lastmodified (updateStatePtr state, const gchar 
*lastmodified);
 
 const gchar * update_state_get_etag (updateStatePtr state);
 void update_state_set_etag (updateStatePtr state, const gchar *etag);

++++++ liferea.obsinfo ++++++
--- /var/tmp/diff_new_pack.u0hf7Y/_old  2026-05-30 22:57:52.187619343 +0200
+++ /var/tmp/diff_new_pack.u0hf7Y/_new  2026-05-30 22:57:52.195619671 +0200
@@ -1,5 +1,5 @@
 name: liferea
-version: 1.16.9
-mtime: 1777724301
-commit: 27e39b395bbc60ba1a8d231adeb9a2a3bdf340ae
+version: 1.16.10
+mtime: 1779727760
+commit: 3a6096c2ce47db742931668dcddf215416292aa1
 

Reply via email to