forked from cybrespace/pinafore
		
	
		
			
				
	
	
		
			84 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { dbPromise, getDatabase } from '../databaseLifecycle'
 | 
						|
import {
 | 
						|
  deleteFromCache, notificationsCache,
 | 
						|
  statusesCache
 | 
						|
} from '../cache'
 | 
						|
import {
 | 
						|
  NOTIFICATION_TIMELINES_STORE,
 | 
						|
  NOTIFICATIONS_STORE, PINNED_STATUSES_STORE,
 | 
						|
  STATUS_TIMELINES_STORE,
 | 
						|
  STATUSES_STORE,
 | 
						|
  THREADS_STORE
 | 
						|
} from '../constants'
 | 
						|
import {
 | 
						|
  createThreadKeyRange
 | 
						|
} from '../keys'
 | 
						|
import { deleteAll } from '../utils'
 | 
						|
 | 
						|
export async function deleteStatusesAndNotifications (instanceName, statusIds, notificationIds) {
 | 
						|
  for (let statusId of statusIds) {
 | 
						|
    deleteFromCache(statusesCache, instanceName, statusId)
 | 
						|
  }
 | 
						|
  for (let notificationId of notificationIds) {
 | 
						|
    deleteFromCache(notificationsCache, instanceName, notificationId)
 | 
						|
  }
 | 
						|
  const db = await getDatabase(instanceName)
 | 
						|
  let storeNames = [
 | 
						|
    STATUSES_STORE,
 | 
						|
    STATUS_TIMELINES_STORE,
 | 
						|
    NOTIFICATIONS_STORE,
 | 
						|
    NOTIFICATION_TIMELINES_STORE,
 | 
						|
    PINNED_STATUSES_STORE,
 | 
						|
    THREADS_STORE
 | 
						|
  ]
 | 
						|
  await dbPromise(db, storeNames, 'readwrite', (stores) => {
 | 
						|
    let [
 | 
						|
      statusesStore,
 | 
						|
      statusTimelinesStore,
 | 
						|
      notificationsStore,
 | 
						|
      notificationTimelinesStore,
 | 
						|
      pinnedStatusesStore,
 | 
						|
      threadsStore
 | 
						|
    ] = stores
 | 
						|
 | 
						|
    function deleteStatus (statusId) {
 | 
						|
      statusesStore.delete(statusId)
 | 
						|
      deleteAll(
 | 
						|
        pinnedStatusesStore,
 | 
						|
        pinnedStatusesStore.index('statusId'),
 | 
						|
        IDBKeyRange.only(statusId)
 | 
						|
      )
 | 
						|
      deleteAll(
 | 
						|
        statusTimelinesStore,
 | 
						|
        statusTimelinesStore.index('statusId'),
 | 
						|
        IDBKeyRange.only(statusId)
 | 
						|
      )
 | 
						|
      deleteAll(
 | 
						|
        threadsStore,
 | 
						|
        threadsStore.index('statusId'),
 | 
						|
        IDBKeyRange.only(statusId)
 | 
						|
      )
 | 
						|
      deleteAll(
 | 
						|
        threadsStore,
 | 
						|
        threadsStore,
 | 
						|
        createThreadKeyRange(statusId)
 | 
						|
      )
 | 
						|
    }
 | 
						|
 | 
						|
    function deleteNotification (notificationId) {
 | 
						|
      notificationsStore.delete(notificationId)
 | 
						|
      deleteAll(
 | 
						|
        notificationTimelinesStore,
 | 
						|
        notificationTimelinesStore.index('notificationId'),
 | 
						|
        IDBKeyRange.only(notificationId)
 | 
						|
      )
 | 
						|
    }
 | 
						|
 | 
						|
    for (let statusId of statusIds) {
 | 
						|
      deleteStatus(statusId)
 | 
						|
    }
 | 
						|
    for (let notificationId of notificationIds) {
 | 
						|
      deleteNotification(notificationId)
 | 
						|
    }
 | 
						|
  })
 | 
						|
}
 |