Skip to content

Commit a965b79

Browse files
committed
Connect GUI to ChatTabPersistent
1 parent 72e81ac commit a965b79

File tree

3 files changed

+57
-3
lines changed

3 files changed

+57
-3
lines changed

Core/Sources/Service/GUI/GraphicalUserInterfaceController.swift

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,21 @@ struct GUI: ReducerProtocol {
151151
}
152152
}
153153

154-
case .suggestionWidget(.chatPanel(.chatTab(_, .tabContentUpdated))):
154+
case let .suggestionWidget(.chatPanel(.chatTab(id, .tabContentUpdated))):
155155
#if canImport(ChatTabPersistent)
156+
// when a tab is updated, persist it.
156157
return .run { send in
157-
await send(.persistent(.persistChatTabs))
158+
await send(.persistent(.chatTabUpdated(id: id)))
159+
}
160+
#else
161+
return .none
162+
#endif
163+
164+
case let .suggestionWidget(.chatPanel(.closeTabButtonClicked(id))):
165+
#if canImport(ChatTabPersistent)
166+
// when a tab is closed, remove it from persistence.
167+
return .run { send in
168+
await send(.persistent(.chatTabClosed(id: id)))
158169
}
159170
#else
160171
return .none
@@ -193,6 +204,10 @@ public final class GraphicalUserInterfaceController {
193204
dependencies.suggestionWidgetUserDefaultsObservers = .init()
194205
dependencies.chatTabPool = chatTabPool
195206
dependencies.chatTabBuilderCollection = ChatTabFactory.chatTabBuilderCollection
207+
208+
#if canImport(ChatTabPersistent) && canImport(ProChatTab)
209+
dependencies.restoreChatTabInPool = chatTabPool.restore
210+
#endif
196211
}
197212
let store = StoreOf<GUI>(
198213
initialState: .init(),
@@ -276,5 +291,37 @@ extension ChatTabPool {
276291
setTab(chatTap)
277292
return (chatTap, info)
278293
}
294+
295+
#if canImport(ChatTabPersistent) && canImport(ProChatTab)
296+
@MainActor
297+
func restore(
298+
_ data: ChatTabPersistent.RestorableTabData
299+
) async throws -> (any ChatTab, ChatTabInfo)? {
300+
let info = ChatTabInfo(id: data.id, title: "")
301+
switch data.name {
302+
case ChatGPTChatTab.name:
303+
guard let builder = try? await ChatGPTChatTab.restore(
304+
from: data.data,
305+
externalDependency: ()
306+
) else { break }
307+
return createTab(from: builder)
308+
case BrowserChatTab.name:
309+
guard let builder = try? await BrowserChatTab.restore(
310+
from: data.data,
311+
externalDependency: ()
312+
) else { break }
313+
return createTab(from: builder)
314+
default:
315+
break
316+
}
317+
318+
guard let builder = try? await EmptyChatTab.restore(
319+
from: data.data, externalDependency: ()
320+
) else {
321+
return nil
322+
}
323+
return createTab(for: builder)
324+
}
325+
#endif
279326
}
280327

Pro

Submodule Pro updated from 1b8c6ab to 18b9066

TestPlan.xctestplan

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,13 @@
119119
"identifier" : "ASTParserTests",
120120
"name" : "ASTParserTests"
121121
}
122+
},
123+
{
124+
"target" : {
125+
"containerPath" : "container:Pro",
126+
"identifier" : "ChatTabPersistentTests",
127+
"name" : "ChatTabPersistentTests"
128+
}
122129
}
123130
],
124131
"version" : 1

0 commit comments

Comments
 (0)