예제 #1
0
        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;
        }
예제 #2
0
 protected void AddToList(AdvertShort advertShort)
 {
     Debug.Write("AddToList");
     if (advertShort != null)
     {
         if (AdvertShortList.IndexOf(advertShort) == -1)
         {
             AdvertShortList.Insert(0, advertShort);
         }
     }
 }
예제 #3
0
 protected void DeleteFromList(AdvertShort advertShort)
 {
     Debug.Write("DeleteFromList");
     if (advertShort != null)
     {
         if (AdvertShortList.Count > 0)
         {
             AdvertShortList.Remove(advertShort);
         }
     }
 }
예제 #4
0
        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,
            });
        }