Rev Author Line No. Line
2 clempaul 1 using System;
2 using System.ComponentModel;
3 using System.Linq;
4 using System.Windows.Forms;
8 clempaul 5 using clempaul;
2 clempaul 6 using clempaul.Dreamhost.ResponseData;
7  
8 namespace DNS_Manager
9 {
10     public partial class AddEdit : Form
11     {
12         private BackgroundWorker AddRecord = new BackgroundWorker();
13         private BackgroundWorker EditRecord = new BackgroundWorker();
14  
15         private DreamhostAPI API;
16         private DNSRecord Record;
17  
18         private bool IsEdit = false;
19  
20         public AddEdit(DreamhostAPI API, DNSRecord Record)
21             : this(API)
22         {
23             this.IsEdit = true;
24             this.Record = Record;
25  
26             this.Text = "Edit Record";
27             this.textBoxRecord.Text = this.Record.record;
28             this.textBoxComment.Text = this.Record.comment;
29             this.textBoxValue.Text = this.Record.value;
30             this.comboBoxType.Text = this.Record.type;
31             this.textBoxRecord.Enabled = false;
32             this.comboBoxType.Enabled = false;
33  
34             this.EditRecord.DoWork += new DoWorkEventHandler(EditRecord_DoWork);
6 clempaul 35             this.EditRecord.RunWorkerCompleted += new RunWorkerCompletedEventHandler(EditRecord_RunWorkerCompleted);
2 clempaul 36         }
37  
38         public AddEdit(DreamhostAPI API)
39         {
40             InitializeComponent();
41  
42             this.API = API;
43  
44             this.AddRecord.DoWork += new DoWorkEventHandler(AddRecord_DoWork);
45             this.AddRecord.RunWorkerCompleted += new RunWorkerCompletedEventHandler(AddRecord_RunWorkerCompleted);
46         }
47  
48         void AddRecord_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
49         {
6 clempaul 50             if (e.Error == null)
51             {
52                 this.DialogResult = DialogResult.OK;
53                 this.Close();
54             }
55             else
56             {
57                 if (e.Error.Message == "CNAME_already_on_record")
58                 {
9 clempaul 59                     MessageBox.Show("There can only be one CNAME for this record.", "Dreamhost DNS Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
6 clempaul 60                 }
61                 else if (e.Error.Message == "CNAME_must_be_only_record")
62                 {
9 clempaul 63                     MessageBox.Show("A CNAME already exists for this record.", "Dreamhost DNS Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
6 clempaul 64                 }
65                 else if (e.Error.Message.Contains("invalid_record"))
66                 {
9 clempaul 67                     MessageBox.Show("This record is invalid:\n" + e.Error.Message.Replace("invalid_record\t", "").CapitaliseFirstLetter(), "Dreamhost DNS Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
6 clempaul 68                 }
69                 else if (e.Error.Message.Contains("invalid_value"))
70                 {
9 clempaul 71                     MessageBox.Show("This value is invalid:\n" + e.Error.Message.Replace("invalid_value\t", "").CapitaliseFirstLetter(), "Dreamhost DNS Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
6 clempaul 72                 }
73                 else if (e.Error.Message == "no_such_zone")
74                 {
9 clempaul 75                     MessageBox.Show("Unable to add record to this zone", "Dreamhost DNS Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
6 clempaul 76                 }
77                 else if (e.Error.Message == "record_already_exists_not_editable")
78                 {
9 clempaul 79                     MessageBox.Show("This record already exists and is not editable", "Dreamhost DNS Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
6 clempaul 80                 }
81                 else if (e.Error.Message == "record_already_exists_remove_first")
82                 {
9 clempaul 83                     MessageBox.Show("This record already exists.\nPlease try editing it or removing it first.", "Dreamhost DNS Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
6 clempaul 84                 }
85                 else if (e.Error.Message.Contains("internal_error"))
86                 {
9 clempaul 87                     if (MessageBox.Show("An internal error has occurred", "Dreamhost DNS Manager", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry)
6 clempaul 88                     {
89                         this.AddRecord.RunWorkerAsync(this.BuildRecord());
90                         return;
91                     }
92                 }
93                 else
94                 {
9 clempaul 95                     if (MessageBox.Show(e.Error.Message, "Dreamhost DNS Manager", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry)
6 clempaul 96                     {
97                         this.AddRecord.RunWorkerAsync(this.BuildRecord());
98                         return;
99                     }
100                 }
101  
102                 this.buttonSave.Enabled = true;
103                 this.buttonCancel.Enabled = true;
104                 this.textBoxComment.Enabled = true;
105                 this.textBoxValue.Enabled = true;
106                 this.textBoxRecord.Enabled = true;
107                 this.comboBoxType.Enabled = true;
108             }
109         }
110  
111         void EditRecord_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
112         {
7 clempaul 113             if (e.Error == null)
114             {
115                 this.DialogResult = DialogResult.OK;
116                 this.Close();
117             }
118             else
119             {
120                 if (e.Error.Message == "internal_error_could_not_destroy_record"
121                     || e.Error.Message == "internal_error_could_not_update_zone")
122                 {
9 clempaul 123                     if (MessageBox.Show("An internal error has occurred.", "Dreamhost DNS Manager", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry)
7 clempaul 124                     {
125                         this.EditRecord.RunWorkerAsync(this.BuildRecord());
126                         return;
127                     }
128                 }
129                 else if (e.Error.Message.Contains("invalid_value"))
130                 {
131                     MessageBox.Show("This value is invalid:\n" +
132                         e.Error.Message.Replace("invalid_value\t", "").CapitaliseFirstLetter()
9 clempaul 133                         + "\nThe previous record has been deleted.", "Dreamhost DNS Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
7 clempaul 134  
135                     this.IsEdit = false;
136                     this.textBoxRecord.Enabled = true;
137                     this.comboBoxType.Enabled = true;
138                 }
8 clempaul 139                 else
140                 {
9 clempaul 141                     if (MessageBox.Show(e.Error.Message, "Dreamhost DNS Manager", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry)
8 clempaul 142                     {
143                         this.EditRecord.RunWorkerAsync(this.BuildRecord());
144                         return;
145                     }
146                 }
7 clempaul 147  
148                 this.buttonSave.Enabled = true;
149                 this.buttonCancel.Enabled = true;
150                 this.textBoxComment.Enabled = true;
151                 this.textBoxValue.Enabled = true;
152             }
2 clempaul 153         }
154  
155         void AddRecord_DoWork(object sender, DoWorkEventArgs e)
156         {
157             this.API.DNS.AddRecord((DNSRecord)e.Argument);
158             System.Threading.Thread.Sleep(3000);
159         }
160  
161         void EditRecord_DoWork(object sender, DoWorkEventArgs e)
162         {
163             this.API.DNS.RemoveRecord(this.Record);
7 clempaul 164  
165             string[] retryErrors = {
166                                     "CNAME_must_be_only_record",
167                                     "CNAME_already_on_record",
168                                     "record_already_exists_remove_first",
169                                     "internal_error_updating_zone",
170                                     "internal_error_could_not_load_zone",
171                                     "internal_error_could_not_add_record"
172                                    };
173  
174             bool finish = false;
175  
176             while (!finish)
177             {
178                 try
179                 {
180                     this.API.DNS.AddRecord((DNSRecord)e.Argument);
181                     finish = true;
182                 }
183                 catch (Exception x)
184                 {
185                     if (!retryErrors.Contains(x.Message))
186                     {
187                         throw x;
188                     }
189                 }
190             }
191  
2 clempaul 192             System.Threading.Thread.Sleep(3000);
193         }
194  
195         private void buttonSave_Click(object sender, EventArgs e)
196         {
197             if (this.textBoxRecord.Text == string.Empty)
198             {
9 clempaul 199                 MessageBox.Show("You must enter a record", "Dreamhost DNS Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
2 clempaul 200             }
201             else if (this.comboBoxType.Text == string.Empty)
202             {
9 clempaul 203                 MessageBox.Show("You must select a type", "Dreamhost DNS Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
2 clempaul 204             }
205             else if (this.textBoxValue.Text == string.Empty)
206             {
9 clempaul 207                 MessageBox.Show("You must enter a value", "Dreamhost DNS Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
2 clempaul 208             }
209             else
210             {
211                 this.buttonSave.Enabled = false;
212                 this.buttonCancel.Enabled = false;
213                 this.textBoxComment.Enabled = false;
214                 this.textBoxValue.Enabled = false;
215                 this.textBoxRecord.Enabled = false;
216                 this.comboBoxType.Enabled = false;
217  
218                 if (this.IsEdit)
219                 {
6 clempaul 220                     this.EditRecord.RunWorkerAsync(this.BuildRecord());
2 clempaul 221                 }
222                 else
223                 {
6 clempaul 224                     this.AddRecord.RunWorkerAsync(this.BuildRecord());
225                 }
226             }
227  
228         }
229  
230         private DNSRecord BuildRecord()
231         {
232             return new DNSRecord
2 clempaul 233                         {
234                             record = this.textBoxRecord.Text,
235                             value = this.textBoxValue.Text,
236                             type = this.comboBoxType.Text,
237                             comment = this.textBoxComment.Text
6 clempaul 238                         };
2 clempaul 239         }
240  
241         private void buttonCancel_Click(object sender, EventArgs e)
242         {
243             this.DialogResult = DialogResult.Cancel;
244             this.Close();
245         }
246     }
247 }