-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPresenter.cs
159 lines (153 loc) · 6.29 KB
/
Presenter.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.ComponentModel;
namespace test_task_3
{
public class Presenter
{
Model myModel;
Form1 form1;
public Presenter(Form1 m) {
form1 = m;
myModel = new Model();
form1.updateEvent += update_handler;
form1.addSiteEvent += addSite_handler;
form1.updateSiteEvent += updateSite_handler;
form1.deleteSiteEvent += deleteSite_handler;
form1.selectListEvent += selectList_handler;
}
// âûçîâ ìåòîäà ïðè çàãóçêå ôîðìû
async void update_handler(object sender, EventArgs e)
{
update_list();
updateListbox_handler(null, null);
}
// ìåòîä îáíîâëÿþùèé ãëîáàëüíûå ïåðåìåííûå è íà÷èíàåò àñèíõðîííîå îáíîâëåíèå äîñòóïíîñòè
public async void update_list()
{
// îáíîâëåíèå ãëîáàëüíûõ ïåðåìåííûõ
myModel.ViewListBoxText = myModel.update_sites_list();
myModel.sitesToListbox = myModel.sites_list();
// âûçîâ àñèíõðîííûõ ìåòîäîâ äëÿ îáíîâëåíèÿ äîñòóïíîñòè
async_updating(myModel.sitesToListbox, myModel.ViewListBoxText);
}
// ìåòîä îáíîâëÿþùèé ñïèñîê â ýëåìåíòå listbox
void updateListbox_handler(object sender, EventArgs e)
{
form1.lstbox.DataSource = null;
form1.lstbox.DataSource = myModel.ViewListBoxText;
}
// ìåòîä äîáàâëåíèÿ ñàéòà â ñïèñîê
void addSite_handler(object sender, EventArgs e)
{
change_file();
myModel.add_site(form1.nameTextbox.Text.ToString(), form1.urlTextbox.Text.ToString(), form1.delayTextbox.Text.ToString());
form1.nameTextbox.Text = null;
form1.delayTextbox.Text = null;
form1.urlTextbox.Text = null;
change_file();
after_update_file();
}
// ììåòîä îáíîâëÿþùèé ýëåìåíò â ñïèñêå
void updateSite_handler(object sender, EventArgs e)
{
change_file();
myModel.update_site(myModel.sitesToListbox, form1.lstbox.SelectedIndex, form1.nameTextbox.Text.ToString(), form1.urlTextbox.Text.ToString(), form1.delayTextbox.Text.ToString());
MessageBox.Show(form1.lstbox.SelectedIndex.ToString());
change_file();
after_update_file();
}
// ìåòîä îáíîâëÿþùèé listbox è íà÷èíàþùèé àñèíõðîííîå îáíîâëåíèå
void after_update_file()
{
myModel.ViewListBoxText = myModel.update_sites_list();
myModel.sitesToListbox = myModel.sites_list();
updateListbox_handler(null, null);
async_updating(myModel.sitesToListbox, myModel.ViewListBoxText);
}
// ìåòîä óäàëåíèÿ ýëåìåíòà èç ñïèñêà
void deleteSite_handler(object sender, EventArgs e)
{
change_file();
myModel.delete_site(myModel.sitesToListbox, form1.lstbox.SelectedIndex);
change_file();
after_update_file();
}
void selectList_handler(object sender, EventArgs e)
{
}
// ìåòîä âûçûâàþùèé àñèíõðîííûå ìåòîäû äëÿ îáíîâëåíèÿ äîñòóïíîñòè êàæäîãî ñàéòà
public async void async_updating(List<Sites> sites, List<string> listsites)
{
int countOfIndex = sites.Count - 1;
int list_index = sites.Count;
MessageBox.Show("Ôîíîâîå îáíîâëåíèå óñïåøíî çàïóùåíî");
while (countOfIndex >= 0)
{
await Task.Run(() => {
myModel.bw = new BackgroundWorker();
Sites site = sites.ElementAt(countOfIndex);
countOfIndex--;
list_index--;
string urls = site.siteURL;
int delay = site.siteDelay;
myModel.bw.DoWork += (obj, ea) => TasksAsync(listsites, urls, list_index, delay);
myModel.bw.RunWorkerAsync();
});
}
}
// ìåòîä èçìåíÿþùèé ïåðåìåííóþ êîòîðàÿ ñîäåðæèò èíôîðìàöèþ èçìåíÿåòñÿ ëè ñåé÷àñ ôàéë
public void change_file()
{
myModel.not_changed = !myModel.not_changed;
}
// àñèíõîííûé ìåòîä êîòîðûé îáíîâëÿåò äîñòóïíîñòü ñàéòà ïîêà ôàéë íå èçìåíèòñÿ
private async void TasksAsync(List<string> sitesListBox, string url, int index, int delay)
{
await Task.Run(() =>
{
while (myModel.not_changed)
{
bool enable;
string prev_string = sitesListBox[index];
Uri uri = new Uri(url);
try
{
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(uri);
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
enable = true;
}
catch
{
enable = false;
}
if (prev_string.Contains("True") && enable == false)
{
prev_string = sitesListBox[index].Replace("True", "False");
myModel.ViewListBoxText[index] = prev_string;
form1.lstbox.Invoke((MethodInvoker)delegate {
form1.lstbox.DataSource = null;
form1.lstbox.DataSource = myModel.ViewListBoxText;
});
}
else if (prev_string.Contains("False") && enable == true)
{
prev_string = sitesListBox[index].Replace("False", "True");
myModel.ViewListBoxText[index] = prev_string;
form1.lstbox.Invoke((MethodInvoker)delegate {
form1.lstbox.DataSource = null;
form1.lstbox.DataSource = myModel.ViewListBoxText;
});
}
System.Threading.Thread.Sleep(delay * 1000);
}
});
}
}
}