void PrepareBulletin(BulletinPackage bulletin)
 {
     DCT.Execute(d =>
     {
         WebDriver.UpdateActions();
         if (bulletin.State == (int)BulletinState.Edited)
         {
             WebDriver.NavigatePage(Path.Combine(bulletin.Url, "edit"));
             Thread.Sleep(2000);
         }
         else
         {
             WebDriver.NavigatePage("https://www.avito.ru/additem");
             Thread.Sleep(2000);
             ChooseCategories(bulletin.Signature);
         }
         if (!SetValueFields(bulletin))
         {
             PrepareBulletin(bulletin);
         }
     }, continueExceptionMethod: (d, e) =>
     {
         PrepareBulletin(bulletin);
     });
 }
Пример #2
0
        public static BulletinPackage ToCache(BulletinInstance obj)
        {
            BulletinPackage result = null;

            BCT.Execute(d =>
            {
                var groupSignature = GroupHelper.GetGroupSignature(obj.Id);
                var access         = AccessHelper.GetFreeAccess(obj.Id);
                var valueFields    = ValueFieldHelper.GetValueFields(obj.Id);
                var accessFields   = AccessFieldHelper.GetAccessFields(obj.Id);
                var state          = obj.State;

                result = new BulletinPackage
                {
                    BulletinId         = obj.BulletinId,
                    BulletinInstanceId = obj.Id,
                    Url          = obj.Url,
                    Signature    = groupSignature,
                    Access       = access,
                    ValueFields  = valueFields,
                    AccessFields = accessFields,
                    State        = state,
                    Title        = obj.Url,
                };
            });
            return(result);
        }
Пример #3
0
        public BulletinView(BulletinPackage package)
        {
            BulletinId = package.BulletinId;

            if (package.ValueFields != null)
            {
                if (package.ValueFields.ContainsKey("Название объявления"))
                {
                    Title = package.ValueFields["Название объявления"];
                }
                if (package.ValueFields.ContainsKey("Описание объявления"))
                {
                    Description = package.ValueFields["Описание объявления"];
                }
                if (package.ValueFields.ContainsKey("Цена"))
                {
                    Price = package.ValueFields["Цена"];
                }

                if (int.TryParse(package.Views, out int viewResult))
                {
                    Views = viewResult;
                }
                State = TranslateState(EnumHelper.GetValue <BulletinState>(package.State));
                Url   = package.Url;
            }
        }
Пример #4
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Gel children recursively. </summary>
        ///
        /// <remarks>   SV Milovanov, 30.01.2018. </remarks>
        ///
        /// <param name="element">  The element. </param>
        /// <param name="bulletin"> The bulletin. </param>
        ///-------------------------------------------------------------------------------------------------

        void GelChildrenRecursively(HtmlElement element, BulletinPackage bulletin)
        {
            DCT.Execute(data =>
            {
                if (!element.CanHaveChildren && element.Children.Count == 0) return;

                foreach (HtmlElement ch in element.Children)
                {
                    if (ch.TagName.ToLower() == "span" && ch.GetAttribute("className").Contains("profile-item-views-count"))
                    {
                        if (!string.IsNullOrEmpty(bulletin.Views)) continue;

                        var regex = new Regex(@"(?<count>\d+)");

                        var match = regex.Match(ch.InnerText);
                        if (match.Success)
                        {
                            bulletin.Views = match.Groups["count"].Value;
                        }

                    }
                    if (ch.TagName.ToLower() == "a" && ch.GetAttribute("name").Contains("item_"))
                    {
                        bulletin.Url = ch.GetAttribute("href");
                        bulletin.Title = ch.InnerText;
                    }
                    GelChildrenRecursively(ch, bulletin);
                }
            });
        }
Пример #5
0
 public static void _PrepareInstance(BulletinPackage obj, Action <BulletinPackage> action = null)
 {
     DCT.ExecuteAsync(d2 =>
     {
         using (var client = new ServiceClient())
             client.CreateBulletin(obj, action);
     });
 }
Пример #6
0
 public static void _CloneBulletin(BulletinPackage obj, Action <BulletinPackage> action = null)
 {
     DCT.ExecuteAsync(d2 =>
     {
         using (var client = new ServiceClient())
             client.CloneBulletins(obj, action);
     });
 }
