diff --git a/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue b/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue
index d81eb2080bf..bccfbf38a6f 100644
--- a/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue
+++ b/apps/frontend/src/components/ui/moderation/checklist/ModerationChecklist.vue
@@ -15,8 +15,8 @@
:class="{
'!w-fit': collapsed,
locked: isLockedByOther,
- 'right-4': settings.get(moderationSettings.General.ChecklistPosition) === 'right',
- 'left-4': settings.get(moderationSettings.General.ChecklistPosition) === 'left',
+ 'right-4': settings.get(moderationSettings.Checklist.Position) === 'right',
+ 'left-4': settings.get(moderationSettings.Checklist.Position) === 'left',
}"
>
@@ -1321,7 +1321,7 @@ onMounted(async () => {
window.addEventListener('keydown', handleKeybinds)
window.addEventListener('beforeunload', handleBeforeUnload)
document.addEventListener('visibilitychange', handleVisibilityChange)
- if (settings.value.get(moderationSettings.General.ChecklistPosition) === 'right') {
+ if (settings.value.get(moderationSettings.Checklist.Position) === 'right') {
notifications.setNotificationLocation('left')
}
@@ -1618,7 +1618,13 @@ if (finishedId === projectV2.value.id) {
localStorage.removeItem('moderation-checklist-finished')
hasNextProject.value = moderationQueue.queueLength > 0
done.value = true
-} else if (projectV2.value.status !== 'processing' && !reviewedAnyway.value) {
+} else if (
+ !reviewedAnyway.value &&
+ !isEligibleQueueCandidate({
+ isProcessing: projectV2.value.status === 'processing',
+ locked: false,
+ })
+) {
alreadyReviewed.value = true
}
diff --git a/apps/frontend/src/pages/[type]/[project].vue b/apps/frontend/src/pages/[type]/[project].vue
index cced1257560..efe1c348de4 100644
--- a/apps/frontend/src/pages/[type]/[project].vue
+++ b/apps/frontend/src/pages/[type]/[project].vue
@@ -2486,7 +2486,7 @@ function handleKeybinds(event) {
if (!isStaff(auth.value.user)) return
if (
!showModerationChecklist.value &&
- !modSettings.value.get(moderationSettings.General.ProjectKeybinds)
+ !modSettings.value.get(moderationSettings.Checklist.AlwaysAllowKeybinds)
)
return
diff --git a/apps/frontend/src/services/moderation/queue-eligibility.ts b/apps/frontend/src/services/moderation/queue-eligibility.ts
index d6211697976..fe084a4b154 100644
--- a/apps/frontend/src/services/moderation/queue-eligibility.ts
+++ b/apps/frontend/src/services/moderation/queue-eligibility.ts
@@ -1,4 +1,5 @@
import type { AbstractModrinthClient } from '@modrinth/api-client'
+import { moderationSettings } from '@modrinth/moderation'
import type { ModerationQueueService } from './queue.ts'
@@ -21,7 +22,12 @@ export interface EligibleQueueProject {
const BATCH_SIZE = 5
export function isEligibleQueueCandidate(result: QueueCandidateCheck | undefined): boolean {
- if (!result?.isProcessing) return false
+ if (
+ !result ||
+ (!result.isProcessing &&
+ !useModerationSettings().value.get(moderationSettings.Checklist.IgnoreConditions))
+ )
+ return false
return !result.locked || !!result.expired || !!result.isOwnLock
}
diff --git a/packages/moderation/src/data/settings.ts b/packages/moderation/src/data/settings.ts
index 4e351979723..0737fabc755 100644
--- a/packages/moderation/src/data/settings.ts
+++ b/packages/moderation/src/data/settings.ts
@@ -2,24 +2,6 @@ import { setting } from '../types/settings.ts'
const settings = {
General: {
- ChecklistPosition: setting.asEnum({
- type: 'enum',
- id: 'checklist-position',
- title: 'Checklist position',
- description: 'Where the checklist should be displayed on the page',
- entries: [
- { value: 'left', label: 'Left' },
- { value: 'right', label: 'Right' },
- ],
- default: 'right',
- }),
- ProjectKeybinds: setting.asToggle({
- type: 'toggle',
- id: 'project-keybinds',
- title: 'Enable project keybinds',
- description: 'Weather certain keybinds should work without the checklist visible.',
- default: false,
- }),
PrivateMessageHighlight: setting.asToggle({
type: 'toggle',
id: 'private-message-highlight',
@@ -56,6 +38,33 @@ const settings = {
default: null,
}),
},
+ Checklist: {
+ Position: setting.asEnum({
+ type: 'enum',
+ id: 'checklist-position',
+ title: 'Position',
+ description: 'Where the checklist should be displayed on the page',
+ entries: [
+ { value: 'left', label: 'Left' },
+ { value: 'right', label: 'Right' },
+ ],
+ default: 'right',
+ }),
+ AlwaysAllowKeybinds: setting.asToggle({
+ type: 'toggle',
+ id: 'checklist-always-allow-keybinds',
+ title: 'Always allow project keybinds',
+ description: 'Whether certain keybinds should work without the checklist visible.',
+ default: false,
+ }),
+ IgnoreConditions: setting.asToggle({
+ type: 'toggle',
+ id: 'checklist-ignore-conditions',
+ title: 'Ignore checklist conditions',
+ description: 'Allow moderating projects the checklist normally auto skips.',
+ default: false,
+ }),
+ },
} as const
export default settings
diff --git a/packages/moderation/src/handles/settings.ts b/packages/moderation/src/handles/settings.ts
index 35105e37a8f..ae682a38f5f 100644
--- a/packages/moderation/src/handles/settings.ts
+++ b/packages/moderation/src/handles/settings.ts
@@ -33,7 +33,7 @@ export class Settings {
export function getMarginTarget(settings: Settings): string {
return settings.get(moderationSettings.General.AdjustPageAlignment) == 'always'
- ? settings.get(moderationSettings.General.ChecklistPosition) == 'right'
+ ? settings.get(moderationSettings.Checklist.Position) == 'right'
? 'r'
: 'l'
: 'x'