2021-07-05 05:19:04 +02:00
|
|
|
import { dbPromise, getDatabase } from '../databaseLifecycle.js'
|
|
|
|
import { getInCache, hasInCache, statusesCache } from '../cache.js'
|
|
|
|
import { STATUSES_STORE } from '../constants.js'
|
|
|
|
import { cacheStatus } from './cacheStatus.js'
|
|
|
|
import { putStatus } from './insertion.js'
|
2018-04-17 05:56:21 +02:00
|
|
|
|
|
|
|
//
|
|
|
|
// update statuses
|
|
|
|
//
|
|
|
|
|
|
|
|
async function updateStatus (instanceName, statusId, updateFunc) {
|
|
|
|
const db = await getDatabase(instanceName)
|
|
|
|
if (hasInCache(statusesCache, instanceName, statusId)) {
|
2019-08-03 22:49:37 +02:00
|
|
|
const status = getInCache(statusesCache, instanceName, statusId)
|
2018-04-17 05:56:21 +02:00
|
|
|
updateFunc(status)
|
|
|
|
cacheStatus(status, instanceName)
|
|
|
|
}
|
|
|
|
return dbPromise(db, STATUSES_STORE, 'readwrite', (statusesStore) => {
|
|
|
|
statusesStore.get(statusId).onsuccess = e => {
|
2019-08-03 22:49:37 +02:00
|
|
|
const status = e.target.result
|
2018-04-17 05:56:21 +02:00
|
|
|
updateFunc(status)
|
|
|
|
putStatus(statusesStore, status)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
export async function setStatusFavorited (instanceName, statusId, favorited) {
|
|
|
|
return updateStatus(instanceName, statusId, status => {
|
2019-08-03 22:49:37 +02:00
|
|
|
const delta = (favorited ? 1 : 0) - (status.favourited ? 1 : 0)
|
2018-04-17 05:56:21 +02:00
|
|
|
status.favourited = favorited
|
|
|
|
status.favourites_count = (status.favourites_count || 0) + delta
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
export async function setStatusReblogged (instanceName, statusId, reblogged) {
|
|
|
|
return updateStatus(instanceName, statusId, status => {
|
2019-08-03 22:49:37 +02:00
|
|
|
const delta = (reblogged ? 1 : 0) - (status.reblogged ? 1 : 0)
|
2018-04-17 05:56:21 +02:00
|
|
|
status.reblogged = reblogged
|
|
|
|
status.reblogs_count = (status.reblogs_count || 0) + delta
|
|
|
|
})
|
|
|
|
}
|
2018-04-29 21:28:44 +02:00
|
|
|
|
|
|
|
export async function setStatusPinned (instanceName, statusId, pinned) {
|
|
|
|
return updateStatus(instanceName, statusId, status => {
|
|
|
|
status.pinned = pinned
|
|
|
|
})
|
|
|
|
}
|
2018-05-13 07:49:01 +02:00
|
|
|
|
|
|
|
export async function setStatusMuted (instanceName, statusId, muted) {
|
|
|
|
return updateStatus(instanceName, statusId, status => {
|
|
|
|
status.muted = muted
|
|
|
|
})
|
|
|
|
}
|
2020-07-25 20:17:08 +02:00
|
|
|
|
|
|
|
export async function setStatusBookmarked (instanceName, statusId, bookmarked) {
|
|
|
|
return updateStatus(instanceName, statusId, status => {
|
|
|
|
status.bookmarked = bookmarked
|
|
|
|
})
|
|
|
|
}
|