Пример #7
0
        void CloneBulletinCallback(BulletinPackage bulletin)
        {
            MessageBox.Show("Объявление отправлено на републикацию");

            var b = Bulletins.FirstOrDefault(q => q.BulletinId == bulletin.BulletinId);

            b.CanRepublicate = false;
        }
 void GetUrl(BulletinPackage bulletin)
 {
     DCT.Execute(d =>
     {
         var a        = WebDriver.Find(By.XPath("//*[@class='content-text']/p/a"));
         var href     = a.GetAttribute("href");
         bulletin.Url = href;
     });
 }
Пример #9
0
        public void CreateBulletin(BulletinPackage obj, Action <BulletinPackage> action = null)
        {
            DCT.Execute(d =>
            {
                var act = action == null ? (a) => { } : action;

                SendQueryObject("Create", (a) => act(a), obj: obj);
                //CreateBulletins(new[] { obj }, (a) => act(a.FirstOrDefault()));
            });
        }
Пример #10
0
 private void AddBulletinCallback(BulletinPackage obj)
 {
     if (obj == null)
     {
         MessageBox.Show("Ошибка соединения с сервером");
         return;
     }
     MessageBox.Show("Объявление было добавлено");
     SelectedIndexTab = 2;
     RaisePropertyChanged(() => SelectedIndexTab);
     GetBulletins();
 }
Пример #11
0
        public static BulletinInstance ToEntity(BulletinPackage obj, BulletinInstance entity)
        {
            BulletinInstance result = null;

            BCT.Execute(d =>
            {
                entity.State = obj.State;
                entity.Url   = obj.Url;

                result = entity;
            });
            return(result);
        }
 void GetUrl(BulletinPackage bulletin)
 {
     DCT.Execute(d =>
     {
         if (!string.IsNullOrEmpty(bulletin.Url))
         {
             UiHelper.UpdateActionState("URL успешно считан");
         }
         else
         {
             UiHelper.UpdateActionState("URL is NULL");
         }
     });
 }
 void SetValueFields(BulletinPackage bulletin, FieldValueContainerBase fieldContainer)
 {
     DCT.Execute(d =>
     {
         foreach (var pair in bulletin.ValueFields)
         {
             if (string.IsNullOrEmpty(pair.Value))
             {
                 continue;
             }
             var template = bulletin.AccessFields.FirstOrDefault(q => q.Key == pair.Key);
             fieldContainer.SetFieldValue(bulletin.AccessFields, template.Key, pair.Value);
         }
     });
 }
Пример #14
0
        void CloneBulletin(BulletinView bulletin)
        {
            var package = new BulletinPackage
            {
                BulletinId = bulletin.BulletinId
            };

            using (var client = new ServiceClient())
            {
                var r = client.Ping();
                Console.WriteLine($"Ping = {r}");

                ServiceClient._CloneBulletin(package, CloneBulletinCallback);
            }
        }
Пример #15
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>   Gets bulletin pages. </summary>
        ///
        /// <remarks>   SV Milovanov, 30.01.2018. </remarks>
        ///
        /// <param name="state">    The state. </param>
        ///
        /// <returns>   The bulletin pages. </returns>
        ///-------------------------------------------------------------------------------------------------

        List<BulletinPackage> GetBulletinPages(string state)
        {
            var result = new List<BulletinPackage>();
            DCT.Execute(data =>
            {
                var s = WebWorker.WebDocument.Body.OuterHtml;
                var titleDivs = WebWorker.WebDocument.GetElementsByTagName("div").Cast<HtmlElement>()
                            .Where(q => q.GetAttribute("className").Contains("profile-item-description"));

                foreach (var d in titleDivs)
                {
                    var bulletin = new BulletinPackage
                    {
                        State = state
                    };
                    GelChildrenRecursively(d, bulletin);
                    result.Add(bulletin);
                }
            });
            return result;
        }
