pinafore/routes/_actions/deleteStatuses.js

48 lines
1.9 KiB
JavaScript
Raw Normal View History

2018-03-11 00:21:10 +00:00
import { getIdsThatRebloggedThisStatus, getNotificationIdsForStatuses } from './statuses'
2018-02-17 03:38:21 +00:00
import { store } from '../_store/store'
import { scheduleIdleTask } from '../_utils/scheduleIdleTask'
import { database } from '../_database/database'
2018-03-11 00:21:10 +00:00
import forEach from 'lodash/forEach'
2018-02-17 03:38:21 +00:00
function deleteStatusIdsFromStore (instanceName, idsToDelete) {
let idsToDeleteSet = new Set(idsToDelete)
2018-03-11 00:21:10 +00:00
let idWasNotDeleted = id => !idsToDeleteSet.has(id)
let timelinesToTimelineItemIds = store.getAllTimelineData(instanceName, 'timelineItemIds')
forEach(timelinesToTimelineItemIds, (timelineItemIds, timelineName) => {
store.setForTimeline(instanceName, timelineName, {
timelineItemIds: timelineItemIds.filter(idWasNotDeleted)
2018-02-17 03:38:21 +00:00
})
2018-03-11 00:21:10 +00:00
})
let timelinesToItemIdsToAdd = store.getAllTimelineData(instanceName, 'itemIdsToAdd')
forEach(timelinesToItemIdsToAdd, (itemIdsToAdd, timelineName) => {
store.setForTimeline(instanceName, timelineName, {
itemIdsToAdd: itemIdsToAdd.filter(idWasNotDeleted)
})
})
2018-02-17 03:38:21 +00:00
}
async function deleteStatusesAndNotifications (instanceName, statusIdsToDelete, notificationIdsToDelete) {
deleteStatusIdsFromStore(instanceName, statusIdsToDelete)
await database.deleteStatusesAndNotifications(instanceName, statusIdsToDelete, notificationIdsToDelete)
}
async function doDeleteStatus (instanceName, statusId) {
2018-03-11 00:21:10 +00:00
console.log('deleting statusId', statusId)
let rebloggedIds = await getIdsThatRebloggedThisStatus(instanceName, statusId)
let statusIdsToDelete = Array.from(new Set([statusId].concat(rebloggedIds).filter(Boolean)))
2018-02-17 03:38:21 +00:00
let notificationIdsToDelete = new Set(await getNotificationIdsForStatuses(instanceName, statusIdsToDelete))
await Promise.all([
deleteStatusesAndNotifications(instanceName, statusIdsToDelete, notificationIdsToDelete)
])
}
export function deleteStatus (instanceName, statusId) {
scheduleIdleTask(() => {
/* no await */ doDeleteStatus(instanceName, statusId)
})
}