Beispiel #1
0
        public void SaveGroupFunctions(long groupId, List <long> funtions, IBackgroundJobService backgroundJobService)
        {
            var functionsIdForRun = new List <FunctionName>();

            var oldFuntions =
                new GetGroupFunctionsByGroupIdQueryHandler(new DataBaseContext()).Handle(new GetGroupFunctionsByGroupIdQuery
            {
                GroupId = groupId
            });

            new SaveGroupFunctionsCommandHandler(new DataBaseContext()).Handle(new SaveGroupFunctionsCommand
            {
                GroupId   = groupId,
                Functions = funtions
            });

            var newFunctions =
                new GetGroupFunctionsByGroupIdQueryHandler(new DataBaseContext()).Handle(new GetGroupFunctionsByGroupIdQuery
            {
                GroupId = groupId
            });

            foreach (var funtion in newFunctions)
            {
                if (oldFuntions.Any(data => data.FunctionId == funtion.FunctionId))
                {
                    continue;
                }

                if (oldFuntions.All(data => data.FunctionId != funtion.FunctionId))
                {
                    functionsIdForRun.Add(funtion.FunctionName);
                }
            }
            var accounts =
                new GetAccountsByGroupSettingsIdQueryHandler(new DataBaseContext()).Handle(new GetAccountsByGroupSettingsIdQuery
            {
                GroupSettingsId = groupId
            });

            var accountsViewModel = accounts.Select(model => new AccountViewModel
            {
                Id                        = model.Id,
                PageUrl                   = model.PageUrl,
                Login                     = model.Login,
                Password                  = model.Password,
                FacebookId                = model.FacebookId,
                Proxy                     = model.Proxy,
                ProxyLogin                = model.ProxyLogin,
                ProxyPassword             = model.ProxyPassword,
                Cookie                    = model.Cookie.CookieString,
                Name                      = model.Name,
                GroupSettingsId           = model.GroupSettingsId,
                AuthorizationDataIsFailed = model.AuthorizationDataIsFailed,
                ProxyDataIsFailed         = model.ProxyDataIsFailed,
                IsDeleted                 = model.IsDeleted,
                UserAgentId               = model.UserAgentId
            }).ToList();

            foreach (var accountModel in accountsViewModel)
            {
                //удаляем выключенные задачи
                foreach (var oldFuntion in oldFuntions)
                {
                    if (newFunctions.All(data => data.FunctionId != oldFuntion.FunctionId))
                    {
                        var stateList = _jobStateService.GetStatesByAccountAndFunctionName(new JobStateViewModel
                        {
                            AccountId    = accountModel.Id,
                            FunctionName = oldFuntion.FunctionName,
                            IsForSpy     = false
                        });

                        foreach (var state in stateList)
                        {
                            _jobStateService.DeleteJobState(state);

                            backgroundJobService.RemoveBackgroundJobById(state.JobId);
                        }
                    }
                }
                foreach (var function in functionsIdForRun)
                {
                    var delayTime = _settingsManager.GetTimeSpanByFunctionName(function, groupId);

                    var model = new CreateBackgroundJobModel
                    {
                        Account          = accountModel,
                        CheckPermissions = true,
                        FunctionName     = function,
                        LaunchTime       = delayTime
                    };

                    backgroundJobService.CreateBackgroundJob(model);
                }
            }
        }
