@@ -8,13 +8,16 @@ final class WidgetDataSource {
88
99 var globalChat : ChatService ?
1010 var chats = [ URL: ChatService] ( )
11+ var globalChatProvider : ChatProvider ?
12+ var chatProviders = [ URL: ChatProvider] ( )
1113
1214 private init ( ) { }
1315
1416 @discardableResult
1517 func createChatIfNeeded( for url: URL ) -> ChatService {
1618 let useGlobalChat = UserDefaults . shared. value ( for: \. useGlobalChat)
1719 let chat : ChatService
20+
1821 if useGlobalChat {
1922 chat = globalChat ?? ChatService ( chatGPTService: ChatGPTService ( ) )
2023 globalChat = chat
@@ -77,8 +80,10 @@ extension WidgetDataSource: SuggestionWidgetDataSource {
7780 onCloseChat: { [ weak self] in
7881 if UserDefaults . shared. value ( for: \. useGlobalChat) {
7982 self ? . globalChat = nil
83+ self ? . globalChatProvider = nil
8084 } else {
8185 self ? . chats [ url] = nil
86+ self ? . chatProviders [ url] = nil
8287 }
8388 let presenter = PresentInWindowSuggestionPresenter ( )
8489 presenter. closeChatRoom ( fileURL: url)
@@ -94,12 +99,20 @@ extension WidgetDataSource: SuggestionWidgetDataSource {
9499 }
95100
96101 if useGlobalChat {
97- if let globalChat {
98- return buildChatProvider ( globalChat)
102+ if let globalChatProvider {
103+ return globalChatProvider
104+ } else if let globalChat {
105+ let new = buildChatProvider ( globalChat)
106+ self . globalChatProvider = new
107+ return new
99108 }
100109 } else {
101- if let service = chats [ url] {
102- return buildChatProvider ( service)
110+ if let provider = chatProviders [ url] {
111+ return provider
112+ } else if let service = chats [ url] {
113+ let new = buildChatProvider ( service)
114+ self . chatProviders [ url] = new
115+ return new
103116 }
104117 }
105118
0 commit comments