diff --git a/src/action/index.ts b/src/action/index.ts
index 6b68291..0d00ef7 100644
--- a/src/action/index.ts
+++ b/src/action/index.ts
@@ -49,6 +49,7 @@ export { SetUserDisableLimitsUntilAction } from './setuserdisablelimitsuntil'
export { SetUserTimezoneAction } from './setusertimezone'
export { SignOutAtDeviceAction } from './signoutatdevice'
export { TriedDisablingDeviceAdminAction } from './trieddisablingdeviceadmin'
+export { UpdateCategoryBlockAllNotificationsAction } from './updatecategoryblockallnotifications'
export { UpdateCategoryBlockedTimesAction } from './updatecategoryblockedtimes'
export { UpdateCategoryTemporarilyBlockedAction } from './updatecategorytemporarilyblocked'
export { UpdateCategoryTitleAction } from './updatecategorytitle'
diff --git a/src/action/serialization/parentaction.ts b/src/action/serialization/parentaction.ts
index ff156da..228e5e2 100644
--- a/src/action/serialization/parentaction.ts
+++ b/src/action/serialization/parentaction.ts
@@ -41,6 +41,7 @@ import { SerializedSetRelaxPrimaryDeviceAction, SetRelaxPrimaryDeviceAction } fr
import { SerializedSetSendDeviceConnected, SetSendDeviceConnected } from '../setsenddeviceconnected'
import { SerializedSetUserDisableLimitsUntilAction, SetUserDisableLimitsUntilAction } from '../setuserdisablelimitsuntil'
import { SerializedSetUserTimezoneAction, SetUserTimezoneAction } from '../setusertimezone'
+import { SerializedUpdateCategoryBlockAllNotificationsAction, UpdateCategoryBlockAllNotificationsAction } from '../updatecategoryblockallnotifications'
import { SerializedUpdateCategoryBlockedTimesAction, UpdateCategoryBlockedTimesAction } from '../updatecategoryblockedtimes'
import { SerializedUpdateCategoryTemporarilyBlockedAction, UpdateCategoryTemporarilyBlockedAction } from '../updatecategorytemporarilyblocked'
import { SerializedUpdateCategoryTitleAction, UpdateCategoryTitleAction } from '../updatecategorytitle'
@@ -75,6 +76,7 @@ export type SerializedParentAction =
SerializedSetSendDeviceConnected |
SerializedSetUserDisableLimitsUntilAction |
SerializedSetUserTimezoneAction |
+ SerializedUpdateCategoryBlockAllNotificationsAction |
SerializedUpdateCategoryBlockedTimesAction |
SerializedUpdateCategoryTemporarilyBlockedAction |
SerializedUpdateCategoryTitleAction |
@@ -134,6 +136,8 @@ export const parseParentAction = (action: SerializedParentAction): ParentAction
return SetUserDisableLimitsUntilAction.parse(action)
} else if (action.type === 'SET_USER_TIMEZONE') {
return SetUserTimezoneAction.parse(action)
+ } else if (action.type === 'UPDATE_CATEGORY_BLOCK_ALL_NOTIFICATIONS') {
+ return UpdateCategoryBlockAllNotificationsAction.parse(action)
} else if (action.type === 'UPDATE_CATEGORY_BLOCKED_TIMES') {
return UpdateCategoryBlockedTimesAction.parse(action)
} else if (action.type === 'UPDATE_CATEGORY_TITLE') {
diff --git a/src/action/updatecategoryblockallnotifications.ts b/src/action/updatecategoryblockallnotifications.ts
new file mode 100644
index 0000000..3cbb558
--- /dev/null
+++ b/src/action/updatecategoryblockallnotifications.ts
@@ -0,0 +1,49 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { assertIdWithinFamily } from '../util/token'
+import { ParentAction } from './basetypes'
+
+export class UpdateCategoryBlockAllNotificationsAction extends ParentAction {
+ readonly categoryId: string
+ readonly blocked: boolean
+
+ constructor ({ categoryId, blocked }: {categoryId: string, blocked: boolean}) {
+ super()
+
+ assertIdWithinFamily(categoryId)
+
+ this.categoryId = categoryId
+ this.blocked = blocked
+ }
+
+ serialize = (): SerializedUpdateCategoryBlockAllNotificationsAction => ({
+ type: 'UPDATE_CATEGORY_BLOCK_ALL_NOTIFICATIONS',
+ categoryId: this.categoryId,
+ blocked: this.blocked
+ })
+
+ static parse = ({ categoryId, blocked }: SerializedUpdateCategoryBlockAllNotificationsAction) => (
+ new UpdateCategoryBlockAllNotificationsAction({ categoryId, blocked })
+ )
+}
+
+export interface SerializedUpdateCategoryBlockAllNotificationsAction {
+ type: 'UPDATE_CATEGORY_BLOCK_ALL_NOTIFICATIONS'
+ categoryId: string
+ blocked: boolean
+}
diff --git a/src/api/validator.ts b/src/api/validator.ts
index 7b2a808..be24725 100644
--- a/src/api/validator.ts
+++ b/src/api/validator.ts
@@ -740,6 +740,29 @@ const definitions = {
"userId"
]
},
+ "SerializedUpdateCategoryBlockAllNotificationsAction": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "UPDATE_CATEGORY_BLOCK_ALL_NOTIFICATIONS"
+ ]
+ },
+ "categoryId": {
+ "type": "string"
+ },
+ "blocked": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "blocked",
+ "categoryId",
+ "type"
+ ]
+ },
"SerializedUpdateCategoryBlockedTimesAction": {
"type": "object",
"properties": {
@@ -1424,6 +1447,9 @@ export const isSerializedParentAction: (value: object) => value is SerializedPar
{
"$ref": "#/definitions/SerializedSetUserTimezoneAction"
},
+ {
+ "$ref": "#/definitions/SerializedUpdateCategoryBlockAllNotificationsAction"
+ },
{
"$ref": "#/definitions/SerializedUpdateCategoryBlockedTimesAction"
},
diff --git a/src/function/sync/apply-actions/dispatch-parent-action/index.ts b/src/function/sync/apply-actions/dispatch-parent-action/index.ts
index cfb3fb0..c0869da 100644
--- a/src/function/sync/apply-actions/dispatch-parent-action/index.ts
+++ b/src/function/sync/apply-actions/dispatch-parent-action/index.ts
@@ -42,6 +42,7 @@ import {
SetSendDeviceConnected,
SetUserDisableLimitsUntilAction,
SetUserTimezoneAction,
+ UpdateCategoryBlockAllNotificationsAction,
UpdateCategoryBlockedTimesAction,
UpdateCategoryTemporarilyBlockedAction,
UpdateCategoryTitleAction,
@@ -76,6 +77,7 @@ import { dispatchSetRelaxPrimaryDevice } from './setrelaxprimarydevice'
import { dispatchSetSendDeviceConnected } from './setsenddeviceconnected'
import { dispatchUserSetDisableLimitsUntil } from './setuserdisablelmitsuntil'
import { dispatchSetUserTimezone } from './setusertimezone'
+import { dispatchUpdateCategoryBlockAllNotifications } from './updatecategoryblockallnotifications'
import { dispatchUpdateCategoryBlockedTimes } from './updatecategoryblockedtimes'
import { dispatchUpdateCategoryTemporarilyBlocked } from './updatecategorytemporarilyblocked'
import { dispatchUpdateCategoryTitle } from './updatecategorytitle'
@@ -130,6 +132,8 @@ export const dispatchParentAction = async ({ action, cache, parentUserId, source
await dispatchUserSetDisableLimitsUntil({ action, cache })
} else if (action instanceof SetUserTimezoneAction) {
await dispatchSetUserTimezone({ action, cache })
+ } else if (action instanceof UpdateCategoryBlockAllNotificationsAction) {
+ await dispatchUpdateCategoryBlockAllNotifications({ action, cache })
} else if (action instanceof UpdateCategoryBlockedTimesAction) {
await dispatchUpdateCategoryBlockedTimes({ action, cache })
} else if (action instanceof IncrementCategoryExtraTimeAction) {
diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockallnotifications.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockallnotifications.ts
new file mode 100644
index 0000000..542dd41
--- /dev/null
+++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockallnotifications.ts
@@ -0,0 +1,39 @@
+/*
+ * server component for the TimeLimit App
+ * Copyright (C) 2019 Jonas Lochmann
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { UpdateCategoryBlockAllNotificationsAction } from '../../../../action'
+import { Cache } from '../cache'
+
+export async function dispatchUpdateCategoryBlockAllNotifications ({ action, cache }: {
+ action: UpdateCategoryBlockAllNotificationsAction
+ cache: Cache
+}) {
+ const [affectedRows] = await cache.database.category.update({
+ blockAllNotifications: action.blocked
+ }, {
+ where: {
+ familyId: cache.familyId,
+ categoryId: action.categoryId
+ },
+ transaction: cache.transaction
+ })
+
+ if (affectedRows !== 0) {
+ cache.categoriesWithModifiedBaseData.push(action.categoryId)
+ cache.areChangesImportant = true
+ }
+}