@@ -4,7 +4,6 @@ import Combine
44
55class CardViewModel : ObservableObject {
66 @Published var currentCard : Card ?
7- @Published var isLoading = false
87 @Published var errorMessage : String ?
98 @Published var isGeneratingCard = false
109 @Published var generationProgress : String = " " // 生成プロセスの進行状況を表示
@@ -22,60 +21,6 @@ class CardViewModel: ObservableObject {
2221 return Array ( cards [ startIndex..< endIndex] )
2322 }
2423
25- @MainActor
26- func loadCards( ) async {
27- isLoading = true
28- errorMessage = nil
29-
30- guard let accessToken = keychainHelper. getAccessToken ( ) else {
31- errorMessage = " アクセストークンが見つかりません。ログインしてください。 "
32- isLoading = false
33- return
34- }
35-
36- let fetchedCards = await tRPCService. shared. fetchActiveTasks ( token: accessToken)
37- print ( " 📥 APIから \( fetchedCards. count) 件のタスクを取得しました " )
38-
39- // 画像生成
40- await generateImagesForCards ( fetchedCards)
41-
42- cards = fetchedCards
43- currentCard = cards. first
44-
45- isLoading = false
46- }
47-
48- /// APIから取得したカードに画像を生成する
49- @MainActor
50- private func generateImagesForCards( _ cardsToUpdate: [ Card ] ) async {
51- for i in 0 ..< cardsToUpdate. count {
52- let card = cardsToUpdate [ i]
53- // 画像URLが空または存在しない場合は生成
54- if card. imageURL. isEmpty {
55- let taskName = card. displayName
56- let emoji = emojiSelector. selectEmojiWithPriority ( for: taskName)
57- if let imagePath = await imageGenerator. generateTaskImage ( taskText: taskName, emoji: emoji) {
58- // imageURLを更新
59- let updatedCard = Card (
60- id: card. id,
61- imageURL: imagePath,
62- taskText: taskName,
63- emoji: emoji,
64- title: card. title,
65- userId: card. userId,
66- projectId: card. projectId,
67- name: card. name,
68- date: card. date,
69- status: card. status,
70- priority: card. priority,
71- parentId: card. parentId
72- )
73- cards [ i] = updatedCard
74- }
75- }
76- }
77- }
78-
7924 @MainActor
8025 func handleSwipe( direction: SwipeDirection ) {
8126 guard let card = currentCard else { return }
@@ -103,6 +48,8 @@ class CardViewModel: ObservableObject {
10348 let result = await tRPCService. shared. splitTaskAI ( taskId: card. id, token: accessToken)
10449 print ( " ✂️ [API Mode] タスク分割成功: " )
10550 print ( result)
51+
52+
10653
10754 // 現在のカードを削除
10855 moveToNextCard ( )
@@ -133,13 +80,8 @@ class CardViewModel: ObservableObject {
13380 cards. remove ( at: index)
13481 }
13582
136- if cards. isEmpty {
137- Task {
138- await loadCards ( )
139- }
140- } else {
141- currentCard = cards. first
142- }
83+ // 次のカードを設定(空の場合はnil)
84+ currentCard = cards. first
14385 }
14486
14587 @MainActor
@@ -168,48 +110,56 @@ class CardViewModel: ObservableObject {
168110 isGeneratingCard = true
169111 errorMessage = nil
170112
171- // ステップ1: 絵文字を選択
172- generationProgress = " 絵文字を選択中... "
173- let emoji = emojiSelector. selectEmojiWithPriority ( for: taskText)
174-
175- // ステップ2: 翻訳と画像を生成
176- generationProgress = " 画像を生成中... "
177- print ( " 🎨 画像生成開始: \( taskText) " )
178- guard let imagePath = await imageGenerator. generateTaskImage ( taskText: taskText, emoji: emoji) else {
179- errorMessage = " 画像の生成に失敗しました。再度お試しください。 "
180- print ( " ❌ 画像生成失敗: \( taskText) " )
113+ // ステップ1: バックエンドにタスクを作成
114+ generationProgress = " タスクを保存中... "
115+ guard let accessToken = keychainHelper. getAccessToken ( ) else {
116+ errorMessage = " アクセストークンが見つかりません。ログインしてください。 "
181117 isGeneratingCard = false
182118 generationProgress = " "
183119 return
184120 }
185- print ( " ✅ 画像生成成功: \( imagePath) " )
186121
187- // ステップ3: バックエンドにタスクを作成
188- generationProgress = " タスクを保存中... "
189- guard let accessToken = keychainHelper. getAccessToken ( ) else {
190- errorMessage = " アクセストークンが見つかりません。ログインしてください。 "
122+ guard var newCard = await tRPCService. shared. projectCreateTask ( projectName: taskText, TaskName: taskText, token: accessToken) else {
123+ errorMessage = " タスクの作成に失敗しました。 "
191124 isGeneratingCard = false
192125 generationProgress = " "
193126 return
194127 }
195128
196- guard let taskId = await tRPCService. shared. projectCreateTask ( projectName: taskText, TaskName: taskText, token: accessToken) else {
197- errorMessage = " タスクの作成に失敗しました。 "
129+ // ステップ2: 絵文字を選択
130+ generationProgress = " 絵文字を選択中... "
131+ let emoji = emojiSelector. selectEmojiWithPriority ( for: taskText)
132+
133+ // ステップ3: 画像を生成
134+ generationProgress = " 画像を生成中... "
135+ print ( " 🎨 画像生成開始: \( taskText) " )
136+ guard let imagePath = await imageGenerator. generateTaskImage ( taskText: taskText, emoji: emoji) else {
137+ errorMessage = " 画像の生成に失敗しました。再度お試しください。 "
138+ print ( " ❌ 画像生成失敗: \( taskText) " )
198139 isGeneratingCard = false
199140 generationProgress = " "
200141 return
201142 }
143+ print ( " ✅ 画像生成成功: \( imagePath) " )
202144
203- // ステップ4: 作成したタスクをカードスタックに追加
204- let newCard = Card (
205- id: taskId ,
145+ // ステップ4: 画像とemoji情報を追加してカードを更新
146+ let cardWithImage = Card (
147+ id: newCard . id ,
206148 imageURL: imagePath,
207149 taskText: taskText,
208150 emoji: emoji,
209- title: taskText,
210- name: taskText
151+ title: newCard. title,
152+ userId: newCard. userId,
153+ projectId: newCard. projectId,
154+ name: newCard. name,
155+ date: newCard. date,
156+ status: newCard. status,
157+ priority: newCard. priority,
158+ parentId: newCard. parentId
211159 )
212- cards. insert ( newCard, at: 0 )
160+
161+ // ステップ5: カードスタックに追加
162+ cards. insert ( cardWithImage, at: 0 )
213163 currentCard = cards. first
214164 print ( " ✅ タスクカード追加成功: \( taskText) " )
215165
0 commit comments