Skip to content

Commit 3cfaf34

Browse files
committed
MVP
1 parent 6f12933 commit 3cfaf34

File tree

4 files changed

+63
-21
lines changed

4 files changed

+63
-21
lines changed

SwiftUI-WorkoutApp.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
67627750283A3A54009C203F /* JournalsListScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6762774F283A3A54009C203F /* JournalsListScreen.swift */; };
3737
67627755283A4C77009C203F /* JournalEntriesScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67627754283A4C77009C203F /* JournalEntriesScreen.swift */; };
3838
6762775B283A87AD009C203F /* JournalCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6762775A283A87AD009C203F /* JournalCell.swift */; };
39+
6764D6382D52009F00699007 /* UnreadCountService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6764D6372D52009F00699007 /* UnreadCountService.swift */; };
3940
6765B2562D451771006164AB /* UIImage+toMediaFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6765B2552D451771006164AB /* UIImage+toMediaFile.swift */; };
4041
6765B2582D4544C8006164AB /* MainUserProfileScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6765B2572D4544C8006164AB /* MainUserProfileScreen.swift */; };
4142
6765B25B2D455D5C006164AB /* ProfileViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6765B25A2D455D5C006164AB /* ProfileViews.swift */; };
@@ -123,6 +124,7 @@
123124
6762774F283A3A54009C203F /* JournalsListScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JournalsListScreen.swift; sourceTree = "<group>"; };
124125
67627754283A4C77009C203F /* JournalEntriesScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JournalEntriesScreen.swift; sourceTree = "<group>"; };
125126
6762775A283A87AD009C203F /* JournalCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JournalCell.swift; sourceTree = "<group>"; };
127+
6764D6372D52009F00699007 /* UnreadCountService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnreadCountService.swift; sourceTree = "<group>"; };
126128
6765B2552D451771006164AB /* UIImage+toMediaFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+toMediaFile.swift"; sourceTree = "<group>"; };
127129
6765B2572D4544C8006164AB /* MainUserProfileScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainUserProfileScreen.swift; sourceTree = "<group>"; };
128130
6765B25A2D455D5C006164AB /* ProfileViews.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViews.swift; sourceTree = "<group>"; };
@@ -391,6 +393,7 @@
391393
67551C352AEC338600084A35 /* SWAddress.swift */,
392394
67A4710C2AEED8F8004D341D /* PastEventStorage.swift */,
393395
67BD2D002AF7D21B00F44064 /* ParksManager.swift */,
396+
6764D6372D52009F00699007 /* UnreadCountService.swift */,
394397
);
395398
path = Services;
396399
sourceTree = "<group>";
@@ -646,6 +649,7 @@
646649
6798AA84280C0F7D00DB76F1 /* EditProfileScreen.swift in Sources */,
647650
6798AA73280B43FE00DB76F1 /* LoginScreen.swift in Sources */,
648651
67D9169628396C1E0098D3CB /* SendMessageScreen.swift in Sources */,
652+
6764D6382D52009F00699007 /* UnreadCountService.swift in Sources */,
649653
6747575928128603002F0A24 /* ParkDetailScreen.swift in Sources */,
650654
675EC6572815433600C2E229 /* UsersListScreen.swift in Sources */,
651655
675EC65F2815532800C2E229 /* EventFormScreen.swift in Sources */,

SwiftUI-WorkoutApp/Screens/Root/RootScreen.swift

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,37 @@ import SwiftUI
44
struct RootScreen: View {
55
@Environment(\.userFlags) private var userFlags
66
@Binding var selectedTab: TabViewModel.Tab
7+
let unreadCount: Int
78

89
var body: some View {
910
TabView(selection: $selectedTab) {
1011
ForEach(TabViewModel.Tab.allCases, id: \.rawValue) { tab in
1112
tab.screen
1213
.tabItem { tab.tabItemLabel }
1314
.tag(tab)
15+
.badge(tab == .messages ? unreadCount : 0)
1416
}
1517
}
1618
.navigationViewStyle(.stack)
1719
}
1820
}
1921

