diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ProjectWindowInterface.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ProjectWindowInterface.cs index 0d4f21182..97cbc521e 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ProjectWindowInterface.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ProjectWindowInterface.cs @@ -18,6 +18,7 @@ class ProjectWindowInterface : AssetPostprocessor private static List locks = new List(); private static List guids = new List(); private static List guidsLocks = new List(); + private static string loggedInUser; private static IApplicationManager manager; private static bool isBusy = false; @@ -26,6 +27,7 @@ class ProjectWindowInterface : AssetPostprocessor private static CacheUpdateEvent lastRepositoryStatusChangedEvent; private static CacheUpdateEvent lastLocksChangedEvent; private static IRepository Repository { get { return manager != null ? manager.Environment.Repository : null; } } + private static IPlatform Platform { get { return manager != null ? manager.Platform : null; } } private static bool IsInitialized { get { return Repository != null; } } public static void Initialize(IApplicationManager theManager) @@ -35,6 +37,9 @@ public static void Initialize(IApplicationManager theManager) manager = theManager; + Platform.Keychain.ConnectionsChanged += KeychainMayHaveChanged; + KeychainMayHaveChanged(); + if (IsInitialized) { Repository.StatusEntriesChanged += RepositoryOnStatusEntriesChanged; @@ -83,6 +88,11 @@ private static void RepositoryOnLocksChanged(CacheUpdateEvent cacheUpdateEvent) } } + private static void KeychainMayHaveChanged() + { + loggedInUser = Platform.Keychain.Connections.Select(x => x.Username).FirstOrDefault(); + } + [MenuItem(AssetsMenuRequestLock, true, 10000)] private static bool ContextMenu_CanLock() { @@ -104,7 +114,7 @@ private static bool ContextMenu_CanUnlock() return false; if (isBusy) return false; - return Selection.objects.Any(IsObjectLocked); + return Selection.objects.Any(f => IsObjectLocked(f , true)); } [MenuItem(AssetsMenuReleaseLockForced, true, 10002)] @@ -180,6 +190,11 @@ private static bool IsObjectUnlocked(Object selected) } private static bool IsObjectLocked(Object selected) + { + return IsObjectLocked(selected, false); + } + + private static bool IsObjectLocked(Object selected, bool isLockedByCurrentUser) { if (selected == null) return false; @@ -187,7 +202,7 @@ private static bool IsObjectLocked(Object selected) NPath assetPath = AssetDatabase.GetAssetPath(selected.GetInstanceID()).ToNPath(); NPath repositoryPath = manager.Environment.GetRepositoryPath(assetPath); - return locks.Any(x => repositoryPath == x.Path); + return locks.Any(x => repositoryPath == x.Path && (!isLockedByCurrentUser || x.Owner.Name == loggedInUser)); } private static ITask CreateUnlockObjectTask(Object selected, bool force)