From 70513ba61ae3dd2ee323702db5cedb56113107fa Mon Sep 17 00:00:00 2001 From: Alain Date: Tue, 9 Apr 2024 15:54:38 -0500 Subject: [PATCH] Fix #1238 --- core/Services/CalDAV/Core.vala | 22 +++++++++++++++------- src/Views/Project/Project.vala | 31 +++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/core/Services/CalDAV/Core.vala b/core/Services/CalDAV/Core.vala index bb1e73ff1..60c140552 100644 --- a/core/Services/CalDAV/Core.vala +++ b/core/Services/CalDAV/Core.vala @@ -765,21 +765,29 @@ public class Services.CalDAV.Core : GLib.Object { } public bool is_vtodo (GXml.DomElement element) { - bool return_value = false; + GXml.DomHTMLCollection propstat = element.get_elements_by_tag_name ("d:propstat"); - GXml.DomElement propstat = element.get_elements_by_tag_name ("d:propstat").get_element (0); - GXml.DomElement prop = propstat.get_elements_by_tag_name ("d:prop").get_element (0); - GXml.DomHTMLCollection getcontenttype = prop.get_elements_by_tag_name ("d:getcontenttype"); + if (propstat.length <= 0) { + return false; + } + + GXml.DomHTMLCollection prop = propstat.get_element (0).get_elements_by_tag_name ("d:prop"); + + if (prop.length <= 0) { + return false; + } + + GXml.DomHTMLCollection getcontenttype = prop.get_element (0).get_elements_by_tag_name ("d:getcontenttype"); if (getcontenttype.length <= 0) { - return return_value; + return false; } if (getcontenttype.get_element (0).text_content.index_of ("vtodo") > -1) { - return_value = true; + return true; } - return return_value; + return false; } /* diff --git a/src/Views/Project/Project.vala b/src/Views/Project/Project.vala index 507b9e2bc..0cb5068e5 100644 --- a/src/Views/Project/Project.vala +++ b/src/Views/Project/Project.vala @@ -26,6 +26,7 @@ public class Views.Project : Adw.Bin { private Gtk.Stack view_stack; private Adw.ToolbarView toolbar_view; private Widgets.ContextMenu.MenuItem show_completed_item; + private Widgets.ContextMenu.MenuItem delete_all_completed; private Widgets.MultiSelectToolbar multiselect_toolbar; private Gtk.Revealer indicator_revealer; @@ -410,6 +411,11 @@ public class Views.Project : Adw.Bin { "check-round-outline-symbolic" ); + delete_all_completed = new Widgets.ContextMenu.MenuItem (_("Delete All Completed Tasks") ,"user-trash-symbolic") { + visible = false + }; + delete_all_completed.add_css_class ("menu-item-danger"); + var menu_box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0); menu_box.margin_top = menu_box.margin_bottom = 3; @@ -420,6 +426,7 @@ public class Views.Project : Adw.Bin { menu_box.append (order_by_item); menu_box.append (new Widgets.ContextMenu.MenuSeparator ()); menu_box.append (show_completed_item); + menu_box.append (delete_all_completed); var popover = new Gtk.Popover () { has_arrow = false, @@ -441,6 +448,7 @@ public class Views.Project : Adw.Bin { project.update_local (); show_completed_item.title = project.show_completed ? _("Hide Completed Tasks") : _("Show Completed Tasks"); + delete_all_completed.visible = project.show_completed; check_default_view (); }); @@ -457,6 +465,29 @@ public class Views.Project : Adw.Bin { check_default_view (); }); + delete_all_completed.activate_item.connect (() => { + // popover.popdown (); + + // var items = Services.Database.get_default ().get_items_checked_by_project (project); + + // var dialog = new Adw.MessageDialog ( + // (Gtk.Window) Planify.instance.main_window, + // _("Delete All Completed Tasks"), _("This will delete %d completed tasks and their subtasks from project %s".printf (items.size, project.name)) + // ); + + // dialog.body_use_markup = true; + // dialog.add_response ("cancel", _("Cancel")); + // dialog.add_response ("delete", _("Delete")); + // dialog.set_response_appearance ("delete", Adw.ResponseAppearance.DESTRUCTIVE); + // dialog.show (); + + // dialog.response.connect ((response) => { + // if (response == "delete") { + + // } + // }); + }); + return popover; }