2023-07-05 01:14:44 +02:00
|
|
|
const uuidv4 = require("uuid").v4
|
2022-10-02 21:16:17 +02:00
|
|
|
|
|
|
|
class Task {
|
|
|
|
constructor() {
|
2023-10-20 23:39:32 +02:00
|
|
|
/** @type {string} */
|
2022-10-02 21:16:17 +02:00
|
|
|
this.id = null
|
2023-10-20 23:39:32 +02:00
|
|
|
/** @type {string} */
|
2022-10-02 21:16:17 +02:00
|
|
|
this.action = null // e.g. embed-metadata, encode-m4b, etc
|
2023-10-20 23:39:32 +02:00
|
|
|
/** @type {Object} custom data */
|
2022-10-02 21:16:17 +02:00
|
|
|
this.data = null // additional info for the action like libraryItemId
|
|
|
|
|
2023-10-20 23:39:32 +02:00
|
|
|
/** @type {string} */
|
2022-10-02 21:16:17 +02:00
|
|
|
this.title = null
|
2023-10-20 23:39:32 +02:00
|
|
|
/** @type {string} */
|
2022-10-02 21:16:17 +02:00
|
|
|
this.description = null
|
2023-10-20 23:39:32 +02:00
|
|
|
/** @type {string} */
|
2022-10-02 21:16:17 +02:00
|
|
|
this.error = null
|
2023-10-20 23:39:32 +02:00
|
|
|
/** @type {boolean} client should keep the task visible after success */
|
|
|
|
this.showSuccess = false
|
2022-10-02 21:16:17 +02:00
|
|
|
|
2023-10-20 23:39:32 +02:00
|
|
|
/** @type {boolean} */
|
2022-10-02 21:16:17 +02:00
|
|
|
this.isFailed = false
|
2023-10-20 23:39:32 +02:00
|
|
|
/** @type {boolean} */
|
2022-10-02 21:16:17 +02:00
|
|
|
this.isFinished = false
|
|
|
|
|
2023-10-20 23:39:32 +02:00
|
|
|
/** @type {number} */
|
2022-10-02 21:16:17 +02:00
|
|
|
this.startedAt = null
|
2023-10-20 23:39:32 +02:00
|
|
|
/** @type {number} */
|
2022-10-02 21:16:17 +02:00
|
|
|
this.finishedAt = null
|
|
|
|
}
|
|
|
|
|
|
|
|
toJSON() {
|
|
|
|
return {
|
|
|
|
id: this.id,
|
|
|
|
action: this.action,
|
|
|
|
data: this.data ? { ...this.data } : {},
|
|
|
|
title: this.title,
|
|
|
|
description: this.description,
|
|
|
|
error: this.error,
|
2023-05-27 21:51:03 +02:00
|
|
|
showSuccess: this.showSuccess,
|
2022-10-02 21:16:17 +02:00
|
|
|
isFailed: this.isFailed,
|
|
|
|
isFinished: this.isFinished,
|
|
|
|
startedAt: this.startedAt,
|
|
|
|
finishedAt: this.finishedAt
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-10-20 23:39:32 +02:00
|
|
|
/**
|
|
|
|
* Set initial task data
|
|
|
|
*
|
|
|
|
* @param {string} action
|
|
|
|
* @param {string} title
|
|
|
|
* @param {string} description
|
|
|
|
* @param {boolean} showSuccess
|
|
|
|
* @param {Object} [data]
|
|
|
|
*/
|
2023-05-27 21:51:03 +02:00
|
|
|
setData(action, title, description, showSuccess, data = {}) {
|
2023-07-05 01:14:44 +02:00
|
|
|
this.id = uuidv4()
|
2022-10-02 21:16:17 +02:00
|
|
|
this.action = action
|
|
|
|
this.data = { ...data }
|
|
|
|
this.title = title
|
|
|
|
this.description = description
|
2023-05-27 21:51:03 +02:00
|
|
|
this.showSuccess = showSuccess
|
2022-10-02 21:16:17 +02:00
|
|
|
this.startedAt = Date.now()
|
|
|
|
}
|
|
|
|
|
2023-10-20 23:39:32 +02:00
|
|
|
/**
|
|
|
|
* Set task as failed
|
|
|
|
*
|
|
|
|
* @param {string} message error message
|
|
|
|
*/
|
2022-10-02 21:16:17 +02:00
|
|
|
setFailed(message) {
|
|
|
|
this.error = message
|
|
|
|
this.isFailed = true
|
|
|
|
this.failedAt = Date.now()
|
|
|
|
this.setFinished()
|
|
|
|
}
|
|
|
|
|
2023-10-20 23:39:32 +02:00
|
|
|
/**
|
|
|
|
* Set task as finished
|
|
|
|
*
|
|
|
|
* @param {string} [newDescription] update description
|
|
|
|
*/
|
2023-05-27 21:51:03 +02:00
|
|
|
setFinished(newDescription = null) {
|
|
|
|
if (newDescription) {
|
|
|
|
this.description = newDescription
|
|
|
|
}
|
2022-10-02 21:16:17 +02:00
|
|
|
this.isFinished = true
|
|
|
|
this.finishedAt = Date.now()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = Task
|