/// <summary> /// Обновляет свойства ключевых фраз. /// </summary> /// <param name="projects"></param> /// <returns></returns> public int UpdateKeywordsProperties(IEnumerable <XmlProject> projects) { var syncGroupPair = GetSyncGroupsPair(projects); int counter = 0; foreach (var groupPair in syncGroupPair) { var pairs = SyncHelper.GetItemsForUpdate( groupPair.Item1.Keywords, groupPair.Item2.Keywords, w => GetPhraseKey(w.Phrase), w => GetPhraseKey(w.Phrase)); foreach (var wordPair in pairs) { var apiKeyword = wordPair.Item2; if (GetSiteKey(wordPair.Item1.TargetUrl) != GetSiteKey(apiKeyword.Target)) { var request = _requestBuilder.GetUpdateKeywordTargetRequest( apiKeyword.Id, wordPair.Item1.TargetUrl); var res = _client.GetBoolResult(request); // BUG: При установке таргета результат возвращает всегда false apiKeyword.Target = wordPair.Item1.TargetUrl; ++counter; } } } return(counter); }
/// <summary> /// Обновляет свойства проектов. /// </summary> /// <param name="projects"></param> /// <returns></returns> public int UpdateProjectsProperties(IEnumerable <XmlProject> projects) { var updateProjects = SyncHelper.GetItemsForUpdate( projects, _apiProjects, p => GetSiteKey(p.Site), p => GetSiteKey(p.Site)); int counter = 0; foreach (var pair in updateProjects) { // включить или выключить (перенести в архив) проект var stateOn = (pair.Item1.Enabled) ? 0 : -1; var apiProject = pair.Item2; if (stateOn != apiProject.On) { var request = _requestBuilder.GetUpdateProjectRequest( apiProject.Id, stateOn); var res = _client.GetBoolResult(request); if (res) { apiProject.On = stateOn; ++counter; } } } return(counter); }
private IEnumerable <SyncObject <XmlKeywordGroup, SyncKeywordGroup> > GetSyncProjectGroups( IEnumerable <XmlProject> projects) { var updateProjects = SyncHelper.GetItemsForUpdate( projects, _apiProjects, p => GetSiteKey(p.Site), p => GetSiteKey(p.Site)); foreach (var pair in updateProjects) { var xmlProject = pair.Item1; var apiProject = pair.Item2; var projectGroups = _apiGroups .Where(g => g.ProjectId == apiProject.Id) .ToList(); yield return(new SyncObject <XmlKeywordGroup, SyncKeywordGroup>( pair.Item2.Id, pair.Item1.KeywordGroups, projectGroups)); } }
private IEnumerable <Tuple <XmlKeywordGroup, SyncKeywordGroup> > GetSyncGroupsPair( IEnumerable <XmlProject> projects) { var syncGroups = GetSyncProjectGroups(projects); foreach (var sync in syncGroups) { var updateGroups = SyncHelper.GetItemsForUpdate( sync.XmlObjects, sync.ApiObjects, g => GetGroupNameKey(g.Name), g => GetGroupNameKey(g.GroupName)); foreach (var pair in updateGroups) { yield return(pair); } } }