/// <summary> /// 根据Type获取自己的收藏,只能由mainThread执行 /// </summary> /// <param name="reParame"></param> /// <param name="type"></param> private void GetCollectionByType(RequestParameEntity reParame, string type, string url) { getType = type; var listUrl = url + type; EachListPage(listUrl, DownContentType.OwnCollection, new Action <string>(itemUrl => { if (!mut.IsContinue) { return; } itemUrl = HtmlHelp.NeedHost(listUrl, itemUrl); var ri = new RequestItemParameEntity() { ItemUrl = itemUrl, SavePath = reParame.SavePath }; if (isSingle) { GetWorksItem(ri); } else { while (!mut.DoDownAction(ri, GetWorksItem) && mut.IsContinue) { Thread.Sleep(1000); } } })); }
private new void Update() { //下载更新软件 var url = XmlHelp.GetInnerTextByPath("Config:WebUrl") + updateSoft; var fileName = Path.GetFileName(updateSoft); var b = HtmlHelp.DownFile(url, fileName); if (!b) { MessageBox.Show("下载更新文件失败!"); } else { var aPath = Application.StartupPath + "/"; var updateFileName = XmlHelp.GetInnerTextByPath("Config:UpdateFileName"); if (File.Exists(updateFileName)) { File.Delete(updateFileName); } ZipHelp.ExtractToDirectory(fileName, aPath); File.Delete(fileName); //启动更新程序 Process.Start(updateFileName); //关闭主进程 var proc = Process.GetProcessesByName(XmlHelp.GetInnerTextByPath("Config:MainProcess").Replace(".exe", "")); foreach (var p in proc) { p.Kill(); } } }
/// <summary> /// 解压文件 /// </summary> /// <param name="objParame"></param> public void UnZipFile(object objParame) { var parame = (Dictionary <string, string>)objParame; var savePath = parame["SavePath"].Replace("\\", "/").Replace("//", "/"); var fileUrl = parame["FileUrl"].Replace("\\", "/").Replace("//", "/"); var fileName = parame["FileName"].Replace("\\", "/").Replace("//", "/"); var delay = parame["Delay"]; //将文件解压 var zipDir = savePath + "/" + Path.GetFileNameWithoutExtension(fileUrl); try { ZipHelp.ExtractToDirectory(fileName, zipDir); //将文件解压后的文件夹中的图片转为GIF var fs = Directory.GetFiles(zipDir); GifHelp.ImageToGif(fs, zipDir + ".gif", int.Parse(delay)); } catch (Exception ex) { AddErrorMsg(string.Format("解压文件{0}失败!\r\n{1}\r\n", fileName, ex.Message)); HtmlHelp.SaveStringToTxt(ex.StackTrace + "\r\n", "Error.txt"); } finally { mut.DisposeUnZipThread(); } }
/// <summary> /// 获取单个画师,只能由DoGetThread执行 /// </summary> /// <param name="listUrl">画师作品列表页</param> public void GetSingle(object objParame) { try { if (!mut.IsContinue) { return; } //因为循环里没有做修改,所有可以放外面 var parame = (RequestParameEntity)objParame; form.BeginInvoke(new Action(() => { form.RtxtSuccess.Text = ""; })); if (isSingle) { form.Invoke(new Action(() => { form.TxtSavePath.Text = parame.SavePath; })); } EachListPage(parame.ListUrl, DownContentType.SinglePainter, new Action <string>(itemUrl => { if (!mut.IsContinue) { return; } itemUrl = HtmlHelp.NeedHost(parame.ListUrl, itemUrl); var ri = new RequestItemParameEntity() { ItemUrl = itemUrl, SavePath = parame.SavePath }; if (isSingle) { GetWorksItem(ri); } else { while (!mut.DoDownAction(ri, GetWorksItem) && mut.IsContinue) { Thread.Sleep(1000); } } })); } catch (Exception ex) { AddErrorMsg(ex.Message + "\r\n"); HtmlHelp.SaveStringToTxt(ex.Message + "\r\n" + ex.StackTrace + "\r\n\r\n", "Error.txt"); } finally { if (!isSingle) { mut.RemoveGThread(); } } }
private void btnlogin_Click(object sender, EventArgs e) { Global.userid = GUI_User_Name.Text; Dictionary <string, FeildDetail> formdata = new Dictionary <string, FeildDetail>() { { "__VIEWSTATE", new FeildDetail() { Xpath = "//*[@id='__VIEWSTATE']", ContentType = ContentType.AttributeValue, AttributeKey = "value" } }, { "__EVENTVALIDATION", new FeildDetail() { Xpath = "//*[@id='__EVENTVALIDATION']", ContentType = ContentType.AttributeValue, AttributeKey = "value" } }, }; HtmlHelp.GetBodyInfo(() => login, formdata, null, "/html/body", "", out Dictionary <string, string> rootvalues, out List <Dictionary <string, string> > rangeValues); Dictionary <string, string> pams = new Dictionary <string, string>() { { "__VIEWSTATE", rootvalues["__VIEWSTATE"] }, { "__EVENTVALIDATION", rootvalues["__EVENTVALIDATION"] }, { "Account", Global.userid }, { "PWD", GUI_User_Pwd.Text }, { "CheckCode", GUI_verfyCode.Text }, { "cmdok", "" } }; Global.aspxauth = HttpHelp.LoginGetSessin("http://jw.jltc.edu.cn/login.aspx", pams, cookie: Global.Cookie); if (string.IsNullOrEmpty(Global.LoginCookie)) { MessageBox.Show("用户名/密码/验证码错误"); return; } UserSecret userSecret = new UserSecret { UserName = GUI_User_Name.Text, //PassWord = GUI_User_Pwd.Text?.EncryptDES(), PassWord = GUI_rememberpassword.Checked ? GUI_User_Pwd.Text?.EncryptDES() : "", RememberPassword = GUI_rememberpassword.Checked ? true : false }; string jsonstr = userSecret.ToJson(); File.Delete(Global.FileUrl); using (FileStream fs = new FileStream(Global.FileUrl, FileMode.CreateNew)) { using (StreamWriter sw = new StreamWriter(fs)) { sw.Write(jsonstr); } } Hide(); //FormMain fm = new FormMain(); //var result = fm.ShowDialog(); //if (result == DialogResult.Cancel) //{ // Application.Exit(); //} }
/// <summary> /// 登录 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void btnLogin_Click(object sender, EventArgs e) { try { if (string.IsNullOrWhiteSpace(ddlUserName.Text) || string.IsNullOrWhiteSpace(txtPassWord.Text)) { MessageBox.Show("用户名密码不能为空!", "提示"); return; } lblMsg.Text = "登录中,请稍等..."; EnableControl(false, this); SaveUserInfo(); var name = ddlUserName.Text; var pwd = txtPassWord.Text; var ca = txtCaptcha.Text; var result = await Task.Run(() => { return(HtmlHelp.Login(name, pwd, ca)); }); if (result != null && result.Html.Contains("success")) { btnSingle.Enabled = true; btnMutDown.Enabled = true; picCaptcha.Visible = false; lblMsg.Text = "登录成功!"; } else { lblMsg.Text = "注:若账号密码正确,可能是需要输入验证码!"; MessageBox.Show("登录失败!", "提示"); EnableControl(true, this); btnSingle.Enabled = false; btnMutDown.Enabled = false; //获取验证码 var buffter = HtmlHelp.GetCaptcha("https://accounts.pixiv.net/captcha"); if (buffter != null) { txtCaptcha.Enabled = true; picCaptcha.Image = Image.FromStream(new MemoryStream(buffter)); picCaptcha.Visible = true; } } } catch (Exception ex) { MessageBox.Show(ex.Message, "异常信息"); } }
private void GUI_refresh_Click(object sender, EventArgs e) { int key = 0; key = Global.semester.FirstOrDefault(q => q.Value == GUI_semester.Text).Key; if (GUI_week.Text == "") { GUI_week.Text = "1"; } if (key == 0 || GUI_week.Text == "") { ShowTimeTable(timetable); return; } string ddlxnxqh = "20" + Convert.ToString(Global.year + (key / 10) - 1) + "-20" + Convert.ToString(Global.year + (key / 10)) + "-" + Convert.ToString(key % 10); Dictionary <string, FeildDetail> formdata = new Dictionary <string, FeildDetail>() { { "__VIEWSTATE", new FeildDetail() { Xpath = "//*[@id='__VIEWSTATE']", ContentType = ContentType.AttributeValue, AttributeKey = "value" } }, // { "__EVENTVALIDATION",new FeildDetail() { Xpath="//*[@id='__EVENTVALIDATION']", ContentType=ContentType.AttributeValue, AttributeKey="value" } }, }; HtmlHelp.GetBodyInfo(() => timetable, formdata, null, "/html/body", "", out Dictionary <string, string> rootvalues, out List <Dictionary <string, string> > rangeValues); string __VIEWSTATE = rootvalues["__VIEWSTATE"]; Dictionary <string, string> pams = new Dictionary <string, string>() { { "__EVENTTARGET", "zc" }, { "__EVENTARGUMENT", "" }, { "__LASTFOCUS", "" }, { "__VIEWSTATE", rootvalues["__VIEWSTATE"] }, { "ddlxnxqh", ddlxnxqh }, { "mx", "on" }, { "zc", GUI_week.Text } }; string html = HttpHelp.HttpPost("http://jw.jltc.edu.cn/JWXS/pkgl/XsKB_List.aspx", Global.LoginCookie, pams); ShowTimeTable(html); }
private void UpdateSoft() { try { var url = XmlHelp.GetInnerTextByPath("Config:UpdateUrl"); var json = HtmlHelp.Get(url); var result = JsonHelp.DeserializeObject <ResultEntity>(json); if (result.Code == "1") { var url2 = XmlHelp.GetInnerTextByPath("Config:WebUrl"); var zip = Path.GetFileName(result.FileName); var b = HtmlHelp.DownFile(url2 + result.FileName, zip, progressBar1); if (!b) { throw new Exception(); } //解压下载的文件 var aPath = Application.StartupPath + "/"; ZipHelp.ExtractToDirectory(zip, aPath + "NewPixiv"); //删除下载的压缩文件 File.Delete(aPath + zip); //替换文件 ReplaceFile(aPath, aPath + "NewPixiv"); //删除解压后的文件 Directory.Delete(aPath + "NewPixiv", true); //重新启动主程序 var mainPreocess = XmlHelp.GetInnerTextByPath("Config:MainProcess"); Process.Start(mainPreocess); } else { MessageBox.Show(result.Message); } } catch (Exception e) { MessageBox.Show("更新文件失败!"); } }
/// <summary> /// 下载搜索 /// Url 必须是完整的地址,只能由mainThread执行 /// </summary> /// <param name="objParame"></param> public void GetSearch(object objParame) { try { var parame = (RequestParameEntity)objParame; EachListPage(parame.ListUrl, DownContentType.GetSearch, new Action <string>(itemUrl => { if (!mut.IsContinue) { return; } itemUrl = "/member_illust.php?mode=medium&illust_id=" + itemUrl; itemUrl = HtmlHelp.NeedHost(parame.ListUrl, itemUrl); //都下载同一个地方,不用克隆 var ri = new RequestItemParameEntity() { ItemUrl = itemUrl, SavePath = parame.SavePath }; if (isSingle) { GetWorksItem(ri); } else { while (!mut.DoDownAction(ri, GetWorksItem) && mut.IsContinue) { Thread.Sleep(1000); } } })); } catch (Exception ex) { AddErrorMsg(ex.Message + "\r\n"); HtmlHelp.SaveStringToTxt(ex.Message + "\r\n" + ex.StackTrace + "\r\n\r\n", "Error.txt"); } finally { if (mainThread != null && mainThread.IsAlive) { mainThread.Abort(); } } }
public static void AddPoints(NeedM s, Dictionary <string, List <Point> > dict) { List <string> allPpeTypes = s.PpeTypes.ToList(); foreach (string ppeType in allPpeTypes) { string className = Ppe.TypesToClasses[ppeType]; string need = Ppe.NeedFromType(ppeType, s.OtherPpeTypes); Point p = new Point { Location = s.LocationArry, PopupHtml = $"<div class='need'><h1>Need</h1>{s.TwitterHtml}{HtmlHelp.LabelledTag("PPE:", HtmlHelp.ColorBoxHtml(need, className))}{HtmlHelp.LabelledTag("Organisation:", s.Organisation)}{s.PostedHtml}</div>" }; dict[ppeType].Add(p); } }
/// <summary> /// 下载相关作品 /// </summary> /// <param name="objParame"></param> public void GetRelatedWorks(object objParame) { try { var parame = (RequestParameEntity)objParame; var ids = GetRelatedWorksIds(parame); if (ids != null && ids.Count > 0) { foreach (var id in ids) { var itemUrl = "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=" + id; var ri = new RequestItemParameEntity() { ItemUrl = itemUrl, SavePath = parame.SavePath }; if (isSingle) { GetWorksItem(ri); } else { while (!mut.DoDownAction(ri, GetWorksItem) && mut.IsContinue) { Thread.Sleep(1000); } } } } } catch (Exception ex) { AddErrorMsg(ex.Message + "\r\n"); HtmlHelp.SaveStringToTxt(ex.Message + "\r\n" + ex.StackTrace + "\r\n\r\n", "Error.txt"); } finally { //if (mainThread != null && mainThread.IsAlive) //{ // mainThread.Abort(); //} } }
private void SetColorText(string htmlFragment) { if (htmlFragment == null || htmlFragment.Length == 0) { return; } Paragraph paragraph; if (this.Blocks.Count == 0 || (paragraph = this.Blocks[this.Blocks.Count - 1] as Paragraph) == null) { paragraph = new Paragraph(); this.Blocks.Add(paragraph); } var nextOffset = 0; var regEx = new Regex(@"(\[color=#FFFFFF\](?<colortxt>.*?)\[/color\])", RegexOptions.IgnoreCase | RegexOptions.Singleline); foreach (Match match in regEx.Matches(htmlFragment)) { if (match.Index == nextOffset) { nextOffset = match.Index + match.Length; paragraph.Inlines.Add(new Run { Text = "(此处反白)->" + HtmlHelp.NoTag(match.Groups["colortxt"].Value) + "<-", Foreground = new SolidColorBrush(Colors.Red) }); } else if (match.Index > nextOffset) { this.SetImgText(htmlFragment.Substring(nextOffset, match.Index - nextOffset)); nextOffset = match.Index + match.Length; paragraph.Inlines.Add(new Run { Text = "(此处反白)->" + HtmlHelp.NoTag(match.Groups["colortxt"].Value) + "<-", Foreground = new SolidColorBrush(Colors.Red) }); } } if (nextOffset < htmlFragment.Length) { this.SetImgText(htmlFragment.Substring(nextOffset)); } }
static string toPopupHtml(NeedM s, bool isLoggedIn) { StringBuilder sb = new StringBuilder(); sb.Append("<div class='need_met'>"); sb.Append("<h1>Met Needs</h1>"); sb.Append(s.TwitterHtml); if (isLoggedIn) { sb.Append($"<a class='edit_link' target='_blank' title='View Record' href='/edit-needs/{s.Id}'><i class='fas fa-link fa-2x'></i></a>"); } sb.Append(HtmlHelp.LabelledTag("Postcode:", s.Postcode)); sb.Append(HtmlHelp.LabelledTag("Organisation:", s.Organisation)); sb.Append(HtmlHelp.LabelledList("Needs Met:", s.PpeTypes)); sb.Append(HtmlHelp.LabelledTag("Other Needs Met:", s.OtherPpeTypes)); sb.Append(s.PostedHtml); sb.Append("</div>"); return(sb.ToString()); }
/// <summary> /// 获取所有关注的画师,只能由mainThread执行 /// </summary> public void GetAllFollow(object objParame) { try { GetAllFollowByType((RequestParameEntity)objParame, "show"); GetAllFollowByType((RequestParameEntity)objParame, "hide"); } catch (Exception ex) { AddErrorMsg(ex.Message + "\r\n"); HtmlHelp.SaveStringToTxt(ex.Message + "\r\n" + ex.StackTrace + "\r\n\r\n", "Error.txt"); } finally { if (mainThread != null && mainThread.IsAlive) { mainThread.Abort(); } } }
private void CheckUpdate() { try { var updateFile = XmlHelp.GetInnerTextByPath("Config:UpdateFileName"); var ps = Process.GetProcessesByName(updateFile.Replace(".exe", "")); foreach (var p in ps) { p.Kill(); } if (File.Exists(updateFile)) { File.Delete(updateFile); } var url = XmlHelp.GetInnerTextByPath("Config:CheckVersionUrl"); var json = HtmlHelp.Get(url); var result = JsonHelp.DeserializeObject <ResultEntity>(json); if (result.Code == "-1") { MessageBox.Show(result.Message); } else if (result.Code == "1") { UpdateDetailForm f = new UpdateDetailForm(); f.updateSoft = result.UpdateSoft; f.updateDetail = result.UpdateDetail; f.Show(); } } catch (Exception e) { MessageBox.Show("检查更新失败!"); //MessageBox.Show(e.Message); } }
/// <summary> /// 获取单个图片 /// </summary> /// <param name="itemUrl"></param> /// <param name="html"></param> public void GetSigImage(string itemUrl, string html, string savePath) { var imgR = new Regex(RegexHelp.Other.GetSingleImage, RegexOptions.Singleline); var imgM = imgR.Match(html); if (imgM == null || imgM.Groups["Url"].Value == "") { AddErrorMsg(string.Format("获取URL:{0} 的图片失败!\r\n", itemUrl)); return; } var imgUrl = HtmlHelp.NeedHost(itemUrl, imgM.Groups["Url"].Value); lock (Multithreading.ObjLockExistFile) { if (File.Exists(savePath + "/" + Path.GetFileName(imgUrl))) { if (form.ChkNeglect.Checked) { AddErrorMsg(string.Format("跳过已存在的图片:{0}!\r\n", imgUrl)); } return; } } AddSuccessMsg(string.Format("正在下载图片:{0} \r\n", imgUrl)); var filePath = savePath + "/" + Path.GetFileName(imgUrl); bool b = DownHelp.DownImage(imgUrl, filePath, 1024, itemUrl, 5); if (b) { AddSuccessMsg(string.Format("下载图片:{0} 成功\r\n", imgUrl)); } else { var txt = string.Format("下载图片:{0} 失败\r\n Url:{1}\r\n", imgUrl, itemUrl); AddErrorMsg(txt); HtmlHelp.SaveStringToTxt(txt, "FaildMsg.txt"); } }
static string toPopupHtml(SupplyM s, bool isLoggedIn) { StringBuilder sb = new StringBuilder(); sb.Append("<div class='supply'>"); sb.Append("<h1>Supplies Post</h1>"); sb.Append(s.WebsiteHtml); if (isLoggedIn) { sb.Append($"<a class='edit_link' target='_blank' title='View Record' href='/edit-supplies/{s.Id}'><i class='fas fa-link fa-2x'></i></a>"); } sb.Append(HtmlHelp.LabelledTag("Organisation:", s.Organisation)); sb.Append(HtmlHelp.LabelledTag("Description:", s.Description)); sb.Append(HtmlHelp.LabelledList("Supplies:", s.PpeTypes)); sb.Append(HtmlHelp.LabelledTag("Other Supplies:", s.OtherPpeTypes)); sb.Append(HtmlHelp.LabelledTag("Capacity:", s.CapacityNotes)); //TODO:TD switch to compiled info from ppetTypes for new posts //TODO:contact details sb.Append(s.PostedHtml); sb.Append("</div>"); return(sb.ToString()); }
/// <summary> /// 下载指定画师的收藏 /// </summary> /// <param name="objParame"></param> public void GetAuthorCollection(object objParame) { try { var parame = (RequestParameEntity)objParame; GetCollectionByType(parame, parame.ID, "https://www.pixiv.net/bookmark.php?id="); } catch (Exception ex) { AddErrorMsg(ex.Message + "\r\n"); HtmlHelp.SaveStringToTxt(ex.Message + "\r\n" + ex.StackTrace + "\r\n\r\n", "Error.txt"); } finally { if (mainThread != null && mainThread.IsAlive) { mainThread.Abort(); } } }
/// <summary> /// 获取单个作品 /// </summary> /// <param name="objParame"></param> public void GetSingleWorks(object objParame) { try { if (!mut.IsContinue) { return; } //因为循环里没有做修改,所有可以放外面 var parame = (RequestParameEntity)objParame; form.BeginInvoke(new Action(() => { form.RtxtSuccess.Text = ""; })); var ri = new RequestItemParameEntity() { ItemUrl = parame.ListUrl, SavePath = parame.SavePath }; GetWorksItem(ri); if (parame.DownRelatedWorks) { GetRelatedWorks(objParame); } } catch (Exception ex) { AddErrorMsg(ex.Message + "\r\n"); HtmlHelp.SaveStringToTxt(ex.Message + "\r\n" + ex.StackTrace + "\r\n\r\n", "Error.txt"); } finally { if (mainThread != null && mainThread.IsAlive) { mainThread.Abort(); } } }
public static Need FromWebNeed(WebNeed s) { Need respVal = new Need { UshahidiId = s.UshahidiId, Timestamp = s.Timestamp, StatusId = (int)PostStatus.Published, //always PublishAnonymously = s.PublishAnonymously, ContactName = s.ContactName, //NN JobTitle = s.JobTitle, Email = Settings.DefaultEmail, //Email = s.Email,//no point - empty //TODO:ensure volunteers do this //PhoneNumber = s.PhoneNumber,//no point - empty //TODO:ensure volunteers do this OrganisationName = s.OrganisationName, Department = s.Department, OrgTypeId = s.OrgTypeId, OrgTypeOther = s.OrgTypeOther, TownOrCity = s.TownOrCity, TweetId = s.TweetId, Postcode = s.Postcode, //NN TellUsMore = s.TellUsMore, Latitude = s.Latitude, Longitude = s.Longitude, }; if (respVal.ContactName != null && respVal.ContactName.Length > 100) { Debugger.Break(); } if (respVal.Department != null && respVal.Department.Length > 200) { Debugger.Break(); } if (respVal.Email != null && respVal.Email.Length > 320) { Debugger.Break(); } if (respVal.JobTitle != null && respVal.JobTitle.Length > 100) { Debugger.Break(); } if (respVal.OrgTypeOther != null && respVal.OrgTypeOther.Length > 300) { Debugger.Break(); } if (respVal.OrganisationName != null && respVal.OrganisationName.Length > 200) { Debugger.Break(); } if (respVal.PhoneNumber != null && respVal.PhoneNumber.Length > 100) { Debugger.Break(); } if (respVal.Postcode != null && respVal.Postcode.Length > 8) { Debugger.Break(); } if (respVal.TownOrCity != null && respVal.TownOrCity.Length > 200) { Debugger.Break(); } respVal.NeedPpeTypes = s.NeedPpeTypes.SelectToList(ppe => FromWebNeedPpeType(ppe, respVal)); List <byte> t = s.NeedPpeTypes.GroupBy(g => g.PpeTypeId).Where(g => g.Count() > 1).SelectToList(g => g.Key); if (t.Count > 0) { Debug.WriteLine($"UshahidiId {s.UshahidiId} Need has duplicate PPE types {HtmlHelp.BuildString(t, ", ")}"); respVal = null; } //if(s.UshahidiId == 471) //{ // Debug.WriteLine($"UshahidiId {s.UshahidiId} has an awesome postcode {respVal.Postcode}"); // respVal = null; //} return(respVal); }
/// <summary> /// 获取指定作品的动画 /// </summary> public void GetCanvasZipFile(string itemUrl, string savePath, string pid) { //可以获取zip的url var zipHtmlUrl = string.Format("https://www.pixiv.net/ajax/illust/{0}/ugoira_meta", pid); var html = DownHelp.GetHtmlString(zipHtmlUrl, Encoding.UTF8, 5); var fReg = new Regex(RegexHelp.Other.GetAnimation, RegexOptions.Singleline); var fM = fReg.Match(html); if (fM == null || fM.Groups["Url"].Value == "") { AddErrorMsg(string.Format("获取 {0} 的动画失败!\r\n", itemUrl)); return; } //zip的Url路径 var fileUrl = fM.Groups["Url"].Value.Replace("\\/", "/"); //zip文件名 var fileName = savePath + "/" + Path.GetFileName(fileUrl); lock (Multithreading.ObjLockExistFile) { if (File.Exists(fileName)) { if (form.ChkNeglect.Checked) { AddErrorMsg(string.Format("文件{0}已存在,已忽略!\r\n", fileName)); } return; } } //获取文件总大小 var total = HtmlHelp.GetFileContenLength(fileUrl, itemUrl); if (total == 0) { AddErrorMsg(string.Format("获取 {0} 的大小失败!\r\n", fileUrl)); return; } //分批获取文件 var b = HtmlHelp.DownFile(fileUrl, fileName, itemUrl, 299999, total); if (b) { AddSuccessMsg(string.Format("下载 {0} 的文件成功!\r\n", fileUrl)); } else { AddErrorMsg(string.Format("下载 {0} 的文件失败!\r\n Url:{1}\r\n", fileUrl, itemUrl)); if (File.Exists(fileName)) { File.Delete(fileName); } return; } //获取delay var dr = new Regex(RegexHelp.Other.GetDelay, RegexOptions.Singleline); var dm = dr.Match(html); var delay = "50"; if (dm != null && dm.Groups["Delay"].Value != "") { delay = dm.Groups["Delay"].Value; } var dic = new Dictionary <string, string>() { { "SavePath", savePath }, { "FileUrl", fileUrl }, { "FileName", fileName }, { "Delay", delay } }; while (!mut.UnZipFile(dic, UnZipFile)) { Thread.Sleep(5000); } }
private void SetImgText(string htmlFragment) { if (htmlFragment == null || htmlFragment.Length == 0) { return; } Paragraph paragraph; if (this.Blocks.Count == 0 || (paragraph = this.Blocks[this.Blocks.Count - 1] as Paragraph) == null) { paragraph = new Paragraph(); this.Blocks.Add(paragraph); } var nextOffset = 0; var regEx = new Regex(@"(\[img=(?<imgname>.*?)\](?<imgtxt>.*?)\[/img\])", RegexOptions.IgnoreCase | RegexOptions.Singleline); foreach (Match match in regEx.Matches(htmlFragment)) { if (match.Index == nextOffset) { nextOffset = match.Index + match.Length; var run = new Run { Text = "[此处有图片]", Foreground = new SolidColorBrush(Color.FromArgb(255, 150, 230, 230)) }; var link = new Hyperlink { }; link.Click += new RoutedEventHandler((sender, e) => { Navi.NavigationTo("/ImageView.xaml?url=" + HttpUtility.UrlEncode(match.Groups["imgtxt"].Value)); }); link.Inlines.Add(run); paragraph.Inlines.Add(link); } else if (match.Index > nextOffset) { this.SetImgText(htmlFragment.Substring(nextOffset, match.Index - nextOffset)); nextOffset = match.Index + match.Length; var run = new Run { Text = "[此处有图片]", Foreground = new SolidColorBrush(Color.FromArgb(255, 150, 230, 230)) }; var link = new Hyperlink { }; link.Click += new RoutedEventHandler((sender, e) => { Navi.NavigationTo("/ImageView.xaml?url=" + HttpUtility.UrlEncode(match.Groups["imgtxt"].Value)); }); link.Inlines.Add(run); paragraph.Inlines.Add(link); } } if (nextOffset < htmlFragment.Length) { paragraph.Inlines.Add(new Run { Text = HtmlHelp.NoTag(htmlFragment.Substring(nextOffset)) }); } }
/// <summary> /// 遍历列表页面,获取所有子项目,并自动获取下一页 /// </summary> /// <param name="listUrl"></param> /// <param name="type"></param> /// <param name="doWork"></param> private void EachListPage(string listUrl, DownContentType type, Action <string> doWork) { try { while (mut.IsContinue) { if (isSingle) { form.Invoke(new Action(() => { form.RtxtSuccess.Text = ""; form.TxtCurrListUrl.Text = listUrl; })); } AddSuccessMsg(string.Format("正在获取URL:{0} 的html!\r\n", listUrl)); var html = DownHelp.GetHtmlString(listUrl, Encoding.UTF8, 5); if (html == "") { AddErrorMsg(string.Format("获取URL:{0} 的html失败!\r\n", listUrl)); return; } AddSuccessMsg(string.Format("获取URL:{0} 的html成功!\r\n", listUrl)); Regex pReg = new Regex(RegexHelp.GetRegex(type, RegexType.ListParentRegex), RegexOptions.Singleline); var pm = pReg.Match(html); if (pm == null || pm.Value == "") { AddErrorMsg(string.Format("获取URL:{0} 的父容器失败!\r\n", listUrl)); return; } var pHtml = pm.Value; Regex lReg = new Regex(RegexHelp.GetRegex(type, RegexType.ListRegex), RegexOptions.Singleline); var lms = lReg.Matches(pHtml); if (lms == null || lms.Count <= 0) { AddErrorMsg(string.Format("获取URL:{0} 子项目失败!\r\n", listUrl)); return; } foreach (Match item in lms) { if (!mut.IsContinue) { return; } var itemUrl = item.Groups["Url"].Value; doWork(itemUrl); } if (!mut.IsContinue) { return; } Regex nReg = new Regex(RegexHelp.GetRegex(type, RegexType.NextListRegex), RegexOptions.Singleline); var nm = nReg.Match(html); if (nm == null || nm.Groups["Next"].Value == "") { AddErrorMsg(string.Format("没有在:{0} 中获取到下一页!\r\n", listUrl)); form.Invoke(new Action(() => { if (form.RadAllFollow.Checked && type == DownContentType.AllFollow) { form.LblOtherText.Text = string.Format("关注的{0}公开的画师已没有一下页!", getType == "show" ? "" : "非"); } else if (form.RadSingle.Checked && type == DownContentType.SinglePainter) { form.LblOtherText.Text = "当前画师作品已没有一下页!"; } else if (form.RadCollection.Checked && type == DownContentType.OwnCollection) { if (getType == "show" || getType == "hide") { form.LblOtherText.Text = string.Format("收藏的{0}公开的作品已没有一下页!", getType == "show" ? "" : "非"); } else { form.LblOtherText.Text = string.Format("画师{0}收藏的作品已没有一下页!", getType); } } else if (form.RadCollection.Checked && type == DownContentType.GetSearch) { form.LblOtherText.Text = string.Format("搜索的内容已没有一下页!"); } })); return; } var nextUrl = HtmlHelp.NeedHost(listUrl, nm.Groups["Next"].Value); //EachListPage(nextUrl, type, doWork); listUrl = nextUrl; AddSuccessMsg(string.Format("正在获取下一页:{0}!\r\n", listUrl)); } } catch (Exception ex) { AddErrorMsg(ex.Message + "\r\n"); HtmlHelp.SaveStringToTxt(ex.Message + "\r\n" + ex.StackTrace + "\r\n\r\n", "Error.txt"); } }
/// <summary> /// 获取更多图片 /// </summary> /// <param name="moreUrl">查看更多Url</param> public void GetMoreImage(string moreUrl, string savePath) { AddSuccessMsg(string.Format("正在获取URL:{0} 的html!\r\n", moreUrl)); var html = DownHelp.GetHtmlString(moreUrl, Encoding.UTF8, 5); if (html == "") { AddErrorMsg(string.Format("获取URL:{0} 的html失败!\r\n", moreUrl)); return; } AddSuccessMsg(string.Format("获取URL:{0} 的html成功!\r\n", moreUrl)); //获取放大镜集合 var mReg = new Regex(RegexHelp.Other.GetMaxButton, RegexOptions.Singleline); var mms = mReg.Matches(html); if (mms != null && mms.Count > 0) { //获取放大后的图片 foreach (Match m in mms) { var mUrl = m.Groups["Url"].Value; mUrl = HtmlHelp.NeedHost(moreUrl, mUrl); var mHtml = DownHelp.GetHtmlString(mUrl, Encoding.UTF8, 5); var mmReg = new Regex(RegexHelp.Other.GetImageWhenMax, RegexOptions.Singleline); var mmm = mmReg.Match(mHtml); if (mmm == null || mmm.Groups["Url"].Value == "") { AddErrorMsg(string.Format("获取URL:{0} 的图片失败!\r\n", mUrl)); return; } var imgUrl = HtmlHelp.NeedHost(mUrl, mmm.Groups["Url"].Value); lock (Multithreading.ObjLockExistFile) { if (File.Exists(savePath + "/" + Path.GetFileName(imgUrl))) { if (form.ChkNeglect.Checked) { AddErrorMsg(string.Format("跳过已存在的图片:{0}!\r\n", imgUrl)); } continue; } } AddSuccessMsg(string.Format("正在下载图片:{0} \r\n", imgUrl)); var filePath = savePath + "/" + Path.GetFileName(imgUrl); bool b = DownHelp.DownImage(imgUrl, filePath, 1024, moreUrl, 5); if (b) { AddSuccessMsg(string.Format("下载图片:{0} 成功\r\n", imgUrl)); } else { var txt = string.Format("下载图片:{0} 失败\r\n Url:{1}\r\n", imgUrl, moreUrl); AddErrorMsg(txt); HtmlHelp.SaveStringToTxt(txt, "FaildMsg.txt"); } } } else { AddErrorMsg(string.Format("没有获取到放大镜集合:{0}!\r\n", moreUrl)); return; //直接获取图片 var msReg = new Regex(RegexHelp.Other.GetImageWhenNotMax, RegexOptions.Singleline); var imgMs = msReg.Matches(html); foreach (Match m in imgMs) { var imgUrl = m.Groups["Url"].Value; imgUrl = HtmlHelp.NeedHost(moreUrl, imgUrl); lock (Multithreading.ObjLockExistFile) { if (File.Exists(savePath + "/" + Path.GetFileName(imgUrl))) { if (form.ChkNeglect.Checked) { AddErrorMsg(string.Format("跳过已存在的图片:{0}!\r\n", imgUrl)); } continue; } } AddSuccessMsg(string.Format("正在下载图片:{0} \r\n", imgUrl)); var filePath = savePath + "/" + Path.GetFileName(imgUrl); bool b = DownHelp.DownImage(imgUrl, filePath, 1024, moreUrl, 5); if (b) { AddSuccessMsg(string.Format("下载图片:{0} 成功\r\n", imgUrl)); } else { var txt = string.Format("下载图片:{0} 失败\r\n Url:{1}\r\n", imgUrl, moreUrl); AddErrorMsg(txt); HtmlHelp.SaveStringToTxt(txt, "FaildMsg.txt"); } } } }
private void SetEmojiText(string htmlFragment) { if (htmlFragment == null || htmlFragment.Length == 0) { return; } this.Blocks.Clear(); Paragraph paragraph; if (this.Blocks.Count == 0 || (paragraph = this.Blocks[this.Blocks.Count - 1] as Paragraph) == null) { paragraph = new Paragraph(); this.Blocks.Add(paragraph); } var nextOffset = 0; var regEx = new Regex(@"(\[emot=(?<emoji>.*?)/\])", RegexOptions.IgnoreCase | RegexOptions.Singleline); foreach (Match match in regEx.Matches(htmlFragment)) { if (match.Index == nextOffset) { nextOffset = match.Index + match.Length; if (match.Groups["emoji"].Value.Split(',').Count() > 1) { var grid = new Grid(); grid.Background = new SolidColorBrush(Colors.White); grid.Margin = new Thickness(1, 0, 1, 0); var image = new Image(); var bi = new BitmapImage(new Uri("/Assets/Emoji/" + match.Groups["emoji"].Value.Split(',')[0] + "/" + match.Groups["emoji"].Value.Split(',')[1] + ".png", UriKind.RelativeOrAbsolute)); image.Source = bi; image.Height = 60; grid.Children.Add(image); var container = new InlineUIContainer(); container.Child = grid; paragraph.Inlines.Add(container); } else { this.SetAtText(HtmlHelp.NoHTML(match.Groups["emoji"].Value)); } } else if (match.Index > nextOffset) { this.SetAtText(HtmlHelp.NoHTML(htmlFragment.Substring(nextOffset, match.Index - nextOffset))); nextOffset = match.Index + match.Length; if (match.Groups["emoji"].Value.Split(',').Count() > 1) { var grid = new Grid(); grid.Background = new SolidColorBrush(Colors.White); grid.Margin = new Thickness(1, 0, 1, 0); var image = new Image(); var bi = new BitmapImage(new Uri("/Assets/Emoji/" + match.Groups["emoji"].Value.Split(',')[0] + "/" + match.Groups["emoji"].Value.Split(',')[1] + ".png", UriKind.RelativeOrAbsolute)); image.Source = bi; image.Height = 60; grid.Children.Add(image); var container = new InlineUIContainer(); container.Child = grid; paragraph.Inlines.Add(container); } else { this.SetAtText(HtmlHelp.NoHTML(match.Groups["emoji"].Value)); } } } if (nextOffset < htmlFragment.Length) { this.SetAtText(HtmlHelp.NoHTML(htmlFragment.Substring(nextOffset))); } }
private void Help_Click(object sender, RoutedEventArgs e) { HtmlHelp help = new HtmlHelp("MainWindow", this); help.Show(); }
private void ExportHtmlMDM() { MakeDir(); string tableDataDirName = "表数据示例"; string tableStructureDirName = "表结构说明"; lblMessage.Content = "读取Excel文件..."; MdmBizHelper heper = new MdmBizHelper(); var codeDomainSystemSetAll = heper.ParseExcelToEntity(this.txtMDMFilePath.Text, ""); #region 创建目录 //一级域 var level1domain = codeDomainSystemSetAll.Select(p => p.一级域代码).Distinct(); foreach (var l1item in level1domain) { if (!string.IsNullOrWhiteSpace(l1item)) { if (!Directory.Exists(System.IO.Path.Combine(rootdir, mdmdir, l1item))) { Directory.CreateDirectory(System.IO.Path.Combine(rootdir, mdmdir, l1item)); } } } //二级域 var level2domain = codeDomainSystemSetAll.Select(p => new { p.一级域代码, p.二级域代码 }).Distinct(); foreach (var l2item in level2domain) { if (!string.IsNullOrWhiteSpace(l2item.一级域代码) && !string.IsNullOrWhiteSpace(l2item.二级域代码)) { if (!Directory.Exists(System.IO.Path.Combine(rootdir, mdmdir, l2item.一级域代码, l2item.二级域代码))) { Directory.CreateDirectory(System.IO.Path.Combine(rootdir, mdmdir, l2item.一级域代码, l2item.二级域代码)); } } } //三级域 var level3domain = codeDomainSystemSetAll.Select(p => new { p.一级域代码, p.二级域代码, p.级域代码 }).Distinct(); foreach (var l3item in level3domain) { if (!string.IsNullOrWhiteSpace(l3item.一级域代码) && !string.IsNullOrWhiteSpace(l3item.二级域代码) && !string.IsNullOrWhiteSpace(l3item.级域代码)) { if (!Directory.Exists(System.IO.Path.Combine(rootdir, mdmdir, l3item.一级域代码, l3item.二级域代码, l3item.级域代码))) { Directory.CreateDirectory(System.IO.Path.Combine(rootdir, mdmdir, l3item.一级域代码, l3item.二级域代码, l3item.级域代码)); } } } #endregion #region 生成页面 foreach (var codesysitem in codeDomainSystemSetAll) { var storePath = string.Empty; if (!string.IsNullOrWhiteSpace(codesysitem.级域代码)) { storePath = System.IO.Path.Combine(rootdir, mdmdir, codesysitem.一级域代码, codesysitem.二级域代码, codesysitem.级域代码); } else if (!string.IsNullOrWhiteSpace(codesysitem.二级域代码)) { storePath = System.IO.Path.Combine(rootdir, mdmdir, codesysitem.一级域代码, codesysitem.二级域代码); } else if (!string.IsNullOrWhiteSpace(codesysitem.一级域代码)) { storePath = System.IO.Path.Combine(rootdir, mdmdir, codesysitem.一级域代码); } var storePathFull = System.IO.Path.Combine(storePath, $"{codesysitem.代码系统}.html"); HtmlHelp.CreateMDMCodeSystemHtml(codesysitem, true, storePathFull); } #endregion #region 生成索引 //存放目录为根目录 string mdmIndexPath = System.IO.Path.Combine(rootdir, $"{"主数据目录"}.html"); HtmlHelp.CreateMDMCodeSysIndexHtml(codeDomainSystemSetAll, true, mdmIndexPath, rootdir, mdmdir); #endregion lblMessage.Content = "完成mdm的html处理..."; }
private void ShowTimeTable(string timetable) { //lvkb.Clear(); Task.Factory.StartNew(() => { Thread.Sleep(1000); lvkb.BeginInvoke(new Action(() => { GUI_tips.Hide(); lvkb.Clear(); barLoad.Show(); loadText.Show(); barLoad.Value = 0; loadText.Text = "正在准备数据"; })); //timetable = HttpHelp.HttpGet("http://jw.jltc.edu.cn/JWXS/pkgl/XsKB_List.aspx", Global.LoginCookie); List <List <string> > data = HtmlHelp.GetTable(timetable); if (data == null) { lvkb.BeginInvoke(new Action(() => { loadText.Text = "数据准备完毕"; })); Thread.Sleep(1000); for (int i = 0; i < barLoad.Maximum; i++) { lvkb.BeginInvoke(new Action(() => { barLoad.Value = i; })); Thread.Sleep(10); } lvkb.BeginInvoke(new Action(() => { GUI_tips.Text = "检测到当前课表为空"; barLoad.Hide(); loadText.Hide(); GUI_tips.Show(); })); return; } itemCount = data[0].Count; lvkb.BeginInvoke(new Action(() => { loadText.Text = "数据准备完毕"; })); Thread.Sleep(1000); for (int i = 0; i < barLoad.Maximum; i++) { lvkb.BeginInvoke(new Action(() => { barLoad.Value = i; })); Thread.Sleep(10); } lvkb.BeginInvoke(new Action(() => { barLoad.Hide(); loadText.Hide(); ImageList imgList = new ImageList { ImageSize = new Size(1, 100) }; lvkb.SmallImageList = imgList; int itemwidth = Width / data[0].Count; List <ListViewItem> table_data = new List <ListViewItem> { }; data[0][0] = ""; foreach (string s1 in data[0]) { lvkb.Columns.Add(s1, itemwidth, HorizontalAlignment.Left); } for (int i = 1; i < data.Count; i++) { ListViewItem item = new ListViewItem(data[i][0], 0); for (int j = 1; j < data[i].Count; j++) { item.SubItems.Add(data[i][j]); } table_data.Add(item); } lvkb.Items.AddRange(table_data.ToArray()); })); }); }
public static Supplier FromWebSupply(WebSupply s, string currentUserId) { Supplier respVal = new Supplier { UshahidiId = s.UshahidiId, Timestamp = s.Timestamp, StatusId = (int)PostStatus.Published, //always Name = s.Name, Description = s.Description, SupplierTypeId = s.SupplierTypeId, SupplierTypeOther = s.SupplierTypeOther, //Email = s.Email,//imports from g sheets Website = Urls.GetFullValidHttpUrl(s.Website), //PhoneNumber = s.PhoneNumber,//imports from g sheets //ContactName = s.ContactName,//imports from g sheets Postcode = s.Postcode, //NN TellUsMore = s.TellUsMore, Latitude = s.Latitude, Longitude = s.Longitude, CapacityNotes = s.CapacityNotes }; respVal.SupplierPpeTypes = s.SupplierPpeTypes.SelectToList(ppe => FromWebSupplyPpeType(ppe, respVal)); List <byte> t = s.SupplierPpeTypes.GroupBy(g => g.PpeTypeId).Where(g => g.Count() > 1).SelectToList(g => g.Key); if (t.Count > 0) { Debug.WriteLine($"UshahidiId {s.UshahidiId} Supplier has duplicate PPE types {HtmlHelp.BuildString(t, ", ")}"); respVal = null; } //else //{ // if(!String.IsNullOrWhiteSpace(s.ContactDetailsForNotes)) //TODO:remove when confirmed // { // SupplierNote newNote = new SupplierNote // { // Supplier = respVal, // Note = new Note // { // Timestamp = DateTimeOffset.Now, // UserId = currentUserId, // Text = $"Contact Details From Ushahidi :{Environment.NewLine}{s.ContactDetailsForNotes}", // } // }; // respVal.SupplierNotes.Add(newNote); // } //} return(respVal); }
private void ExportHtml() { string tableDataDirName = "表数据示例"; string tableStructureDirName = "表结构说明"; Directory.CreateDirectory(".//tmp"); Directory.CreateDirectory(".//tmp//resources"); //定义目录DataTable 结构 Synyi.DBChmCreater.Entity.DataTableCollection dataTableStructures = new Synyi.DBChmCreater.Entity.DataTableCollection("<b>数据库表目录</b>"); //将选中项的总数 设置为进度条最大值 +1项是表目录文件 Dispatcher.Invoke(new Action(() => { tpbExport.Value = 0; tpbExport.Maximum = ckbData.SelectedItems.Count + ckbTables.SelectedItems.Count + 1;// ckbData.CheckedItems.Count + ckbTables.CheckedItems.Count + 1; })); //获取需要导出的表结构 选中项 List <string> selectTabStructList = new List <string>(); foreach (var item in ckbTables.SelectedItems) // CheckedItems) { selectTabStructList.Add(item.ToString()); } #region 导出表结构 数据字典部分 导出为html if (selectTabStructList.Count > 0) { lblMessage.Content = "准备表结构文件..."; //得到选中的表结构的字段信息 var lstDt = dal.GetTableStruct(selectTabStructList); var pathTables = $"./tmp/{tableStructureDirName}"; Directory.CreateDirectory(pathTables); var tables = dal.GetTables(); var allSchemas = tables.Select(p => p.Domain).Distinct(); foreach (var item in allSchemas) { Directory.CreateDirectory(System.IO.Path.Combine(pathTables, item)); } var tableIndex = 1; foreach (var dt in lstDt) { //得到表描述 var array = dt.TableName.Split('.'); var domain = array[0]; var tabname = array[1]; var drs = tables.Where(p => p.TableName == tabname).Where(p => p.Domain == domain).FirstOrDefault();// Select("表名='" + tabname + "' and 域='" + domain + "'"); var desp = string.Empty; if (drs != null) { desp = drs.TableDescription; } //创建表字段信息的html HtmlHelp.CreateHtml(dt, true, System.IO.Path.Combine(pathTables, dt[0].tableschema, $"{dt.TableName}.html"), true, desp, true); //构建表目录 dataTableStructures.Add(new DataTableItem { TableNo = tableIndex++, Domain = drs.Domain, TableName = $"<a href=\"{tableStructureDirName}\\{drs.Domain}\\{ dt.TableName}.html\">{ dt.TableName.Split('.').GetValue(1)}</a>", TableDescription = desp }); //改变进度 Dispatcher.Invoke(new Action(() => { tpbExport.Value++; })); } //导出表目录 HtmlHelp.CreateHtml(dataTableStructures, false, "./tmp/" + defaultHtml, false, string.Empty, false); //默认页面 Dispatcher.Invoke(new Action(() => { tpbExport.Value++; })); } #endregion #region 导出表数据 表中的数据示例 导出为html //传递需要导出数据的table选中项 得到数据内容 selectTabStructList.Clear(); foreach (var item in ckbData.SelectedItems) //CheckedItems) { selectTabStructList.Add(item.ToString()); } if (selectTabStructList.Count > 0) { Dispatcher.Invoke(new Action(() => { lblMessage.Content = "正在生成表数据数据..."; })); //读取ini int result = ini.GetInt32("Set", "maxrow", -1); var lstDt = dal.GetTableData(selectTabStructList, result); //创建常用数据的html var pathTables = $"./tmp/{tableDataDirName}"; Directory.CreateDirectory(pathTables); var selecttabdataschemas = selectTabStructList.Select(p => p.Split('.')[0]).Distinct(); foreach (var item in selecttabdataschemas) { Directory.CreateDirectory(System.IO.Path.Combine(pathTables, item)); } foreach (var dt in lstDt) { HtmlHelp.CreateHtml2(dt, true, System.IO.Path.Combine(System.IO.Path.Combine(pathTables, dt.TableName.Split('.')[0]), dt.TableName + ".html"), true); Dispatcher.Invoke(new Action(() => { tpbExport.Value++; })); } } Dispatcher.Invoke(new Action(() => { lblMessage.Content = "成功生成HTML..."; })); #endregion }