Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 1 addition & 7 deletions GitStreak/ContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,6 @@ struct HomeView: View {
Spacer()

HStack(spacing: 12) {
Button(action: {}) {
Image(systemName: "bell")
.font(.title3)
.foregroundColor(.gray)
}

Button(action: {
showSettings = true
}) {
Expand Down Expand Up @@ -262,7 +256,7 @@ struct StatsView: View {
// Invisible spacer card to maintain alignment
StatCardView(
title: "Total Commits",
value: "\(dataModel.recentCommits.count)",
value: "\(dataModel.totalLifetimeCommits)",
color: .orange
)
}
Expand Down
36 changes: 34 additions & 2 deletions GitStreak/Models/GitStreakData.swift
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ class GitHubService: ObservableObject {
return date1 > date2
}

return Array(allCommits.prefix(150)) // Allow more commits since we're filtering by date
return Array(allCommits.prefix(500)) // Allow more commits since we're filtering by date
}

private func fetchRepositoryCommits(owner: String, repo: String) async throws -> [GitHubCommit]? {
Expand All @@ -206,7 +206,7 @@ class GitHubService: ObservableObject {
let thirtyDaysAgo = Calendar.current.date(byAdding: .day, value: -30, to: Date()) ?? Date()
let sinceDate = ISO8601DateFormatter().string(from: thirtyDaysAgo)

guard let url = URL(string: "\(baseURL)/repos/\(owner)/\(repo)/commits?since=\(sinceDate)&per_page=30") else {
guard let url = URL(string: "\(baseURL)/repos/\(owner)/\(repo)/commits?since=\(sinceDate)&per_page=100") else {
return nil
}

Expand Down Expand Up @@ -409,6 +409,34 @@ class GitHubService: ObservableObject {
)
}

func fetchTotalCommitCount() async throws -> Int {
guard let token = accessToken, let username = username else {
throw GitHubError.notAuthenticated
}

guard let url = URL(string: "\(baseURL)/search/commits?q=author:\(username)") else {
throw GitHubError.invalidURL
}

var request = URLRequest(url: url)
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
request.setValue("application/vnd.github.v3+json", forHTTPHeaderField: "Accept")

let (data, response) = try await URLSession.shared.data(for: request)

guard let httpResponse = response as? HTTPURLResponse,
httpResponse.statusCode == 200 else {
throw GitHubError.requestFailed((response as? HTTPURLResponse)?.statusCode ?? 0)
}

struct SearchResponse: Codable {
let total_count: Int
}

let searchResponse = try JSONDecoder().decode(SearchResponse.self, from: data)
return searchResponse.total_count
}

private func calculateCurrentStreak(commits: [GitHubCommit]) -> Int {
guard !commits.isEmpty else { return 0 }

Expand Down Expand Up @@ -708,6 +736,7 @@ class GitStreakDataModel: ObservableObject {
@Published var progress: Double = 0.0
@Published var xpToNext: Int = 100
@Published var totalCommitsThisWeek: Int = 0
@Published var totalLifetimeCommits: Int = 0
@Published var isLoading = false
@Published var errorMessage: String?

Expand Down Expand Up @@ -811,12 +840,14 @@ class GitStreakDataModel: ObservableObject {

do {
let stats = try await gitHubService.fetchContributionStats()
let totalCommits = try await gitHubService.fetchTotalCommitCount()

await MainActor.run {
self.currentStreak = stats.currentStreak
self.bestStreak = stats.bestStreak
self.recentCommits = Array(stats.recentCommits)
self.monthlyCommits = stats.monthlyCommits
self.totalLifetimeCommits = totalCommits
self.updateWeeklyData(from: stats.weeklyCommits)
self.calculateLevel()
self.updateAchievements()
Expand All @@ -842,6 +873,7 @@ class GitStreakDataModel: ObservableObject {
progress = 0.85
xpToNext = 353
totalCommitsThisWeek = 21
totalLifetimeCommits = 1247

recentCommits = [
CommitData(repo: "my-portfolio", message: "Update homepage design", time: "2h ago", commits: 3),
Expand Down
6 changes: 4 additions & 2 deletions GitStreak/Views/AwardsTabView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,6 @@ struct AwardsTabView: View {
Spacer()
}
.padding(16)
.background(Color(.systemBackground))
.cornerRadius(12)

// Recent Achievement Cards (matching expanded category structure)
VStack(spacing: 8) {
Expand All @@ -72,7 +70,11 @@ struct AwardsTabView: View {
}
}
.padding(.top, 8)
.padding(.horizontal, 16)
}
.background(Color(.systemBackground))
.cornerRadius(12)
.shadow(color: .black.opacity(0.1), radius: 5, x: 0, y: 2)
}
}
.padding(.horizontal, 24)
Expand Down