1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Xml.Linq;
  5. using clempaul.Dreamhost.ResponseData;
  6.  
  7. namespace clempaul.Dreamhost
  8. {
  9.     public class MailRequests
  10.     {
  11.         private DreamhostAPI api;
  12.  
  13.         internal MailRequests(DreamhostAPI api)
  14.         {
  15.             this.api = api;
  16.         }
  17.  
  18.         #region mail-list_filters
  19.  
  20.         public IEnumerable<MailFilter> ListFilters()
  21.         {
  22.             XDocument response = api.SendCommand("mail-list_filters");
  23.  
  24.             var users = from data in response.Element("dreamhost").Elements("data")
  25.                         select new MailFilter
  26.                         {
  27.                             account_id = data.Element("account_id").AsString(),
  28.                             address = data.Element("address").AsString(),
  29.                             rank = data.Element("rank").AsInt(),
  30.                             filter = data.Element("filter").AsString(),
  31.                             filter_on = data.Element("filter_on").AsString(),
  32.                             action = data.Element("action").AsString(),
  33.                             action_value = data.Element("action_value").AsString(),
  34.                             contains = data.Element("contains").AsBool(),
  35.                             stop = data.Element("stop").AsBool()
  36.                         };
  37.  
  38.             return users;
  39.         }
  40.  
  41.         #endregion
  42.  
  43.         #region mail-add_filter
  44.  
  45.         public void AddFilter(MailFilter filter)
  46.         {
  47.             // Check parameters
  48.  
  49.             if (filter.address == null || filter.address == string.Empty)
  50.             {
  51.                 throw new Exception("Missing address parameter");
  52.             }
  53.             else if (filter.filter_on == null || filter.filter_on == string.Empty)
  54.             {
  55.                 throw new Exception("Missing filter_on parameter");
  56.             }
  57.             else if (filter.filter == null || filter.filter == string.Empty)
  58.             {
  59.                 throw new Exception("Missing filter parameter");
  60.             }
  61.             else if (filter.action == null || filter.action == string.Empty)
  62.             {
  63.                 throw new Exception("Missing action parameter");
  64.             }
  65.             else if ((filter.action != "delete" && filter.action != "and" && filter.action != "or") && (filter.action_value == null || filter.action_value == string.Empty))
  66.             {
  67.                 throw new Exception("Missing action_value parameter");
  68.             }
  69.  
  70.             // Construct Request
  71.  
  72.             List<QueryData> parameters = new List<QueryData>();
  73.  
  74.             parameters.Add(new QueryData("address", filter.address));
  75.             parameters.Add(new QueryData("filter_on", filter.filter_on));
  76.             parameters.Add(new QueryData("filter", filter.filter));
  77.             parameters.Add(new QueryData("action", filter.action));
  78.  
  79.             if (filter.action_value != null && filter.action_value != string.Empty)
  80.             {
  81.                 parameters.Add(new QueryData("action_value", filter.action_value));
  82.             }
  83.  
  84.             if (filter.contains != null)
  85.             {
  86.                 parameters.Add(new QueryData("contains", filter.contains.Asyesno()));
  87.             }
  88.  
  89.             if (filter.stop != null)
  90.             {
  91.                 parameters.Add(new QueryData("stop", filter.stop.Asyesno()));
  92.             }
  93.  
  94.             if (filter.rank != null)
  95.             {
  96.                 parameters.Add(new QueryData("rank", filter.rank.ToString()));
  97.             }
  98.  
  99.             api.SendCommand("mail-add_filter", parameters);
  100.         }
  101.  
  102.         #endregion
  103.  
  104.         #region mail-remove_filter
  105.  
  106.         public void RemoveFilter(MailFilter filter)
  107.         {
  108.             // Check parameters
  109.  
  110.             if (filter.address == null || filter.address == string.Empty)
  111.             {
  112.                 throw new Exception("Missing address parameter");
  113.             }
  114.             else if (filter.filter_on == null || filter.filter_on == string.Empty)
  115.             {
  116.                 throw new Exception("Missing filter_on parameter");
  117.             }
  118.             else if (filter.filter == null || filter.filter == string.Empty)
  119.             {
  120.                 throw new Exception("Missing filter parameter");
  121.             }
  122.             else if (filter.action == null || filter.action == string.Empty)
  123.             {
  124.                 throw new Exception("Missing action parameter");
  125.             }
  126.             else if ((filter.action != "delete") && (filter.action_value == null || filter.action_value == string.Empty))
  127.             {
  128.                 throw new Exception("Missing action_value parameter");
  129.             }
  130.             else if (filter.contains == null)
  131.             {
  132.                 throw new Exception("Missing contains parameter");
  133.             }
  134.             else if (filter.stop == null)
  135.             {
  136.                 throw new Exception("Missing stop parameter");
  137.             }
  138.             else if (filter.rank == null)
  139.             {
  140.                 throw new Exception("Missing rank parameter");
  141.             }
  142.  
  143.             // Construct Request
  144.  
  145.             List<QueryData> parameters = new List<QueryData>();
  146.  
  147.             parameters.Add(new QueryData("address", filter.address));
  148.             parameters.Add(new QueryData("filter_on", filter.filter_on));
  149.             parameters.Add(new QueryData("filter", filter.filter));
  150.             parameters.Add(new QueryData("action", filter.action));
  151.  
  152.             if (filter.action_value != null && filter.action_value != string.Empty)
  153.             {
  154.                 parameters.Add(new QueryData("action_value", filter.action_value));
  155.             }
  156.  
  157.             parameters.Add(new QueryData("contains", filter.contains.Asyesno()));
  158.             parameters.Add(new QueryData("stop", filter.stop.Asyesno()));
  159.             parameters.Add(new QueryData("rank", filter.rank.ToString()));
  160.  
  161.             api.SendCommand("mail-remove_filter", parameters);
  162.         }
  163.  
  164.         #endregion
  165.  
  166.     }
  167. }
  168.