private void downloadVVer(RemoteVerType ver)
{
if (ver == null)
{
MessageBox.Show(LangManager.GetLangFromResource("RemoteVerErrorNoVersionSelect"));
return;
}
TaskListBar taskbar = new TaskListBar() { ImgSrc = new BitmapImage(new Uri("pack://application:,,,/Resources/download-banner.jpg")) };
var task = new Thread(new ThreadStart(async delegate
{
Dispatcher.Invoke(new System.Windows.Forms.MethodInvoker(async delegate
{
if (MeCore.Config.DownloadSource == 1)
{
await TaskEx.Delay(TimeSpan.FromSeconds(1));
}
}));
var selectver = ver.id;
var downpath = new StringBuilder(MeCore.Config.MCPath + @"\versions\");
downpath.Append(selectver).Append("\\");
downpath.Append(selectver).Append(".jar");
if (MeCore.IsServerDedicated)
{
if (!string.IsNullOrWhiteSpace(MeCore.Config.Server.ClientPath))
{
downpath.Replace(MeCore.Config.MCPath, Path.Combine(MeCore.BaseDirectory, MeCore.Config.Server.ClientPath));
}
}
var downer = new WebClient();
downer.Headers.Add("User-Agent", "MTMCL" + MeCore.version);
var downurl = new StringBuilder(MTMCL.Resources.UrlReplacer.getDownloadUrl());
downurl.Append(@"versions\");
downurl.Append(selectver).Append("\\");
downurl.Append(selectver).Append(".jar");
#if DEBUG
MessageBox.Show(downpath + "\n" + downurl);
#endif
if (!Directory.Exists(Path.GetDirectoryName(downpath.ToString())))
{
Directory.CreateDirectory(Path.GetDirectoryName(downpath.ToString()));
}
string downjsonfile = downurl.ToString().Substring(0, downurl.Length - 4) + ".json";
if (!string.IsNullOrWhiteSpace(ver.url) & MeCore.Config.DownloadSource == 0)
{
downjsonfile = ver.url;
}
string downjsonpath = downpath.ToString().Substring(0, downpath.Length - 4) + ".json";
try
{
downer.DownloadFileCompleted += delegate (object sender, AsyncCompletedEventArgs e)
{
taskbar.log(Logger.HelpLog("Success to download client file."));
taskbar.noticeFinished();
};
downer.DownloadProgressChanged += delegate (object sender, DownloadProgressChangedEventArgs e)
{
Dispatcher.Invoke(new Action(() => taskbar.setTaskStatus(e.ProgressPercentage + "%")));
};
taskbar.log(Logger.HelpLog("Start download file from url " + downjsonfile));
try
{
downer.DownloadFile(new Uri(downjsonfile), downjsonpath);
}
catch (Exception)
{
taskbar.noticeFailed();
return;
}
taskbar.log(Logger.HelpLog("Finish downloading file " + downjsonfile));
await TaskEx.Delay(TimeSpan.FromMilliseconds(500));
taskbar.log(Logger.HelpLog(string.Format("Start reading json of version {0} for further downloading", selectver)));
var sr = new StreamReader(downjsonpath);
VersionJson verjson = JsonConvert.DeserializeObject<VersionJson>(sr.ReadToEnd());
sr.Close();
var sw = new StreamWriter(downjsonpath);
sw.Write(JsonConvert.SerializeObject(verjson.Simplify(), Formatting.Indented, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore }));
sw.Close();
if (verjson.downloads != null)
{
if (verjson.downloads.client != null)
{
if (verjson.downloads.client.url != null)
{
downurl.Clear().Append(verjson.downloads.client.url);
}
}
}
taskbar.log(Logger.HelpLog("Start download file from url " + downurl.ToString()));
downer.DownloadFileAsync(new Uri(downurl.ToString()), downpath.ToString());
}
catch (Exception ex)
{
Dispatcher.Invoke(new System.Windows.Forms.MethodInvoker(delegate
{
Dispatcher.Invoke(new Action(() => MeCore.MainWindow.addNotice(new Notice.CrashErrorBar(string.Format(LangManager.GetLangFromResource("ErrorNameFormat"), DateTime.Now.ToLongTimeString()), ex.ToWellKnownExceptionString()) { ImgSrc = new BitmapImage(new Uri("pack://application:,,,/Resources/error-banner.jpg")) })));
taskbar.noticeFailed();
}));
}
}));
MeCore.MainWindow.addTask("dl-mcclient-" + ver.id, taskbar.setThread(task).setTask(LangManager.GetLangFromResource("TaskDLMC")).setDetectAlive(false));
MeCore.MainWindow.addBalloonNotice(new Notice.NoticeBalloon(LangManager.GetLangFromResource("Download"), string.Format(LangManager.GetLangFromResource("BalloonNoticeSTTaskFormat"), LangManager.GetLangFromResource("TaskDLMC"))));
}