mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-12-23 20:47:25 -08:00
optimize<Avatar>: use task queue to download avatar one by one
This commit is contained in:
parent
c22ea8f4cf
commit
6a9ee67524
1 changed files with 33 additions and 14 deletions
|
@ -73,6 +73,11 @@ namespace SourceGit.Helpers {
|
|||
/// </summary>
|
||||
private static Dictionary<string, BitmapImage> loaded = new Dictionary<string, BitmapImage>();
|
||||
|
||||
/// <summary>
|
||||
/// Loader to join in queue.
|
||||
/// </summary>
|
||||
private static Task loader = null;
|
||||
|
||||
/// <summary>
|
||||
/// Render implementation.
|
||||
/// </summary>
|
||||
|
@ -150,23 +155,37 @@ namespace SourceGit.Helpers {
|
|||
requesting.Add(email, new List<Avatar>());
|
||||
requesting[email].Add(this);
|
||||
|
||||
Task.Run(() => {
|
||||
Action job = () => {
|
||||
try {
|
||||
var agent = new WebClient();
|
||||
var data = agent.DownloadData("https://www.gravatar.com/avatar/" + md5 + "?d=404");
|
||||
//var data = agent.DownloadData("https://cdn.s.loli.top/avatar/" + md5 + "?d=404");
|
||||
File.WriteAllBytes(filePath, data);
|
||||
HttpWebRequest req = WebRequest.CreateHttp("https://www.gravatar.com/avatar/" + md5 + "?d=404");
|
||||
req.Timeout = 2000;
|
||||
req.Method = "GET";
|
||||
|
||||
if (requesting.ContainsKey(email)) {
|
||||
Dispatcher.Invoke(() => {
|
||||
var img = new BitmapImage(new Uri(filePath));
|
||||
loaded[email] = img;
|
||||
foreach (var one in requesting[email]) one.Source = img;
|
||||
requesting.Remove(email);
|
||||
});
|
||||
HttpWebResponse rsp = req.GetResponse() as HttpWebResponse;
|
||||
if (rsp.StatusCode == HttpStatusCode.OK) {
|
||||
using (Stream reader = rsp.GetResponseStream())
|
||||
using (FileStream writer = File.OpenWrite(filePath)) {
|
||||
reader.CopyTo(writer);
|
||||
}
|
||||
|
||||
if (requesting.ContainsKey(email)) {
|
||||
Dispatcher.Invoke(() => {
|
||||
var img = new BitmapImage(new Uri(filePath));
|
||||
loaded[email] = img;
|
||||
foreach (var one in requesting[email]) one.Source = img;
|
||||
});
|
||||
}
|
||||
}
|
||||
} catch {}
|
||||
});
|
||||
} catch { }
|
||||
|
||||
requesting.Remove(email);
|
||||
};
|
||||
|
||||
if (loader != null && !loader.IsCompleted) {
|
||||
loader = loader.ContinueWith(t => { job(); });
|
||||
} else {
|
||||
loader = Task.Run(job);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
Loading…
Reference in a new issue