From f86e290eb9c18871827f90244e1918defa8a5264 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 5 Sep 2017 10:43:22 -0400 Subject: [PATCH 1/6] Updating SettingsView to get metrics enabled state in MaybeUpdateData --- .../Editor/GitHub.Unity/UI/SettingsView.cs | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs index 13b476464..ee10d47d4 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs @@ -81,7 +81,9 @@ class SettingsView : Subview [SerializeField] private bool isBusy; [SerializeField] private int lockedFileSelection = -1; [SerializeField] private bool hasRemote; - [SerializeField] private bool remoteHasChanged; + [SerializeField] private bool metricsEnabled; + [NonSerialized] private bool metricsHasChanged; + [NonSerialized] private bool remoteHasChanged; [NonSerialized] private bool userDataHasChanged; [SerializeField] private string newGitName; @@ -89,12 +91,15 @@ class SettingsView : Subview [SerializeField] private string newRepositoryRemoteUrl; [SerializeField] private User cachedUser; + [NonSerialized] private IUsageTracker usageTracker; + public override void OnEnable() { base.OnEnable(); AttachHandlers(Repository); remoteHasChanged = true; + metricsHasChanged = true; } public override void OnDisable() @@ -175,8 +180,20 @@ public override void OnGUI() GUILayout.EndScrollView(); } + public override void InitializeView(IView parent) + { + base.InitializeView(parent); + usageTracker = Manager != null && Manager.UsageTracker != null ? Manager.UsageTracker : null; + } + private void MaybeUpdateData() { + if (metricsHasChanged) + { + metricsEnabled = usageTracker != null && usageTracker.Enabled; + metricsHasChanged = false; + } + if (lockedFiles == null) lockedFiles = new List(); @@ -752,13 +769,10 @@ private void OnInstallPathGUI() private void OnPrivacyGui() { - var service = Manager != null && Manager.UsageTracker != null ? Manager.UsageTracker : null; - GUILayout.Label(PrivacyTitle, EditorStyles.boldLabel); - EditorGUI.BeginDisabledGroup(isBusy || service == null); + EditorGUI.BeginDisabledGroup(isBusy || usageTracker == null); { - var metricsEnabled = service != null ? service.Enabled : false; EditorGUI.BeginChangeCheck(); { metricsEnabled = GUILayout.Toggle(metricsEnabled, MetricsOptInLabel); From b1b9af2167412c00cf92a9b7a284c88d21890b45 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 5 Sep 2017 10:45:04 -0400 Subject: [PATCH 2/6] Updating BranchesView to get favorite branches in MaybeUpdateData --- .../Editor/GitHub.Unity/UI/BranchesView.cs | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs index 3a9c627f9..e92352667 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs @@ -24,8 +24,8 @@ class BranchesView : Subview private const string WarningCheckoutBranchExistsOK = "Ok"; private const string NewBranchCancelButton = "x"; private const string NewBranchConfirmButton = "Create"; - private const string FavoritesSetting = "Favorites"; - private const string FavoritesTitle = "Favorites"; + private const string FavoritesSetting = "Favourites"; + private const string FavoritesTitle = "Favourites"; private const string CreateBranchTitle = "Create Branch"; private const string LocalTitle = "Local branches"; private const string RemoteTitle = "Remote branches"; @@ -43,6 +43,7 @@ class BranchesView : Subview [NonSerialized] private List newLocalBranches; [NonSerialized] private BranchTreeNode newNodeSelection; [NonSerialized] private BranchesMode targetMode; + [NonSerialized] private bool favouritesHasChanged; [SerializeField] private BranchTreeNode activeBranchNode; [SerializeField] private BranchTreeNode localRoot; @@ -51,6 +52,7 @@ class BranchesView : Subview [SerializeField] private List remotes = new List(); [SerializeField] private Vector2 scroll; [SerializeField] private BranchTreeNode selectedNode; + private List favouritesList; public override void InitializeView(IView parent) { @@ -62,6 +64,7 @@ public override void OnEnable() { base.OnEnable(); AttachHandlers(Repository); + favouritesHasChanged = true; } public override void OnDisable() @@ -70,6 +73,21 @@ public override void OnDisable() DetachHandlers(Repository); } + public override void OnDataUpdate() + { + base.OnDataUpdate(); + MaybeUpdateData(); + } + + private void MaybeUpdateData() + { + if (favouritesHasChanged) + { + favouritesList = Manager.LocalSettings.Get(FavoritesSetting, new List()); + favouritesHasChanged = false; + } + } + public override void OnRepositoryChanged(IRepository oldRepository) { base.OnRepositoryChanged(oldRepository); @@ -268,12 +286,12 @@ public void OnEmbeddedGUI() private int CompareBranches(GitBranch a, GitBranch b) { - if (GetFavourite(a.Name)) + if (IsFavourite(a.Name)) { return -1; } - if (GetFavourite(b.Name)) + if (IsFavourite(b.Name)) { return 1; } @@ -291,19 +309,19 @@ private int CompareBranches(GitBranch a, GitBranch b) return 0; } - private bool GetFavourite(BranchTreeNode branch) + private bool IsFavourite(BranchTreeNode branch) { - return GetFavourite(branch.Name); + return IsFavourite(branch.Name); } - private bool GetFavourite(string branchName) + private bool IsFavourite(string branchName) { if (string.IsNullOrEmpty(branchName)) { return false; } - return Manager.LocalSettings.Get(FavoritesSetting, new List()).Contains(branchName); + return favouritesList.Contains(branchName); } private void OnLocalBranchesUpdate(IEnumerable list) @@ -334,7 +352,6 @@ private void BuildTree(IEnumerable local, IEnumerable remo // Prepare for updated favourites listing favourites.Clear(); - var cachedFavs = Manager.LocalSettings.Get>(FavoritesSetting, new List()); // Just build directly on the local root, keep track of active branch localRoot = new BranchTreeNode("", NodeType.Folder, false); @@ -364,7 +381,7 @@ private void BuildTree(IEnumerable local, IEnumerable remo } // Add to favourites - if (cachedFavs.Contains(branch.Name)) + if (favouritesList.Contains(branch.Name)) { favourites.Add(node); } @@ -408,7 +425,7 @@ private void BuildTree(IEnumerable local, IEnumerable remo } // Add to favourites - if (cachedFavs.Contains(branch.Name)) + if (favouritesList.Contains(branch.Name)) { favourites.Add(node); } @@ -619,7 +636,7 @@ private void OnTreeNodeGUI(BranchTreeNode node) if (node.Type != NodeType.Folder) { - var favourite = GetFavourite(node); + var favourite = IsFavourite(node); if (Event.current.type == EventType.Repaint) { GUI.DrawTexture(favouriteRect, favourite ? Styles.FavouriteIconOn : Styles.FavouriteIconOff); @@ -632,7 +649,7 @@ private void OnTreeNodeGUI(BranchTreeNode node) } } // Favourite status - else if (Event.current.type == EventType.Repaint && node.Type != NodeType.Folder && GetFavourite(node.Name)) + else if (Event.current.type == EventType.Repaint && node.Type != NodeType.Folder && IsFavourite(node.Name)) { GUI.DrawTexture(favouriteRect, Styles.FavouriteIconOn); } From bbc41532a890663cce566028b1c8ce5d8c40652d Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 5 Sep 2017 11:15:49 -0400 Subject: [PATCH 3/6] Unintentional change --- .../Assets/Editor/GitHub.Unity/UI/BranchesView.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs index e92352667..59218a1e8 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs @@ -24,8 +24,8 @@ class BranchesView : Subview private const string WarningCheckoutBranchExistsOK = "Ok"; private const string NewBranchCancelButton = "x"; private const string NewBranchConfirmButton = "Create"; - private const string FavoritesSetting = "Favourites"; - private const string FavoritesTitle = "Favourites"; + private const string FavoritesSetting = "Favorites"; + private const string FavoritesTitle = "Favorites"; private const string CreateBranchTitle = "Create Branch"; private const string LocalTitle = "Local branches"; private const string RemoteTitle = "Remote branches"; From 676e8ff6984b84d06713f39470d5a609e4309f3f Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 5 Sep 2017 11:16:46 -0400 Subject: [PATCH 4/6] Adding new fields in a different place to make merging easier --- .../Assets/Editor/GitHub.Unity/UI/SettingsView.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs index ee10d47d4..90e3e423a 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs @@ -81,8 +81,6 @@ class SettingsView : Subview [SerializeField] private bool isBusy; [SerializeField] private int lockedFileSelection = -1; [SerializeField] private bool hasRemote; - [SerializeField] private bool metricsEnabled; - [NonSerialized] private bool metricsHasChanged; [NonSerialized] private bool remoteHasChanged; [NonSerialized] private bool userDataHasChanged; @@ -90,7 +88,9 @@ class SettingsView : Subview [SerializeField] private string newGitEmail; [SerializeField] private string newRepositoryRemoteUrl; [SerializeField] private User cachedUser; - + + [SerializeField] private bool metricsEnabled; + [NonSerialized] private bool metricsHasChanged; [NonSerialized] private IUsageTracker usageTracker; public override void OnEnable() From cb3b60f0d428785050e1561da1d540383ca472e0 Mon Sep 17 00:00:00 2001 From: Andreia Gaita Date: Fri, 8 Sep 2017 17:08:49 +0200 Subject: [PATCH 5/6] Remove redundant overload and simplify comparison Other places in the code call IsFavourite with other types of objects that aren't strings (like a GitBranch instance). We either have overloads for all of them or we just take a string and the caller should know what to pass us, less of an API footprint to worry about. --- .../Assets/Editor/GitHub.Unity/UI/BranchesView.cs | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs index 59218a1e8..e89b69cbe 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs @@ -309,19 +309,9 @@ private int CompareBranches(GitBranch a, GitBranch b) return 0; } - private bool IsFavourite(BranchTreeNode branch) - { - return IsFavourite(branch.Name); - } - private bool IsFavourite(string branchName) { - if (string.IsNullOrEmpty(branchName)) - { - return false; - } - - return favouritesList.Contains(branchName); + return !String.IsNullOrEmpty(branchName) && favouritesList.Contains(branchName); } private void OnLocalBranchesUpdate(IEnumerable list) @@ -636,7 +626,7 @@ private void OnTreeNodeGUI(BranchTreeNode node) if (node.Type != NodeType.Folder) { - var favourite = IsFavourite(node); + var favourite = IsFavourite(node.Name); if (Event.current.type == EventType.Repaint) { GUI.DrawTexture(favouriteRect, favourite ? Styles.FavouriteIconOn : Styles.FavouriteIconOff); From db45ff1f05a7ac37d70cee38bba1b4bf653e4832 Mon Sep 17 00:00:00 2001 From: Andreia Gaita Date: Fri, 8 Sep 2017 17:55:38 +0200 Subject: [PATCH 6/6] Manager and UsageTracker are never null so we don't have to worry about it --- .../Assets/Editor/GitHub.Unity/UI/SettingsView.cs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs index 601d8e326..4518b2aaf 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/SettingsView.cs @@ -55,7 +55,6 @@ class SettingsView : Subview [SerializeField] private bool metricsEnabled; [NonSerialized] private bool metricsHasChanged; - [NonSerialized] private IUsageTracker usageTracker; public override void OnEnable() { @@ -144,17 +143,11 @@ public override void OnGUI() GUILayout.EndScrollView(); } - public override void InitializeView(IView parent) - { - base.InitializeView(parent); - usageTracker = Manager != null && Manager.UsageTracker != null ? Manager.UsageTracker : null; - } - private void MaybeUpdateData() { if (metricsHasChanged) { - metricsEnabled = usageTracker != null && usageTracker.Enabled; + metricsEnabled = Manager.UsageTracker.Enabled; metricsHasChanged = false; } @@ -496,7 +489,7 @@ private void OnPrivacyGui() { GUILayout.Label(PrivacyTitle, EditorStyles.boldLabel); - EditorGUI.BeginDisabledGroup(isBusy || usageTracker == null); + EditorGUI.BeginDisabledGroup(isBusy); { EditorGUI.BeginChangeCheck(); { @@ -506,7 +499,6 @@ private void OnPrivacyGui() { Manager.UsageTracker.Enabled = metricsEnabled; } - } EditorGUI.EndDisabledGroup(); }