From 8469a50c11b88e3aa82072bcb7ed71b36c7d2e3b Mon Sep 17 00:00:00 2001 From: Amy Palamountain Date: Sun, 16 Feb 2014 15:14:13 +1300 Subject: [PATCH] Unix Timestamp helper --- Octokit.Tests/Clients/StatisticsClientTests.cs | 2 +- Octokit/Clients/StatisticsClient.cs | 2 +- Octokit/Helpers/UnixTimeStampExtensions.cs | 14 ++++++++++++++ Octokit/Http/RateLimit.cs | 9 ++------- Octokit/Models/Response/AdditionsAndDeletions.cs | 11 ++++++----- Octokit/Models/Response/CodeFrequency.cs | 2 +- Octokit/Models/Response/WeeklyCommitActivity.cs | 2 +- Octokit/Models/Response/WeeklyHash.cs | 10 ++++++++-- Octokit/Octokit-Mono.csproj | 1 + Octokit/Octokit-MonoAndroid.csproj | 1 + Octokit/Octokit-Monotouch.csproj | 1 + Octokit/Octokit-netcore45.csproj | 1 + Octokit/Octokit.csproj | 1 + 13 files changed, 39 insertions(+), 18 deletions(-) create mode 100644 Octokit/Helpers/UnixTimeStampExtensions.cs diff --git a/Octokit.Tests/Clients/StatisticsClientTests.cs b/Octokit.Tests/Clients/StatisticsClientTests.cs index eb42efa7..2c95b86b 100644 --- a/Octokit.Tests/Clients/StatisticsClientTests.cs +++ b/Octokit.Tests/Clients/StatisticsClientTests.cs @@ -90,7 +90,7 @@ namespace Octokit.Tests.Clients statisticsClient.GetCodeFrequency("username", "repositoryName"); - client.Received().GetQueuedOperation>(expectedEndPoint, Args.CancellationToken); + client.Received().GetQueuedOperation>(expectedEndPoint, Args.CancellationToken); } [Fact] diff --git a/Octokit/Clients/StatisticsClient.cs b/Octokit/Clients/StatisticsClient.cs index ec6af044..1b326001 100644 --- a/Octokit/Clients/StatisticsClient.cs +++ b/Octokit/Clients/StatisticsClient.cs @@ -94,7 +94,7 @@ namespace Octokit Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName"); var endpoint = "/repos/{0}/{1}/stats/code_frequency".FormatUri(owner, repositoryName); - var rawFrequencies = await ApiConnection.GetQueuedOperation>(endpoint,cancellationToken); + var rawFrequencies = await ApiConnection.GetQueuedOperation>(endpoint,cancellationToken); return new CodeFrequency(rawFrequencies); } diff --git a/Octokit/Helpers/UnixTimeStampExtensions.cs b/Octokit/Helpers/UnixTimeStampExtensions.cs new file mode 100644 index 00000000..5631d71c --- /dev/null +++ b/Octokit/Helpers/UnixTimeStampExtensions.cs @@ -0,0 +1,14 @@ +using System; + +namespace Octokit.Helpers +{ + public static class UnixTimestampExtensions + { + const long _unixEpochTicks = 621355968000000000; // Unix Epoch is January 1, 1970 00:00 -0:00 + + public static DateTimeOffset FromUnixTime(this long unixTime) + { + return new DateTimeOffset(unixTime * TimeSpan.TicksPerSecond + _unixEpochTicks, TimeSpan.Zero); + } + } +} diff --git a/Octokit/Http/RateLimit.cs b/Octokit/Http/RateLimit.cs index 28830ef7..44b572da 100644 --- a/Octokit/Http/RateLimit.cs +++ b/Octokit/Http/RateLimit.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Runtime.Serialization; +using Octokit.Helpers; namespace Octokit { @@ -12,7 +13,6 @@ namespace Octokit : ISerializable #endif { - const long _unixEpochTicks = 621355968000000000; // Unix Epoch is January 1, 1970 00:00 -0:00 public RateLimit(IDictionary responseHeaders) { @@ -20,7 +20,7 @@ namespace Octokit Limit = (int) GetHeaderValueAsInt32Safe(responseHeaders, "X-RateLimit-Limit"); Remaining = (int) GetHeaderValueAsInt32Safe(responseHeaders, "X-RateLimit-Remaining"); - Reset = FromUnixTime(GetHeaderValueAsInt32Safe(responseHeaders, "X-RateLimit-Reset")); + Reset = GetHeaderValueAsInt32Safe(responseHeaders, "X-RateLimit-Reset").FromUnixTime(); } /// @@ -47,11 +47,6 @@ namespace Octokit : result; } - static DateTimeOffset FromUnixTime(long unixTime) - { - return new DateTimeOffset(unixTime*TimeSpan.TicksPerSecond + _unixEpochTicks, TimeSpan.Zero); - } - #if !NETFX_CORE protected RateLimit(SerializationInfo info, StreamingContext context) { diff --git a/Octokit/Models/Response/AdditionsAndDeletions.cs b/Octokit/Models/Response/AdditionsAndDeletions.cs index 908bb496..7bb03301 100644 --- a/Octokit/Models/Response/AdditionsAndDeletions.cs +++ b/Octokit/Models/Response/AdditionsAndDeletions.cs @@ -1,23 +1,24 @@ using System; using System.Collections.Generic; +using Octokit.Helpers; namespace Octokit { public class AdditionsAndDeletions { - public AdditionsAndDeletions(IList additionsAndDeletions) + public AdditionsAndDeletions(IList additionsAndDeletions) { Ensure.ArgumentNotNull(additionsAndDeletions, "additionsAndDeletions"); if (additionsAndDeletions.Count != 3) { throw new ArgumentException("Addition and deletion aggregate must only contain three data points."); } - Timestamp = additionsAndDeletions[0]; - Additions = additionsAndDeletions[1]; - Deletions = additionsAndDeletions[2]; + Timestamp = additionsAndDeletions[0].FromUnixTime(); + Additions = Convert.ToInt32(additionsAndDeletions[1]); + Deletions = Convert.ToInt32(additionsAndDeletions[2]); } - public int Timestamp { get; private set; } + public DateTimeOffset Timestamp { get; private set; } public int Additions { get; private set; } diff --git a/Octokit/Models/Response/CodeFrequency.cs b/Octokit/Models/Response/CodeFrequency.cs index f8dbc8f5..007f5838 100644 --- a/Octokit/Models/Response/CodeFrequency.cs +++ b/Octokit/Models/Response/CodeFrequency.cs @@ -5,7 +5,7 @@ namespace Octokit { public class CodeFrequency { - public CodeFrequency(IEnumerable> rawFrequencies) + public CodeFrequency(IEnumerable> rawFrequencies) { Ensure.ArgumentNotNull(rawFrequencies, "rawFrequencies"); AdditionsAndDeletionsByWeek = rawFrequencies.Select(point => new AdditionsAndDeletions(point)).ToList(); diff --git a/Octokit/Models/Response/WeeklyCommitActivity.cs b/Octokit/Models/Response/WeeklyCommitActivity.cs index da4d9e69..2ae02fcb 100644 --- a/Octokit/Models/Response/WeeklyCommitActivity.cs +++ b/Octokit/Models/Response/WeeklyCommitActivity.cs @@ -19,7 +19,7 @@ namespace Octokit /// /// The week of commits /// - public int Week { get; set; } + public long Week { get; set; } /// /// Get the number of commits made on any diff --git a/Octokit/Models/Response/WeeklyHash.cs b/Octokit/Models/Response/WeeklyHash.cs index 822cdb45..f210c089 100644 --- a/Octokit/Models/Response/WeeklyHash.cs +++ b/Octokit/Models/Response/WeeklyHash.cs @@ -1,11 +1,12 @@ using System; +using Octokit.Helpers; namespace Octokit { - public class WeeklyHash + public class WeeklyHash { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "W")] - public string W { get; set; } + public long W { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "A")] public int A { get; set; } @@ -15,5 +16,10 @@ namespace Octokit [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "C")] public int C { get; set; } + + public DateTimeOffset Week + { + get { return W.FromUnixTime(); } + } } } \ No newline at end of file diff --git a/Octokit/Octokit-Mono.csproj b/Octokit/Octokit-Mono.csproj index 745c2f44..b3272240 100644 --- a/Octokit/Octokit-Mono.csproj +++ b/Octokit/Octokit-Mono.csproj @@ -278,6 +278,7 @@ + \ No newline at end of file diff --git a/Octokit/Octokit-MonoAndroid.csproj b/Octokit/Octokit-MonoAndroid.csproj index fd1227c5..2e3f3c04 100644 --- a/Octokit/Octokit-MonoAndroid.csproj +++ b/Octokit/Octokit-MonoAndroid.csproj @@ -288,6 +288,7 @@ + \ No newline at end of file diff --git a/Octokit/Octokit-Monotouch.csproj b/Octokit/Octokit-Monotouch.csproj index 77910035..f351c9e0 100644 --- a/Octokit/Octokit-Monotouch.csproj +++ b/Octokit/Octokit-Monotouch.csproj @@ -283,6 +283,7 @@ + \ No newline at end of file diff --git a/Octokit/Octokit-netcore45.csproj b/Octokit/Octokit-netcore45.csproj index f0d9515f..af66536a 100644 --- a/Octokit/Octokit-netcore45.csproj +++ b/Octokit/Octokit-netcore45.csproj @@ -276,6 +276,7 @@ + diff --git a/Octokit/Octokit.csproj b/Octokit/Octokit.csproj index b14e0d2e..21256b4d 100644 --- a/Octokit/Octokit.csproj +++ b/Octokit/Octokit.csproj @@ -84,6 +84,7 @@ + Code