Пример #16
0
        public static TaskCache_old ToCache(Data.Task obj)
        {
            TaskCache_old result = null;

            BCT.Execute(d =>
            {
                var bulletinPackage = new BulletinPackage();
                var accessPackage   = new AccessCache();

                if (obj.TargetType == typeof(BulletinInstance).ToString())
                {
                    var dbInstance     = d.BulletinDb.BulletinInstances.FirstOrDefault(q => q.Id == obj.InstanceId);
                    var dbAccess       = d.BulletinDb.Accesses.FirstOrDefault(q => q.Id == obj.AccessId);
                    var groupSignature = GroupHelper.GetGroupSignature2(dbInstance.BulletinId);
                    var valueFields    = ValueFieldHelper.GetValueFields2(dbInstance.BulletinId);
                    var accessFields   = AccessFieldHelper.GetAccessFields2(dbInstance.BulletinId);

                    bulletinPackage.Signature    = groupSignature;
                    bulletinPackage.ValueFields  = valueFields;
                    bulletinPackage.AccessFields = accessFields;
                    bulletinPackage.Access       = Access.ToCache(dbAccess);
                    bulletinPackage.State        = dbInstance.State;
                    bulletinPackage.Url          = dbInstance.Url;
                }
                else if (obj.TargetType == typeof(Access).ToString())
                {
                }
                result = new TaskCache_old
                {
                    BulletinId      = obj.InstanceId,
                    AccessId        = obj.AccessId,
                    TargetType      = obj.TargetType,
                    TargetTime      = obj.TargetDate,
                    Command         = obj.Command,
                    BulletinPackage = bulletinPackage,
                    AccessPackage   = accessPackage,
                };
            });
            return(result);
        }
        void Publicate(BulletinPackage bulletin)
        {
            DCT.Execute(d =>
            {
                if (bulletin.State == (int)BulletinState.WaitPublication)
                {
                    UiHelper.UpdateActionState("Переход на страницу - additem/confirm");
                }
                else if (bulletin.State == (int)BulletinState.Edited)
                {
                    UiHelper.UpdateActionState($"Переход на страницу - {Path.Combine(bulletin.Url, "edit", "confirm")}");
                }
                Thread.Sleep(1000);

                UiHelper.UpdateActionState("Снятие премиум-галочек");
                Thread.Sleep(1000);


                UiHelper.UpdateActionState("Подтверждение публикации");
                Thread.Sleep(1000);
            });
        }
Пример #18
0
        public static BulletinPackage ToPackageCache(Bulletin obj)
        {
            var result = default(BulletinPackage);

            BCT.Execute(d =>
            {
                var package     = new BulletinPackage();
                var valueFields = new Dictionary <string, string>();
                valueFields.Add("Название объявления", obj.Title);
                valueFields.Add("Описание объявления", obj.Description);
                valueFields.Add("Цена", obj.Price);
                valueFields.Add("Вид объявления ", "Продаю свое");
                if (string.IsNullOrEmpty(obj.Images))
                {
                    valueFields.Add("Фотографии", obj.Images);
                }
                package.ValueFields = valueFields;
                package.Title       = obj.Title;

                result = package;
            });
            return(result);
        }
        void Publicate(BulletinPackage bulletin)
        {
            DCT.Execute(d =>
            {
                if (bulletin.State == (int)BulletinState.WaitPublication || bulletin.State == 0)
                {
                    WebDriver.NavigatePage("https://www.avito.ru/additem/confirm");
                }
                else if (bulletin.State == (int)BulletinState.Edited)
                {
                    WebDriver.NavigatePage(Path.Combine(bulletin.Url, "edit", "confirm"));
                }

                //Снимаем галочки
                WebDriver.JsClick(By.Id("service-premium"));
                WebDriver.JsClick(By.Id("service-vip"));
                WebDriver.JsClick(By.Id("service-highlight"));

                //Подтверждаем
                var button = WebDriver.FindMany(By.TagName("button")).FirstOrDefault(q => q.Text == "Продолжить");
                WebDriver.JsClick(button);
            });
        }
Пример #20
0
 void AddBulletin(string cardName, string cardDescription, string cardPrice, string cardImageLinks)
 {
     DCT.Execute(d =>
     {
         if (string.IsNullOrEmpty(cardName) ||
             string.IsNullOrEmpty(cardDescription) ||
             string.IsNullOrEmpty(cardPrice))
         {
             MessageBox.Show("Пожалуйста, заполните все поля для добавления объявления");
             return;
         }
         var access = new AccessCache
         {
             Login    = Settings.Default.BoardLogin,
             Password = Settings.Default.BoardPassword,
         };
         var signature = new GroupSignature(CardCategory1, CardCategory2, CardCategory3);
         var fields    = new Dictionary <string, string>
         {
             { "Вид объявления", "Продаю свое" },
             { "Название объявления", cardName },
             { "Описание объявления", cardDescription },
             { "Цена", cardPrice },
         };
         if (!string.IsNullOrEmpty(cardImageLinks))
         {
             fields.Add(@"Фотографии", cardImageLinks);
         }
         var package = new BulletinPackage
         {
             Signature   = signature,
             ValueFields = fields,
             Access      = access,
         };
         ServiceClient._CreateBulletin(package, AddBulletinCallback);
     });
 }
