async void LoadAdvertMessage(AdvertShort advertShort, bool dbLoad = false) { if (advertShort == null) { throw new NullReferenceException("LoadAdvertMessage => advertShort == null !"); } if (advertShort.AdverIDinRzeszowiak == 0) { throw new ArgumentException("LoadAdvertMessage => advertShort.AdverIDinRzeszowiak == 0"); } _lastAdvertShort = advertShort; ErrorMessage = String.Empty; Activity = true; CopyAdverToViewModel(new Advert()); Advert _advert; if (!dbLoad) { _advert = await _rzeszowiakRepository.GetAdvertAsync(advertShort); } else { _advert = await _setting.GetFavoriteAdvertDBAsync(advertShort); } if (_advert == null) { if (!dbLoad) { ErrorMessage = "Błąd podczas ładowania strony.\nSprawdź połączenie internetowe i spróbuj ponownie."; } else { ErrorMessage = "Błąd podczas wczytywania ogłoszenia z bazy danych.\nSkontaktuj się z deweloperem aplikacji."; } MailStatus = MailStatusEnum.email_default; } else { CopyAdverToViewModel(_advert); LastSendMailDate = await _setting.LastMailSendDateAsync(_advert); IsFavorite = await _setting.IsAdvertInDBAsync(_advert); if (LastSendMailDate.IsSend()) { MailStatus = MailStatusEnum.email_send; } else { MailStatus = MailStatusEnum.email_default; } } Activity = false; }
protected void AddToList(AdvertShort advertShort) { Debug.Write("AddToList"); if (advertShort != null) { if (AdvertShortList.IndexOf(advertShort) == -1) { AdvertShortList.Insert(0, advertShort); } } }
protected void DeleteFromList(AdvertShort advertShort) { Debug.Write("DeleteFromList"); if (advertShort != null) { if (AdvertShortList.Count > 0) { AdvertShortList.Remove(advertShort); } } }
protected async void ListViewTappedAsync(AdvertShort advertShort) { Debug.Write("ListViewTappedAsync"); if (advertShort == null) { Debug.Write("ListViewTappedAsync => advertShort == null"); return; } var navigationParams = new NavigationParameters { { "AdvertShort", advertShort } }; await _navigationService.NavigateAsync("PreviewPage", navigationParams, useModalNavigation : false, animated : false); }
public async Task <Advert> GetAdvertAsync(AdvertShort advertShort, Action <string> userNotify = null) { Debug.Write("GetAdvert(AdvertShort advertShort)"); if (advertShort == null) { throw new NullReferenceException("advertShort == null"); } var HttpResult = await GetWeb.GetWebPage(advertShort.URL); if (!HttpResult.Success) { Debug.Write("GetAdvertAsync => !HttpResult.Success"); return(null); } var BodyResult = HttpResult.BodyString; if (BodyResult.Length == 0) { Debug.Write("GetAdvertAsync => BodyResult.Length == 0"); return(null); } UpdateCategoryList(BodyResult); // update category String BodyResultString = BodyResult.ToString(); Match match = Regex.Match(BodyResultString, @"(<div class=""label"">kategoria :</div>\s*<div class=""value"">)(?'result'.+)(</div>)"); if (!match.Success) { Debug.Write("GetAdvertAsync => no category"); return(null); } string aCategory = match.Groups["result"].Value; match = Regex.Match(BodyResultString, @"(<div class=""label"">tytuł :</div>\s*<div class=""value"">)(?'result'.+)(?=</div>)"); if (!match.Success) { Debug.Write("GetAdvertAsync => no title"); return(null); } string aTitle = match.Groups["result"].Value; match = Regex.Match(BodyResultString, @"(<div class=""label"">data dodania :</div>\s*<div class=""value"">.*)(?'result'\d{4}-\d{2}-\d{2})(?=</div>)"); if (!match.Success) { Debug.Write("GetAdvertAsync => no expired date"); return(null); } string aDateExpiredString = match.Groups["result"].Value; if (DateTime.TryParse(aDateExpiredString, out DateTime aDateExpired)) { aDateExpired = aDateExpired.Add(advertShort.DateAddDateTime.TimeOfDay); } match = Regex.Match(BodyResultString, @"(<div class=""label"">wyświetleń :</div>\s*<div class=""value"">)(?'result'\d+)(?=.*</div>)"); if (!match.Success) { Debug.Write("GetAdvertAsync => no views"); return(null); } string aViews = match.Groups["result"].Value; if (!Int32.TryParse(aViews, out int aViewsInt)) { Debug.Write("GetAdvertAsync => !Int32.TryParse(aViews, out int aViewsInt)"); return(null); } match = Regex.Match(BodyResultString, @"(<div class=""label"">cena :</div>\s*<div class=""value"">)(?'result'\d+)(\sPLN</div>)"); if (!match.Success) { Debug.Write("GetAdvertAsync => no price"); return(null); } string aPrice = match.Groups["result"].Value; if (!Int32.TryParse(aPrice, out int aPriceInt)) { Debug.Write("GetAdvertAsync => !Int32.TryParse(aPrice, out int aPriceInt)"); return(null); } match = Regex.Match(BodyResultString, @"(<div class=""content"">)(?'result'.+)(?=</div>)"); if (!match.Success) { Debug.Write("GetAdvertAsync => no description"); return(null); } string aDesc = match.Groups["result"].Value.Replace("<br />", "\n\n").StripHTML().Replace("\n\n\n", "\n").Trim(); match = Regex.Match(BodyResultString, @"(id=""tokenFK"" value="")(?'result'[0-9a-f]+)(?="")"); if (!match.Success) { Debug.Write("GetAdvertAsync => no aEmailToken"); return(null); } string aEmailToken = match.Groups["result"].Value; string aSsid = String.Empty; match = Regex.Match(BodyResultString, @"(rel=""\d+\|)(?'result'[0-9a-f]+)(?="")"); if (match.Success) { aSsid = match.Groups["result"].Value; } //picture var pictureList = new List <string>(); match = Regex.Match(BodyResultString, @"(?s)(<div>Zdjęcia</div>.*?<div id=""photos""\s>.+?</div>)"); if (match.Success) { var matches = Regex.Matches(match.Value, @"(src=""(?'result'/img/ogl/[^""]+)"")"); foreach (Match m in matches) { var picUrl = RZESZOWIAK_BASE_URL + m.Groups["result"].Value.Replace("mini/o_", ""); pictureList.Add(picUrl); } } Cookie aCookie = null; foreach (var item in HttpResult.CookieList) { if (item.Name == "PHPSESSID") { aCookie = item; } } /* * BodyResult.CutFoward("ogloszeniebox-top"); * * string GetValue(StringBuilder bodyResult, string category) * { * BodyResult.CutFoward(category + "</div>"); * BodyResult.CutFoward("<div class=\"value\">"); * return BodyResult.ToString(0, BodyResult.IndexOf("</div>", 0, true)).Trim(); * } * * string aCategory = GetValue(BodyResult, "kategoria :"); * string aTitle = GetValue(BodyResult, "tytuł :").Trim(); * string aDateExpiredString = GetValue(BodyResult, "data dodania :").CutFoward(" - ").CutFoward(":"); * if(DateTime.TryParse(aDateExpiredString, out DateTime aDateExpired)) * aDateExpired = aDateExpired.Add(advertShort.DateAddDateTime.TimeOfDay); * * string aViews = GetValue(BodyResult, "wyświetleń :").Replace(" razy", ""); * if (!Int32.TryParse(aViews, out int aViewsInt)) * { * Debug.Write("GetAdvert(AdvertShort advertShort, Action<string> userNotify = null) => !Int32.TryParse(aViews, out int aViewsInt)"); * return null; * } * string aPrice = GetValue(BodyResult, "cena :").Replace(" PLN", ""); * if (!Int32.TryParse(aPrice, out int aPriceInt)) * { * Debug.Write("GetAdvert(AdvertShort advertShort, Action<string> userNotify = null) => !Int32.TryParse(aPrice, out int aPriceInt)"); * return null; * } * BodyResult.CutFoward("Treść ogłoszenia"); * BodyResult.CutFoward("<div class=\"content\">"); * string aDesc = BodyResult.ToString(0, BodyResult.IndexOf("</div>", 0, true)).Replace("<br />", "\n\n").StripHTML(); * aDesc = aDesc.Replace("\n\n\n", "\n").Trim(); * * // additionalData * var additionalData = new Dictionary<string, string>(); * if (BodyResult.IndexOf("<div>Dane dodatkowe</div>", 0, true) != -1) * { * BodyResult.CutFoward("<div>Dane dodatkowe</div>"); * StringBuilder addData = new StringBuilder(BodyResult.ToString(0, BodyResult.IndexOf("ogloszeniebox-bottom", 0, true))); * do * { * int posLab = addData.IndexOf("<div class=\"label\">", 0, true); * if (posLab == -1) break; * addData.CutFoward("<div class=\"label\">"); * string key = addData.ToString(0, addData.IndexOf("</div>", 0, true)); * addData.CutFoward("</div>"); * addData.CutFoward("\">"); * string value = addData.ToString(0, addData.IndexOf("</div>", 0, true)); * additionalData.Add(key, value); * } while (true); * } * // picture list * var pictureList = new List<string>(); * if (BodyResult.IndexOf("<div>Zdjęcia</div>", 0, true) != -1) * { * BodyResult.CutFoward("<div>Zdjęcia</div>"); * StringBuilder addData = new StringBuilder(BodyResult.ToString(0, BodyResult.IndexOf("ogloszeniebox-bottom", 0, true))); * do * { * int posLab = addData.IndexOf("<img src=\"/", 0, true); * if (posLab == -1) break; * addData.CutFoward("<img src=\"/"); * var picUrl = RZESZOWIAK_BASE_URL + addData.ToString(0, addData.IndexOf("\"", 0, true)).Replace("mini/o_", ""); * pictureList.Add(picUrl); * } while (true); * } * * // image sid * string aSsid = String.Empty; * if (BodyResult.IndexOf("rel=\"" + advertShort.AdverIDinRzeszowiak + "|", 0, true) != -1) * { * BodyResult.CutFoward("rel=\"" + advertShort.AdverIDinRzeszowiak + "|"); * aSsid = BodyResult.ToString(0, BodyResult.IndexOf("\"", 0, true)).Trim(); * } * Cookie aCookie = null; * foreach (var item in HttpResult.CookieList) * if (item.Name == "PHPSESSID") aCookie = item; * * //email token * string aEmailToken = String.Empty; * if (BodyResult.IndexOf("id=\"tokenFK\" value=\"", 0, true) != -1) * { * BodyResult.CutFoward("id=\"tokenFK\" value=\""); * aEmailToken = BodyResult.ToString(0, BodyResult.IndexOf("\"", 0, true)).Trim(); * } */ return(new Advert() { AdverIDinRzeszowiak = advertShort.AdverIDinRzeszowiak, Category = null, Title = aTitle, DateAddDateTime = advertShort.DateAddDateTime, ExpiredDatetime = aDateExpired, Views = aViewsInt, Price = aPriceInt, Highlighted = advertShort.Highlighted, DescriptionShort = advertShort.DescriptionShort, DescriptionHTML = aDesc, //AdditionalData = additionalData, ImageURLsList = pictureList, URLPath = advertShort.URLPath, PhoneSsid = aSsid, PhonePHPSSESION = aCookie, EmailToken = aEmailToken, VisitPageDate = DateTime.Now, ThumbnailUrl = advertShort.ThumbnailUrl, }); }
public async Task <Advert> GetAdvertAsync(AdvertShort advertShort, Action <string> userNotify = null) { Debug.Write("GetAdvert(AdvertShort advertShort)"); if (advertShort == null) { throw new NullReferenceException("advertShort == null"); } var HttpResult = await GetWeb.GetWebPage(advertShort.URL); if (!HttpResult.Success) { Debug.Write("GetAdvertAsync => !HttpResult.Success"); return(null); } var BodyResult = HttpResult.BodyString; if (BodyResult.Length == 0) { Debug.Write("GetAdvertAsync => BodyResult.Length == 0"); return(null); } UpdateCategoryList(BodyResult); // update category BodyResult.CutFoward("ogloszeniebox-top"); string GetValue(StringBuilder bodyResult, string category) { BodyResult.CutFoward(category + "</div>"); BodyResult.CutFoward("<div class=\"value\">"); return(BodyResult.ToString(0, BodyResult.IndexOf("</div>", 0, true)).Trim()); } string aCategory = GetValue(BodyResult, "kategoria :"); string aTitle = GetValue(BodyResult, "tytuł :").Trim(); string aDateExpiredString = GetValue(BodyResult, "data dodania :").CutFoward(" - ").CutFoward(":"); if (DateTime.TryParse(aDateExpiredString, out DateTime aDateExpired)) { aDateExpired = aDateExpired.Add(advertShort.DateAddDateTime.TimeOfDay); } string aViews = GetValue(BodyResult, "wyświetleń :").Replace(" razy", ""); if (!Int32.TryParse(aViews, out int aViewsInt)) { Debug.Write("GetAdvert(AdvertShort advertShort, Action<string> userNotify = null) => !Int32.TryParse(aViews, out int aViewsInt)"); return(null); } string aPrice = GetValue(BodyResult, "cena :").Replace(" PLN", ""); if (!Int32.TryParse(aPrice, out int aPriceInt)) { Debug.Write("GetAdvert(AdvertShort advertShort, Action<string> userNotify = null) => !Int32.TryParse(aPrice, out int aPriceInt)"); return(null); } BodyResult.CutFoward("Treść ogłoszenia"); BodyResult.CutFoward("<div class=\"content\">"); string aDesc = BodyResult.ToString(0, BodyResult.IndexOf("</div>", 0, true)).Replace("<br />", "\n\n").StripHTML(); aDesc = aDesc.Replace("\n\n\n", "\n").Trim(); var additionalData = new Dictionary <string, string>(); if (BodyResult.IndexOf("<div>Dane dodatkowe</div>", 0, true) != -1) { BodyResult.CutFoward("<div>Dane dodatkowe</div>"); StringBuilder addData = new StringBuilder(BodyResult.ToString(0, BodyResult.IndexOf("ogloszeniebox-bottom", 0, true))); do { int posLab = addData.IndexOf("<div class=\"label\">", 0, true); if (posLab == -1) { break; } addData.CutFoward("<div class=\"label\">"); string key = addData.ToString(0, addData.IndexOf("</div>", 0, true)); addData.CutFoward("</div>"); addData.CutFoward("\">"); string value = addData.ToString(0, addData.IndexOf("</div>", 0, true)); additionalData.Add(key, value); } while (true); } var pictureList = new List <string>(); if (BodyResult.IndexOf("<div>Zdjęcia</div>", 0, true) != -1) { BodyResult.CutFoward("<div>Zdjęcia</div>"); StringBuilder addData = new StringBuilder(BodyResult.ToString(0, BodyResult.IndexOf("ogloszeniebox-bottom", 0, true))); do { int posLab = addData.IndexOf("<img src=\"/", 0, true); if (posLab == -1) { break; } addData.CutFoward("<img src=\"/"); var picUrl = RZESZOWIAK_BASE_URL + addData.ToString(0, addData.IndexOf("\"", 0, true)).Replace("mini/o_", ""); pictureList.Add(picUrl); } while (true); } // image sid string aSsid = String.Empty; if (BodyResult.IndexOf("rel=\"" + advertShort.AdverIDinRzeszowiak + "|", 0, true) != -1) { BodyResult.CutFoward("rel=\"" + advertShort.AdverIDinRzeszowiak + "|"); aSsid = BodyResult.ToString(0, BodyResult.IndexOf("\"", 0, true)).Trim(); } Cookie aCookie = null; foreach (var item in HttpResult.CookieList) { if (item.Name == "PHPSESSID") { aCookie = item; } } //email token string aEmailToken = String.Empty; if (BodyResult.IndexOf("id=\"tokenFK\" value=\"", 0, true) != -1) { BodyResult.CutFoward("id=\"tokenFK\" value=\""); aEmailToken = BodyResult.ToString(0, BodyResult.IndexOf("\"", 0, true)).Trim(); } return(new Advert() { AdverIDinRzeszowiak = advertShort.AdverIDinRzeszowiak, Category = null, Title = aTitle, DateAddDateTime = advertShort.DateAddDateTime, ExpiredDatetime = aDateExpired, Views = aViewsInt, Price = aPriceInt, Highlighted = advertShort.Highlighted, DescriptionShort = advertShort.DescriptionShort, DescriptionHTML = aDesc, AdditionalData = additionalData, ImageURLsList = pictureList, URLPath = advertShort.URLPath, PhoneSsid = aSsid, PhonePHPSSESION = aCookie, EmailToken = aEmailToken, VisitPageDate = DateTime.Now, ThumbnailUrl = advertShort.ThumbnailUrl, }); }