astroid: update to 0.17.

This commit is contained in:
rookiejet 2025-08-05 19:19:57 -04:00 committed by oreo639
parent 2dd06c3f4d
commit 735234e11b
4 changed files with 3 additions and 506 deletions

View file

@ -1,23 +0,0 @@
From 7fd64c41435a2b99fb9e0a5770a83ba30cd11450 Mon Sep 17 00:00:00 2001
From: "Stephan C. Buchert" <scb@irfu.se>
Date: Wed, 14 Jun 2023 17:44:05 +0200
Subject: [PATCH] compose_message: to load as byte array, 'file' must be
wrapped with copy.
---
src/compose_message.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/compose_message.cc b/src/compose_message.cc
index 189c20f99..329481f40 100644
--- a/src/compose_message.cc
+++ b/src/compose_message.cc
@@ -781,7 +781,7 @@ namespace Astroid {
} else {
/* load into byte array */
- refptr<Gio::File> fle = Glib::wrap (file, false);
+ refptr<Gio::File> fle = Glib::wrap (file, true);
refptr<Gio::FileInputStream> istr = fle->read ();
refptr<Glib::Bytes> b;

View file

@ -1,11 +0,0 @@
--- astroid-0.16/CMakeLists.txt 2021-08-05 15:31:11.000000000 +0200
+++ - 2023-07-03 21:53:30.304595787 +0200
@@ -145,7 +145,7 @@
# compile flags and options
#
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
include_directories (
${GTKMM3_INCLUDE_DIRS}

View file

@ -1,468 +0,0 @@
From a98affc88b03b18aa8e52ffccddf12a81141821a Mon Sep 17 00:00:00 2001
From: Johannes Rosenberger <johannes.rosenberger@tum.de>
Date: Tue, 4 Jun 2024 22:37:00 +0200
Subject: [PATCH] fix typo in CMakeLists.txt
---
CMakeLists.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5dd70705..8613572e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -338,7 +338,7 @@ target_link_libraries (
${GTKMM3_LDFLAGS}
${GLIBMM2_LDFLAGS}
${GIOMM2_LDFLAGS}
- ${GIOUINX_LDFLAGS}
+ ${GIOUNIX_LDFLAGS}
${LIBSOUP_LDFLAGS}
${GMIME_LDFLAGS}
${VTE2_LDFLAGS}
@@ -368,7 +368,7 @@ target_link_libraries (
${WEBKIT2GTK_LDFLAGS}
${GLIBMM2_LDFLAGS}
${GIOMM2_LDFLAGS}
- ${GIOUINX_LDFLAGS}
+ ${GIOUNIX_LDFLAGS}
${CMAKE_THREAD_LIBS_INIT}
${PROTOBUF_LIBRARIES}
${GTKMM3_LDFLAGS}
From 4c76a4cf6226752f5270197ba8747c7c7550e35e Mon Sep 17 00:00:00 2001
From: Johannes Rosenberger <johannes.rosenberger@tum.de>
Date: Tue, 4 Jun 2024 22:43:06 +0200
Subject: [PATCH 1/2] improve mailto uri handling
1. This introduces consistent mailto uri handling, supporting passing a
body and all headers that can be given as agruments to EditMessage,
namely, To, From, Cc, Bcc and Subject.
Other headers are not dropped but prepended to the email body with a note.
2. Positional (i.e., non-option) commandline arguments are now
interpreted as --mailto options.
3. Multiple --mailto options on the commandline are now supported, and are
merged into one mailto argument before being passed to EditMessage.
4. A consequence is that libsoup is not used any more, enabling
compatibility with webkit2gtk-4.1 while maintaining compatibility with
gio (glib) 2.16, and thus building on older and current distros.
---
.github/workflows/ci-debian-build-test.yml | 1 -
CMakeLists.txt | 6 +-
src/astroid.cc | 91 ++++++++++------------
src/astroid.hh | 1 +
src/message_thread.cc | 3 +-
src/modes/edit_message.cc | 89 +++++++++++++++++++--
src/modes/edit_message.hh | 4 +-
src/modes/thread_view/thread_view.cc | 4 -
8 files changed, 127 insertions(+), 72 deletions(-)
diff --git a/.github/workflows/ci-debian-build-test.yml b/.github/workflows/ci-debian-build-test.yml
index 3015b7f06..ddc33728f 100644
--- a/.github/workflows/ci-debian-build-test.yml
+++ b/.github/workflows/ci-debian-build-test.yml
@@ -59,7 +59,6 @@ jobs:
libpeas-dev \
libprotobuf-dev \
libsass-dev \
- libsoup2.4-dev \
libvte-2.91-dev \
libwebkit2gtk-${WEBKITGTK_VERSION}-dev \
ninja-build \
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8613572ec..498e4a260 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -98,8 +98,7 @@ pkg_check_modules (GLIBMM2 REQUIRED glibmm-2.4)
pkg_check_modules (WEBKIT2GTK REQUIRED webkit2gtk-4.0>=2.22)
pkg_check_modules (SASS REQUIRED libsass)
pkg_check_modules (GIOMM2 REQUIRED giomm-2.4)
-pkg_check_modules (GIOUNIX REQUIRED gio-unix-2.0)
-pkg_check_modules (LIBSOUP REQUIRED libsoup-2.4)
+pkg_check_modules (GIOUNIX REQUIRED gio-unix-2.0>=2.16)
string (REGEX REPLACE "([0-9]+\.[0-9]+)\.[0-9]+" "\\1" GMIME_MAJOR_MINOR ${Notmuch_GMIME_VERSION})
pkg_check_modules (GMIME REQUIRED gmime-${GMIME_MAJOR_MINOR}>=${Notmuch_GMIME_VERSION})
@@ -154,7 +153,6 @@ include_directories (
${GLIBMM2_INCLUDE_DIRS}
${GIOMM2_INCLUDE_DIRS}
${GIOUNIX_INCLUDE_DIRS}
- ${LIBSOUP_INCLUDE_DIRS}
${GMIME_INCLUDE_DIRS}
${WEBKIT2GTK_INCLUDE_DIRS}
${VTE2_INCLUDE_DIRS}
@@ -169,7 +167,6 @@ add_compile_options (
${GLIBMM2_CFLAGS}
${GIOMM2_CFLAGS}
${GIOUNIX_CFLAGS}
- ${LIBSOUP_CFLAGS}
${GMIME_CFLAGS}
${WEBKIT2GTK_CFLAGS}
${VTE2_CFLAGS}
@@ -339,7 +336,6 @@ target_link_libraries (
${GLIBMM2_LDFLAGS}
${GIOMM2_LDFLAGS}
${GIOUNIX_LDFLAGS}
- ${LIBSOUP_LDFLAGS}
${GMIME_LDFLAGS}
${VTE2_LDFLAGS}
${SASS_LDFLAGS}
diff --git a/src/astroid.cc b/src/astroid.cc
index 3d5dc9f54..b23e8f6e6 100644
--- a/src/astroid.cc
+++ b/src/astroid.cc
@@ -53,8 +53,6 @@
# include <gmime/gmime.h>
# include <utils/gmime/gmime-compat.h>
-# include <libsoup/soup.h>
-
using namespace std;
using namespace boost::filesystem;
@@ -126,7 +124,7 @@ namespace Astroid {
# ifdef DEBUG
( "test-config,t", "use test config (same as used when tests are run), only makes sense from the source root")
# endif
- ( "mailto,m", po::value<ustring>(), "compose mail with mailto url or address")
+ ( "mailto,m", po::value< vector<ustring> >()->composing(), "compose mail with mailto url or address")
( "no-auto-poll", "do not poll automatically")
( "disable-log", "disable logging")
( "log-stdout", "log to stdout regardless of configuration")
@@ -139,6 +137,9 @@ namespace Astroid {
# else
;
# endif
+
+ /* default option (without --<option> prefix) */
+ pdesc.add("mailto", -1);
}
// }}}
@@ -153,7 +154,11 @@ namespace Astroid {
bool show_help = false;
try {
- po::store ( po::parse_command_line (argc, argv, desc), vm );
+ po::store ( po::command_line_parser(argc, argv).
+ options(desc).
+ positional(pdesc).
+ run(),
+ vm );
} catch (po::unknown_option &ex) {
LOG (error) << "unknown option" << endl;
LOG (error) << ex.what() << endl;
@@ -438,7 +443,11 @@ namespace Astroid {
po::variables_map vm;
try {
- po::store ( po::parse_command_line (argc, argv, desc), vm );
+ po::store ( po::command_line_parser(argc, argv).
+ options(desc).
+ positional(pdesc).
+ run(),
+ vm );
} catch (po::unknown_option &ex) {
LOG (error) << "unknown option" << endl;
LOG (error) << ex.what() << endl;
@@ -446,8 +455,28 @@ namespace Astroid {
}
if (vm.count("mailto")) {
- ustring mailtourl = vm["mailto"].as<ustring>();
- send_mailto (mailtourl);
+ vector <ustring> mailto_list = vm["mailto"].as<vector <ustring>>();
+
+ // is the conversion from ustring to std::string really safe?
+ std::string mailto = "";
+ std::string next;
+
+ ustring::size_type sep;
+
+ for (std::vector<ustring>::size_type i = 0; i < mailto_list.size(); i++) {
+ next = mailto_list[i];
+ sep = next.find("?");
+ if (sep != next.npos)
+ next[sep] = '&';
+ if (next.substr(0, 7) == "mailto:")
+ next.erase(0,7);
+ mailto += "&to=" + next;
+ }
+
+ mailto[0] = '?';
+ mailto.insert(0, "mailto:");
+
+ send_mailto (mailto);
new_window = false;
}
@@ -545,53 +574,11 @@ namespace Astroid {
open_new_window ();
}
- void Astroid::send_mailto (ustring url) {
- LOG (info) << "astroid: mailto: " << url;
+ void Astroid::send_mailto (ustring uri) {
+ LOG (info) << "astroid: mailto: " << uri;
MainWindow * mw = (MainWindow*) get_windows ()[0];
-
- SoupURI *uri = soup_uri_new(url.c_str());
-
- if (SOUP_URI_IS_VALID(uri)) {
- /* we got an mailto url */
- ustring from, to, cc, bcc, subject, body;
-
- to = soup_uri_decode (soup_uri_get_path (uri));
-
- const char * soup_query = soup_uri_get_query (uri);
- if (soup_query) {
- std::istringstream query_string (soup_query);
- std::string keyval;
- while (std::getline(query_string, keyval, '&')) {
- ustring::size_type pos = keyval.find ("=");
-
- ustring key = keyval.substr (0, pos);
- key = key.lowercase ();
-
- ustring val = soup_uri_decode (keyval.substr (pos+1).c_str());
-
- if (key == "from") {
- from = ustring (val);
- } else if (key == "cc") {
- cc = ustring (val);
- } else if (key == "bcc") {
- bcc = ustring (val);
- } else if (key == "subject" ) {
- subject = ustring (val);
- } else if (key == "body") {
- body = ustring (val);
- }
- }
- }
-
- mw->add_mode (new EditMessage (mw, to, from, cc, bcc, subject, body));
-
- } else {
- /* we probably just got the address on the cmd line */
- mw->add_mode (new EditMessage (mw, url));
- }
-
- soup_uri_free (uri);
+ mw->add_mode (new EditMessage (mw, uri));
}
int Astroid::hint_level () {
diff --git a/src/astroid.hh b/src/astroid.hh
index f04803716..06089281a 100644
--- a/src/astroid.hh
+++ b/src/astroid.hh
@@ -94,6 +94,7 @@ namespace Astroid {
int _hint_level = 0;
po::options_description desc;
+ po::positional_options_description pdesc;
};
/* globally available instance of our main Astroid-class */
diff --git a/src/message_thread.cc b/src/message_thread.cc
index e84e9e5a1..5a66a5695 100644
--- a/src/message_thread.cc
+++ b/src/message_thread.cc
@@ -721,8 +721,7 @@ namespace Astroid {
ustring scheme = Glib::uri_parse_scheme (a);
if (scheme == "mailto") {
-
- a = a.substr (scheme.length ()+1, a.length () - scheme.length()-1);
+ a = a.substr (7);
UstringUtils::trim (a);
al += Address(a);
}
diff --git a/src/modes/edit_message.cc b/src/modes/edit_message.cc
index 3c236ff27..e695e0ece 100644
--- a/src/modes/edit_message.cc
+++ b/src/modes/edit_message.cc
@@ -6,6 +6,7 @@
# include <memory>
# include <gtkmm.h>
+# include <glib.h>
# include <boost/filesystem.hpp>
@@ -35,19 +36,88 @@ using namespace boost::filesystem;
namespace Astroid {
int EditMessage::edit_id = 0;
- EditMessage::EditMessage (MainWindow * mw, ustring _to, ustring _from, ustring _cc, ustring _bcc, ustring _subject, ustring _body) :
+ EditMessage::EditMessage (MainWindow * mw, ustring mailto, ustring _from, ustring _cc, ustring _bcc, ustring _subject, ustring _body) :
EditMessage (mw, false) { // {{{
-
in_read = false;
- to = _to;
- cc = _cc;
- bcc = _bcc;
- subject = _subject;
- body = _body;
+ to = "";
+ cc = "";
+ bcc = "";
+ subject = "";
+ body = "";
+
+ if (ustring (g_uri_parse_scheme(mailto.c_str())) != "mailto") {
+ // if the prefix 'mailto:' is missing, assume it is only the receipient's address
+ to = mailto;
+ } else {
+ mailto.erase(0,7);
+ ustring::size_type sep = mailto.find("?");
+
+ to = g_uri_unescape_string (mailto.substr(0, sep).c_str(), NULL);
+ try {
+ mailto.erase(0, sep+1);
+ } catch (const std::out_of_range& ex) {
+ mailto = "";
+ }
+
+ ustring key;
+ ustring val;
+
+ while (mailto.size() > 0) {
+ sep = mailto.find("=");
+ key = mailto.substr(0, sep);
+ try {
+ mailto.erase (0,sep+1);
+ } catch (const std::out_of_range& ex) {
+ // = not found, i.e. syntax error
+ break;
+ }
+ sep = mailto.find("&");
+ val = ustring (g_uri_unescape_string (mailto.substr(0, sep).c_str(), NULL));
+ try {
+ if (sep == mailto.npos) {
+ mailto = "";
+ } else {
+ mailto.erase (0, sep+1);
+ }
+ } catch (const std::out_of_range& ex) {
+ // no value
+ break;
+ }
+
+ key = key.lowercase ();
+ if (!val.empty ()) {
+ if (key == "to") {
+ append_address (&to, val);
+ } else if (key == "cc") {
+ append_address (&cc, val);
+ } else if (key == "bcc") {
+ append_address (&bcc, val);
+ } else if (key == "subject") {
+ subject += val;
+ } else if (key == "body") {
+ body += val;
+ } else if (key == "from") {
+ // we accept only one "From" address
+ set_from (Address (val));
+ } else {
+ body = ustring::compose ("Unknown header: %1: %2\n%3", key, val, body);
+ }
+ }
+ }
+ }
+
+ append_address (&cc, _cc);
+ append_address (&bcc, _bcc);
+ subject += _subject;
+ body += _body;
+
+
if (!_from.empty ()) {
+ // we accept only one "From" address
set_from (Address (_from));
}
+
/* reload message */
prepare_message ();
read_edited_message ();
@@ -1029,6 +1099,11 @@ namespace Astroid {
}
}
+ void EditMessage::append_address (ustring *s, ustring a) {
+ *s += (s->empty() ? a : "," + a);
+ }
+
+
/* }}} */
/* send message {{{ */
diff --git a/src/modes/edit_message.hh b/src/modes/edit_message.hh
index 4aa812ec7..cc30b07ac 100644
--- a/src/modes/edit_message.hh
+++ b/src/modes/edit_message.hh
@@ -31,7 +31,8 @@ namespace Astroid {
public:
EditMessage (MainWindow *, bool edit_when_ready = true);
- EditMessage (MainWindow *, ustring to, ustring from = "", ustring cc = "", ustring bcc = "", ustring subject = "", ustring body = "");
+ // mailto can be mailto uri or simply To: addresses
+ EditMessage (MainWindow *, ustring mailto, ustring from = "", ustring cc = "", ustring bcc = "", ustring subject = "", ustring body = "");
EditMessage (MainWindow *, refptr<Message> _msg);
~EditMessage ();
@@ -166,6 +167,7 @@ namespace Astroid {
void on_from_combo_changed ();
//bool on_from_combo_key_press (GdkEventKey *);
void on_element_action (int id, ThreadView::ElementAction action);
+ void append_address (ustring *s, ustring a);
public:
void grab_modal () override;
diff --git a/src/modes/thread_view/thread_view.cc b/src/modes/thread_view/thread_view.cc
index c38efcc8d..3dca442ab 100644
--- a/src/modes/thread_view/thread_view.cc
+++ b/src/modes/thread_view/thread_view.cc
@@ -196,10 +196,6 @@ namespace Astroid {
ustring scheme = Glib::uri_parse_scheme (uri);
if (scheme == "mailto") {
-
- uri = uri.substr (scheme.length ()+1, uri.length () - scheme.length()-1);
- UstringUtils::trim(uri);
-
main_window->add_mode (new EditMessage (main_window, uri));
} else if (scheme == "id" || scheme == "mid" ) {
From 52641da9716c9b60ef8b04caddd2307359ff44ed Mon Sep 17 00:00:00 2001
From: oreo639 <oreo6391@gmail.com>
Date: Thu, 29 Feb 2024 14:46:27 -0800
Subject: [PATCH 2/2] use webkit2gtk-4.1 when available and 4.0 as fallback
This is derived from 7ac88057441f432dbe44ea478e23dbfda70d32ac by oreo639 <oreo6391@gmail.com>,
but only the part necessary after 4c76a4cf6226752f5270197ba8747c7c7550e35e.
---
CMakeLists.txt | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 498e4a260..8991f07e9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -95,7 +95,10 @@ endif()
pkg_check_modules (GTKMM3 REQUIRED gtkmm-3.0>=3.10)
pkg_check_modules (GLIBMM2 REQUIRED glibmm-2.4)
-pkg_check_modules (WEBKIT2GTK REQUIRED webkit2gtk-4.0>=2.22)
+pkg_check_modules (WEBKIT2GTK webkit2gtk-4.1)
+if (NOT WEBKIT2GTK_FOUND)
+ pkg_check_modules (WEBKIT2GTK REQUIRED webkit2gtk-4.0>=2.22)
+endif ()
pkg_check_modules (SASS REQUIRED libsass)
pkg_check_modules (GIOMM2 REQUIRED giomm-2.4)
pkg_check_modules (GIOUNIX REQUIRED gio-unix-2.0>=2.16)

View file

@ -1,21 +1,20 @@
# Template file for 'astroid' # Template file for 'astroid'
pkgname=astroid pkgname=astroid
version=0.16 version=0.17
revision=14 revision=1
build_style=cmake build_style=cmake
build_helper=gir build_helper=gir
hostmakedepends="pkg-config scdoc protobuf gobject-introspection" hostmakedepends="pkg-config scdoc protobuf gobject-introspection"
makedepends="libnotmuch-devel gtkmm-devel libwebkit2gtk41-devel libsass-devel makedepends="libnotmuch-devel gtkmm-devel libwebkit2gtk41-devel libsass-devel
gmime3-devel boost-devel protobuf-devel vte3-devel gobject-introspection gmime3-devel boost-devel protobuf-devel vte3-devel gobject-introspection
libpeas-devel" libpeas-devel"
depends="gvim"
checkdepends="gnupg notmuch w3m cmark xvfb-run" checkdepends="gnupg notmuch w3m cmark xvfb-run"
short_desc="Graphical threads-with-tags style email client for Notmuch" short_desc="Graphical threads-with-tags style email client for Notmuch"
maintainer="Ameise <ameise@bitparlament.de>" maintainer="Ameise <ameise@bitparlament.de>"
license="GPL-3.0-or-later" license="GPL-3.0-or-later"
homepage="http://astroidmail.github.io/" homepage="http://astroidmail.github.io/"
distfiles="https://github.com/astroidmail/astroid/archive/v${version}.tar.gz" distfiles="https://github.com/astroidmail/astroid/archive/v${version}.tar.gz"
checksum=32ecb8c2fafe67f70c7d5f2bc60bda1796d98a56a75f7868c7c1ca50cd7baf5e checksum=dd419d4e11d1efa95979472e17cca5066799a5c64a595d5cea2b9e8d9f60f9c8
do_check() { do_check() {
cd build cd build