Beispiel #2
0
        public void UpdateSettings(GroupSettingsViewModel newSettings, IBackgroundJobService backgroundJobService)
        {
            var oldSettings = _accountSettingsManager.GetSettings(newSettings.GroupId);

            var winkOptions = new WinkFriendsOptionsDbModel
            {
                RetryTimeForWinkFriends = new TimeModel
                {
                    Hours   = newSettings.RetryTimeForWinkFriendsHour,
                    Minutes = newSettings.RetryTimeForWinkFriendsMin,
                    Seconds = newSettings.RetryTimeForWinkFriendsSec
                },
                ConsiderGeoForWinkFriends      = newSettings.ConsiderGeoForWinkFriends,
                RetryTimeForWinkFriendsFriends = new TimeModel
                {
                    Hours   = newSettings.RetryTimeForWinkFriendsFriendsHour,
                    Minutes = newSettings.RetryTimeForWinkFriendsFriendsMin,
                    Seconds = newSettings.RetryTimeForWinkFriendsFriendsSec
                },
                ConsiderGeoForWinkFriendsFriends = newSettings.ConsiderGeoForWinkFriendsFriends,
                RetryTimeForWinkBack             = new TimeModel
                {
                    Hours   = newSettings.RetryTimeForWinkBackHour,
                    Minutes = newSettings.RetryTimeForWinkBackMin,
                    Seconds = newSettings.RetryTimeForWinkBackSec
                },
            };

            var communityOptions = new CommunityOptionsDbModel
            {
                Groups                   = ConvertStringToList(newSettings.FacebookGroups),
                Pages                    = ConvertStringToList(newSettings.FacebookPages),
                IsJoinToAllGroups        = newSettings.IsJoinToAllGroups,
                RetryTimeInviteTheGroups = new TimeModel
                {
                    Hours   = newSettings.RetryTimeInviteTheGroupsHour,
                    Minutes = newSettings.RetryTimeInviteTheGroupsMin,
                    Seconds = newSettings.RetryTimeInviteTheGroupsSec
                },
                RetryTimeInviteThePages = new TimeModel
                {
                    Hours   = newSettings.RetryTimeInviteThePagesHour,
                    Minutes = newSettings.RetryTimeInviteThePagesMin,
                    Seconds = newSettings.RetryTimeInviteThePagesSec
                },
                MaxFriendsJoinGroupInDay  = newSettings.MaxFriendsJoinGroupInDay,
                MinFriendsJoinGroupInDay  = newSettings.MinFriendsJoinGroupInDay,
                MaxFriendsJoinGroupInHour = newSettings.MaxFriendsJoinGroupInHour,
                MinFriendsJoinGroupInHour = newSettings.MinFriendsJoinGroupInHour,
                MaxFriendsJoinPageInDay   = newSettings.MaxFriendsJoinPageInDay,
                MinFriendsJoinPageInDay   = newSettings.MinFriendsJoinPageInDay,
                MaxFriendsJoinPageInHour  = newSettings.MaxFriendsJoinPageInHour,
                MinFriendsJoinPageInHour  = newSettings.MinFriendsJoinPageInHour,
            };

            var geoOptions = new GeoOptionsDbModel
            {
                Cities    = string.IsNullOrEmpty(newSettings.Cities) ? string.Empty : newSettings.Cities,
                Countries = string.IsNullOrEmpty(newSettings.Countries) ? string.Empty : newSettings.Countries,
                Gender    = newSettings.Gender
            };

            var friendsOptions = new FriendOptionsDbModel
            {
                RetryTimeConfirmFriendships = new TimeModel
                {
                    Hours   = newSettings.RetryTimeConfirmFriendshipsHour,
                    Minutes = newSettings.RetryTimeConfirmFriendshipsMin,
                    Seconds = newSettings.RetryTimeConfirmFriendshipsSec
                },
                RetryTimeGetNewAndRecommendedFriends = new TimeModel
                {
                    Hours   = newSettings.RetryTimeGetNewAndRecommendedFriendsHour,
                    Minutes = newSettings.RetryTimeGetNewAndRecommendedFriendsMin,
                    Seconds = newSettings.RetryTimeGetNewAndRecommendedFriendsSec
                },
                RetryTimeRefreshFriends = new TimeModel
                {
                    Hours   = newSettings.RetryTimeRefreshFriendsHour,
                    Minutes = newSettings.RetryTimeRefreshFriendsMin,
                    Seconds = newSettings.RetryTimeRefreshFriendsSec
                },
                RetryTimeSendRequestFriendships = new TimeModel
                {
                    Hours   = newSettings.RetryTimeSendRequestFriendshipsHour,
                    Minutes = newSettings.RetryTimeSendRequestFriendshipsMin,
                    Seconds = newSettings.RetryTimeSendRequestFriendshipsSec
                },
                AllowedRemovalPercentage = newSettings.AllowedRemovalPercentage
            };

            var messageOptions = new MessageOptionsDbModel
            {
                GetMessagesFromThoseConnectedToMessenger = newSettings.GetMessagesFromThoseConnectedToMessenger,
                RetryTimeSendNewFriend = new TimeModel
                {
                    Hours   = newSettings.RetryTimeSendNewFriendHour,
                    Minutes = newSettings.RetryTimeSendNewFriendMin,
                    Seconds = newSettings.RetryTimeSendNewFriendSec
                },
                RetryTimeSendUnanswered = new TimeModel
                {
                    Hours   = newSettings.RetryTimeSendUnansweredHour,
                    Minutes = newSettings.RetryTimeSendUnansweredMin,
                    Seconds = newSettings.RetryTimeSendUnansweredSec
                },
                RetryTimeSendUnread = new TimeModel
                {
                    Hours   = newSettings.RetryTimeSendUnreadHour,
                    Minutes = newSettings.RetryTimeSendUnreadMin,
                    Seconds = newSettings.RetryTimeSendUnreadSec
                },
                UnansweredDelay = newSettings.UnansweredDelay
            };

            var limitsOptions = new LimitsOptionsDbModel
            {
                CountMaxFriends = newSettings.CountMaxFriends,
                CountMinFriends = newSettings.CountMinFriends
            };

            var deleteFriendsOptions = new DeleteFriendsOptionsDbModel
            {
                DialogIsOver = new DialogIsOverModel
                {
                    IsEnabled = newSettings.EnableDialogIsOver,
                    Timer     = newSettings.DialogIsOverTimer
                },
                IsAddedToGroupsAndPages = new IsAddedToGroupsAndPagesModel
                {
                    IsEnabled = newSettings.EnableIsAddedToGroupsAndPages,
                    Timer     = newSettings.IsAddedToGroupsAndPagesTimer
                },
                IsWink = new IsWinkModel
                {
                    IsEnabled = newSettings.EnableIsWink,
                    Timer     = newSettings.IsWinkTimer
                },
                IsWinkFriendsOfFriends = new IsWinkFriendsOfFriendsModel
                {
                    IsEnabled = newSettings.EnableIsWinkFriendsOfFriends,
                    Timer     = newSettings.IsWinkFriendsOfFriendsTimer
                },
                DeletionFriendTimer = newSettings.DeletionFriendTimer
            };

            var command = new AddOrUpdateSettingsCommand
            {
                GroupId              = newSettings.GroupId,
                GeoOptions           = geoOptions,
                FriendsOptions       = friendsOptions,
                MessageOptions       = messageOptions,
                LimitsOptions        = limitsOptions,
                CommunityOptions     = communityOptions,
                DeleteFriendsOptions = deleteFriendsOptions,
                WinkFriendsOptions   = winkOptions
            };

            new AddOrUpdateSettingsCommandHandler(new DataBaseContext()).Handle(command);

            var accountsThisGroup =
                new GetAccountsByGroupSettingsIdQueryHandler(new DataBaseContext()).Handle(
                    new GetAccountsByGroupSettingsIdQuery
            {
                GroupSettingsId = newSettings.GroupId
            });

            var accountsViewModel = accountsThisGroup.Select(model => new AccountViewModel
            {
                Id                        = model.Id,
                PageUrl                   = model.PageUrl,
                Login                     = model.Login,
                Password                  = model.Password,
                FacebookId                = model.FacebookId,
                Proxy                     = model.Proxy,
                ProxyLogin                = model.ProxyLogin,
                ProxyPassword             = model.ProxyPassword,
                Cookie                    = model.Cookie.CookieString,
                Name                      = model.Name,
                GroupSettingsId           = model.GroupSettingsId,
                AuthorizationDataIsFailed = model.AuthorizationDataIsFailed,
                ProxyDataIsFailed         = model.ProxyDataIsFailed,
                IsDeleted                 = model.IsDeleted,
                UserAgentId               = model.UserAgentId
            }).ToList();

            var modelNewData = GetNewGroupsAndPages(communityOptions, oldSettings);

            foreach (var accountModel in accountsViewModel)
            {
                if (modelNewData != null)
                {
                    if (modelNewData.Groups.Count != 0 || modelNewData.Pages.Count != 0)
                    {
                        new SaveNewSettingsCommandHandler(new DataBaseContext()).Handle(new SaveNewSettingsCommand
                        {
                            AccountId        = accountModel.Id,
                            CommunityOptions = modelNewData,
                            GroupId          = newSettings.GroupId
                        });
                    }
                }

                var model   = accountModel;
                var updater = new Task(() => UpdateJobsTask(backgroundJobService, model, newSettings, oldSettings));
                updater.Start();
            }
        }