-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGetImageWorker.cs
145 lines (122 loc) · 3.21 KB
/
GetImageWorker.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
using _8Banner.Controls;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
namespace _8Banner
{
class GetImageWorker
{
BackgroundWorker worker;
List<string> bannerUrls = new List<string>();
string defaultBannerUrl = "https://banners.8ch.net/default.png";
string boardName;
string bannerUrl;
int bannerLimit = 150;
bool working;
public GetImageWorker()
{
worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
boardName = HomePage.BoardName;
}
public void Start()
{
worker.RunWorkerAsync();
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
int bannersAdded = 0;
working = true;
while (bannersAdded < bannerLimit)
{
if (worker.CancellationPending)
{
e.Cancel = true;
break;
}
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://banners.8ch.net/random/" + boardName);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
bannerUrl = response.ResponseUri.ToString();
}
if (bannerUrl == defaultBannerUrl)
worker.CancelAsync();
else if (!bannerUrls.Contains(bannerUrl))
{
try
{
Application.Current.Dispatcher.Invoke((Action)delegate
{
MainWindow.main.Status = "Adding banners...";
BitmapImage bitmapBanner = new BitmapImage();
bitmapBanner.BeginInit();
bitmapBanner.UriSource = new Uri(bannerUrl, UriKind.Absolute);
bitmapBanner.EndInit();
BannerPage.page.bannerPanel.Children.Add(new BannerBox(bitmapBanner, bannerUrl));
bannerUrls.Add(bannerUrl);
bannersAdded++;
});
}
catch (Exception exception)
{
MainWindow.main.Status = String.Format("{0} threw an expection", exception.Source);
MessageBox.Show(String.Format("{0} causing exception: {1} ", exception.Source, exception.ToString()));
}
}
}
catch
{
MainWindow.main.Status = "Connection Lost - Retrying...";
}
}
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Clear();
if (e.Cancelled)
{
Application.Current.Dispatcher.Invoke((Action)delegate
{
MainWindow.main.btnCancel.Content = "Reset";
});
MainWindow.main.Status = "Canceled";
}
else
{
MainWindow.main.Status = "Complete";
Application.Current.Dispatcher.Invoke((Action)delegate
{
MainWindow.main.btnCancel.Content = "Reset";
});
}
}
public void Cancel()
{
worker.CancelAsync();
}
public bool isWorking()
{
return working;
}
public void Clear()
{
bannerUrls.Clear();
working = false;
}
}
}