internal void UpdateGroups() { IMergeRequestCache mergeRequestCache = _dataCache?.MergeRequestCache; if (mergeRequestCache == null) { return; } BeginUpdate(); // Add missing project groups IEnumerable <ProjectKey> allProjects = mergeRequestCache.GetProjects(); foreach (ProjectKey projectKey in allProjects) { if (!Groups.Cast <ListViewGroup>().Any(x => projectKey.Equals((ProjectKey)(x.Tag)))) { CreateGroupForProject(projectKey, true); } } // Remove deleted project groups for (int index = Groups.Count - 1; index >= 0; --index) { ListViewGroup group = Groups[index]; if (!allProjects.Any(x => x.Equals((ProjectKey)group.Tag))) { Groups.Remove(group); } } EndUpdate(); }
internal GitDataUpdater( IMergeRequestCache mergeRequestCache, IDiscussionCache discussionCache, ISynchronizeInvoke synchronizeInvoke, ILocalCommitStorageFactory gitFactory, int autoUpdatePeriodMs, MergeRequestFilter mergeRequestFilter, bool isInitialUpdateNeeded) : base(mergeRequestCache, discussionCache, synchronizeInvoke, gitFactory) { if (autoUpdatePeriodMs < 1) { throw new ArgumentException("Bad auto-update period specified"); } _mergeRequestFilter = mergeRequestFilter; _timer = new System.Timers.Timer { Interval = autoUpdatePeriodMs }; _timer.Elapsed += onTimer; _timer.SynchronizingObject = synchronizeInvoke; _timer.Start(); if (isInitialUpdateNeeded) { scheduleAllProjectsUpdate(); } }
internal GitBasedDiffStatProvider( IMergeRequestCache mergeRequestCache, IDiscussionCache discussionCache, ISynchronizeInvoke synchronizeInvoke, ILocalCommitStorageFactory gitFactory) : base(mergeRequestCache, discussionCache, synchronizeInvoke, gitFactory) { scheduleAllProjectsUpdate(); }
private void refreshCommits(IMergeRequestCache mergeRequestCache) { int prevCommitCount = _commits?.Length ?? 0; _commits = mergeRequestCache.GetCommits(_mergeRequestKey).ToArray(); if (prevCommitCount != _commits.Length) { traceInformation(String.Format("Changed _commits.Length to {0}", _commits.Length.ToString())); } }
private DateTime?getRefreshedTime(MergeRequestKey key) { IMergeRequestCache mergeRequestCache = _dataCache?.MergeRequestCache; if (mergeRequestCache == null) { return(null); } return(mergeRequestCache.GetMergeRequestRefreshTime(key)); }
private DateTime?getLatestCommitTime(MergeRequestKey key) { IMergeRequestCache mergeRequestCache = _dataCache?.MergeRequestCache; if (mergeRequestCache == null) { return(null); } Commit latestCommit = mergeRequestCache .GetCommits(key)? .OrderByDescending(commit => commit.Created_At) .FirstOrDefault(); return(latestCommit?.Created_At); }
private void onLiveMergeRequestSelectionChanged(FullMergeRequestKey fmk) { Debug.Assert(fmk.MergeRequest != null && fmk.MergeRequest.IId != 0); Trace.TraceInformation(String.Format( "[MainForm.Workflow] User requested to change merge request to IId {0}", fmk.MergeRequest.IId.ToString())); onSingleMergeRequestLoaded(fmk); IMergeRequestCache cache = _liveDataCache.MergeRequestCache; MergeRequestKey mrk = new MergeRequestKey(fmk.ProjectKey, fmk.MergeRequest.IId); GitLabSharp.Entities.Version latestVersion = cache.GetLatestVersion(mrk); onComparableEntitiesLoaded(latestVersion, fmk.MergeRequest, cache.GetCommits(mrk), cache.GetVersions(mrk)); }
internal BaseGitHelper( IMergeRequestCache mergeRequestCache, IDiscussionCache discussionCache, ISynchronizeInvoke synchronizeInvoke, ILocalCommitStorageFactory gitFactory) { _mergeRequestCache = mergeRequestCache; _mergeRequestCache.MergeRequestEvent += onMergeRequestEvent; _discussionCache = discussionCache; _gitFactory = gitFactory; if (_gitFactory != null) { _gitFactory.GitRepositoryCloned += onGitRepositoryCloned; } _synchronizeInvoke = synchronizeInvoke; }
internal DiscussionManager( DataCacheContext dataCacheContext, string hostname, IHostProperties hostProperties, User user, IMergeRequestCache mergeRequestCache, IModificationNotifier modificationNotifier, INetworkOperationStatusListener networkOperationStatusListener) { _operator = new DiscussionOperator(hostname, hostProperties, networkOperationStatusListener); _parser = new DiscussionParser(this, dataCacheContext.DiscussionKeywords, user); _parser.DiscussionEvent += onDiscussionParserEvent; _mergeRequestFilterChecker = dataCacheContext.MergeRequestFilterChecker; _tagForLogging = dataCacheContext.TagForLogging; _mergeRequestCache = mergeRequestCache; _mergeRequestCache.MergeRequestEvent += OnMergeRequestEvent; _modificationNotifier = modificationNotifier; _modificationNotifier.DiscussionResolved += onDiscussionResolved; _modificationNotifier.DiscussionModified += onDiscussionModified; if (dataCacheContext.UpdateRules.UpdateDiscussionsPeriod.HasValue) { _timer = new System.Timers.Timer { Interval = dataCacheContext.UpdateRules.UpdateDiscussionsPeriod.Value }; _timer.Elapsed += onTimer; _timer.SynchronizingObject = dataCacheContext.SynchronizeInvoke; _timer.Start(); scheduleUpdate(null /* update all merge requests cached at the moment of update processing */, DiscussionUpdateType.InitialSnapshot); } }
internal void UpdateItems() { IMergeRequestCache mergeRequestCache = _dataCache?.MergeRequestCache; if (mergeRequestCache == null) { return; } IEnumerable <ProjectKey> projectKeys = Groups.Cast <ListViewGroup>().Select(x => (ProjectKey)x.Tag); BeginUpdate(); // Add missing merge requests and update existing ones foreach (ProjectKey projectKey in projectKeys) { if (isGroupCollapsed(projectKey)) { continue; } foreach (FullMergeRequestKey fmk in getAllProjectItems(projectKey)) { ListViewItem item = Items.Cast <ListViewItem>().FirstOrDefault( x => ((FullMergeRequestKey)x.Tag).Equals(fmk)); // item=`null` if not found if (item == null) { item = createListViewMergeRequestItem(fmk); Items.Add(item); } else { item.Tag = fmk; } setListViewSubItemsTags(item, fmk); } } // Delete summary items from groups that are no longer collapsed for (int index = Items.Count - 1; index >= 0; --index) { FullMergeRequestKey fmk = (FullMergeRequestKey)Items[index].Tag; if (!isGroupCollapsed(Items[index].Group) && isSummaryItem(Items[index])) { Items.RemoveAt(index); } } // Remove normal items from collapsed groups for (int index = Items.Count - 1; index >= 0; --index) { if (isGroupCollapsed(Items[index].Group)) { Items.RemoveAt(index); } } // Create summary items foreach (ListViewGroup group in Groups) { if (isGroupCollapsed(group)) { string[] subitems = Enumerable.Repeat(String.Empty, Columns.Count).ToArray(); FullMergeRequestKey fmk = new FullMergeRequestKey(getGroupProjectKey(group), null); ListViewItem item = createListViewMergeRequestItem(fmk); Items.Add(item); setListViewSubItemsTagsForSummary(item); } } // Remove deleted merge requests for (int index = Items.Count - 1; index >= 0; --index) { FullMergeRequestKey fmk = (FullMergeRequestKey)Items[index].Tag; if (!isGroupCollapsed(fmk.ProjectKey) && !getAllProjectItems(fmk.ProjectKey).Any(x => x.MergeRequest.IId == fmk.MergeRequest.IId)) { Items.RemoveAt(index); } } // Hide filtered ones for (int index = Items.Count - 1; index >= 0; --index) { FullMergeRequestKey fmk = (FullMergeRequestKey)Items[index].Tag; bool isCollapsed = isGroupCollapsed(fmk.ProjectKey); bool removeItem = false; if (isCollapsed) { bool isThereAnyMatchingItem = getMatchingFilterProjectItems(fmk.ProjectKey).Any(); removeItem = !isThereAnyMatchingItem; } else { bool doesItemMatchFilter = doesMatchFilter(fmk.MergeRequest); removeItem = !doesItemMatchFilter; } if (removeItem) { Items.RemoveAt(index); } } // update a number of MR which is probably displayed _suppressSelectionChange = true; try { Groups.Cast <ListViewGroup>().ToList().ForEach(group => updateGroupCaption(group)); } finally { _suppressSelectionChange = false; } recalcRowHeightForMergeRequestListView(); EndUpdate(); }