Mailspring/src/flux/tasks/task-factory.coffee

72 lines
2.6 KiB
CoffeeScript

_ = require 'underscore'
ChangeFolderTask = require './change-folder-task'
ChangeLabelsTask = require './change-labels-task'
ChangeUnreadTask = require './change-unread-task'
ChangeStarredTask = require './change-starred-task'
AccountStore = require '../stores/account-store'
CategoryStore = require '../stores/category-store'
class TaskFactory
taskForApplyingCategory: ({threads, fromView, category, exclusive}) =>
account = AccountStore.current()
if account.usesFolders()
return null unless category
return new ChangeFolderTask
folder: category
threads: threads
else
labelsToRemove = []
if exclusive
currentLabel = CategoryStore.byId(fromView?.categoryId())
currentLabel ?= CategoryStore.getStandardCategory("inbox")
labelsToRemove = [currentLabel]
return new ChangeLabelsTask
threads: threads
labelsToRemove: labelsToRemove
labelsToAdd: [category]
taskForRemovingCategory: ({threads, fromView, category, exclusive}) =>
account = AccountStore.current()
if account.usesFolders()
return new ChangeFolderTask
folder: CategoryStore.getStandardCategory("inbox")
threads: threads
else
labelsToAdd = []
if exclusive
currentLabel = CategoryStore.byId(fromView?.categoryId())
currentLabel ?= CategoryStore.getStandardCategory("inbox")
labelsToAdd = [currentLabel]
return new ChangeLabelsTask
threads: threads
labelsToRemove: [category]
labelsToAdd: labelsToAdd
taskForArchiving: ({threads, fromView}) =>
category = CategoryStore.getArchiveCategory()
@taskForApplyingCategory({threads, fromView, category, exclusive: true})
taskForUnarchiving: ({threads, fromView}) =>
category = CategoryStore.getArchiveCategory()
@taskForRemovingCategory({threads, fromView, category, exclusive: true})
taskForMovingToTrash: ({threads, fromView}) =>
category = CategoryStore.getTrashCategory()
@taskForApplyingCategory({threads, fromView, category, exclusive: true})
taskForMovingFromTrash: ({threads, fromView}) =>
category = CategoryStore.getTrashCategory()
@taskForRemovingCategory({threads, fromView, category, exclusive: true})
taskForInvertingUnread: ({threads}) =>
unread = _.every threads, (t) -> _.isMatch(t, {unread: false})
return new ChangeUnreadTask({threads, unread})
taskForInvertingStarred: ({threads}) =>
starred = _.every threads, (t) -> _.isMatch(t, {starred: false})
return new ChangeStarredTask({threads, starred})
module.exports = new TaskFactory