2022
#if DEBUG
21-
#Preview {
22-
RootScreen(selectedTab: .constant(.map))
23-
.environmentObject(ParksManager())
24-
.environmentObject(DefaultsService())
23+
#Preview("Есть бейдж для чатов") {
24+
RootScreen(
25+
selectedTab: .constant(.map),
26+
unreadCount: 1
27+
)
28+
.environmentObject(ParksManager())
29+
.environmentObject(DefaultsService())
30+
}
31+
32+
#Preview("Нет бейджа") {
33+
RootScreen(
34+
selectedTab: .constant(.map),
35+
unreadCount: 0
36+
)
37+
.environmentObject(ParksManager())
38+
.environmentObject(DefaultsService())
2539
}
2640
#endif
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import Foundation
2+
import SWNetworkClient
3+
4+
struct UnreadCountService {
5+
let client: SWClient
6+
7+
func getUnreadCount() async -> Int? {
8+
guard let dialogs = try? await client.getDialogs() else { return nil }
9+
return dialogs.map(\.unreadMessagesCount).reduce(0, +)
10+
}
11+
}

SwiftUI-WorkoutApp/SwiftUI_WorkoutAppApp.swift

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,28 +30,23 @@ struct SwiftUI_WorkoutAppApp: App {
3030

3131
var body: some Scene {
3232
WindowGroup {
33-
RootScreen(selectedTab: $tabViewModel.selectedTab)
34-
.environmentObject(tabViewModel)
35-
.environmentObject(network)
36-
.environmentObject(defaults)
37-
.environmentObject(parksManager)
38-
.preferredColorScheme(colorScheme)
39-
.environment(\.isNetworkConnected, network.isConnected)
40-
.environment(\.userFlags, defaults.userFlags)
33+
RootScreen(
34+
selectedTab: $tabViewModel.selectedTab,
35+
unreadCount: defaults.unreadMessagesCount
36+
)
37+
.environmentObject(tabViewModel)
38+
.environmentObject(network)
39+
.environmentObject(defaults)
40+
.environmentObject(parksManager)
41+
.preferredColorScheme(colorScheme)
42+
.environment(\.isNetworkConnected, network.isConnected)
43+
.environment(\.userFlags, defaults.userFlags)
4144
}
4245
.onChange(of: scenePhase) { phase in
4346
switch phase {
4447
case .active:
4548
updateCountriesIfNeeded()
46-
guard let mainUserId = defaults.mainUserInfo?.id else { return }
47-
socialUpdateTask = Task {
48-
if let result = await client.getSocialUpdates(userID: mainUserId) {
49-
try? defaults.saveFriendsIds(result.friends.map(\.id))
50-
try? defaults.saveFriendRequests(result.friendRequests)
51-
try? defaults.saveBlacklist(result.blacklist)
52-
defaults.setUserNeedUpdate(false)
53-
}
54-
}
49+
updateSocialInfoIfNeeded()
5550
default:
5651
[socialUpdateTask, countriesUpdateTask].forEach { $0?.cancel() }
5752
defaults.setUserNeedUpdate(true)
@@ -68,6 +63,24 @@ struct SwiftUI_WorkoutAppApp: App {
6863
}
6964
}
7065
}
66+
67+
private func updateSocialInfoIfNeeded() {
68+
guard let mainUserId = defaults.mainUserInfo?.id else { return }
69+
socialUpdateTask = Task {
70+
async let socialUpdatesTask = client.getSocialUpdates(userID: mainUserId)
71+
async let unreadCountTask = UnreadCountService(client: client).getUnreadCount()
72+
let (socialUpdates, unreadCount) = await (socialUpdatesTask, unreadCountTask)
73+
if let socialUpdates {
74+
try? defaults.saveFriendsIds(socialUpdates.friends.map(\.id))
75+
try? defaults.saveFriendRequests(socialUpdates.friendRequests)
76+
try? defaults.saveBlacklist(socialUpdates.blacklist)
77+
defaults.setUserNeedUpdate(false)
78+
}
79+
if let unreadCount {
80+
defaults.saveUnreadMessagesCount(unreadCount)
81+
}
82+
}
83+
}
7184
}
7285

7386
private extension SwiftUI_WorkoutAppApp {

0 commit comments

Comments
 (0)