1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Xml.Linq;
  4. using clempaul.Dreamhost.ResponseData;
  5. using System;
  6.  
  7. namespace clempaul.Dreamhost
  8. {
  9.     public class OneClickRequests
  10.     {
  11.         DreamhostAPI api;
  12.  
  13.         internal OneClickRequests(DreamhostAPI api)
  14.         {
  15.             this.api = api;
  16.         }
  17.  
  18.         #region oneclick-list_easy
  19.  
  20.         public IEnumerable<OneClick> ListEasy()
  21.         {
  22.             XDocument response = api.SendCommand("oneclick-list_easy");
  23.  
  24.             // Handle Response
  25.  
  26.             return from data in response.Element("dreamhost").Elements("data")
  27.                    select new OneClick
  28.                    {
  29.                        domain = data.Element("domain").AsString(),
  30.                        type = data.Element("type").AsString(),
  31.                        stamp = data.Element("stamp").AsDateTime()
  32.                    };
  33.         }
  34.  
  35.         #endregion
  36.  
  37.         #region oneclick-list_advanced
  38.  
  39.         public IEnumerable<OneClickAdvanced> ListAdvanced()
  40.         {
  41.             XDocument response = api.SendCommand("oneclick-list_advanced");
  42.  
  43.             // Handle Response
  44.  
  45.             return from data in response.Element("dreamhost").Elements("data")
  46.                    select new OneClickAdvanced
  47.                    {
  48.                        url = data.Element("url").AsString(),
  49.                        type = data.Element("type").AsString(),
  50.                        stamp = data.Element("stamp").AsDateTime(),
  51.                        upgradable = data.Element("upgradeable").AsBool()
  52.                    };
  53.         }
  54.  
  55.         #endregion
  56.  
  57.         #region oneclick-install_easy
  58.  
  59.         public OneClickInstall InstallEasy(string domain, string type, string title, string email)
  60.         {
  61.             // Check Parameters
  62.  
  63.             if (domain == null || domain == string.Empty)
  64.             {
  65.                 throw new Exception("Missing domain parameter");
  66.             }
  67.             else if (type == null || type == string.Empty)
  68.             {
  69.                 throw new Exception("Missing type parameter");
  70.             }
  71.             else if (title == null || title == string.Empty)
  72.             {
  73.                 throw new Exception("Missing title parameter");
  74.             }
  75.             else if (email == null || email == string.Empty)
  76.             {
  77.                 throw new Exception("Missing email parameter");
  78.             }
  79.  
  80.             // Construct Request
  81.  
  82.             List<QueryData> parameters = new List<QueryData>
  83.             {
  84.                 new QueryData("domain", domain),
  85.                 new QueryData("type", type),
  86.                 new QueryData("title", title),
  87.                 new QueryData("email", email)
  88.             };
  89.  
  90.             XDocument response = api.SendCommand("oneclick-install_easy", parameters);
  91.  
  92.             // Handle Response
  93.  
  94.             return (from data in response.Element("dreamhost").Elements("data")
  95.                     select new OneClickInstall
  96.                     {
  97.                         admin_password = data.Element("admin_password").AsString(),
  98.                         main_domain = data.Element("main_domain").AsString()
  99.                     }).First();
  100.         }
  101.  
  102.         #endregion
  103.  
  104.         #region oneclick-install_advanced
  105.  
  106.         public void InstallAdvanced(string url, string type, string database)
  107.         {
  108.             // Check Parameters
  109.  
  110.             if (url == null || url == string.Empty)
  111.             {
  112.                 throw new Exception("Missing url parameter");
  113.             }
  114.             else if (type == null || type == string.Empty)
  115.             {
  116.                 throw new Exception("Missing type parameter");
  117.             }
  118.             else if (database == null || database == string.Empty)
  119.             {
  120.                 throw new Exception("Missing database parameter");
  121.             }
  122.  
  123.             // Build Request
  124.  
  125.             List<QueryData> parameters = new List<QueryData>
  126.             {
  127.                 new QueryData("url", url),
  128.                 new QueryData("type", type),
  129.                 new QueryData("database", database)
  130.             };
  131.  
  132.             api.SendCommand("oneclick-install_advanced", parameters);
  133.         }
  134.  
  135.         #endregion
  136.  
  137.         #region oneclick-upgrade
  138.  
  139.         public void Upgrade(string url)
  140.         {
  141.             // Check Parameters
  142.  
  143.             if (url == null || url == string.Empty)
  144.             {
  145.                 throw new Exception("Missing url parameter");
  146.             }
  147.  
  148.             // Build Request
  149.  
  150.             api.SendCommand("oneclick-upgrade", new List<QueryData> { new QueryData("url", url) });
  151.         }
  152.  
  153.         #endregion
  154.  
  155.         #region oneclick-upgrade_all
  156.  
  157.         public IEnumerable<string> UpgradeAll(string type)
  158.         {
  159.             // Check parameter
  160.  
  161.             if (type == null || type == string.Empty)
  162.             {
  163.                 throw new Exception("Missing type parameter");
  164.             }
  165.            
  166.             XDocument response = api.SendCommand("oneclick-upgrade_all", new List<QueryData> { new QueryData("type", type) });
  167.  
  168.             // Handle Response
  169.  
  170.             return from data in response.Element("dreamhost").Elements("data")
  171.                    select data.Element("url").AsString();
  172.         }
  173.  
  174.         #endregion
  175.  
  176.         #region oneclick-list_settings
  177.  
  178.         public IEnumerable<KeyValuePair<string, string>> ListSettings(string domain)
  179.         {
  180.             // Check parameters
  181.  
  182.             if (domain == null || domain == string.Empty)
  183.             {
  184.                 throw new Exception("Missing domain parameter");
  185.             }
  186.  
  187.             // Send request
  188.  
  189.             XDocument response = api.SendCommand("oneclick-list_settings", new List<QueryData> { new QueryData("domain", domain) });
  190.  
  191.             // Handle Response
  192.  
  193.             return from data in response.Element("dreamhost").Elements("data")
  194.                    select new KeyValuePair<string, string>
  195.                        (data.Element("setting").AsString(), data.Element("value").AsString());
  196.         }
  197.  
  198.         #endregion
  199.  
  200.         #region oneclick-set_settings
  201.  
  202.         public void SetSettings(string domain, string setting, string value)
  203.         {
  204.             // Check Parameters
  205.  
  206.             if (domain == null || domain == string.Empty)
  207.             {
  208.                 throw new Exception("Missing domain parameter");
  209.             }
  210.             else if (setting == null || setting == string.Empty)
  211.             {
  212.                 throw new Exception("Missing setting parameter");
  213.             }
  214.             else if (value == null || value == string.Empty)
  215.             {
  216.                 throw new Exception("Missing value parameter");
  217.             }
  218.  
  219.             // Build Request
  220.  
  221.             List<QueryData> parameters = new List<QueryData>
  222.             {
  223.                 new QueryData("domain", domain),
  224.                 new QueryData("setting", setting),
  225.                 new QueryData("value", value)
  226.             };
  227.  
  228.             api.SendCommand("oneclick-set_settings", parameters);
  229.         }
  230.  
  231.         #endregion
  232.  
  233.         #region oneclick-destroy_easy
  234.  
  235.         public DestroyResult DestroyEasy(string domain)
  236.         {
  237.             // Check parameters
  238.  
  239.             if (domain == null || domain == string.Empty)
  240.             {
  241.                 throw new Exception("Missing domain parameter");
  242.             }
  243.  
  244.             //Build Request
  245.  
  246.             XDocument response = api.SendCommand("oneclick-destroy_easy", new List<QueryData> { new QueryData("domain", domain) });
  247.  
  248.             // Handle Response
  249.  
  250.             return (from data in response.Element("dreamhost").Elements("data")
  251.                    select new DestroyResult
  252.                    {
  253.                        database = data.Element("database").AsString(),
  254.                        prefix = data.Element("prefix").AsString()
  255.                    }).First();
  256.         }
  257.  
  258.         #endregion
  259.  
  260.         #region oneclick-destroy_advanced
  261.  
  262.         public void DestroyAdvanced(string url, bool deletefiles)
  263.         {
  264.             // Check parameters
  265.  
  266.             if (url == null || url == string.Empty)
  267.             {
  268.                 throw new Exception("Missing url parameter");
  269.             }
  270.  
  271.             // Build Request
  272.  
  273.             List<QueryData> parameters = new List<QueryData>
  274.             {
  275.                 new QueryData("url", url),
  276.                 new QueryData("deletefiles", deletefiles.AsBit())
  277.             };
  278.  
  279.             api.SendCommand("oneclick-destroy_advanced", parameters);
  280.         }
  281.  
  282.         #endregion
  283.     }
  284. }
  285.