sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit e8a896d9ccb7a27f1bff1e116f0cc67a39b57386
parent db6ccaa995be5195381473487c1c2aa83c1e37fa
Author: Gaute Hope <eg@gaute.vetsj.com>
Date:   Wed,  6 Nov 2013 08:47:10 +0100

dont fail on edit or delete predefined searches

Diffstat:
M lib/sup/modes/search_list_mode.rb | 12 ++++++++++++
M lib/sup/search.rb | 18 ++++++++++++++++++
2 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/lib/sup/modes/search_list_mode.rb b/lib/sup/modes/search_list_mode.rb
@@ -145,6 +145,12 @@ protected
   def rename_selected_search
     old_name, num_unread = @searches[curpos]
     return unless old_name
+
+    if SearchManager.predefined_searches.has_key? old_name
+      BufferManager.flash "Cannot be edited: predefined search."
+      return
+    end
+
     new_name = BufferManager.ask :save_search, "Rename this saved search: ", old_name
     return unless new_name && new_name !~ /^\s*$/ && new_name != old_name
     new_name.strip!
@@ -163,6 +169,12 @@ protected
   def edit_selected_search
     name, num_unread = @searches[curpos]
     return unless name
+
+    if SearchManager.predefined_searches.has_key? name
+      BufferManager.flash "Cannot be edited: predefined search."
+      return
+    end
+
     old_search_string = SearchManager.search_string_for name
     new_search_string = BufferManager.ask :search, "Edit this saved search: ", (old_search_string + " ")
     return unless new_search_string && new_search_string !~ /^\s*$/ && new_search_string != old_search_string
diff --git a/lib/sup/search.rb b/lib/sup/search.rb
@@ -7,6 +7,8 @@ class SearchManager
 
   class ExpansionError < StandardError; end
 
+  attr_reader :predefined_searches
+
   def initialize fn
     @fn = fn
     @searches = {}
@@ -43,24 +45,40 @@ class SearchManager
 
   def add name, search_string
     return unless valid_name? name
+    if @predefined_searches.has_key? name
+      warn "cannot add search: #{name} is already taken by a predefined search"
+      return
+    end
     @searches[name] = search_string
     @modified = true
   end
 
   def rename old, new
     return unless @searches.has_key? old
+    if [old, new].any? { |x| @predefined_searches.has_key? x }
+      warn "cannot rename search: #{old} or #{new} is already taken by a predefined search"
+      return
+    end
     search_string = @searches[old]
     delete old if add new, search_string
   end
 
   def edit name, search_string
     return unless @searches.has_key? name
+    if @predefined_searches.has_key? name
+      warn "cannot edit predefined search: #{name}."
+      return
+    end
     @searches[name] = search_string
     @modified = true
   end
 
   def delete name
     return unless @searches.has_key? name
+    if @predefined_searches.has_key? name
+      warn "cannot delete predefined search: #{name}."
+      return
+    end
     @searches.delete name
     @modified = true
   end