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'
|
2018-04-06 00:57:36 +00:00
|
|
|
import isEqual from 'lodash-es/isEqual'
|
2018-08-30 02:03:12 +00:00
|
|
|
import { database } from '../_database/database'
|
2018-12-13 07:45:52 +00:00
|
|
|
import { scheduleIdleTask } from '../_utils/scheduleIdleTask'
|
2018-03-11 05:05:00 +00:00
|
|
|
|
|
|
|
function filterItemIdsFromTimelines (instanceName, timelineFilter, idFilter) {
|
2019-08-03 20:49:37 +00:00
|
|
|
const keys = ['timelineItemSummaries', 'timelineItemSummariesToAdd']
|
|
|
|
const summaryFilter = _ => idFilter(_.id)
|
2018-03-11 05:05:00 +00:00
|
|
|
|
|
|
|
keys.forEach(key => {
|
2019-08-03 20:49:37 +00:00
|
|
|
const timelineData = store.getAllTimelineData(instanceName, key)
|
2018-04-18 04:47:39 +00:00
|
|
|
Object.keys(timelineData).forEach(timelineName => {
|
2019-08-03 20:49:37 +00:00
|
|
|
const summaries = timelineData[timelineName]
|
2018-03-11 05:05:00 +00:00
|
|
|
if (!timelineFilter(timelineName)) {
|
|
|
|
return
|
|
|
|
}
|
2019-08-03 20:49:37 +00:00
|
|
|
const filteredSummaries = summaries.filter(summaryFilter)
|
2019-03-03 21:24:55 +00:00
|
|
|
if (!isEqual(summaries, filteredSummaries)) {
|
2018-12-13 07:45:52 +00:00
|
|
|
console.log('deleting an item from timelineName', timelineName, 'for key', key)
|
2018-03-11 05:05:00 +00:00
|
|
|
store.setForTimeline(instanceName, timelineName, {
|
2019-03-03 21:24:55 +00:00
|
|
|
[key]: filteredSummaries
|
2018-03-11 05:05:00 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
2018-02-17 03:38:21 +00:00
|
|
|
|
|
|
|
function deleteStatusIdsFromStore (instanceName, idsToDelete) {
|
2019-08-03 20:49:37 +00:00
|
|
|
const idsToDeleteSet = new Set(idsToDelete)
|
|
|
|
const idWasNotDeleted = id => !idsToDeleteSet.has(id)
|
|
|
|
const notNotificationTimeline = timelineName => timelineName !== 'notifications'
|
2018-03-11 00:21:10 +00:00
|
|
|
|
2018-03-11 05:05:00 +00:00
|
|
|
filterItemIdsFromTimelines(instanceName, notNotificationTimeline, idWasNotDeleted)
|
|
|
|
}
|
2018-03-11 00:21:10 +00:00
|
|
|
|
2018-03-11 05:05:00 +00:00
|
|
|
function deleteNotificationIdsFromStore (instanceName, idsToDelete) {
|
2019-08-03 20:49:37 +00:00
|
|
|
const idsToDeleteSet = new Set(idsToDelete)
|
|
|
|
const idWasNotDeleted = id => !idsToDeleteSet.has(id)
|
|
|
|
const isNotificationTimeline = timelineName => timelineName === 'notifications'
|
2018-03-11 00:21:10 +00:00
|
|
|
|
2018-03-11 05:05:00 +00:00
|
|
|
filterItemIdsFromTimelines(instanceName, isNotificationTimeline, idWasNotDeleted)
|
2018-02-17 03:38:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
async function deleteStatusesAndNotifications (instanceName, statusIdsToDelete, notificationIdsToDelete) {
|
|
|
|
deleteStatusIdsFromStore(instanceName, statusIdsToDelete)
|
2018-03-11 05:05:00 +00:00
|
|
|
deleteNotificationIdsFromStore(instanceName, notificationIdsToDelete)
|
2018-08-30 02:03:12 +00:00
|
|
|
await database.deleteStatusesAndNotifications(instanceName, statusIdsToDelete, notificationIdsToDelete)
|
2018-02-17 03:38:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
async function doDeleteStatus (instanceName, statusId) {
|
2018-03-11 00:21:10 +00:00
|
|
|
console.log('deleting statusId', statusId)
|
2019-08-03 20:49:37 +00:00
|
|
|
const rebloggedIds = await getIdsThatRebloggedThisStatus(instanceName, statusId)
|
|
|
|
const statusIdsToDelete = Array.from(new Set([statusId].concat(rebloggedIds).filter(Boolean)))
|
|
|
|
const notificationIdsToDelete = Array.from(new Set(await getNotificationIdsForStatuses(instanceName, statusIdsToDelete)))
|
2018-03-11 04:24:07 +00:00
|
|
|
await deleteStatusesAndNotifications(instanceName, statusIdsToDelete, notificationIdsToDelete)
|
2018-02-17 03:38:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export function deleteStatus (instanceName, statusId) {
|
|
|
|
scheduleIdleTask(() => {
|
|
|
|
/* no await */ doDeleteStatus(instanceName, statusId)
|
|
|
|
})
|
|
|
|
}
|