@@ -7,9 +7,9 @@ import { type UpdateManifest, installUpdate } from '@tauri-apps/api/updater'
7
7
import { relaunch } from '@tauri-apps/api/process'
8
8
import { computedEager } from '@vueuse/core'
9
9
import { type Thread , getNotifications , markNotificationAsRead , unsubscribeNotification } from '../api/notifications'
10
- import { CheckedNotificationProcess , ColorPreference , InvokeCommand , Page , notificationApiMutex , prefersDark } from '../constants'
10
+ import { ColorPreference , InvokeCommand , Page , notificationApiMutex , prefersDark } from '../constants'
11
11
import { AppStorage } from '../storage'
12
- import type { NotificationList , Option , PageState } from '../types'
12
+ import type { AppStorageContext , NotificationList , Option , PageState } from '../types'
13
13
import { filterNewThreads , isRepository , isThread , toNotificationList } from '../utils/notification'
14
14
15
15
export const useStore = defineStore ( 'store' , ( ) => {
@@ -124,40 +124,62 @@ export const useStore = defineStore('store', () => {
124
124
return notifications . value . findIndex ( ( { id } ) => id === thread . id )
125
125
}
126
126
127
- function processCheckedNotifications ( process : CheckedNotificationProcess ) {
128
- return notificationApiMutex . runExclusive ( async ( ) => {
129
- const deletedThreads : Thread [ 'id' ] [ ] = [ ]
130
- const checkedThreads = checkedItems . value
131
- const snapshot = notifications . value . slice ( 0 )
132
- const accessToken = AppStorage . get ( 'accessToken' ) !
127
+ async function markCheckedNotificationsAsRead ( accessToken : NonNullable < AppStorageContext [ 'accessToken' ] > ) {
128
+ const deletedThreads : Thread [ 'id' ] [ ] = [ ]
129
+ const checkedThreads = checkedItems . value
130
+ const snapshot = notifications . value . slice ( 0 )
131
+
132
+ checkedThreads . forEach ( item => removeNotificationById ( item . id ) )
133
+ triggerRef ( notifications )
133
134
134
- checkedThreads . forEach ( item => removeNotificationById ( item . id ) )
135
+ checkedItems . value = [ ]
136
+
137
+ try {
138
+ await notificationApiMutex . runExclusive ( ( ) => pAll (
139
+ checkedThreads . map ( thread => async ( ) => {
140
+ await markNotificationAsRead ( thread . id , accessToken )
141
+ deletedThreads . push ( thread . id )
142
+ } ) ,
143
+ {
144
+ stopOnError : false ,
145
+ concurrency : 7 ,
146
+ } ,
147
+ ) )
148
+ }
149
+ catch ( error ) {
150
+ notifications . value = snapshot
151
+ deletedThreads . forEach ( id => removeNotificationById ( id ) )
135
152
triggerRef ( notifications )
153
+ }
154
+ }
136
155
137
- checkedItems . value = [ ]
156
+ async function unsubscribeCheckedNotifications ( accessToken : NonNullable < AppStorageContext [ 'accessToken' ] > ) {
157
+ const deletedThreads : Thread [ 'id' ] [ ] = [ ]
158
+ const checkedThreads = checkedItems . value
159
+ const snapshot = notifications . value . slice ( 0 )
138
160
139
- try {
140
- await pAll (
141
- checkedThreads . map ( thread => async ( ) => {
142
- if ( process === CheckedNotificationProcess . MarkAsRead )
143
- await markNotificationAsRead ( thread . id , accessToken )
144
- else if ( process === CheckedNotificationProcess . Unsubscribe )
145
- await unsubscribeNotification ( thread . id , accessToken )
146
-
147
- deletedThreads . push ( thread . id )
148
- } ) ,
149
- {
150
- stopOnError : false ,
151
- concurrency : 7 ,
152
- } ,
153
- )
154
- }
155
- catch ( error ) {
156
- notifications . value = snapshot
157
- deletedThreads . forEach ( id => removeNotificationById ( id ) )
158
- triggerRef ( notifications )
159
- }
160
- } )
161
+ checkedItems . value = [ ]
162
+
163
+ checkedThreads . forEach ( item => removeNotificationById ( item . id ) )
164
+ triggerRef ( notifications )
165
+
166
+ try {
167
+ await notificationApiMutex . runExclusive ( ( ) => pAll (
168
+ checkedThreads . map ( thread => async ( ) => {
169
+ await unsubscribeNotification ( thread . id , accessToken )
170
+ deletedThreads . push ( thread . id )
171
+ } ) ,
172
+ {
173
+ stopOnError : false ,
174
+ concurrency : 7 ,
175
+ } ,
176
+ ) )
177
+ }
178
+ catch ( error ) {
179
+ notifications . value = snapshot
180
+ deletedThreads . forEach ( id => removeNotificationById ( id ) )
181
+ triggerRef ( notifications )
182
+ }
161
183
}
162
184
163
185
const newRelease = ref < Option < UpdateManifest > > ( null )
@@ -207,11 +229,12 @@ export const useStore = defineStore('store', () => {
207
229
installingUpate,
208
230
theme,
209
231
updateAndRestart,
232
+ unsubscribeCheckedNotifications,
210
233
removeNotificationById,
211
234
findThreadIndex,
235
+ markCheckedNotificationsAsRead,
212
236
setPage,
213
237
fetchNotifications,
214
- processCheckedNotifications,
215
238
logout,
216
239
}
217
240
} )
0 commit comments