Skip to content

Commit 85415dc

Browse files
committed
Complete all scheduler logic
1 parent 59026b3 commit 85415dc

File tree

8 files changed

+70
-51
lines changed

8 files changed

+70
-51
lines changed

src/apiRequests.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,14 @@ export interface ICreateBackupRequest {
4949
runBackupAfterCreation: boolean;
5050
fileBlacklist: any;
5151
folderBlacklist: any;
52-
}
52+
}
53+
54+
export interface ICreateSchedulerTaskRequest {
55+
name: string;
56+
enabled: boolean;
57+
playerRequirement: number
58+
timing: object
59+
job: object
60+
}
61+
62+
export interface IUpdateSchedulerTaskRequest extends ICreateSchedulerTaskRequest { }

src/lib/code/api.ts

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@ import { get } from 'svelte/store';
1616

1717
import type {
1818
ICreateBackupRequest,
19+
ICreateSchedulerTaskRequest,
1920
ICreateUserRequest,
2021
IDeleteUserAccountRequest,
2122
IEditPanelSettingsRequest,
23+
IUpdateSchedulerTaskRequest,
2224
IUpdateUserAccountRequest,
2325
IUpdateUserRequest,
2426
IUserAvatarRequest,
@@ -50,7 +52,7 @@ import {
5052
type ServerAction,
5153
type Stats,
5254
} from '../../types';
53-
import { BackupJobTask, CommandJobTask, ServerActionJobTask, type ISchedulerTask, EmptyJobTask, TimelessTaskTiming, FixedTimeTaskTiming, IntervalTaskTiming, type ISchedulerDetails, translateRawResponse } from './scheduler';
55+
import { type ISchedulerTask, type ISchedulerDetails, translateRawResponse, type INewSchedulerTask, type IEditSchedulerTask } from './scheduler';
5456

5557
/*
5658
* API Requests
@@ -937,9 +939,18 @@ export function getSchedulerTaskDetails(serverId: string, taskId: string, report
937939
})
938940
}
939941

940-
export function editSchedulerTask(serverId: string, taskId: string, updatedTask: ISchedulerTask, report: (wasSuccess: boolean) => void) {
942+
export function editSchedulerTask(serverId: string, taskId: string, updatedTask: IEditSchedulerTask, report: (wasSuccess: boolean) => void) {
941943
log("API Request: editSchedulerTask");
942944

945+
//formulate proper request
946+
var requestBody: IUpdateSchedulerTaskRequest = {
947+
name: updatedTask.name,
948+
enabled: updatedTask.enabled,
949+
playerRequirement: updatedTask.playerRequirement,
950+
timing: updatedTask.timing,
951+
job: updatedTask.job
952+
}
953+
943954
axiosClient().put(`/api/v2/servers/${serverId}/scheduler/tasks/${taskId}`, JSON.stringify(updatedTask))
944955
.then((response) => {
945956
if (response?.status !== 200) {
@@ -958,6 +969,7 @@ export function editSchedulerTask(serverId: string, taskId: string, updatedTask:
958969

959970
export function runSchedulerTask(serverId: string, taskId: string, completed: (wasSuccess: boolean) => void) {
960971
log("API Request: runSchedulerTask");
972+
961973
axiosClient().post(`/api/v2/servers/${serverId}/scheduler/tasks/${taskId}`)
962974
.then((response) => {
963975
if (response?.status !== 200) {
@@ -975,22 +987,19 @@ export function runSchedulerTask(serverId: string, taskId: string, completed: (w
975987
})
976988
}
977989

978-
export function createSchedulerTask(serverId: string, newBackup: INewBackup, completed: (wasSuccess: boolean) => void) {
990+
export function createSchedulerTask(serverId: string, newTask: INewSchedulerTask, completed: (wasSuccess: boolean) => void) {
991+
log("API Request: createBackup");
992+
979993
//formulate proper request
980-
var requestBody: ICreateBackupRequest = {
981-
name: newBackup.name,
982-
destination: newBackup.destination,
983-
suspend: newBackup.suspend,
984-
deleteOldBackups: newBackup.deleteOldBackups,
985-
compression: newBackup.compression,
986-
runBackupAfterCreation: newBackup.runBackupAfterCreation,
987-
// this solves some incorrect formatting of arrays
988-
fileBlacklist: newBackup.fileBlacklist.map(a => a),
989-
folderBlacklist: newBackup.folderBlacklist.map(a => a)
994+
var requestBody: ICreateSchedulerTaskRequest = {
995+
name: newTask.name,
996+
enabled: newTask.enabled,
997+
playerRequirement: newTask.playerRequirement,
998+
timing: newTask.timing,
999+
job: newTask.job
9901000
}
9911001

992-
log("API Request: createBackup");
993-
axiosClient().post(`/api/v2/servers/${serverId}/backups`, JSON.stringify(requestBody))
1002+
axiosClient().post(`/api/v2/servers/${serverId}/scheduler/tasks`, JSON.stringify(requestBody))
9941003
.then((response) => {
9951004
if (response?.status !== 201) {
9961005
return Promise.reject(response);
@@ -1002,7 +1011,7 @@ export function createSchedulerTask(serverId: string, newBackup: INewBackup, com
10021011
})
10031012

10041013
.catch((error) => {
1005-
console.error(`Failed to create backup: ${newBackup.name} Error: ${error}`)
1014+
console.error(`Failed to create scheduler task: ${newTask.name} Error: ${error}`)
10061015
completed(false);
10071016
})
10081017
}

src/lib/code/scheduler.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export function translateRawResponse(data: any): ISchedulerTask {
8686
} else if ('backupIdentifier' in data.job) {
8787
task.job = new BackupJobTask(data.job.backupIdentifier as string);
8888
} else if ('action' in data.job) {
89-
task.job = new ServerActionJobTask(data.job.action as string);
89+
task.job = new ServerActionJobTask(data.job.action as number);
9090
} else {
9191
task.job = new EmptyJobTask();
9292
}
@@ -106,18 +106,18 @@ export class CommandJobTask implements JobTask {
106106
}
107107

108108
export class BackupJobTask implements JobTask {
109-
backupId: string;
109+
BackupIdentifier: string;
110110

111-
constructor(backupId: string) {
112-
this.backupId = backupId;
111+
constructor(BackupIdentifier: string) {
112+
this.BackupIdentifier = BackupIdentifier;
113113
}
114114
}
115115

116116
export class ServerActionJobTask implements JobTask {
117-
serverAction: number;
117+
action: number;
118118

119-
constructor(serverAction: number) {
120-
this.serverAction = serverAction;
119+
constructor(action: number) {
120+
this.action = action;
121121
}
122122
}
123123

@@ -147,7 +147,6 @@ export function getTaskJob(job: JobTask): Job {
147147
}
148148

149149
/* Timing */
150-
151150
export interface TaskTiming { }
152151

153152
export class FixedTimeTaskTiming implements TaskTiming {

src/lib/components/scheduler/taskJobBackupInput.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
1212
export let job: any;
1313
14-
let selectedBackup: string = (job as BackupJobTask)?.backupId;
14+
let selectedBackup: string = (job as BackupJobTask)?.BackupIdentifier;
1515
let backups: any = [];
1616
const dispatch = createEventDispatcher();
1717

src/lib/components/scheduler/taskJobServerActionInput.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
66
export let job: any;
77
8-
let selectedServerAction: any = (job as ServerActionJobTask)?.serverAction;
8+
let selectedServerAction: any = (job as ServerActionJobTask)?.action;
99
let serverActions: any = [];
1010
const dispatch = createEventDispatcher();
1111

src/lib/components/scheduler/taskTimingFixedTimeInput.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Single-digit hours, minutes and seconds (0-9).
2323
Double-digit hours from 00 to 23.
2424
Double-digit minutes and seconds from 00 to 59.
2525
-->
26-
<Input bind:value={fixedTime} label={''} type={'string'} placeholder={'HH:mm:ss'} pattern="(?:[0-9]|0[0-9]|1[0-9]|2[0-3]):(?:[0-5][0-9]|[0-9]):(?:[0-5][0-9]|[0-9])" required={true} on:change={handleInputChange}>
26+
<Input bind:value={fixedTime} label={''} type={'string'} placeholder={'HH:mm:ss'} pattern="(?:[0-9]|0[0-9]|1[0-9]|2[0-3]):(?:[0-5][0-9]|[0-9]):(?:[0-5][0-9]|[0-9])" required={true} on:input={handleInputChange}>
2727
Define a <b>time</b> in the 24h format. E.g. 13:05:00
2828
</Input>
2929

src/lib/pages/scheduler/create.svelte

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,14 @@
3737
playerRequirement: playerRequirement
3838
};
3939
40-
console.log(newTask);
41-
42-
// createSchedulerTask($selectedServerId, newTask, (wasSuccess: boolean) => {
43-
// if (wasSuccess) {
44-
// confirm(`Task: '${newTask.name}' was successfully created.`);
45-
// navigateBack();
46-
// } else {
47-
// confirm(`Failed to create task: '${newTask.name}'.`);
48-
// }
49-
// });
40+
createSchedulerTask($selectedServerId, newTask, (wasSuccess: boolean) => {
41+
if (wasSuccess) {
42+
confirm(`Task: '${newTask.name}' was successfully created.`);
43+
navigateBack();
44+
} else {
45+
confirm(`Failed to create task: '${newTask.name}'.`);
46+
}
47+
});
5048
}
5149
5250
function handleTaskJobServerActionInput(event: any) {

src/lib/pages/scheduler/edit.svelte

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import { Button, TabItem, Tabs } from 'flowbite-svelte';
1212
import BoxedContainer from '$lib/components/elements/boxedContainer.svelte';
1313
import Input from '$lib/components/elements/input.svelte';
14-
import { getSchedulerTaskDetails } from '$lib/code/api';
14+
import { editSchedulerTask, getSchedulerTaskDetails } from '$lib/code/api';
1515
import Warning from '$lib/components/elements/warning.svelte';
1616
import { Permission, hasPermission } from '$lib/code/permissions';
1717
import { jobOptions, type ISchedulerTask, timingOptions, type JobTask, type TaskTiming, ServerActionJobTask, CommandJobTask, BackupJobTask, IntervalTaskTiming, FixedTimeTaskTiming, TimelessTaskTiming, type IEditSchedulerTask } from '$lib/code/scheduler';
@@ -53,6 +53,7 @@
5353
errorMessage = 'Unable to load this page, does the task exist?';
5454
} else {
5555
name = taskDetails.name;
56+
enabled = taskDetails.enabled;
5657
job = taskDetails.job;
5758
timing = taskDetails.timing;
5859
playerRequirement = taskDetails.playerRequirement;
@@ -71,17 +72,19 @@
7172
playerRequirement: playerRequirement
7273
};
7374
74-
console.log(updatedTask);
75-
76-
// editSchedulerTask($selectedServerId, taskId, updatedTask, (wasSuccess: boolean) => {
77-
// if (wasSuccess) {
78-
// confirm(`Task: '${updatedTask.name}' was successfully edited.`);
79-
// navigateBack();
80-
// } else {
81-
// showError = true;
82-
// errorMessage = `Failed to save changes for task: '${updatedTask.name}'.`;
83-
// }
84-
// });
75+
editSchedulerTask($selectedServerId, taskId, updatedTask, (wasSuccess: boolean) => {
76+
if (wasSuccess) {
77+
confirm(`Task: '${updatedTask.name}' was successfully edited.`);
78+
navigateBack();
79+
} else {
80+
showError = true;
81+
errorMessage = `Failed to save changes for task: '${updatedTask.name}'.`;
82+
}
83+
});
84+
}
85+
86+
function handleInputChange() {
87+
areButtonsDisabled = false;
8588
}
8689
8790
function handleTaskJobServerActionInput(event: any) {
@@ -194,7 +197,7 @@
194197

195198
{#if timing instanceof TimelessTaskTiming == false}
196199
<BoxedContainer>
197-
<Toggle bind:value={enabled} label={'Enable Task'} />
200+
<Toggle bind:value={enabled} label={'Enable Task'} on:toggle={handleInputChange} />
198201
</BoxedContainer>
199202
{/if}
200203

0 commit comments

Comments
 (0)