private void VKUpload() { if (_view.Check()) { _view.UpdateSettings(_settings); _settings.Save(); // хэштэги string hashtags = _settings.Hashtags; // одна картинка - один пост // какой шаг между постами (часов) int postTimeGap; if (_settings.ThroughoutTheDay) { int minHour = _settings.TimeMin; int maxHour = _settings.TimeMax; postTimeGap = (maxHour - minHour) / _settings.MaxPostOnDay; } else { postTimeGap = _settings.PostStep; } double? longitude = _settings.Longitude; double? latitude = _settings.Latitude; Location initialLocation = null; if (_settings.PlaceGeoPosition && longitude != null && latitude != null) { initialLocation = new Location() { Longitude = longitude.Value, Latitude = latitude.Value }; } double?squareWidth = _settings.SquareWidth; double?locationStep = _settings.LocationStep; // по умолчанию 0,0016 что примерно 550м // в каждом посте один анонимный опрос Poll poll = new Poll() { Question = "...", Answers = new List <string>() { "ЗАШЛО", "НЕ ЗАШЛО" } }; int postCounter = 0; int dayCounter = 0; int dailyPostCounter = 0; DateTime dailyFirstPostDate = _settings.StartDate; int locX = 0; int locY = 0; int? maxSquarePosts = squareWidth != null ? (int?)squareWidth.Value / 550 : null; string completedFolder = $"{_settings.ContentPath}\\Completed"; if (!Directory.Exists(completedFolder)) { Directory.CreateDirectory(completedFolder); } foreach (var contentInfo in FSClient.GetContentFromFolder(_settings.ContentPath)) { if (contentInfo.IsVideo() && !_settings.LoadVideo) { continue; } if (contentInfo.IsPhoto() && !_settings.LoadPictures) { continue; } if (postCounter == _settings.TotalPosts) { _view.ShowMessage("Операция выполнена"); break; } if (_settings.MaxPostOnDay != -1 && dailyPostCounter == _settings.MaxPostOnDay) { dailyPostCounter = 0; dayCounter++; } // вычисление даты DateTime postDate = dailyFirstPostDate.AddDays(dayCounter).AddHours(postTimeGap * dailyPostCounter); // вычисление геолокации Location newLocation = null; if (initialLocation != null && locationStep != null && squareWidth != null && maxSquarePosts != null) { newLocation = new Location(); newLocation.Latitude = initialLocation.Latitude + locationStep.Value * locX; newLocation.Longitude = initialLocation.Longitude - locationStep.Value * locY; } try { _vk.WallPost(_settings.GroupId, postDate, hashtags, contentInfo, poll, newLocation); } catch (Exception ex) { _view.ShowMessage($"Произошла ошибка - {ex.Message}"); } if (_settings.DeleteAfterLoad) { File.Delete(contentInfo.FullName); } else { string dstFilename = $"{completedFolder}\\{contentInfo.Name}"; if (File.Exists(dstFilename)) { dstFilename = $"{completedFolder}\\{contentInfo.NameWithoutExtension}-{Guid.NewGuid().ToString()}{contentInfo.Extension}"; } else { dstFilename = $"{completedFolder}\\{contentInfo.Name}"; } File.Move(contentInfo.FullName, dstFilename); } dailyPostCounter++; postCounter++; locX++; if (maxSquarePosts != null) { if (locX > maxSquarePosts) { locX = 0; locY++; } if (locY > maxSquarePosts) { locY = 0; } } } _view.ShowMessage("Операция выполнена"); } }
public bool Check() { string contentFolder = textBoxContentPath.Text; if (String.IsNullOrEmpty(contentFolder) || !Directory.Exists(contentFolder)) { MessageBox.Show("Операция не может быть выполнена - не выбран каталог загрузки"); return(false); } long selectedGroupId = (long)comboBoxGroups.SelectedValue; if (selectedGroupId == -1) { MessageBox.Show("Операция не может быть выполнена - не выбрана группа"); return(false); } // алгоритм создания отложенных постов var contentLst = FSClient.GetContentFromFolder(contentFolder); if (contentLst.Count == 0) { MessageBox.Show("Операция не может быть выполнена - отсутствуют файлы для загрузки"); return(false); } // максимальное количество постов int maxPostCount = int.Parse(textBoxMaxPostCount.Text); if (maxPostCount == 0) { MessageBox.Show("Операция не может быть выполнена - не установлено максимально возможное количетсво постов"); return(false); } // сколько постов на день int maxPostOnDay = int.Parse(textBoxPostOnDayCount.Text); if (maxPostOnDay == 0) { MessageBox.Show("Операция не может быть выполнена - не установлено максимально возможное количетсво постов в день"); return(false); } // дата начала DateTime startDate; if (checkBoxStartFromSelectedDate.Checked) { if (dateTimePickerBeginDate.Value <= DateTime.Now.AddMinutes(1)) { MessageBox.Show("Операция не может быть выполнена - дата публикации должна быть минимум + 1 минут к текущему времени/дате"); return(false); } startDate = dateTimePickerBeginDate.Value; } else { startDate = DateTime.Now.AddMinutes(1); } return(true); }