From 7d8e83c4737313f330940a9e84205460a8063787 Mon Sep 17 00:00:00 2001 From: vinkwok Date: Sun, 5 Jun 2022 22:37:16 +0800 Subject: [PATCH 1/6] Add imports where required, remove custom equitable conformance Also testing out performance without custom equitables, and seeing if that irons out any bugs --- Swiftcord.xcodeproj/project.pbxproj | 2 ++ .../xcshareddata/swiftpm/Package.resolved | 18 +++++++++--------- Swiftcord/SwiftcordApp.swift | 6 +----- .../Extensions/DiscordAPI/Array.Channel+.swift | 2 +- .../Utils/Extensions/DiscordAPI/Channel+.swift | 2 +- .../Extensions/DiscordAPI/CurrentUser+.swift | 1 + .../Utils/Extensions/DiscordAPI/Guild+.swift | 1 + .../Utils/Extensions/DiscordAPI/Message+.swift | 2 +- .../Utils/Extensions/DiscordAPI/User+.swift | 1 + Swiftcord/Utils/Extensions/MessagesView+.swift | 1 + .../MergeStructs/MergePartialMessage.swift | 1 + Swiftcord/Views/ContentView.swift | 3 +-- Swiftcord/Views/EnvObjects/UIStateEnv.swift | 9 +-------- Swiftcord/Views/Message/AttachmentView.swift | 1 + Swiftcord/Views/Message/EmbedView.swift | 2 +- Swiftcord/Views/Message/MessageView.swift | 7 ++----- Swiftcord/Views/Message/MessagesView.swift | 7 ++----- .../Views/Message/ReferenceMessageView.swift | 1 + Swiftcord/Views/Message/StickerView.swift | 1 + Swiftcord/Views/Server/ChannelButton.swift | 1 + Swiftcord/Views/Server/ChannelList.swift | 7 ++----- Swiftcord/Views/Server/ServerView.swift | 10 +++------- .../Settings/Misc/DebugSettingsView.swift | 1 + Swiftcord/Views/Settings/SettingsView.swift | 1 + .../User/UserSettingsAccountView.swift | 1 + .../User/UserSettingsProfileView.swift | 2 +- .../Views/Settings/User/UserSettingsView.swift | 1 + Swiftcord/Views/User/CurrentUserFooter.swift | 1 + .../User/Profile/LargeUserProfileView.swift | 2 +- .../User/Profile/MiniUserProfileView.swift | 1 + .../Views/User/Profile/ProfileBadges.swift | 1 + Swiftcord/Views/User/UserAvatarView.swift | 3 ++- 32 files changed, 47 insertions(+), 53 deletions(-) diff --git a/Swiftcord.xcodeproj/project.pbxproj b/Swiftcord.xcodeproj/project.pbxproj index 1a6e18c1..67bba8b0 100644 --- a/Swiftcord.xcodeproj/project.pbxproj +++ b/Swiftcord.xcodeproj/project.pbxproj @@ -171,6 +171,7 @@ DA7720CF283F184100D3C335 /* NavigationCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationCommands.swift; sourceTree = ""; }; DA97BA892848737C00059FD7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; DA97BA8B2849C0FA00059FD7 /* Cache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cache.swift; sourceTree = ""; }; + DAAA22AA284CF3D100C1975E /* DiscordKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = DiscordKit; path = ../DiscordKit; sourceTree = ""; }; DAAFB5BB282A570D00807B54 /* CircularProgressView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CircularProgressView.swift; sourceTree = ""; }; DAAFB5C0282A64CD00807B54 /* LoFiMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoFiMessageView.swift; sourceTree = ""; }; DAAFB5C2282AA5C700807B54 /* MessageInfoBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageInfoBarView.swift; sourceTree = ""; }; @@ -281,6 +282,7 @@ DA4A887B27C0AF3000720909 = { isa = PBXGroup; children = ( + DAAA22AA284CF3D100C1975E /* DiscordKit */, 36004E1C283D63E500F0BA73 /* .swiftlint.yml */, DA4A888627C0AF3000720909 /* Swiftcord */, DA4A891727C4B0DF00720909 /* README.md */, diff --git a/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved index b4ae6ff0..4a69a2ee 100644 --- a/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -9,15 +9,6 @@ "version" : "4.4.2" } }, - { - "identity" : "discordkit", - "kind" : "remoteSourceControl", - "location" : "https://github.com/SwiftcordApp/DiscordKit", - "state" : { - "branch" : "main", - "revision" : "3674512a16def56441f0a46b14d19bf0898d0782" - } - }, { "identity" : "lottie-ios", "kind" : "remoteSourceControl", @@ -54,6 +45,15 @@ "version" : "2.1.0" } }, + { + "identity" : "swift-docc-plugin", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-docc-plugin", + "state" : { + "revision" : "3303b164430d9a7055ba484c8ead67a52f7b74f6", + "version" : "1.0.0" + } + }, { "identity" : "swiftui-cached-async-image", "kind" : "remoteSourceControl", diff --git a/Swiftcord/SwiftcordApp.swift b/Swiftcord/SwiftcordApp.swift index f68ebdfb..0befcba6 100644 --- a/Swiftcord/SwiftcordApp.swift +++ b/Swiftcord/SwiftcordApp.swift @@ -12,7 +12,7 @@ import SwiftUI let appName = Bundle.main.infoDictionary?[kCFBundleNameKey as String] as? String @main -struct SwiftcordApp: App, Equatable { +struct SwiftcordApp: App { @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate let persistenceController = PersistenceController.shared @StateObject var updaterViewModel = UpdaterViewModel() @@ -53,8 +53,4 @@ struct SwiftcordApp: App, Equatable { // .environment(\.locale, .init(identifier: "zh-Hans")) } } - - static func == (lhs: SwiftcordApp, rhs: SwiftcordApp) -> Bool { - lhs.gateway == rhs.gateway && lhs.state == rhs.state - } } diff --git a/Swiftcord/Utils/Extensions/DiscordAPI/Array.Channel+.swift b/Swiftcord/Utils/Extensions/DiscordAPI/Array.Channel+.swift index 8359990d..6389df57 100644 --- a/Swiftcord/Utils/Extensions/DiscordAPI/Array.Channel+.swift +++ b/Swiftcord/Utils/Extensions/DiscordAPI/Array.Channel+.swift @@ -5,7 +5,7 @@ // Created by royal on 14/05/2022. // -import DiscordKit +import DiscordKitCore extension Array where Element == Channel { func discordSorted() -> Self { diff --git a/Swiftcord/Utils/Extensions/DiscordAPI/Channel+.swift b/Swiftcord/Utils/Extensions/DiscordAPI/Channel+.swift index cd59d820..400461b1 100644 --- a/Swiftcord/Utils/Extensions/DiscordAPI/Channel+.swift +++ b/Swiftcord/Utils/Extensions/DiscordAPI/Channel+.swift @@ -5,7 +5,7 @@ // Created by royal on 14/05/2022. // -import DiscordKit +import DiscordKitCore extension Channel { func label(_ users: [Snowflake: User] = [:]) -> String? { diff --git a/Swiftcord/Utils/Extensions/DiscordAPI/CurrentUser+.swift b/Swiftcord/Utils/Extensions/DiscordAPI/CurrentUser+.swift index 739ba3e2..e6be200f 100644 --- a/Swiftcord/Utils/Extensions/DiscordAPI/CurrentUser+.swift +++ b/Swiftcord/Utils/Extensions/DiscordAPI/CurrentUser+.swift @@ -7,6 +7,7 @@ import Foundation import DiscordKit +import DiscordKitCore extension CurrentUser { func avatarURL(size: Int = 160) -> URL { diff --git a/Swiftcord/Utils/Extensions/DiscordAPI/Guild+.swift b/Swiftcord/Utils/Extensions/DiscordAPI/Guild+.swift index e42e9d69..b8d069d1 100644 --- a/Swiftcord/Utils/Extensions/DiscordAPI/Guild+.swift +++ b/Swiftcord/Utils/Extensions/DiscordAPI/Guild+.swift @@ -6,6 +6,7 @@ // import DiscordKit +import DiscordKitCore extension Guild { var isDMChannel: Bool { id == "@me" } diff --git a/Swiftcord/Utils/Extensions/DiscordAPI/Message+.swift b/Swiftcord/Utils/Extensions/DiscordAPI/Message+.swift index 2a3abbec..6a4037c2 100644 --- a/Swiftcord/Utils/Extensions/DiscordAPI/Message+.swift +++ b/Swiftcord/Utils/Extensions/DiscordAPI/Message+.swift @@ -6,7 +6,7 @@ // import Foundation -import DiscordKit +import DiscordKitCore extension Message { func messageIsShrunk(prev: Message) -> Bool { diff --git a/Swiftcord/Utils/Extensions/DiscordAPI/User+.swift b/Swiftcord/Utils/Extensions/DiscordAPI/User+.swift index 531caafa..95aa360b 100644 --- a/Swiftcord/Utils/Extensions/DiscordAPI/User+.swift +++ b/Swiftcord/Utils/Extensions/DiscordAPI/User+.swift @@ -7,6 +7,7 @@ import Foundation import DiscordKit +import DiscordKitCore extension User { func avatarURL(size: Int = 160) -> URL { diff --git a/Swiftcord/Utils/Extensions/MessagesView+.swift b/Swiftcord/Utils/Extensions/MessagesView+.swift index e8baa9bb..a81a9a2a 100644 --- a/Swiftcord/Utils/Extensions/MessagesView+.swift +++ b/Swiftcord/Utils/Extensions/MessagesView+.swift @@ -7,6 +7,7 @@ import Foundation import DiscordKit +import DiscordKitCore extension MessagesView { internal func fetchMoreMessages() { diff --git a/Swiftcord/Utils/MergeStructs/MergePartialMessage.swift b/Swiftcord/Utils/MergeStructs/MergePartialMessage.swift index 609906f8..f65a3a5a 100644 --- a/Swiftcord/Utils/MergeStructs/MergePartialMessage.swift +++ b/Swiftcord/Utils/MergeStructs/MergePartialMessage.swift @@ -9,6 +9,7 @@ import Foundation import DiscordKit +import DiscordKitCore extension Message { mutating func mergeWithPartialMsg(_ partial: PartialMessage) { diff --git a/Swiftcord/Views/ContentView.swift b/Swiftcord/Views/ContentView.swift index 36308041..66bbd4a1 100644 --- a/Swiftcord/Views/ContentView.swift +++ b/Swiftcord/Views/ContentView.swift @@ -9,6 +9,7 @@ import SwiftUI import CoreData import os import DiscordKit +import DiscordKitCore import DiscordKitCommon struct CustomHorizontalDivider: View { @@ -129,8 +130,6 @@ struct ContentView: View { ) } - // Using the .equatable() modifier on this View causes a swift-frontend - // bus error when compiling for release. I have no idea why that happens. ServerView( guild: selectedGuildID == nil ? nil diff --git a/Swiftcord/Views/EnvObjects/UIStateEnv.swift b/Swiftcord/Views/EnvObjects/UIStateEnv.swift index 0d57a9a3..6715335e 100644 --- a/Swiftcord/Views/EnvObjects/UIStateEnv.swift +++ b/Swiftcord/Views/EnvObjects/UIStateEnv.swift @@ -13,16 +13,9 @@ enum LoadingState { case messageLoad } -class UIState: ObservableObject, Equatable { +class UIState: ObservableObject { @Published var loadingState: LoadingState = .initial @Published var attemptLogin = false @Published var selfMute = false @Published var selfDeaf = false - - static func == (lhs: UIState, rhs: UIState) -> Bool { - return lhs.loadingState == rhs.loadingState && - lhs.attemptLogin == rhs.attemptLogin && - lhs.selfMute == rhs.selfMute && - lhs.selfDeaf == rhs.selfDeaf - } } diff --git a/Swiftcord/Views/Message/AttachmentView.swift b/Swiftcord/Views/Message/AttachmentView.swift index dc2a2204..0174b9ed 100644 --- a/Swiftcord/Views/Message/AttachmentView.swift +++ b/Swiftcord/Views/Message/AttachmentView.swift @@ -11,6 +11,7 @@ import AVKit import CachedAsyncImage import QuickLook import DiscordKit +import DiscordKitCore struct AttachmentError: View { let height: Int diff --git a/Swiftcord/Views/Message/EmbedView.swift b/Swiftcord/Views/Message/EmbedView.swift index 70c1fcea..baa645b5 100644 --- a/Swiftcord/Views/Message/EmbedView.swift +++ b/Swiftcord/Views/Message/EmbedView.swift @@ -7,7 +7,7 @@ import SwiftUI import CachedAsyncImage -import DiscordKit +import DiscordKitCore struct EmbedView: View { let embed: Embed diff --git a/Swiftcord/Views/Message/MessageView.swift b/Swiftcord/Views/Message/MessageView.swift index ea74a618..d9555bf9 100644 --- a/Swiftcord/Views/Message/MessageView.swift +++ b/Swiftcord/Views/Message/MessageView.swift @@ -9,6 +9,7 @@ import SwiftUI import CachedAsyncImage import DiscordKit +import DiscordKitCore struct NonUserBadge: View { let flags: Int? @@ -34,7 +35,7 @@ struct NonUserBadge: View { } } -struct MessageView: View, Equatable { +struct MessageView: View { let message: Message let shrunk: Bool let lineSpacing = 4 as CGFloat @@ -215,10 +216,6 @@ struct MessageView: View, Equatable { } } } - - static func == (lhs: MessageView, rhs: MessageView) -> Bool { - lhs.message == rhs.message - } } private extension MessageView { diff --git a/Swiftcord/Views/Message/MessagesView.swift b/Swiftcord/Views/Message/MessagesView.swift index b7397294..8c74c0eb 100644 --- a/Swiftcord/Views/Message/MessagesView.swift +++ b/Swiftcord/Views/Message/MessagesView.swift @@ -7,6 +7,7 @@ import SwiftUI import DiscordKit +import DiscordKitCore import CachedAsyncImage extension View { @@ -84,11 +85,7 @@ struct DayDividerView: View { } } -struct MessagesView: View, Equatable { - static func == (lhs: MessagesView, rhs: MessagesView) -> Bool { - lhs.messages == rhs.messages && lhs.attachments == rhs.attachments - } - +struct MessagesView: View { @State internal var reachedTop = false @State internal var messages: [Message] = [] @State internal var newMessage = " " diff --git a/Swiftcord/Views/Message/ReferenceMessageView.swift b/Swiftcord/Views/Message/ReferenceMessageView.swift index cafd52d1..6df018f8 100644 --- a/Swiftcord/Views/Message/ReferenceMessageView.swift +++ b/Swiftcord/Views/Message/ReferenceMessageView.swift @@ -7,6 +7,7 @@ import SwiftUI import DiscordKit +import DiscordKitCore import CachedAsyncImage struct ReferenceMessageView: View { diff --git a/Swiftcord/Views/Message/StickerView.swift b/Swiftcord/Views/Message/StickerView.swift index d2705107..dd31049c 100644 --- a/Swiftcord/Views/Message/StickerView.swift +++ b/Swiftcord/Views/Message/StickerView.swift @@ -8,6 +8,7 @@ import SwiftUI import Lottie import DiscordKit +import DiscordKitCore import CachedAsyncImage struct StickerLoadingView: View { diff --git a/Swiftcord/Views/Server/ChannelButton.swift b/Swiftcord/Views/Server/ChannelButton.swift index 5a7eb1d2..95c32069 100644 --- a/Swiftcord/Views/Server/ChannelButton.swift +++ b/Swiftcord/Views/Server/ChannelButton.swift @@ -7,6 +7,7 @@ import SwiftUI import DiscordKit +import DiscordKitCore import CachedAsyncImage struct ChannelButton: View { diff --git a/Swiftcord/Views/Server/ChannelList.swift b/Swiftcord/Views/Server/ChannelList.swift index 8c9b58c6..c96d2b8b 100644 --- a/Swiftcord/Views/Server/ChannelList.swift +++ b/Swiftcord/Views/Server/ChannelList.swift @@ -7,8 +7,9 @@ import SwiftUI import DiscordKit +import DiscordKitCore -struct ChannelList: View, Equatable { +struct ChannelList: View { let channels: [Channel] @Binding var selCh: Channel? @@ -52,8 +53,4 @@ struct ChannelList: View, Equatable { // this overlay applies a border on the bottom edge of the view .overlay(Rectangle().fill(Color(nsColor: .separatorColor)).frame(width: nil, height: 1, alignment: .bottom), alignment: .top) } - - static func == (lhs: Self, rhs: Self) -> Bool { - lhs.channels == rhs.channels && lhs.selCh == rhs.selCh - } } diff --git a/Swiftcord/Views/Server/ServerView.swift b/Swiftcord/Views/Server/ServerView.swift index b4b06908..59a0e530 100644 --- a/Swiftcord/Views/Server/ServerView.swift +++ b/Swiftcord/Views/Server/ServerView.swift @@ -6,6 +6,7 @@ // import SwiftUI +import DiscordKitCore import DiscordKit class ServerContext: ObservableObject { @@ -15,7 +16,7 @@ class ServerContext: ObservableObject { @Published public var roles: [Role] = [] } -struct ServerView: View, Equatable { +struct ServerView: View { let guild: Guild? @State private var evtID: EventDispatch.HandlerIdentifier? @State private var mediaCenterOpen: Bool = false @@ -84,7 +85,6 @@ struct ServerView: View, Equatable { VStack(spacing: 0) { if let guild = guild { ChannelList(channels: guild.channels!, selCh: $serverCtx.channel) - .equatable() .toolbar { ToolbarItem { Text(guild.name == "DMs" ? "dm" : "\(guild.name)") @@ -118,7 +118,7 @@ struct ServerView: View, Equatable { } if serverCtx.channel != nil { - MessagesView().equatable() + MessagesView() } else { VStack(spacing: 24) { Image(serverCtx.guild?.id == "@me" ? "NoDMs" : "NoGuildChannels") @@ -207,8 +207,4 @@ struct ServerView: View, Equatable { if let evtID = evtID { _ = gateway.onEvent.removeHandler(handler: evtID) } } } - - static func == (lhs: Self, rhs: Self) -> Bool { - lhs.guild == rhs.guild - } } diff --git a/Swiftcord/Views/Settings/Misc/DebugSettingsView.swift b/Swiftcord/Views/Settings/Misc/DebugSettingsView.swift index 8dab423c..90fec886 100644 --- a/Swiftcord/Views/Settings/Misc/DebugSettingsView.swift +++ b/Swiftcord/Views/Settings/Misc/DebugSettingsView.swift @@ -7,6 +7,7 @@ import SwiftUI import DiscordKit +import DiscordKitCore struct DebugTableItem: Identifiable { let id = UUID() diff --git a/Swiftcord/Views/Settings/SettingsView.swift b/Swiftcord/Views/Settings/SettingsView.swift index 0e7c6f8c..d531155b 100644 --- a/Swiftcord/Views/Settings/SettingsView.swift +++ b/Swiftcord/Views/Settings/SettingsView.swift @@ -7,6 +7,7 @@ import SwiftUI import DiscordKit +import DiscordKitCore struct SettingsView: View { @EnvironmentObject var gateway: DiscordGateway diff --git a/Swiftcord/Views/Settings/User/UserSettingsAccountView.swift b/Swiftcord/Views/Settings/User/UserSettingsAccountView.swift index 277003cb..0468e7ac 100644 --- a/Swiftcord/Views/Settings/User/UserSettingsAccountView.swift +++ b/Swiftcord/Views/Settings/User/UserSettingsAccountView.swift @@ -7,6 +7,7 @@ import SwiftUI import DiscordKit +import DiscordKitCore struct UserSettingsAccountView: View { let user: CurrentUser diff --git a/Swiftcord/Views/Settings/User/UserSettingsProfileView.swift b/Swiftcord/Views/Settings/User/UserSettingsProfileView.swift index a240966e..47bf87ab 100644 --- a/Swiftcord/Views/Settings/User/UserSettingsProfileView.swift +++ b/Swiftcord/Views/Settings/User/UserSettingsProfileView.swift @@ -6,7 +6,7 @@ // import SwiftUI -import DiscordKit +import DiscordKitCore struct UserSettingsProfileView: View { let user: CurrentUser diff --git a/Swiftcord/Views/Settings/User/UserSettingsView.swift b/Swiftcord/Views/Settings/User/UserSettingsView.swift index 24b1131c..75805889 100644 --- a/Swiftcord/Views/Settings/User/UserSettingsView.swift +++ b/Swiftcord/Views/Settings/User/UserSettingsView.swift @@ -7,6 +7,7 @@ import SwiftUI import DiscordKit +import DiscordKitCore struct UserSettingsView: View { let user: CurrentUser diff --git a/Swiftcord/Views/User/CurrentUserFooter.swift b/Swiftcord/Views/User/CurrentUserFooter.swift index 8c524eb1..6de744f0 100644 --- a/Swiftcord/Views/User/CurrentUserFooter.swift +++ b/Swiftcord/Views/User/CurrentUserFooter.swift @@ -9,6 +9,7 @@ import SwiftUI import CachedAsyncImage import DiscordKit +import DiscordKitCore struct CurrentUserFooter: View { let user: CurrentUser diff --git a/Swiftcord/Views/User/Profile/LargeUserProfileView.swift b/Swiftcord/Views/User/Profile/LargeUserProfileView.swift index 3187bd8c..25df2029 100644 --- a/Swiftcord/Views/User/Profile/LargeUserProfileView.swift +++ b/Swiftcord/Views/User/Profile/LargeUserProfileView.swift @@ -7,7 +7,7 @@ import SwiftUI import CachedAsyncImage -import DiscordKit +import DiscordKitCore struct LargeUserProfile: View { let user: CurrentUser diff --git a/Swiftcord/Views/User/Profile/MiniUserProfileView.swift b/Swiftcord/Views/User/Profile/MiniUserProfileView.swift index fafb8428..d794c2ad 100644 --- a/Swiftcord/Views/User/Profile/MiniUserProfileView.swift +++ b/Swiftcord/Views/User/Profile/MiniUserProfileView.swift @@ -7,6 +7,7 @@ import SwiftUI import DiscordKit +import DiscordKitCore import CachedAsyncImage struct MiniUserProfileView: View { diff --git a/Swiftcord/Views/User/Profile/ProfileBadges.swift b/Swiftcord/Views/User/Profile/ProfileBadges.swift index b028ebbe..a37a1fa9 100644 --- a/Swiftcord/Views/User/Profile/ProfileBadges.swift +++ b/Swiftcord/Views/User/Profile/ProfileBadges.swift @@ -6,6 +6,7 @@ // import DiscordKit +import DiscordKitCore import SwiftUI struct ProfileBadges: View, Equatable { diff --git a/Swiftcord/Views/User/UserAvatarView.swift b/Swiftcord/Views/User/UserAvatarView.swift index cbb349d3..36f36d96 100644 --- a/Swiftcord/Views/User/UserAvatarView.swift +++ b/Swiftcord/Views/User/UserAvatarView.swift @@ -7,6 +7,7 @@ import SwiftUI import CachedAsyncImage +import DiscordKitCore import DiscordKit struct UserAvatarView: View, Equatable { @@ -22,7 +23,7 @@ struct UserAvatarView: View, Equatable { @EnvironmentObject var ctx: ServerContext @EnvironmentObject var gateway: DiscordGateway - static let profileCache = Cache() + static private let profileCache = Cache() var body: some View { let avatarURL = user.avatarURL(size: size == 40 ? 160 : Int(size)*2) From 949fcefbaf0b0b16fe9627aed0e94bc84191b33a Mon Sep 17 00:00:00 2001 From: vinkwok Date: Sun, 5 Jun 2022 23:21:29 +0800 Subject: [PATCH 2/6] Rely on corresponding DiscordKit branch (rearchitect) --- Swiftcord.xcodeproj/project.pbxproj | 4 +--- .../xcshareddata/swiftpm/Package.resolved | 18 +++++++++--------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Swiftcord.xcodeproj/project.pbxproj b/Swiftcord.xcodeproj/project.pbxproj index 67bba8b0..61b6cf5a 100644 --- a/Swiftcord.xcodeproj/project.pbxproj +++ b/Swiftcord.xcodeproj/project.pbxproj @@ -171,7 +171,6 @@ DA7720CF283F184100D3C335 /* NavigationCommands.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationCommands.swift; sourceTree = ""; }; DA97BA892848737C00059FD7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; DA97BA8B2849C0FA00059FD7 /* Cache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cache.swift; sourceTree = ""; }; - DAAA22AA284CF3D100C1975E /* DiscordKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = DiscordKit; path = ../DiscordKit; sourceTree = ""; }; DAAFB5BB282A570D00807B54 /* CircularProgressView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CircularProgressView.swift; sourceTree = ""; }; DAAFB5C0282A64CD00807B54 /* LoFiMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoFiMessageView.swift; sourceTree = ""; }; DAAFB5C2282AA5C700807B54 /* MessageInfoBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageInfoBarView.swift; sourceTree = ""; }; @@ -282,7 +281,6 @@ DA4A887B27C0AF3000720909 = { isa = PBXGroup; children = ( - DAAA22AA284CF3D100C1975E /* DiscordKit */, 36004E1C283D63E500F0BA73 /* .swiftlint.yml */, DA4A888627C0AF3000720909 /* Swiftcord */, DA4A891727C4B0DF00720909 /* README.md */, @@ -970,7 +968,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/SwiftcordApp/DiscordKit"; requirement = { - branch = main; + branch = rearchitect; kind = branch; }; }; diff --git a/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved index 4a69a2ee..659e6048 100644 --- a/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -9,6 +9,15 @@ "version" : "4.4.2" } }, + { + "identity" : "discordkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SwiftcordApp/DiscordKit", + "state" : { + "branch" : "rearchitect", + "revision" : "cb33e3cd621c84a89e326884aa4843a77c9a7611" + } + }, { "identity" : "lottie-ios", "kind" : "remoteSourceControl", @@ -45,15 +54,6 @@ "version" : "2.1.0" } }, - { - "identity" : "swift-docc-plugin", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-docc-plugin", - "state" : { - "revision" : "3303b164430d9a7055ba484c8ead67a52f7b74f6", - "version" : "1.0.0" - } - }, { "identity" : "swiftui-cached-async-image", "kind" : "remoteSourceControl", From b0b7144bbea79bfa90f889621ba65ce88c059e22 Mon Sep 17 00:00:00 2001 From: vinkwok Date: Tue, 7 Jun 2022 21:51:17 +0800 Subject: [PATCH 3/6] Supporting changes for DiscordKit architecture changes --- Swiftcord.xcodeproj/project.pbxproj | 8 ++ .../xcshareddata/swiftpm/Package.resolved | 2 +- Swiftcord/MainScene.swift | 49 ++++++++++ Swiftcord/SwiftcordApp.swift | 17 +++- .../DiscordAPI/Array.Channel+.swift | 2 +- .../Extensions/DiscordAPI/Channel+.swift | 2 +- .../Extensions/DiscordAPI/CurrentUser+.swift | 7 +- .../Utils/Extensions/DiscordAPI/Guild+.swift | 3 +- .../Extensions/DiscordAPI/Message+.swift | 2 +- .../Utils/Extensions/DiscordAPI/User+.swift | 3 +- .../Utils/Extensions/MessagesView+.swift | 5 +- Swiftcord/Utils/Keychain.swift | 90 +++++++++++++++++++ .../MergeStructs/MergePartialMessage.swift | 3 +- Swiftcord/Views/ContentView.swift | 8 +- Swiftcord/Views/Message/AttachmentView.swift | 3 +- Swiftcord/Views/Message/EmbedView.swift | 2 +- Swiftcord/Views/Message/MessageView.swift | 5 +- Swiftcord/Views/Message/MessagesView.swift | 4 +- .../Views/Message/ReferenceMessageView.swift | 2 +- Swiftcord/Views/Message/StickerView.swift | 8 +- Swiftcord/Views/Server/ChannelButton.swift | 2 +- Swiftcord/Views/Server/ChannelList.swift | 2 +- Swiftcord/Views/Server/ServerView.swift | 8 +- Swiftcord/Views/Settings/SettingsView.swift | 2 +- .../User/UserSettingsAccountView.swift | 3 +- .../User/UserSettingsProfileView.swift | 2 +- .../Settings/User/UserSettingsView.swift | 2 +- Swiftcord/Views/User/CurrentUserFooter.swift | 3 +- .../User/Profile/LargeUserProfileView.swift | 2 +- .../User/Profile/MiniUserProfileView.swift | 3 +- .../Views/User/Profile/ProfileBadges.swift | 3 +- Swiftcord/Views/User/UserAvatarView.swift | 4 +- 32 files changed, 209 insertions(+), 52 deletions(-) create mode 100644 Swiftcord/MainScene.swift create mode 100644 Swiftcord/Utils/Keychain.swift diff --git a/Swiftcord.xcodeproj/project.pbxproj b/Swiftcord.xcodeproj/project.pbxproj index 61b6cf5a..8b410429 100644 --- a/Swiftcord.xcodeproj/project.pbxproj +++ b/Swiftcord.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 3684BB59283C696E005045AE /* Sparkle in Frameworks */ = {isa = PBXBuildFile; productRef = 3684BB58283C696E005045AE /* Sparkle */; }; 3684BB5B283C69C5005045AE /* Sparkle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3684BB5A283C69C5005045AE /* Sparkle.swift */; }; 900F6DA1284A1C0C000B6D29 /* GeneratedBuildSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 900F6DA0284A1C0C000B6D29 /* GeneratedBuildSettings.swift */; }; + DA03DA3F284F1E9200257790 /* Keychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA03DA3E284F1E9200257790 /* Keychain.swift */; }; DA2384A127CB9714009E15E0 /* Font+.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA2384A027CB9714009E15E0 /* Font+.swift */; }; DA2384BA27CBC2CE009E15E0 /* GintoBold.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA2384B827CBC2CE009E15E0 /* GintoBold.otf */; }; DA2384BB27CBC2CE009E15E0 /* GintoMedium.otf in Resources */ = {isa = PBXBuildFile; fileRef = DA2384B927CBC2CE009E15E0 /* GintoMedium.otf */; }; @@ -88,6 +89,7 @@ DAAFB5CC282B879200807B54 /* Double+.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAAFB5CB282B879200807B54 /* Double+.swift */; }; DAB6C417284B04DB0066E49D /* DebugSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB6C416284B04DB0066E49D /* DebugSettingsView.swift */; }; DAE557FB282D00B6001F4EF1 /* typing-animation.json in Resources */ = {isa = PBXBuildFile; fileRef = DAE557FA282D00B6001F4EF1 /* typing-animation.json */; }; + DAF68264284F741F00A8BED6 /* MainScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAF68263284F741F00A8BED6 /* MainScene.swift */; }; E7AF1C27282FA3ED001F78DF /* Array.Channel+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7AF1C26282FA3ED001F78DF /* Array.Channel+.swift */; }; E7AF1C29282FA3F7001F78DF /* Channel+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7AF1C28282FA3F7001F78DF /* Channel+.swift */; }; E7AF1C2B282FA400001F78DF /* Guild+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7AF1C2A282FA400001F78DF /* Guild+.swift */; }; @@ -104,6 +106,7 @@ 900F6D9F284A1AE6000B6D29 /* Project Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Project Release.xcconfig"; sourceTree = ""; }; 900F6DA0284A1C0C000B6D29 /* GeneratedBuildSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedBuildSettings.swift; sourceTree = ""; }; 90F77AAA284C87E900166BF3 /* AppCenter.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppCenter.xcconfig; sourceTree = ""; }; + DA03DA3E284F1E9200257790 /* Keychain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Keychain.swift; sourceTree = ""; }; DA23843827CB934D009E15E0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; DA2384A027CB9714009E15E0 /* Font+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Font+.swift"; sourceTree = ""; }; DA2384B827CBC2CE009E15E0 /* GintoBold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = GintoBold.otf; sourceTree = ""; }; @@ -180,6 +183,7 @@ DAAFB5CB282B879200807B54 /* Double+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Double+.swift"; sourceTree = ""; }; DAB6C416284B04DB0066E49D /* DebugSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebugSettingsView.swift; sourceTree = ""; }; DAE557FA282D00B6001F4EF1 /* typing-animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "typing-animation.json"; sourceTree = ""; }; + DAF68263284F741F00A8BED6 /* MainScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainScene.swift; sourceTree = ""; }; E7AF1C26282FA3ED001F78DF /* Array.Channel+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array.Channel+.swift"; sourceTree = ""; }; E7AF1C28282FA3F7001F78DF /* Channel+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Channel+.swift"; sourceTree = ""; }; E7AF1C2A282FA400001F78DF /* Guild+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Guild+.swift"; sourceTree = ""; }; @@ -307,6 +311,7 @@ DA7720CE283F182700D3C335 /* Commands */, DA4A88DC27C3272500720909 /* Utils */, DA32EF6327CB770E00A9ED72 /* DataModels */, + DAF68263284F741F00A8BED6 /* MainScene.swift */, DA4A888727C0AF3000720909 /* SwiftcordApp.swift */, DA2802782808337B00B14E5C /* AppDelegate.swift */, DA4A889027C0AF3200720909 /* Persistence.swift */, @@ -334,6 +339,7 @@ DA54D5822846496900B11857 /* Animation */, DA520AE327D76BF8009FD740 /* Extensions */, DA520AC127D37863009FD740 /* MergeStructs */, + DA03DA3E284F1E9200257790 /* Keychain.swift */, DA4A889B27C0B23C00720909 /* WebView.swift */, DAAFB5C6282AB56B00807B54 /* AudioCenterManager.swift */, 3684BB5A283C69C5005045AE /* Sparkle.swift */, @@ -651,6 +657,7 @@ DA54D57F28460F3A00B11857 /* ReferenceMessageView.swift in Sources */, DA32EF2427C6249000A9ED72 /* MessagesView.swift in Sources */, DA97BA8C2849C0FA00059FD7 /* Cache.swift in Sources */, + DA03DA3F284F1E9200257790 /* Keychain.swift in Sources */, E7AF1C27282FA3ED001F78DF /* Array.Channel+.swift in Sources */, DA520AC327D37873009FD740 /* MergePartialMessage.swift in Sources */, E7AF1C36282FC2E8001F78DF /* NSTextView+.swift in Sources */, @@ -702,6 +709,7 @@ DA32EF2827C633FE00A9ED72 /* UserAvatarView.swift in Sources */, DA585C9927E1F6AC00FA4EE0 /* View+.swift in Sources */, DA32EF4A27C8BE8F00A9ED72 /* Color+.swift in Sources */, + DAF68264284F741F00A8BED6 /* MainScene.swift in Sources */, DA7720D0283F184100D3C335 /* NavigationCommands.swift in Sources */, DAAFB5BC282A570D00807B54 /* CircularProgressView.swift in Sources */, 3684BB5B283C69C5005045AE /* Sparkle.swift in Sources */, diff --git a/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved index 659e6048..9ed5de3a 100644 --- a/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,7 +15,7 @@ "location" : "https://github.com/SwiftcordApp/DiscordKit", "state" : { "branch" : "rearchitect", - "revision" : "cb33e3cd621c84a89e326884aa4843a77c9a7611" + "revision" : "f561dbdd097e93b79d14536f76808d732620243f" } }, { diff --git a/Swiftcord/MainScene.swift b/Swiftcord/MainScene.swift new file mode 100644 index 00000000..601e52b8 --- /dev/null +++ b/Swiftcord/MainScene.swift @@ -0,0 +1,49 @@ +// +// MainScene.swift +// Swiftcord +// +// Created by Vincent Kwok on 7/6/22. +// + +import SwiftUI + +struct MainScene: Scene { + let token: String + + @StateObject var updaterViewModel = UpdaterViewModel() + @EnvironmentObject var state: UIState + + @AppStorage("theme") private var selectedTheme = "system" + + var body: some Scene { + WindowGroup { + ContentView() + .overlay(LoadingView()) + //.environmentObject(gateway) + .environmentObject(state) + // .environment(\.locale, .init(identifier: "zh-Hans")) + // .environment(\.managedObjectContext, persistenceController.container.viewContext) + .preferredColorScheme(selectedTheme == "dark" + ? .dark + : (selectedTheme == "light" ? .light : nil)) + } + .commands { + CommandGroup(after: .appInfo) { + CheckForUpdatesView(updaterViewModel: updaterViewModel) + } + + SidebarCommands() + NavigationCommands() + } + + Settings { + SettingsView() + //.environmentObject(gateway) + .environmentObject(state) + .preferredColorScheme(selectedTheme == "dark" + ? .dark + : (selectedTheme == "light" ? .light : nil)) + // .environment(\.locale, .init(identifier: "zh-Hans")) + } + } +} diff --git a/Swiftcord/SwiftcordApp.swift b/Swiftcord/SwiftcordApp.swift index 0befcba6..8d38aec4 100644 --- a/Swiftcord/SwiftcordApp.swift +++ b/Swiftcord/SwiftcordApp.swift @@ -6,6 +6,7 @@ // import DiscordKit +import DiscordKitCore import SwiftUI // There's probably a better place to put global constants @@ -13,11 +14,13 @@ let appName = Bundle.main.infoDictionary?[kCFBundleNameKey as String] as? String @main struct SwiftcordApp: App { - @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate - let persistenceController = PersistenceController.shared - @StateObject var updaterViewModel = UpdaterViewModel() + static private let tokenKeychainKey = "authToken" + // @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate + // let persistenceController = PersistenceController.shared + @StateObject var updaterViewModel = UpdaterViewModel() @StateObject private var gateway = DiscordGateway() + @StateObject private var restAPI = DiscordREST() @StateObject private var state = UIState() @AppStorage("theme") private var selectedTheme = "system" @@ -28,11 +31,17 @@ struct SwiftcordApp: App { .overlay(LoadingView()) .environmentObject(gateway) .environmentObject(state) + .environmentObject(restAPI) // .environment(\.locale, .init(identifier: "zh-Hans")) - .environment(\.managedObjectContext, persistenceController.container.viewContext) + // .environment(\.managedObjectContext, persistenceController.container.viewContext) .preferredColorScheme(selectedTheme == "dark" ? .dark : (selectedTheme == "light" ? .light : nil)) + .onAppear { + guard let token = Keychain.load(key: SwiftcordApp.tokenKeychainKey) else { return } + gateway.connect(token: token) + restAPI.setToken(token: token) + } } .commands { CommandGroup(after: .appInfo) { diff --git a/Swiftcord/Utils/Extensions/DiscordAPI/Array.Channel+.swift b/Swiftcord/Utils/Extensions/DiscordAPI/Array.Channel+.swift index 6389df57..c2abd7e5 100644 --- a/Swiftcord/Utils/Extensions/DiscordAPI/Array.Channel+.swift +++ b/Swiftcord/Utils/Extensions/DiscordAPI/Array.Channel+.swift @@ -5,7 +5,7 @@ // Created by royal on 14/05/2022. // -import DiscordKitCore +import DiscordKitCommon extension Array where Element == Channel { func discordSorted() -> Self { diff --git a/Swiftcord/Utils/Extensions/DiscordAPI/Channel+.swift b/Swiftcord/Utils/Extensions/DiscordAPI/Channel+.swift index 400461b1..7adc1e1d 100644 --- a/Swiftcord/Utils/Extensions/DiscordAPI/Channel+.swift +++ b/Swiftcord/Utils/Extensions/DiscordAPI/Channel+.swift @@ -5,7 +5,7 @@ // Created by royal on 14/05/2022. // -import DiscordKitCore +import DiscordKitCommon extension Channel { func label(_ users: [Snowflake: User] = [:]) -> String? { diff --git a/Swiftcord/Utils/Extensions/DiscordAPI/CurrentUser+.swift b/Swiftcord/Utils/Extensions/DiscordAPI/CurrentUser+.swift index e6be200f..465673d2 100644 --- a/Swiftcord/Utils/Extensions/DiscordAPI/CurrentUser+.swift +++ b/Swiftcord/Utils/Extensions/DiscordAPI/CurrentUser+.swift @@ -6,15 +6,14 @@ // import Foundation -import DiscordKit -import DiscordKitCore +import DiscordKitCommon extension CurrentUser { func avatarURL(size: Int = 160) -> URL { if let avatar = avatar { - return URL(string: "\(GatewayConfig.default.cdnURL)avatars/\(self.id)/\(avatar).webp?size=\(size)")! + return URL(string: "\(DiscordKitConfig.default.cdnURL)avatars/\(self.id)/\(avatar).webp?size=\(size)")! } else { - return URL(string: "\(GatewayConfig.default.cdnURL)embed/avatars/\((Int(self.discriminator) ?? 0) % 5).png")! + return URL(string: "\(DiscordKitConfig.default.cdnURL)embed/avatars/\((Int(self.discriminator) ?? 0) % 5).png")! } } } diff --git a/Swiftcord/Utils/Extensions/DiscordAPI/Guild+.swift b/Swiftcord/Utils/Extensions/DiscordAPI/Guild+.swift index b8d069d1..eb4eede5 100644 --- a/Swiftcord/Utils/Extensions/DiscordAPI/Guild+.swift +++ b/Swiftcord/Utils/Extensions/DiscordAPI/Guild+.swift @@ -5,8 +5,7 @@ // Created by royal on 14/05/2022. // -import DiscordKit -import DiscordKitCore +import DiscordKitCommon extension Guild { var isDMChannel: Bool { id == "@me" } diff --git a/Swiftcord/Utils/Extensions/DiscordAPI/Message+.swift b/Swiftcord/Utils/Extensions/DiscordAPI/Message+.swift index 6a4037c2..75dc6999 100644 --- a/Swiftcord/Utils/Extensions/DiscordAPI/Message+.swift +++ b/Swiftcord/Utils/Extensions/DiscordAPI/Message+.swift @@ -6,7 +6,7 @@ // import Foundation -import DiscordKitCore +import DiscordKitCommon extension Message { func messageIsShrunk(prev: Message) -> Bool { diff --git a/Swiftcord/Utils/Extensions/DiscordAPI/User+.swift b/Swiftcord/Utils/Extensions/DiscordAPI/User+.swift index 95aa360b..e55566c4 100644 --- a/Swiftcord/Utils/Extensions/DiscordAPI/User+.swift +++ b/Swiftcord/Utils/Extensions/DiscordAPI/User+.swift @@ -6,8 +6,7 @@ // import Foundation -import DiscordKit -import DiscordKitCore +import DiscordKitCommon extension User { func avatarURL(size: Int = 160) -> URL { diff --git a/Swiftcord/Utils/Extensions/MessagesView+.swift b/Swiftcord/Utils/Extensions/MessagesView+.swift index a81a9a2a..ce8a3fef 100644 --- a/Swiftcord/Utils/Extensions/MessagesView+.swift +++ b/Swiftcord/Utils/Extensions/MessagesView+.swift @@ -7,6 +7,7 @@ import Foundation import DiscordKit +import DiscordKitCommon import DiscordKitCore extension MessagesView { @@ -23,7 +24,7 @@ extension MessagesView { fetchMessagesTask = Task { let lastMsg = messages.isEmpty ? nil : messages[messages.count - 1].id - guard let newMessages = await DiscordAPI.getChannelMsgs( + guard let newMessages = await restAPI.getChannelMsgs( id: channel.id, before: lastMsg ) else { @@ -56,7 +57,7 @@ extension MessagesView { newMessage = "" showingInfoBar = false Task { - guard (await DiscordAPI.createChannelMsg( + guard (await restAPI.createChannelMsg( message: NewMessage( content: message, attachments: attachments.isEmpty ? nil : attachments.enumerated() diff --git a/Swiftcord/Utils/Keychain.swift b/Swiftcord/Utils/Keychain.swift new file mode 100644 index 00000000..4ba23e3a --- /dev/null +++ b/Swiftcord/Utils/Keychain.swift @@ -0,0 +1,90 @@ +// +// Keychain.swift +// DiscordKitCommon +// +// Created by Vincent Kwok on 21/2/22. +// +// Adapted from: https://stackoverflow.com/a/37539998 (actually had a Swift 5 example) + +import Foundation +import Security + +public class Keychain { + static let tag = Bundle.main.bundleIdentifier!.data(using: .utf8)! + + @discardableResult + public class func save(key: String, data: String) -> OSStatus { + return save(key: key, data: data.data(using: .utf8)!) + } + + @discardableResult + public class func save(key: String, data: Data) -> OSStatus { + let query = [ + kSecClass as String: kSecClassGenericPassword as String, + kSecAttrAccount as String: "\(Bundle.main.bundleIdentifier!).\(key)", + kSecAttrApplicationTag as String: tag, + kSecValueData as String: data + ] as [String: Any] + + SecItemDelete(query as CFDictionary) + + return SecItemAdd(query as CFDictionary, nil) + } + + @discardableResult + public class func remove(key: String) -> OSStatus { + let query = [ + kSecClass as String: kSecClassGenericPassword as String, + kSecAttrAccount as String: "\(Bundle.main.bundleIdentifier!).\(key)", + kSecAttrApplicationTag as String: tag, + kSecMatchLimit as String: kSecMatchLimitOne + ] as [String: Any] + + return SecItemDelete(query as CFDictionary) + } + + public class func load(key: String) -> String? { + guard let data: Data = loadData(key: key) else { return nil } + return String(data: data, encoding: .utf8) + } + + public class func loadData(key: String) -> Data? { + let query = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrAccount as String: "\(Bundle.main.bundleIdentifier!).\(key)", + kSecReturnData as String: kCFBooleanTrue!, + kSecAttrApplicationTag as String: tag, + kSecMatchLimit as String: kSecMatchLimitOne + ] as [String: Any] + + var dataTypeRef: AnyObject? + + let status: OSStatus = SecItemCopyMatching(query as CFDictionary, &dataTypeRef) + + guard status == noErr else { return nil } + return dataTypeRef as? Data + } + + public class func createUniqueID() -> String { + let uuid: CFUUID = CFUUIDCreate(nil) + let cfStr: CFString = CFUUIDCreateString(nil, uuid) + + let swiftString: String = cfStr as String + return swiftString + } +} + +public extension Data { + init(from value: T) { + var value = value + var d = Data() + withUnsafePointer(to: &value, { (ptr: UnsafePointer) -> Void in + d = Data( buffer: UnsafeBufferPointer(start: ptr, count: 1)) + }) + self.init(d) + } + + func to(type: T.Type) -> T { + return self.withUnsafeBytes { $0.load(as: T.self) } + } +} diff --git a/Swiftcord/Utils/MergeStructs/MergePartialMessage.swift b/Swiftcord/Utils/MergeStructs/MergePartialMessage.swift index f65a3a5a..982e695a 100644 --- a/Swiftcord/Utils/MergeStructs/MergePartialMessage.swift +++ b/Swiftcord/Utils/MergeStructs/MergePartialMessage.swift @@ -8,8 +8,7 @@ // Fields from PartialMessage are favored import Foundation -import DiscordKit -import DiscordKitCore +import DiscordKitCommon extension Message { mutating func mergeWithPartialMsg(_ partial: PartialMessage) { diff --git a/Swiftcord/Views/ContentView.swift b/Swiftcord/Views/ContentView.swift index 66bbd4a1..89d006f9 100644 --- a/Swiftcord/Views/ContentView.swift +++ b/Swiftcord/Views/ContentView.swift @@ -166,7 +166,7 @@ struct ContentView: View { if let token = token { state.attemptLogin = false Keychain.save(key: "authToken", data: token) - gateway.connect() // Reconnect to the socket + gateway.connect(token: token) // Reconnect to the socket } }) .onAppear { @@ -175,7 +175,7 @@ struct ContentView: View { _ = gateway.onAuthFailure.addHandler { state.attemptLogin = true state.loadingState = .initial - log.debug("User isn't logged in, attempting login") + log.debug("Attempting login") } _ = gateway.onEvent.addHandler { (evt, _) in switch evt { @@ -183,7 +183,7 @@ struct ContentView: View { state.loadingState = .gatewayConn fallthrough case .resumed: - gateway.socket.send(op: .voiceStateUpdate, data: GatewayVoiceStateUpdate( + gateway.send(op: .voiceStateUpdate, data: GatewayVoiceStateUpdate( guild_id: nil, channel_id: nil, self_mute: state.selfMute, @@ -193,7 +193,7 @@ struct ContentView: View { default: break } } - _ = gateway.socket.onSessionInvalid.addHandler { state.loadingState = .initial } + _ = gateway.socket?.onSessionInvalid.addHandler { state.loadingState = .initial } } } diff --git a/Swiftcord/Views/Message/AttachmentView.swift b/Swiftcord/Views/Message/AttachmentView.swift index 0174b9ed..6b0e18e0 100644 --- a/Swiftcord/Views/Message/AttachmentView.swift +++ b/Swiftcord/Views/Message/AttachmentView.swift @@ -10,8 +10,7 @@ import SwiftUI import AVKit import CachedAsyncImage import QuickLook -import DiscordKit -import DiscordKitCore +import DiscordKitCommon struct AttachmentError: View { let height: Int diff --git a/Swiftcord/Views/Message/EmbedView.swift b/Swiftcord/Views/Message/EmbedView.swift index baa645b5..97c8ef2c 100644 --- a/Swiftcord/Views/Message/EmbedView.swift +++ b/Swiftcord/Views/Message/EmbedView.swift @@ -7,7 +7,7 @@ import SwiftUI import CachedAsyncImage -import DiscordKitCore +import DiscordKitCommon struct EmbedView: View { let embed: Embed diff --git a/Swiftcord/Views/Message/MessageView.swift b/Swiftcord/Views/Message/MessageView.swift index d9555bf9..09bfd146 100644 --- a/Swiftcord/Views/Message/MessageView.swift +++ b/Swiftcord/Views/Message/MessageView.swift @@ -8,7 +8,7 @@ import SwiftUI import CachedAsyncImage -import DiscordKit +import DiscordKitCommon import DiscordKitCore struct NonUserBadge: View { @@ -49,6 +49,7 @@ struct MessageView: View { @State private var loadQuotedMsgErr = false @EnvironmentObject var serverCtx: ServerContext + @EnvironmentObject var restAPI: DiscordREST public static let supportedTypes: [MessageType] = [.defaultMsg, .reply, .guildMemberJoin] @@ -241,7 +242,7 @@ private extension MessageView { func deleteMessage() { Task { - await DiscordAPI.deleteMsg(id: message.channel_id, msgID: message.id) + await restAPI.deleteMsg(id: message.channel_id, msgID: message.id) } } diff --git a/Swiftcord/Views/Message/MessagesView.swift b/Swiftcord/Views/Message/MessagesView.swift index 8c74c0eb..f584f380 100644 --- a/Swiftcord/Views/Message/MessagesView.swift +++ b/Swiftcord/Views/Message/MessagesView.swift @@ -6,6 +6,7 @@ // import SwiftUI +import DiscordKitCommon import DiscordKit import DiscordKitCore import CachedAsyncImage @@ -101,6 +102,7 @@ struct MessagesView: View { @State private var highlightMsg: Snowflake? @EnvironmentObject var gateway: DiscordGateway + @EnvironmentObject var restAPI: DiscordREST @EnvironmentObject var state: UIState @EnvironmentObject var ctx: ServerContext @@ -209,7 +211,7 @@ struct MessagesView: View { // Send typing start msg once every 8s while typing lastSentTyping = Date() Task { - _ = await DiscordAPI.typingStart(id: ctx.channel!.id) + _ = await restAPI.typingStart(id: ctx.channel!.id) } } } diff --git a/Swiftcord/Views/Message/ReferenceMessageView.swift b/Swiftcord/Views/Message/ReferenceMessageView.swift index 6df018f8..4bdc17f1 100644 --- a/Swiftcord/Views/Message/ReferenceMessageView.swift +++ b/Swiftcord/Views/Message/ReferenceMessageView.swift @@ -6,8 +6,8 @@ // import SwiftUI -import DiscordKit import DiscordKitCore +import DiscordKitCommon import CachedAsyncImage struct ReferenceMessageView: View { diff --git a/Swiftcord/Views/Message/StickerView.swift b/Swiftcord/Views/Message/StickerView.swift index dd31049c..6506f82d 100644 --- a/Swiftcord/Views/Message/StickerView.swift +++ b/Swiftcord/Views/Message/StickerView.swift @@ -7,9 +7,9 @@ import SwiftUI import Lottie -import DiscordKit -import DiscordKitCore +import DiscordKitCommon import CachedAsyncImage +import DiscordKitCore struct StickerLoadingView: View { let size: Double @@ -102,6 +102,8 @@ struct StickerView: View { @State private var error = false @State private var fullSticker: Sticker? @State private var packPresenting = false + + @EnvironmentObject var restAPI: DiscordREST private func openPopoverEvt() { AnalyticsWrapper.event(type: .openPopout, properties: [ @@ -155,7 +157,7 @@ struct StickerView: View { .onHover { isHovered in play = isHovered } .onTapGesture { if fullSticker == nil { Task { - fullSticker = await DiscordAPI.getSticker(id: sticker.id) + fullSticker = await restAPI.getSticker(id: sticker.id) openPopoverEvt() }} else { openPopoverEvt() diff --git a/Swiftcord/Views/Server/ChannelButton.swift b/Swiftcord/Views/Server/ChannelButton.swift index 95c32069..a14faba7 100644 --- a/Swiftcord/Views/Server/ChannelButton.swift +++ b/Swiftcord/Views/Server/ChannelButton.swift @@ -6,8 +6,8 @@ // import SwiftUI +import DiscordKitCommon import DiscordKit -import DiscordKitCore import CachedAsyncImage struct ChannelButton: View { diff --git a/Swiftcord/Views/Server/ChannelList.swift b/Swiftcord/Views/Server/ChannelList.swift index c96d2b8b..a9a44e20 100644 --- a/Swiftcord/Views/Server/ChannelList.swift +++ b/Swiftcord/Views/Server/ChannelList.swift @@ -6,8 +6,8 @@ // import SwiftUI +import DiscordKitCommon import DiscordKit -import DiscordKitCore struct ChannelList: View { let channels: [Channel] diff --git a/Swiftcord/Views/Server/ServerView.swift b/Swiftcord/Views/Server/ServerView.swift index 59a0e530..00864d00 100644 --- a/Swiftcord/Views/Server/ServerView.swift +++ b/Swiftcord/Views/Server/ServerView.swift @@ -6,8 +6,9 @@ // import SwiftUI -import DiscordKitCore import DiscordKit +import DiscordKitCommon +import DiscordKitCore class ServerContext: ObservableObject { @Published public var channel: Channel? @@ -23,6 +24,7 @@ struct ServerView: View { @EnvironmentObject var state: UIState @EnvironmentObject var gateway: DiscordGateway + @EnvironmentObject var restAPI: DiscordREST @EnvironmentObject var audioManager: AudioCenterManager @StateObject private var serverCtx = ServerContext() @@ -63,13 +65,13 @@ struct ServerView: View { ]) // Subscribe to typing events - gateway.socket.send( + gateway.send( op: .subscribeGuildEvents, data: SubscribeGuildEvts(guild_id: guild.id, typing: true) ) // Retrieve guild roles to update context Task { - guard let newRoles = await DiscordAPI.getGuildRoles(id: guild.id) else { return } + guard let newRoles = await restAPI.getGuildRoles(id: guild.id) else { return } serverCtx.roles = newRoles } } diff --git a/Swiftcord/Views/Settings/SettingsView.swift b/Swiftcord/Views/Settings/SettingsView.swift index d531155b..7f0697a8 100644 --- a/Swiftcord/Views/Settings/SettingsView.swift +++ b/Swiftcord/Views/Settings/SettingsView.swift @@ -7,7 +7,7 @@ import SwiftUI import DiscordKit -import DiscordKitCore +import DiscordKitCommon struct SettingsView: View { @EnvironmentObject var gateway: DiscordGateway diff --git a/Swiftcord/Views/Settings/User/UserSettingsAccountView.swift b/Swiftcord/Views/Settings/User/UserSettingsAccountView.swift index 0468e7ac..eb63d4f6 100644 --- a/Swiftcord/Views/Settings/User/UserSettingsAccountView.swift +++ b/Swiftcord/Views/Settings/User/UserSettingsAccountView.swift @@ -6,8 +6,7 @@ // import SwiftUI -import DiscordKit -import DiscordKitCore +import DiscordKitCommon struct UserSettingsAccountView: View { let user: CurrentUser diff --git a/Swiftcord/Views/Settings/User/UserSettingsProfileView.swift b/Swiftcord/Views/Settings/User/UserSettingsProfileView.swift index 47bf87ab..b8f699f7 100644 --- a/Swiftcord/Views/Settings/User/UserSettingsProfileView.swift +++ b/Swiftcord/Views/Settings/User/UserSettingsProfileView.swift @@ -6,7 +6,7 @@ // import SwiftUI -import DiscordKitCore +import DiscordKitCommon struct UserSettingsProfileView: View { let user: CurrentUser diff --git a/Swiftcord/Views/Settings/User/UserSettingsView.swift b/Swiftcord/Views/Settings/User/UserSettingsView.swift index 75805889..05629baa 100644 --- a/Swiftcord/Views/Settings/User/UserSettingsView.swift +++ b/Swiftcord/Views/Settings/User/UserSettingsView.swift @@ -7,7 +7,7 @@ import SwiftUI import DiscordKit -import DiscordKitCore +import DiscordKitCommon struct UserSettingsView: View { let user: CurrentUser diff --git a/Swiftcord/Views/User/CurrentUserFooter.swift b/Swiftcord/Views/User/CurrentUserFooter.swift index 6de744f0..7c622c3b 100644 --- a/Swiftcord/Views/User/CurrentUserFooter.swift +++ b/Swiftcord/Views/User/CurrentUserFooter.swift @@ -8,8 +8,7 @@ import SwiftUI import CachedAsyncImage -import DiscordKit -import DiscordKitCore +import DiscordKitCommon struct CurrentUserFooter: View { let user: CurrentUser diff --git a/Swiftcord/Views/User/Profile/LargeUserProfileView.swift b/Swiftcord/Views/User/Profile/LargeUserProfileView.swift index 25df2029..c0b2252a 100644 --- a/Swiftcord/Views/User/Profile/LargeUserProfileView.swift +++ b/Swiftcord/Views/User/Profile/LargeUserProfileView.swift @@ -7,7 +7,7 @@ import SwiftUI import CachedAsyncImage -import DiscordKitCore +import DiscordKitCommon struct LargeUserProfile: View { let user: CurrentUser diff --git a/Swiftcord/Views/User/Profile/MiniUserProfileView.swift b/Swiftcord/Views/User/Profile/MiniUserProfileView.swift index d794c2ad..a4ae6e77 100644 --- a/Swiftcord/Views/User/Profile/MiniUserProfileView.swift +++ b/Swiftcord/Views/User/Profile/MiniUserProfileView.swift @@ -6,8 +6,7 @@ // import SwiftUI -import DiscordKit -import DiscordKitCore +import DiscordKitCommon import CachedAsyncImage struct MiniUserProfileView: View { diff --git a/Swiftcord/Views/User/Profile/ProfileBadges.swift b/Swiftcord/Views/User/Profile/ProfileBadges.swift index a37a1fa9..846d0c9e 100644 --- a/Swiftcord/Views/User/Profile/ProfileBadges.swift +++ b/Swiftcord/Views/User/Profile/ProfileBadges.swift @@ -5,8 +5,7 @@ // Created by Vincent Kwok on 30/5/22. // -import DiscordKit -import DiscordKitCore +import DiscordKitCommon import SwiftUI struct ProfileBadges: View, Equatable { diff --git a/Swiftcord/Views/User/UserAvatarView.swift b/Swiftcord/Views/User/UserAvatarView.swift index 36f36d96..3eb5545f 100644 --- a/Swiftcord/Views/User/UserAvatarView.swift +++ b/Swiftcord/Views/User/UserAvatarView.swift @@ -7,6 +7,7 @@ import SwiftUI import CachedAsyncImage +import DiscordKitCommon import DiscordKitCore import DiscordKit @@ -22,6 +23,7 @@ struct UserAvatarView: View, Equatable { @EnvironmentObject var ctx: ServerContext @EnvironmentObject var gateway: DiscordGateway + @EnvironmentObject var restAPI: DiscordREST static private let profileCache = Cache() @@ -60,7 +62,7 @@ struct UserAvatarView: View, Equatable { webhookID == nil, guildID != "@me" || profile?.user == nil { Task { - guard let loadedProfile = await DiscordAPI.getProfile( + guard let loadedProfile = await restAPI.getProfile( user: user.id, guildID: guildID == "@me" ? nil : guildID ) else { // Profile is still nil: fetching failed From 9b21f4f75c69a99b116afc165c10b55c972a7efd Mon Sep 17 00:00:00 2001 From: vinkwok Date: Wed, 8 Jun 2022 10:42:08 +0800 Subject: [PATCH 4/6] Fix logging in with new DiscordKit architecture --- Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- Swiftcord/SwiftcordApp.swift | 5 ++++- Swiftcord/Views/ContentView.swift | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved index 9ed5de3a..d3603ea7 100644 --- a/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,7 +15,7 @@ "location" : "https://github.com/SwiftcordApp/DiscordKit", "state" : { "branch" : "rearchitect", - "revision" : "f561dbdd097e93b79d14536f76808d732620243f" + "revision" : "674cfdc99c02c78078c3c6a16ff028ab5968a9f2" } }, { diff --git a/Swiftcord/SwiftcordApp.swift b/Swiftcord/SwiftcordApp.swift index 8d38aec4..c623ad7b 100644 --- a/Swiftcord/SwiftcordApp.swift +++ b/Swiftcord/SwiftcordApp.swift @@ -38,7 +38,10 @@ struct SwiftcordApp: App { ? .dark : (selectedTheme == "light" ? .light : nil)) .onAppear { - guard let token = Keychain.load(key: SwiftcordApp.tokenKeychainKey) else { return } + guard let token = Keychain.load(key: SwiftcordApp.tokenKeychainKey) else { + state.attemptLogin = true + return + } gateway.connect(token: token) restAPI.setToken(token: token) } diff --git a/Swiftcord/Views/ContentView.swift b/Swiftcord/Views/ContentView.swift index 89d006f9..6b8fc800 100644 --- a/Swiftcord/Views/ContentView.swift +++ b/Swiftcord/Views/ContentView.swift @@ -34,6 +34,7 @@ struct ContentView: View { @StateObject private var audioManager = AudioCenterManager() @EnvironmentObject var gateway: DiscordGateway + @EnvironmentObject var restAPI: DiscordREST @EnvironmentObject var state: UIState private let log = Logger(category: "ContentView") @@ -166,7 +167,8 @@ struct ContentView: View { if let token = token { state.attemptLogin = false Keychain.save(key: "authToken", data: token) - gateway.connect(token: token) // Reconnect to the socket + gateway.connect(token: token) // Reconnect to the socket with the new token + restAPI.setToken(token: token) } }) .onAppear { From 3204bfcf284de0218fae61ece5ca15242cd098ca Mon Sep 17 00:00:00 2001 From: vinkwok Date: Fri, 10 Jun 2022 11:20:05 +0800 Subject: [PATCH 5/6] Replace hardcoded keychain key with constant Fixed some swiftlint warnings --- Swiftcord.xcodeproj/project.pbxproj | 4 -- .../xcshareddata/swiftpm/Package.resolved | 2 +- Swiftcord/MainScene.swift | 49 ------------------- Swiftcord/SwiftcordApp.swift | 2 +- Swiftcord/Utils/Keychain.swift | 6 +-- Swiftcord/Views/ContentView.swift | 2 +- Swiftcord/Views/Message/StickerView.swift | 2 +- 7 files changed, 7 insertions(+), 60 deletions(-) delete mode 100644 Swiftcord/MainScene.swift diff --git a/Swiftcord.xcodeproj/project.pbxproj b/Swiftcord.xcodeproj/project.pbxproj index 8b410429..50203e24 100644 --- a/Swiftcord.xcodeproj/project.pbxproj +++ b/Swiftcord.xcodeproj/project.pbxproj @@ -89,7 +89,6 @@ DAAFB5CC282B879200807B54 /* Double+.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAAFB5CB282B879200807B54 /* Double+.swift */; }; DAB6C417284B04DB0066E49D /* DebugSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB6C416284B04DB0066E49D /* DebugSettingsView.swift */; }; DAE557FB282D00B6001F4EF1 /* typing-animation.json in Resources */ = {isa = PBXBuildFile; fileRef = DAE557FA282D00B6001F4EF1 /* typing-animation.json */; }; - DAF68264284F741F00A8BED6 /* MainScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAF68263284F741F00A8BED6 /* MainScene.swift */; }; E7AF1C27282FA3ED001F78DF /* Array.Channel+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7AF1C26282FA3ED001F78DF /* Array.Channel+.swift */; }; E7AF1C29282FA3F7001F78DF /* Channel+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7AF1C28282FA3F7001F78DF /* Channel+.swift */; }; E7AF1C2B282FA400001F78DF /* Guild+.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7AF1C2A282FA400001F78DF /* Guild+.swift */; }; @@ -183,7 +182,6 @@ DAAFB5CB282B879200807B54 /* Double+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Double+.swift"; sourceTree = ""; }; DAB6C416284B04DB0066E49D /* DebugSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebugSettingsView.swift; sourceTree = ""; }; DAE557FA282D00B6001F4EF1 /* typing-animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "typing-animation.json"; sourceTree = ""; }; - DAF68263284F741F00A8BED6 /* MainScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainScene.swift; sourceTree = ""; }; E7AF1C26282FA3ED001F78DF /* Array.Channel+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array.Channel+.swift"; sourceTree = ""; }; E7AF1C28282FA3F7001F78DF /* Channel+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Channel+.swift"; sourceTree = ""; }; E7AF1C2A282FA400001F78DF /* Guild+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Guild+.swift"; sourceTree = ""; }; @@ -311,7 +309,6 @@ DA7720CE283F182700D3C335 /* Commands */, DA4A88DC27C3272500720909 /* Utils */, DA32EF6327CB770E00A9ED72 /* DataModels */, - DAF68263284F741F00A8BED6 /* MainScene.swift */, DA4A888727C0AF3000720909 /* SwiftcordApp.swift */, DA2802782808337B00B14E5C /* AppDelegate.swift */, DA4A889027C0AF3200720909 /* Persistence.swift */, @@ -709,7 +706,6 @@ DA32EF2827C633FE00A9ED72 /* UserAvatarView.swift in Sources */, DA585C9927E1F6AC00FA4EE0 /* View+.swift in Sources */, DA32EF4A27C8BE8F00A9ED72 /* Color+.swift in Sources */, - DAF68264284F741F00A8BED6 /* MainScene.swift in Sources */, DA7720D0283F184100D3C335 /* NavigationCommands.swift in Sources */, DAAFB5BC282A570D00807B54 /* CircularProgressView.swift in Sources */, 3684BB5B283C69C5005045AE /* Sparkle.swift in Sources */, diff --git a/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved index d3603ea7..104d3cf1 100644 --- a/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,7 +15,7 @@ "location" : "https://github.com/SwiftcordApp/DiscordKit", "state" : { "branch" : "rearchitect", - "revision" : "674cfdc99c02c78078c3c6a16ff028ab5968a9f2" + "revision" : "c0334e29bcf5548dfe54b3d0a7b0df9af27c86eb" } }, { diff --git a/Swiftcord/MainScene.swift b/Swiftcord/MainScene.swift deleted file mode 100644 index 601e52b8..00000000 --- a/Swiftcord/MainScene.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// MainScene.swift -// Swiftcord -// -// Created by Vincent Kwok on 7/6/22. -// - -import SwiftUI - -struct MainScene: Scene { - let token: String - - @StateObject var updaterViewModel = UpdaterViewModel() - @EnvironmentObject var state: UIState - - @AppStorage("theme") private var selectedTheme = "system" - - var body: some Scene { - WindowGroup { - ContentView() - .overlay(LoadingView()) - //.environmentObject(gateway) - .environmentObject(state) - // .environment(\.locale, .init(identifier: "zh-Hans")) - // .environment(\.managedObjectContext, persistenceController.container.viewContext) - .preferredColorScheme(selectedTheme == "dark" - ? .dark - : (selectedTheme == "light" ? .light : nil)) - } - .commands { - CommandGroup(after: .appInfo) { - CheckForUpdatesView(updaterViewModel: updaterViewModel) - } - - SidebarCommands() - NavigationCommands() - } - - Settings { - SettingsView() - //.environmentObject(gateway) - .environmentObject(state) - .preferredColorScheme(selectedTheme == "dark" - ? .dark - : (selectedTheme == "light" ? .light : nil)) - // .environment(\.locale, .init(identifier: "zh-Hans")) - } - } -} diff --git a/Swiftcord/SwiftcordApp.swift b/Swiftcord/SwiftcordApp.swift index c623ad7b..ee0ad243 100644 --- a/Swiftcord/SwiftcordApp.swift +++ b/Swiftcord/SwiftcordApp.swift @@ -14,7 +14,7 @@ let appName = Bundle.main.infoDictionary?[kCFBundleNameKey as String] as? String @main struct SwiftcordApp: App { - static private let tokenKeychainKey = "authToken" + static internal let tokenKeychainKey = "authToken" // @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate // let persistenceController = PersistenceController.shared diff --git a/Swiftcord/Utils/Keychain.swift b/Swiftcord/Utils/Keychain.swift index 4ba23e3a..b0f4b2fe 100644 --- a/Swiftcord/Utils/Keychain.swift +++ b/Swiftcord/Utils/Keychain.swift @@ -77,11 +77,11 @@ public class Keychain { public extension Data { init(from value: T) { var value = value - var d = Data() + var tempData = Data() withUnsafePointer(to: &value, { (ptr: UnsafePointer) -> Void in - d = Data( buffer: UnsafeBufferPointer(start: ptr, count: 1)) + tempData = Data( buffer: UnsafeBufferPointer(start: ptr, count: 1)) }) - self.init(d) + self.init(tempData) } func to(type: T.Type) -> T { diff --git a/Swiftcord/Views/ContentView.swift b/Swiftcord/Views/ContentView.swift index 6b8fc800..e6b8c28c 100644 --- a/Swiftcord/Views/ContentView.swift +++ b/Swiftcord/Views/ContentView.swift @@ -166,7 +166,7 @@ struct ContentView: View { .onChange(of: loginWVModel.token, perform: { token in if let token = token { state.attemptLogin = false - Keychain.save(key: "authToken", data: token) + Keychain.save(key: SwiftcordApp.tokenKeychainKey, data: token) gateway.connect(token: token) // Reconnect to the socket with the new token restAPI.setToken(token: token) } diff --git a/Swiftcord/Views/Message/StickerView.swift b/Swiftcord/Views/Message/StickerView.swift index 6506f82d..8e50da41 100644 --- a/Swiftcord/Views/Message/StickerView.swift +++ b/Swiftcord/Views/Message/StickerView.swift @@ -102,7 +102,7 @@ struct StickerView: View { @State private var error = false @State private var fullSticker: Sticker? @State private var packPresenting = false - + @EnvironmentObject var restAPI: DiscordREST private func openPopoverEvt() { From 5ec773f2d47b76665ae3358c836c9e286bfae657 Mon Sep 17 00:00:00 2001 From: vinkwok Date: Tue, 14 Jun 2022 20:02:28 +0800 Subject: [PATCH 6/6] Rely on main branch of DiscordKit after merging breaking PR --- Swiftcord.xcodeproj/project.pbxproj | 2 +- Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Swiftcord.xcodeproj/project.pbxproj b/Swiftcord.xcodeproj/project.pbxproj index 50203e24..65b66db9 100644 --- a/Swiftcord.xcodeproj/project.pbxproj +++ b/Swiftcord.xcodeproj/project.pbxproj @@ -972,7 +972,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/SwiftcordApp/DiscordKit"; requirement = { - branch = rearchitect; + branch = main; kind = branch; }; }; diff --git a/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved index 104d3cf1..459f1a45 100644 --- a/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Swiftcord.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -14,8 +14,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/SwiftcordApp/DiscordKit", "state" : { - "branch" : "rearchitect", - "revision" : "c0334e29bcf5548dfe54b3d0a7b0df9af27c86eb" + "branch" : "main", + "revision" : "213e0b8817f56cb7cf7fe03443386c330d59009d" } }, {