Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 5f32a30

Browse files
committed
Merge master into fixes/synccontext
2 parents 36115fb + a3b896a commit 5f32a30

File tree

11 files changed

+53
-30
lines changed

11 files changed

+53
-30
lines changed

src/GitHub.Api/Cache/CacheContainer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ public DateTimeOffset UpdatedTime
162162
if (!updatedTimeValue.HasValue)
163163
{
164164
DateTimeOffset result;
165-
if (DateTimeOffset.TryParseExact(updatedTimeString, Constants.Iso8601Formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
165+
if (DateTimeOffset.TryParseExact(updatedTimeString.ToEmptyIfNull(), Constants.Iso8601Formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
166166
{
167167
updatedTimeValue = result;
168168
}

src/GitHub.Api/Extensions/StringExtensions.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ public static string ToNullIfEmpty(this string s)
4040
return String.IsNullOrEmpty(s) ? null : s;
4141
}
4242

43+
public static string ToEmptyIfNull(this string s)
44+
{
45+
return String.IsNullOrEmpty(s) ? String.Empty : s;
46+
}
47+
4348
public static bool StartsWith(this string s, char c)
4449
{
4550
if (String.IsNullOrEmpty(s)) return false;

src/GitHub.Api/Git/GitLock.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@ public struct GitLock
1313
public string path;
1414
public GitUser owner;
1515
[NotSerialized] public string lockedAtString;
16+
private string LockedAtString { get { return lockedAtString != null ? lockedAtString : String.Empty; } }
1617
public DateTimeOffset locked_at
1718
{
1819
get
1920
{
2021
DateTimeOffset dt;
21-
if (!DateTimeOffset.TryParseExact(lockedAtString, Constants.Iso8601Formats,
22+
if (!DateTimeOffset.TryParseExact(LockedAtString.ToEmptyIfNull(), Constants.Iso8601Formats,
2223
CultureInfo.InvariantCulture, Constants.DateTimeStyle, out dt))
2324
{
2425
locked_at = DateTimeOffset.MinValue;

src/GitHub.Api/Git/GitLogEntry.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public DateTimeOffset Time
6868
if (!timeValue.HasValue)
6969
{
7070
DateTimeOffset result;
71-
if (DateTimeOffset.TryParseExact(TimeString, Constants.Iso8601Formats, CultureInfo.InvariantCulture,DateTimeStyles.None, out result))
71+
if (DateTimeOffset.TryParseExact(TimeString.ToEmptyIfNull(), Constants.Iso8601Formats, CultureInfo.InvariantCulture,DateTimeStyles.None, out result))
7272
{
7373
timeValue = result;
7474
}
@@ -95,7 +95,7 @@ public DateTimeOffset CommitTime
9595
if (!commitTimeValue.HasValue)
9696
{
9797
DateTimeOffset result;
98-
if (DateTimeOffset.TryParseExact(CommitTimeString, Constants.Iso8601Formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
98+
if (DateTimeOffset.TryParseExact(CommitTimeString.ToEmptyIfNull(), Constants.Iso8601Formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
9999
{
100100
commitTimeValue = result;
101101
}
@@ -216,4 +216,4 @@ public override string ToString()
216216
return sb.ToString();
217217
}
218218
}
219-
}
219+
}

src/GitHub.Api/Helpers/SimpleJson.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1374,6 +1374,8 @@ public virtual object DeserializeObject(object value, Type type)
13741374
return DateTimeOffset.ParseExact(str, Iso8601Format, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);
13751375
if (type == typeof(Guid) || (ReflectionUtils.IsNullableType(type) && Nullable.GetUnderlyingType(type) == typeof(Guid)))
13761376
return new Guid(str);
1377+
if (type == typeof(UriString) || (ReflectionUtils.IsNullableType(type) && Nullable.GetUnderlyingType(type) == typeof(UriString)))
1378+
return new UriString(str);
13771379
if (type == typeof(Uri))
13781380
{
13791381
bool isValid = Uri.IsWellFormedUriString(str, UriKind.RelativeOrAbsolute);
@@ -1499,7 +1501,7 @@ protected virtual object SerializeEnum(Enum p)
14991501
protected virtual bool TrySerializeKnownTypes(object input, out object output)
15001502
{
15011503
bool returnValue = true;
1502-
if (input is NPath)
1504+
if (input is NPath || input is UriString)
15031505
output = input.ToString();
15041506
else if (input is DateTime)
15051507
output = ((DateTime)input).ToUniversalTime().ToString(Iso8601Format[0], CultureInfo.InvariantCulture);

src/GitHub.Api/Platform/Settings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public override string Get(string key, string fallback = "")
7474
if (typeof(T) == typeof(DateTimeOffset))
7575
{
7676
DateTimeOffset dt;
77-
if (DateTimeOffset.TryParseExact(value?.ToString(), Constants.Iso8601Formats,
77+
if (DateTimeOffset.TryParseExact(value?.ToString().ToEmptyIfNull(), Constants.Iso8601Formats,
7878
CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
7979
{
8080
value = dt;

src/GitHub.Api/Primitives/UriString.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ static string GetSerializedValue(SerializationInfo info)
267267

268268
static string NormalizePath(string path)
269269
{
270-
return path?.Replace('\\', '/');
270+
return path?.Replace('\\', '/').TrimEnd('/');
271271
}
272272

273273
static string GetRepositoryName(string repositoryNameSegment)

src/UnityExtension/Assets/Editor/GitHub.Unity/ApplicationCache.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public DateTimeOffset FirstRunAt
3838
if (!firstRunAtValue.HasValue)
3939
{
4040
DateTimeOffset dt;
41-
if (!DateTimeOffset.TryParseExact(firstRunAtString, Constants.Iso8601Formats,
41+
if (!DateTimeOffset.TryParseExact(firstRunAtString.ToEmptyIfNull(), Constants.Iso8601Formats,
4242
CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
4343
{
4444
dt = DateTimeOffset.Now;
@@ -261,7 +261,7 @@ public DateTimeOffset LastUpdatedAt
261261
if (!lastUpdatedAtValue.HasValue)
262262
{
263263
DateTimeOffset result;
264-
if (DateTimeOffset.TryParseExact(LastUpdatedAtString, Constants.Iso8601Formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
264+
if (DateTimeOffset.TryParseExact(LastUpdatedAtString.ToEmptyIfNull(), Constants.Iso8601Formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
265265
{
266266
lastUpdatedAtValue = result;
267267
}
@@ -287,7 +287,7 @@ public DateTimeOffset InitializedAt
287287
if (!initializedAtValue.HasValue)
288288
{
289289
DateTimeOffset result;
290-
if (DateTimeOffset.TryParseExact(InitializedAtString, Constants.Iso8601Formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
290+
if (DateTimeOffset.TryParseExact(InitializedAtString.ToEmptyIfNull(), Constants.Iso8601Formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
291291
{
292292
initializedAtValue = result;
293293
}

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/Window.cs

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class Window : BaseWindow
5454
[SerializeField] private string repositoryProgressMessage;
5555
[SerializeField] private float appManagerProgressValue;
5656
[SerializeField] private string appManagerProgressMessage;
57+
[SerializeField] private Connection connection;
5758

5859
[MenuItem(Menu_Window_GitHub)]
5960
public static void Window_GitHub()
@@ -210,6 +211,8 @@ private void ValidateCachedData(IRepository repository)
210211

211212
private void MaybeUpdateData()
212213
{
214+
connection = Platform.Keychain.Connections.FirstOrDefault();
215+
213216
if (repositoryProgressHasUpdate)
214217
{
215218
if (repositoryProgress != null)
@@ -351,6 +354,7 @@ private void AttachHandlers(IRepository repository)
351354
repository.TrackingStatusChanged += RepositoryOnTrackingStatusChanged;
352355
repository.StatusEntriesChanged += RepositoryOnStatusEntriesChanged;
353356
repository.OnProgress += UpdateProgress;
357+
Platform.Keychain.ConnectionsChanged += ConnectionsChanged;
354358
}
355359

356360
private void DetachHandlers(IRepository repository)
@@ -362,6 +366,7 @@ private void DetachHandlers(IRepository repository)
362366
repository.StatusEntriesChanged -= RepositoryOnStatusEntriesChanged;
363367
repository.OnProgress -= UpdateProgress;
364368
Manager.OnProgress -= ApplicationManagerOnProgress;
369+
Platform.Keychain.ConnectionsChanged -= ConnectionsChanged;
365370
}
366371

367372
private void RepositoryOnCurrentBranchAndRemoteChanged(CacheUpdateEvent cacheUpdateEvent)
@@ -419,6 +424,14 @@ private void ApplicationManagerOnProgress(IProgress progress)
419424
appManagerProgressHasUpdate = true;
420425
}
421426

427+
private void ConnectionsChanged()
428+
{
429+
if (!ThreadingHelper.InUIThread)
430+
TaskManager.RunInUI(Redraw);
431+
else
432+
Redraw();
433+
}
434+
422435
public override void OnUI()
423436
{
424437
base.OnUI();
@@ -610,8 +623,18 @@ private void DoActionbarGUI()
610623

611624
GUILayout.FlexibleSpace();
612625

613-
if (GUILayout.Button(Localization.AccountButton, EditorStyles.toolbarDropDown))
614-
DoAccountDropdown();
626+
if (connection == null)
627+
{
628+
if (GUILayout.Button("Sign in", EditorStyles.toolbarButton))
629+
SignIn(null);
630+
}
631+
else
632+
{
633+
if (GUILayout.Button(connection.Username, EditorStyles.toolbarDropDown))
634+
{
635+
DoAccountDropdown();
636+
}
637+
}
615638
}
616639
EditorGUILayout.EndHorizontal();
617640
}
@@ -770,23 +793,15 @@ private void SwitchView(Subview fromView, Subview toView)
770793
toView.OnDataUpdate();
771794

772795
// this triggers a repaint
773-
Repaint();
796+
Redraw();
774797
}
775798

776799
private void DoAccountDropdown()
777800
{
778801
GenericMenu accountMenu = new GenericMenu();
779-
780-
if (!Platform.Keychain.HasKeys)
781-
{
782-
accountMenu.AddItem(new GUIContent("Sign in"), false, SignIn, "sign in");
783-
}
784-
else
785-
{
786-
accountMenu.AddItem(new GUIContent("Go to Profile"), false, GoToProfile, "profile");
787-
accountMenu.AddSeparator("");
788-
accountMenu.AddItem(new GUIContent("Sign out"), false, SignOut, "sign out");
789-
}
802+
accountMenu.AddItem(new GUIContent("Go to Profile"), false, GoToProfile, "profile");
803+
accountMenu.AddSeparator("");
804+
accountMenu.AddItem(new GUIContent("Sign out"), false, SignOut, "sign out");
790805
accountMenu.ShowAsContext();
791806
}
792807

@@ -809,15 +824,15 @@ private void SignOut(object obj)
809824
if (Repository != null && Repository.CloneUrl != null && Repository.CloneUrl.IsValidUri)
810825
{
811826
host = new UriString(Repository.CloneUrl.ToRepositoryUri()
812-
.GetComponents(UriComponents.SchemeAndServer, UriFormat.SafeUnescaped));
827+
.GetComponents(UriComponents.SchemeAndServer, UriFormat.SafeUnescaped));
813828
}
814829
else
815830
{
816831
host = UriString.ToUriString(HostAddress.GitHubDotComHostAddress.WebUri);
817832
}
818833

819834
var apiClient = new ApiClient(host, Platform.Keychain, Manager.ProcessManager, Manager.TaskManager, Environment.NodeJsExecutablePath, Environment.OctorunScriptPath);
820-
apiClient.Logout(host);
835+
apiClient.Logout(host).FinallyInUI((s, e) => Redraw());
821836
}
822837

823838
public new void ShowNotification(GUIContent content)

src/tests/IntegrationTests/CachingClasses.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ public DateTimeOffset LastUpdatedAt
184184
if (!lastUpdatedAtValue.HasValue)
185185
{
186186
DateTimeOffset result;
187-
if (DateTimeOffset.TryParseExact(LastUpdatedAtString, Constants.Iso8601Formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
187+
if (DateTimeOffset.TryParseExact(LastUpdatedAtString.ToEmptyIfNull(), Constants.Iso8601Formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
188188
{
189189
lastUpdatedAtValue = result;
190190
}
@@ -210,7 +210,7 @@ public DateTimeOffset InitializedAt
210210
if (!initializedAtValue.HasValue)
211211
{
212212
DateTimeOffset result;
213-
if (DateTimeOffset.TryParseExact(InitializedAtString, Constants.Iso8601Formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
213+
if (DateTimeOffset.TryParseExact(InitializedAtString.ToEmptyIfNull(), Constants.Iso8601Formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
214214
{
215215
initializedAtValue = result;
216216
}

0 commit comments

Comments
 (0)