Пример #21
0
        public static Bulletin ToEntity(BulletinPackage obj, Bulletin entity)
        {
            var result = default(Bulletin);

            BCT.Execute(d =>
            {
                var hash           = obj.Signature.GetHash();
                var dbGroup        = d.BulletinDb.Groups.FirstOrDefault(q => q.Hash == hash);
                var bulletinTitle  = obj.ValueFields["Название объявления"];
                var bulletinDesc   = obj.ValueFields["Описание объявления"];
                var bulletinPrice  = obj.ValueFields["Цена"];
                var bulletinImages = obj.ValueFields.ContainsKey("Фотографии") ? obj.ValueFields["Фотографии"] : null;

                entity.UserId      = d.UserId;
                entity.GroupId     = dbGroup.Id;
                entity.Title       = bulletinTitle;
                entity.Description = bulletinDesc;
                entity.Price       = bulletinPrice;
                entity.Images      = bulletinImages;

                result = entity;
            });
            return(result);
        }
        List <BulletinPackage> GetBulletinPages(string state)
        {
            var result = new List <BulletinPackage>();

            DCT.Execute(data =>
            {
                var titles = WebDriver.FindMany(By.XPath("//*[@class='profile-item-description']"));

                foreach (var t in titles)
                {
                    var a        = t.FindElement(By.XPath("div/h3/a"));
                    var url      = a.GetAttribute("href");
                    var name     = a.Text;
                    var bulletin = new BulletinPackage
                    {
                        Url   = url,
                        Title = name,
                        State = (int)GetStateFromTabString(state)
                    };
                    result.Add(bulletin);
                }
            });
            return(result);
        }
Пример #23
0
        public void PrepareInstance(BulletinPackage obj, Action <BulletinPackage> action = null)
        {
            var act = action == null ? (a) => { } : action;

            CreateBulletins(new[] { obj }, (a) => act(a.FirstOrDefault()));
        }
