53 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { dbPromise, getDatabase } from '../databaseLifecycle'
 | 
						|
import { getInCache, hasInCache, statusesCache } from '../cache'
 | 
						|
import { STATUSES_STORE } from '../constants'
 | 
						|
import { cacheStatus } from './cacheStatus'
 | 
						|
import { putStatus } from './insertion'
 | 
						|
 | 
						|
//
 | 
						|
// update statuses
 | 
						|
//
 | 
						|
 | 
						|
async function updateStatus (instanceName, statusId, updateFunc) {
 | 
						|
  const db = await getDatabase(instanceName)
 | 
						|
  if (hasInCache(statusesCache, instanceName, statusId)) {
 | 
						|
    let status = getInCache(statusesCache, instanceName, statusId)
 | 
						|
    updateFunc(status)
 | 
						|
    cacheStatus(status, instanceName)
 | 
						|
  }
 | 
						|
  return dbPromise(db, STATUSES_STORE, 'readwrite', (statusesStore) => {
 | 
						|
    statusesStore.get(statusId).onsuccess = e => {
 | 
						|
      let status = e.target.result
 | 
						|
      updateFunc(status)
 | 
						|
      putStatus(statusesStore, status)
 | 
						|
    }
 | 
						|
  })
 | 
						|
}
 | 
						|
 | 
						|
export async function setStatusFavorited (instanceName, statusId, favorited) {
 | 
						|
  return updateStatus(instanceName, statusId, status => {
 | 
						|
    let delta = (favorited ? 1 : 0) - (status.favourited ? 1 : 0)
 | 
						|
    status.favourited = favorited
 | 
						|
    status.favourites_count = (status.favourites_count || 0) + delta
 | 
						|
  })
 | 
						|
}
 | 
						|
 | 
						|
export async function setStatusReblogged (instanceName, statusId, reblogged) {
 | 
						|
  return updateStatus(instanceName, statusId, status => {
 | 
						|
    let delta = (reblogged ? 1 : 0) - (status.reblogged ? 1 : 0)
 | 
						|
    status.reblogged = reblogged
 | 
						|
    status.reblogs_count = (status.reblogs_count || 0) + delta
 | 
						|
  })
 | 
						|
}
 | 
						|
 | 
						|
export async function setStatusPinned (instanceName, statusId, pinned) {
 | 
						|
  return updateStatus(instanceName, statusId, status => {
 | 
						|
    status.pinned = pinned
 | 
						|
  })
 | 
						|
}
 | 
						|
 | 
						|
export async function setStatusMuted (instanceName, statusId, muted) {
 | 
						|
  return updateStatus(instanceName, statusId, status => {
 | 
						|
    status.muted = muted
 | 
						|
  })
 | 
						|
}
 |