From 37b19a98ced8a47e289b2837850171e1495b16dc Mon Sep 17 00:00:00 2001 From: chrysos349 Date: Fri, 6 Oct 2023 16:31:45 +0300 Subject: [PATCH 1/2] New package: python3-syndom-1.0 --- .../add-author-extraction-for-feed-item.patch | 103 ++++++++++++++++++ srcpkgs/python3-syndom/template | 14 +++ 2 files changed, 117 insertions(+) create mode 100644 srcpkgs/python3-syndom/patches/add-author-extraction-for-feed-item.patch create mode 100644 srcpkgs/python3-syndom/template diff --git a/srcpkgs/python3-syndom/patches/add-author-extraction-for-feed-item.patch b/srcpkgs/python3-syndom/patches/add-author-extraction-for-feed-item.patch new file mode 100644 index 0000000000000..fec89c841e16e --- /dev/null +++ b/srcpkgs/python3-syndom/patches/add-author-extraction-for-feed-item.patch @@ -0,0 +1,103 @@ +From: Gabriele Musco +Date: Sat, 25 Mar 2023 14:13:44 +0100 +Subject: add author extraction for feed item + +(cherry picked from commit 75920321062d682437f3fb0319dad227d8b18f6c) +--- + src/feed_item.cpp | 12 +++++++++--- + src/feed_item.hpp | 14 ++++++++++++++ + src/pybind.cpp | 4 ++++ + 3 files changed, 27 insertions(+), 3 deletions(-) + +diff --git a/src/feed_item.cpp b/src/feed_item.cpp +index a08cd71..e0dbb8c 100644 +--- a/src/feed_item.cpp ++++ b/src/feed_item.cpp +@@ -1,5 +1,5 @@ +-#include "feed_item.hpp" +-#include "utils.hpp" ++#include "./feed_item.hpp" ++#include "./utils.hpp" + + std::string FeedItem::extract_url() { + std::string res = item_node.child("link").text().as_string(); +@@ -75,6 +75,10 @@ void FeedItem::parse() { + // pub_date + pub_date = SynDomUtils::extract_from_node(item_node, __PUB_DATE_PARAMS); + ++ // author ++ author_name = SynDomUtils::extract_from_node(item_node, __AUTHOR_NAME_PARAMS); ++ author_url = SynDomUtils::extract_from_node(item_node, __AUTHOR_URL_PARAMS); ++ + // img_url + img_url = extract_img_url(); + fix_url(img_url); +@@ -87,6 +91,8 @@ std::string FeedItem::to_json() { + " \"url\": \"" + url + "\",\n" + " \"media_url\": \"" + media_url + "\",\n" + " \"pub_date\": \"" + pub_date + "\",\n" +- " \"img_url\": \"" + img_url + "\"\n" ++ " \"img_url\": \"" + img_url + "\",\n" ++ " \"author_name\": \"" + author_name + "\",\n" ++ " \"author_url\": \"" + author_url + "\"\n" + " }"; + } +diff --git a/src/feed_item.hpp b/src/feed_item.hpp +index 5d7105e..fd1259f 100644 +--- a/src/feed_item.hpp ++++ b/src/feed_item.hpp +@@ -28,6 +28,8 @@ private: + std::string media_url; + std::string pub_date; + std::string img_url; ++ std::string author_name; ++ std::string author_url; + + /** + * Tries to extract the item url and returns it. +@@ -73,6 +75,16 @@ private: + {ExtractionParam::ParamType::CHILD, {"date"}}, + {ExtractionParam::ParamType::CHILD, {"dc:date"}} + }; ++ static inline const std::vector __AUTHOR_NAME_PARAMS{ ++ {ExtractionParam::ParamType::CHILD, {"author", "name"}}, ++ {ExtractionParam::ParamType::CHILD, {"author"}}, ++ {ExtractionParam::ParamType::CHILD, {"dc:creator"}}, ++ {ExtractionParam::ParamType::CHILD, {"creator"}}, ++ {ExtractionParam::ParamType::CHILD, {"itunes:author"}}, ++ }; ++ static inline const std::vector __AUTHOR_URL_PARAMS{ ++ {ExtractionParam::ParamType::CHILD, {"author", "uri"}} ++ }; + /** + * Entry point of the class, parses all the relevant content. Called by + * the constructor. +@@ -101,6 +113,8 @@ public: + std::string get_media_url() { return media_url; } + std::string get_pub_date() { return pub_date; } + std::string get_img_url() { return img_url; } ++ std::string get_author_name() { return author_name; } ++ std::string get_author_url() { return author_url; } + + /** + * Represents the FeedItem object (itself) as a json, returned as a string. +diff --git a/src/pybind.cpp b/src/pybind.cpp +index bef72f9..1d5a58d 100644 +--- a/src/pybind.cpp ++++ b/src/pybind.cpp +@@ -19,11 +19,15 @@ PYBIND11_MODULE(syndom, m) { + .def_property_readonly("media_url", &FeedItem::get_media_url) + .def_property_readonly("pub_date", &FeedItem::get_pub_date) + .def_property_readonly("img_url", &FeedItem::get_img_url) ++ .def_property_readonly("author_name", &FeedItem::get_author_name) ++ .def_property_readonly("author_url", &FeedItem::get_author_url) + .def("get_title", &FeedItem::get_title) + .def("get_content", &FeedItem::get_content) + .def("get_url", &FeedItem::get_url) + .def("get_media_url", &FeedItem::get_media_url) + .def("get_pub_date", &FeedItem::get_pub_date) ++ .def("get_author_name", &FeedItem::get_author_name) ++ .def("get_author_url", &FeedItem::get_author_url) + .def("get_img_url", &FeedItem::get_img_url); + py::class_(m, "Feed") + .def(py::init()) diff --git a/srcpkgs/python3-syndom/template b/srcpkgs/python3-syndom/template new file mode 100644 index 0000000000000..2d1e037ddf312 --- /dev/null +++ b/srcpkgs/python3-syndom/template @@ -0,0 +1,14 @@ +# Template file for 'python3-syndom' +pkgname=python3-syndom +version=1.0 +revision=1 +build_style=meson +hostmakedepends="pkg-config python3-pybind11" +makedepends="fmt-devel libtidy5-devel pugixml-devel python3-pybind11" +depends="python3" +short_desc="Simple RSS/Atom parser library in C++ - Python3 bindings" +maintainer="chrysos349 " +license="GPL-3.0-or-later" +homepage="https://gitlab.com/gabmus/syndication-domination" +distfiles="https://gitlab.com/gabmus/syndication-domination/-/archive/${version}/syndication-domination-${version}.tar.gz" +checksum=eb8a1d6b3ebc2e3997397b07fe75eb62e4c788ee37d8b2a12e72becd65cf479f From a35f827b4a3f34bce4b6f07a1fe649bb42803043 Mon Sep 17 00:00:00 2001 From: chrysos349 Date: Fri, 6 Oct 2023 16:32:09 +0300 Subject: [PATCH 2/2] gfeeds: update to 2.2.0, adopt --- .../patches/fix-for-blueprint-0.8.patch | 22 ++ .../upgrade-blueprint-0.8-syntax.patch | 347 ++++++++++++++++++ srcpkgs/gfeeds/template | 26 +- 3 files changed, 386 insertions(+), 9 deletions(-) create mode 100644 srcpkgs/gfeeds/patches/fix-for-blueprint-0.8.patch create mode 100644 srcpkgs/gfeeds/patches/upgrade-blueprint-0.8-syntax.patch diff --git a/srcpkgs/gfeeds/patches/fix-for-blueprint-0.8.patch b/srcpkgs/gfeeds/patches/fix-for-blueprint-0.8.patch new file mode 100644 index 0000000000000..8d2c4894e50d5 --- /dev/null +++ b/srcpkgs/gfeeds/patches/fix-for-blueprint-0.8.patch @@ -0,0 +1,22 @@ +From: Gabriele Musco +Date: Fri, 26 May 2023 06:31:24 +0200 +Subject: fix for blueprint 0.8 + +(cherry picked from commit cfe860f44f685be302e2ad9f30b55bab08e078ce) +--- + data/ui/right_headerbar.blp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/data/ui/right_headerbar.blp b/data/ui/right_headerbar.blp +index 992dfa6..3249858 100644 +--- a/data/ui/right_headerbar.blp ++++ b/data/ui/right_headerbar.blp +@@ -3,7 +3,7 @@ using Adw 1; + + menu webviewMenu { + section { +- item { custom: zoom; } ++ item { custom: 'zoom'; } + } + section { + item (_("Open in _Browser"), 'app.open_externally') diff --git a/srcpkgs/gfeeds/patches/upgrade-blueprint-0.8-syntax.patch b/srcpkgs/gfeeds/patches/upgrade-blueprint-0.8-syntax.patch new file mode 100644 index 0000000000000..0e0dbbf095ab3 --- /dev/null +++ b/srcpkgs/gfeeds/patches/upgrade-blueprint-0.8-syntax.patch @@ -0,0 +1,347 @@ +From: Gabriele Musco +Date: Fri, 26 May 2023 07:11:01 +0200 +Subject: upgrade blueprint 0.8 syntax + +(cherry picked from commit d099fda0c62e338080061683a154f711cc487b30) +--- + data/ui/add_feed_popover.blp | 8 ++++---- + data/ui/empty_state.blp | 2 +- + data/ui/filter_view.blp | 6 +++--- + data/ui/left_headerbar.blp | 6 +++--- + data/ui/main_leaflet.blp | 18 +++++++++--------- + data/ui/manage_feeds_headerbar.blp | 2 +- + data/ui/manage_tags_content.blp | 10 +++++----- + data/ui/manage_tags_listbox_row.blp | 4 ++-- + data/ui/right_headerbar.blp | 10 +++++----- + data/ui/sidebar_listbox_row.blp | 2 +- + data/ui/webview.blp | 8 ++++---- + gfeeds/base_app.py | 2 +- + 12 files changed, 39 insertions(+), 39 deletions(-) + +diff --git a/data/ui/add_feed_popover.blp b/data/ui/add_feed_popover.blp +index 13806f5..b61f2ea 100644 +--- a/data/ui/add_feed_popover.blp ++++ b/data/ui/add_feed_popover.blp +@@ -1,6 +1,6 @@ + using Gtk 4.0; + +-template AddFeedPopover : Gtk.Popover { ++template $AddFeedPopover : Gtk.Popover { + autohide: true; + Gtk.Box container_box { + width-request: 290; +@@ -18,13 +18,13 @@ template AddFeedPopover : Gtk.Popover { + placeholder-text: 'https://…'; + input-purpose: url; + hexpand: true; +- activate => on_url_entry_activate(); +- changed => on_url_entry_changed(); ++ activate => $on_url_entry_activate(); ++ changed => $on_url_entry_changed(); + } + Gtk.Button confirm_btn { + styles ['suggested-action'] + label: _("Add"); +- clicked => on_confirm_btn_clicked(); ++ clicked => $on_confirm_btn_clicked(); + } + } + Gtk.Revealer already_subscribed_revealer { +diff --git a/data/ui/empty_state.blp b/data/ui/empty_state.blp +index dbdbf2c..a9c91b9 100644 +--- a/data/ui/empty_state.blp ++++ b/data/ui/empty_state.blp +@@ -1,7 +1,7 @@ + using Gtk 4.0; + using Adw 1; + +-template EmptyState : Adw.Bin { ++template $EmptyState : Adw.Bin { + Adw.StatusPage { + styles ['navigation-sidebar'] + title: _("Let's get started"); +diff --git a/data/ui/filter_view.blp b/data/ui/filter_view.blp +index 7b5e0a3..9c060d3 100644 +--- a/data/ui/filter_view.blp ++++ b/data/ui/filter_view.blp +@@ -2,7 +2,7 @@ using Gtk 4.0; + using Adw 1; + + +-template FilterView : Adw.Bin { ++template $FilterView : Adw.Bin { + styles ['background'] + ScrolledWindow { + hscrollbar-policy: never; +@@ -13,13 +13,13 @@ template FilterView : Adw.Bin { + ListBox all_listbox { + styles ['navigation-sidebar'] + selection-mode: single; +- row-activated => on_all_row_activated(); ++ row-activated => $on_all_row_activated(); + } + Separator { orientation: horizontal; margin-start: 6; margin-end: 6; } + ListBox tags_listbox { + styles ['navigation-sidebar'] + selection-mode: single; +- row-activated => on_tags_row_activated(); ++ row-activated => $on_tags_row_activated(); + } + Separator { orientation: horizontal; margin-start: 6; margin-end: 6; } + Adw.Bin feeds_listbox_bin {} +diff --git a/data/ui/left_headerbar.blp b/data/ui/left_headerbar.blp +index 113a839..10e0195 100644 +--- a/data/ui/left_headerbar.blp ++++ b/data/ui/left_headerbar.blp +@@ -20,7 +20,7 @@ menu generalMenu { + } + } + +-template LeftHeaderbar : WindowHandle { ++template $LeftHeaderbar : WindowHandle { + vexpand: false; hexpand: true; + Adw.HeaderBar left_headerbar { + [title] Adw.Bin {} +@@ -40,7 +40,7 @@ template LeftHeaderbar : WindowHandle { + [end] Button refresh_btn { + tooltip-text: _("Refresh"); + icon-name: 'view-refresh-symbolic'; +- clicked => on_refresh_btn_clicked(); ++ clicked => $on_refresh_btn_clicked(); + } + [end] ToggleButton search_btn { + tooltip-text: _("Search"); +@@ -50,7 +50,7 @@ template LeftHeaderbar : WindowHandle { + tooltip-text: _("There Are Errors"); + icon-name: 'dialog-warning-symbolic'; + visible: false; +- clicked => show_errors_dialog(); ++ clicked => $show_errors_dialog(); + } + } + } +diff --git a/data/ui/main_leaflet.blp b/data/ui/main_leaflet.blp +index c2e49f5..8fe5d27 100644 +--- a/data/ui/main_leaflet.blp ++++ b/data/ui/main_leaflet.blp +@@ -1,20 +1,20 @@ + using Gtk 4.0; + using Adw 1; + +-template MainLeaflet : Adw.Bin { ++template $MainLeaflet : Adw.Bin { + Adw.Leaflet leaflet { + homogeneous: false; + can-navigate-back: true; + transition-type: over; + visible-child: left_box; +- notify::folded => on_leaflet_folded(); ++ notify::folded => $on_leaflet_folded(); + Adw.LeafletPage left_page { + child: Gtk.Box left_box { + hexpand: false; + orientation: vertical; + width-request: 360; + height-request: 100; +- .LeftHeaderbar left_headerbar { ++ $LeftHeaderbar left_headerbar { + searchbar: searchbar; + } + SearchBar searchbar { +@@ -50,9 +50,9 @@ template MainLeaflet : Adw.Bin { + reveal-flap: false; + swipe-to-open: true; + swipe-to-close: true; +- [flap] .FilterView filter_view {} +- [content] .StackWithEmptyState sidebar_stack { +- main-widget: .GFeedsSidebar sidebar { ++ [flap] $FilterView filter_view {} ++ [content] $StackWithEmptyState sidebar_stack { ++ main-widget: $GFeedsSidebar sidebar { + + }; + } +@@ -66,11 +66,11 @@ template MainLeaflet : Adw.Bin { + Adw.LeafletPage right_page { + child: Gtk.Box right_box { + orientation: vertical; +- .RightHeaderbar right_headerbar { ++ $RightHeaderbar right_headerbar { + webview: webview; +- go_back => on_back_btn_clicked(); ++ go_back => $on_back_btn_clicked(); + } +- .GFeedsWebView webview {} ++ $GFeedsWebView webview {} + }; + } + } +diff --git a/data/ui/manage_feeds_headerbar.blp b/data/ui/manage_feeds_headerbar.blp +index 8e862a9..ea130ec 100644 +--- a/data/ui/manage_feeds_headerbar.blp ++++ b/data/ui/manage_feeds_headerbar.blp +@@ -1,7 +1,7 @@ + using Gtk 4.0; + using Adw 1; + +-template ManageFeedsHeaderbar : Gtk.HeaderBar { ++template $ManageFeedsHeaderbar : Gtk.HeaderBar { + show-title-buttons: true; + [title] Adw.WindowTitle { + title: _("Manage Feeds"); +diff --git a/data/ui/manage_tags_content.blp b/data/ui/manage_tags_content.blp +index b6b009f..b47f99d 100644 +--- a/data/ui/manage_tags_content.blp ++++ b/data/ui/manage_tags_content.blp +@@ -1,7 +1,7 @@ + using Gtk 4.0; + using Adw 1; + +-template ManageTagsContent : Adw.Bin { ++template $ManageTagsContent : Adw.Bin { + styles ['background'] + Box { + spacing: 6; +@@ -16,14 +16,14 @@ template ManageTagsContent : Adw.Bin { + Entry tags_entry { + placeholder-text: _("New tag name…"); + hexpand: true; +- changed => on_tags_entry_changed(); +- activate => on_submit_add_tag(); ++ changed => $on_tags_entry_changed(); ++ activate => $on_submit_add_tag(); + } + Button add_tag_btn { + styles ['suggested-action'] + tooltip-text: _("Add Tag"); + icon-name: 'list-add-symbolic'; +- clicked => on_submit_add_tag(); ++ clicked => $on_submit_add_tag(); + } + } + Separator { orientation: horizontal; } +@@ -34,7 +34,7 @@ template ManageTagsContent : Adw.Bin { + ListBox tags_listbox { + styles ['navigation-sidebar'] + selection-mode: none; +- row-activated => on_tags_listbox_row_activated(); ++ row-activated => $on_tags_listbox_row_activated(); + [placeholder] Adw.StatusPage { + title: _("There are no tags yet"); + description: _("Add some using the entry above"); +diff --git a/data/ui/manage_tags_listbox_row.blp b/data/ui/manage_tags_listbox_row.blp +index 21124d2..0350c8f 100644 +--- a/data/ui/manage_tags_listbox_row.blp ++++ b/data/ui/manage_tags_listbox_row.blp +@@ -1,6 +1,6 @@ + using Gtk 4.0; + +-template ManageTagsListboxRow : ListBoxRow { ++template $ManageTagsListboxRow : ListBoxRow { + Box main_box { + spacing: 6; + orientation: horizontal; +@@ -12,7 +12,7 @@ template ManageTagsListboxRow : ListBoxRow { + styles ['destructive-action'] + margin-start: 12; + icon-name: 'user-trash-symbolic'; +- clicked => on_delete_btn_clicked(); ++ clicked => $on_delete_btn_clicked(); + } + } + } +diff --git a/data/ui/right_headerbar.blp b/data/ui/right_headerbar.blp +index 3249858..b033c20 100644 +--- a/data/ui/right_headerbar.blp ++++ b/data/ui/right_headerbar.blp +@@ -42,25 +42,25 @@ PopoverMenu extra_popover { + styles ['flat', 'circular'] + icon-name: 'zoom-out-symbolic'; + tooltip-text: _("Zoom Out"); +- clicked => on_zoom_out_btn_clicked(); ++ clicked => $on_zoom_out_btn_clicked(); + } + Button zoom_reset_btn { + styles ['flat'] + label: '100%'; + width-request: 80; + tooltip-text: _("Reset Zoom"); +- clicked => on_zoom_reset_btn_clicked(); ++ clicked => $on_zoom_reset_btn_clicked(); + } + Button zoom_in_btn { + styles ['flat', 'circular'] + icon-name: 'zoom-in-symbolic'; + tooltip-text: _("Zoom In"); +- clicked => on_zoom_in_btn_clicked(); ++ clicked => $on_zoom_in_btn_clicked(); + } + } + } + +-template RightHeaderbar : WindowHandle { ++template $RightHeaderbar : WindowHandle { + vexpand: false; hexpand: true; + Adw.HeaderBar right_headerbar { + hexpand: true; +@@ -89,7 +89,7 @@ template RightHeaderbar : WindowHandle { + visible: false; + tooltip-text: _("Back to Articles"); + icon-name: 'go-previous-symbolic'; +- clicked => on_back_btn_clicked(); ++ clicked => $on_back_btn_clicked(); + } + MenuButton view_mode_menu_btn { + sensitive: false; +diff --git a/data/ui/sidebar_listbox_row.blp b/data/ui/sidebar_listbox_row.blp +index 2e873bd..fbeb032 100644 +--- a/data/ui/sidebar_listbox_row.blp ++++ b/data/ui/sidebar_listbox_row.blp +@@ -7,7 +7,7 @@ menu row_menu { + } + } + +-template SidebarRow : Box { ++template $SidebarRow : Box { + spacing: 6; + orientation: vertical; + margin-top: 12; margin-bottom: 12; +diff --git a/data/ui/webview.blp b/data/ui/webview.blp +index c1c68de..55dc2b3 100644 +--- a/data/ui/webview.blp ++++ b/data/ui/webview.blp +@@ -2,7 +2,7 @@ using Gtk 4.0; + using WebKit 6.0; + using Adw 1; + +-template GFeedsWebView : Stack { ++template $GFeedsWebView : Stack { + width-request: 360; height-request: 400; + hexpand: true; vexpand: true; + transition-type: crossfade; +@@ -40,9 +40,9 @@ template GFeedsWebView : Stack { + hexpand: true; vexpand: true; + WebKit.WebView webkitview { + hexpand: true; vexpand: true; +- load-changed => on_load_changed(); +- decide-policy => on_decide_policy(); +- mouse-target-changed => on_mouse_target_changed(); ++ load-changed => $on_load_changed(); ++ decide-policy => $on_decide_policy(); ++ mouse-target-changed => $on_mouse_target_changed(); + } + } + } +diff --git a/gfeeds/base_app.py b/gfeeds/base_app.py +index 0ace634..a414cf2 100644 +--- a/gfeeds/base_app.py ++++ b/gfeeds/base_app.py +@@ -24,7 +24,7 @@ class AppAction: + self.state_type = state_type + self.state_default = state_default + +- assert not self.stateful or self.state_default is not None ++ assert (not self.stateful or self.state_default is not None) + + def get_action(self): + action = None diff --git a/srcpkgs/gfeeds/template b/srcpkgs/gfeeds/template index 8d3dcff3280d2..6a83e149d5f2f 100644 --- a/srcpkgs/gfeeds/template +++ b/srcpkgs/gfeeds/template @@ -1,16 +1,24 @@ # Template file for 'gfeeds' pkgname=gfeeds -version=0.16.2 -revision=2 +version=2.2.0 +revision=1 build_style=meson -hostmakedepends="pkg-config gobject-introspection glib-devel gettext" -makedepends="libglib-devel gtk+3-devel libhandy1-devel" -depends="python3-gobject python3-feedparser python3-readability-lxml - python3-listparser python3-pytz python3-dateutil python3-requests - python3-html5lib gtk+3 webkit2gtk libhandy1" +build_helper=gir +hostmakedepends="blueprint-compiler gettext glib-devel gtk-update-icon-cache + pkg-config" +makedepends="libadwaita-devel libwebkitgtk60-devel" +depends="libadwaita libwebkitgtk60 python3-BeautifulSoup4 python3-Pillow + python3-Pygments python3-dateutil python3-gobject python3-humanize + python3-magic python3-pytz python3-readability-lxml python3-syndom" short_desc="RSS/Atom feed reader for GNOME" -maintainer="Orphaned " +maintainer="chrysos349 " license="GPL-3.0-or-later" homepage="https://gfeeds.gabmus.org/" distfiles="https://gitlab.gnome.org/World/gfeeds/-/archive/$version/gfeeds-$version.tar.gz" -checksum=f061e89a1962a5ac544ea98239c2503af8da817ded0a5bfd8094ddf43e9dd00e +checksum=13a3e99acbb0ee29389673fc0c9f9de69c29b6574acb848103ef0c5653a78b45 + +pre_build() { + if [ "$CROSS_BUILD" ]; then + export GI_TYPELIB_PATH="${XBPS_CROSS_BASE}/usr/lib/girepository-1.0" + fi +}