Пример #24
0
        public void CloneBulletins(BulletinPackage obj, Action <BulletinPackage> action = null)
        {
            var act = action == null ? (a) => { } : action;

            CloneBulletins(new[] { obj }, (a) => act(a.FirstOrDefault()));
        }
        bool SetValueFields(BulletinPackage bulletin)
        {
            var result = false;

            DCT.Execute(d =>
            {
                var accessFiels        = bulletin.AccessFields;
                var valueFields        = bulletin.ValueFields;
                var bulletinTypeField  = accessFiels["Вид объявления "];
                var bulletinTypeOption = bulletinTypeField.Options.FirstOrDefault(q => q.Text == "Продаю свое");

                var bulletinTypeCode  = bulletinTypeOption.Value;
                var bulletinTitleCode = accessFiels["Название объявления"].HtmlId;
                var bulletinDescCode  = accessFiels["Описание объявления"].HtmlId;
                var bulletinPriceCode = accessFiels["Цена"].HtmlId;
                var bulletinImageCode = accessFiels["Фотографии"].HtmlId;

                var bulletinTitleText = valueFields["Название объявления"];
                var bulletinDescText  = valueFields["Описание объявления"];
                var bulletinPriceText = valueFields["Цена"];
                var bulletinImageText = valueFields.ContainsKey("Фотографии") ? valueFields["Фотографии"] : string.Empty;

                WebDriver.JsClick(By.CssSelector($"input[value='{bulletinTypeCode}']"));
                if (bulletin.State == (int)BulletinState.Edited)
                {
                    WebDriver.DoAction(By.CssSelector($"input[id='{bulletinTitleCode}']"), e => e.Clear());
                    WebDriver.DoAction(By.CssSelector($"textarea[id='{bulletinDescCode}']"), e => e.Clear());
                    WebDriver.DoAction(By.CssSelector($"input[id='{bulletinPriceCode}']"), e => e.Clear());
                }
                WebDriver.DoAction(By.CssSelector($"input[id='{bulletinTitleCode}']"), e => e.SendKeys(bulletinTitleText));
                WebDriver.DoAction(By.CssSelector($"textarea[id='{bulletinDescCode}']"), e => e.SendKeys(bulletinDescText));
                WebDriver.DoAction(By.CssSelector($"input[id='{bulletinPriceCode}']"), e => e.SendKeys(bulletinPriceText));

                var oldImages = WebDriver.FindMany(By.ClassName("form-uploader-item__delete")).ToArray();
                if (oldImages.Length > 0)
                {
                    foreach (var image in oldImages)
                    {
                        WebDriver.JsClick(image);
                    }
                }

                if (!string.IsNullOrEmpty(bulletinImageText))
                {
                    var images = bulletinImageText.Split(new[] { "\r\n" }, StringSplitOptions.None);

                    foreach (var image in images)
                    {
                        if (!WebDriver.Wait(WebDriver.NoAttribute(By.CssSelector($"input[name='{bulletinImageCode}']"), "disabled"), 20))
                        {
                            return;
                        }

                        WebDriver.JsClick(By.CssSelector($"input[name='{bulletinImageCode}']"),
                                          (e) =>
                        {
                            Thread.Sleep(1000);
                            SendKeys.SendWait(image);
                        });
                        SendKeys.SendWait("{ENTER}");
                        Thread.Sleep(10000);

                        if (!WebDriver.Wait(WebDriver.ElementExists(By.CssSelector($"input[name='{bulletinImageCode}']")), 20))
                        {
                            return;
                        }
                    }

                    var addedImagesCount = WebDriver.FindMany(By.ClassName("form-uploader-item")).Where(q => q.GetAttribute("data-state") == "active").Count();

                    if (addedImagesCount != images.Length)
                    {
                        return;
                    }
                }

                result = true;
            });
            if (!result)
            {
                SendKeys.SendWait("{ESC}");
            }
            return(result);
        }
        public override void CloneBulletins(IEnumerable <AggregateBulletinPackage> packages)
        {
            UiHelper.UpdateWorkState("Клонирование буллетинов");
            DCT.Execute(d =>
            {
                var createdBulletins = new List <BulletinPackage>();
                {
                    var fieldValueContainer = FieldValueContainerList.Get(Uid);
                    var accessContainer     = AccessContainerList.Get(Uid);

                    foreach (var package in packages)
                    {
                        var name = package.Bulletin.ValueFields["Название объявления"];
                        UiHelper.UpdateObjectState($"Bulletin {name}, state = {package.Bulletin.State}");

                        UiHelper.UpdateActionState("Попытка авторизоваться");
                        var accesses = package.Accesses.ToArray();
                        foreach (var access in accesses)
                        {
                            if (accessContainer.TryAuth(access))
                            {
                                UiHelper.UpdateActionState("Ожидание прогрузки страницы");
                                Thread.Sleep(2000);

                                UiHelper.UpdateActionState("Переход на страницу - additem");
                                Thread.Sleep(1000);

                                UiHelper.UpdateActionState("Выбор категорий");
                                ChooseCategories(package.Bulletin.Signature);

                                UiHelper.UpdateActionState("Установка значений");
                                Thread.Sleep(1000);
                                SetValueFields(package.Bulletin, fieldValueContainer);

                                ContinueAddOrEdit(BulletinState.WaitPublication);

                                Thread.Sleep(1000);

                                Publicate(package.Bulletin);
                                //
                                Thread.Sleep(20000);

                                GetUrl(package.Bulletin);

                                var newBulletin = new BulletinPackage
                                {
                                    Access      = access,
                                    BulletinId  = package.Bulletin.BulletinId,
                                    Url         = package.Bulletin.Url,
                                    Title       = package.Bulletin.Title,
                                    State       = package.Bulletin.State,
                                    Signature   = package.Bulletin.Signature,
                                    ValueFields = package.Bulletin.ValueFields
                                };
                                createdBulletins.Add(newBulletin);
                            }
                        }
                    }
                }
                {
                    UiHelper.UpdateActionState("Проверка Url и установка состояний");
                    Thread.Sleep(1000);
                    foreach (var p in packages)
                    {
                        var name = p.Bulletin.ValueFields["Название объявления"];
                        UiHelper.UpdateObjectState($"Bulletin {name}, state = {p.Bulletin.State}");
                    }
                    UiHelper.UpdateActionState("Отправка коллбека");
                    Thread.Sleep(1000);
                }
            });
        }