dashboard-core/theme/dbd-soft-ui/utils/feedHandler.js

165 lines
6.4 KiB
JavaScript
Raw Normal View History

2023-06-19 14:21:58 +05:00
const db = require('quick.db')
const consolePrefix = `${'['.blue}${'dbd-soft-ui'.yellow}${']'.blue} `
const colors = require('colors')
const { icons, otherIcons } = require('../icons')
module.exports = class Feed {
constructor() {
this.setColor = function (color) {
if (!color) throw new Error(`${consolePrefix}${`Failed to modify feed. ${colors.red('Invalid color.')}`.cyan}`);
if (
color !== 'red' &&
color !== 'orange' &&
color !== 'pink' &&
color !== 'gray' &&
color !== 'green' &&
color !== 'blue' &&
color !== 'dark'
) {
throw new Error(`${consolePrefix}${`Failed to modify feed. ${colors.red('Invalid color.')}`.cyan}`);
}
this.color = color;
return this;
}
this.setDescription = function (description) {
if (!description) throw new Error(`${consolePrefix}${`Failed to modify feed. ${colors.red('Invalid description.')}`.cyan}`);
if (description.length < 3 || description.length > 128) console.log(`${consolePrefix}${'Invalid description'.cyan}`);
this.description = description;
return this;
}
this.setIcon = function (icon) {
if (!icon) throw new Error(`${consolePrefix}${`Failed to modify feed. ${colors.red('Invalid icon.')}`.cyan}`);
if (!icons.includes(icon) && !otherIcons.includes(icon)) throw new Error(`${consolePrefix}${`Failed to modify feed. ${colors.red('Invalid icon.')}`.cyan}`);
this.icon = icon;
return this;
}
this.getFeed = function (id) {
if (!id) throw new Error(`${consolePrefix}${`Failed to get feed. ${colors.red('Invalid id.')}`.cyan}`);
let feedName = '';
switch (id) {
case 1:
feedName = 'one';
break;
case 2:
feedName = 'two';
break;
case 3:
feedName = 'three';
break;
case "all":
feedName = 'all';
break;
default:
throw new Error(`${consolePrefix}${`Failed to get feed. ${colors.red('Invalid id.')}`.cyan}`);
}
let feed = db.get(`feeds${feedName === "all" ? "" : `.${feedName}`}`)
if (!feed) throw new Error(`${consolePrefix}${`Failed to get feed. ${colors.red('Feed not found.')}`.cyan}`);
this.feed = feed;
return this;
}
this.delete = function () {
if (!this.feed)throw new Error(`${consolePrefix}${`Failed to delete feed. ${colors.red('Feed not selected')}`.cyan}`);
db.delete(`feeds.${this.feed.id}`);
return this;
}
this.send = async function () {
const { color, description, icon } = this;
let diff;
let col;
if (otherIcons.includes(icon)) diff = true;
if (color === 'red') col = 'danger';
if (color === 'orange') col = 'warning';
if (color === 'pink') col = 'primary';
if (color === 'gray') col = 'secondary';
if (color === 'green') col = 'success';
if (color === 'blue') col = 'info';
if (color === 'dark') col = 'dark';
if (db.get('feeds.three') && db.get('feeds.two') && db.get('feeds.one')) {
await db.delete('feeds.one')
const f3 = db.get('feeds.three')
const f2 = db.get('feeds.two')
await db.set('feeds.two', {
color: f3.color,
description: f3.description,
published: f3.published,
icon: f3.icon,
diff: f3.diff
})
await db.set('feeds.one', {
color: f2.color,
description: f2.description,
published: f2.published,
icon: f2.icon,
diff: f2.diff
})
await db.set('feeds.three', {
color: col,
description: description,
published: Date.now(),
icon: icon,
diff: diff
})
} else {
if (!db.get('feeds.three')) {
await db.set('feeds.three', {
color: col,
description: description,
published: Date.now(),
icon: icon,
diff: diff
})
} else if (!db.get('feeds.two')) {
const f3 = db.get('feeds.three')
await db.set('feeds.two', {
color: f3.color,
description: f3.description,
published: f3.published,
icon: f3.icon,
diff: f3.diff
})
await db.set('feeds.three', {
color: col,
description: description,
published: Date.now(),
icon: icon,
diff: diff
})
} else {
const f3 = db.get('feeds.three')
const f2 = db.get('feeds.two')
await db.set('feeds.one', {
color: f2.color,
description: f2.description,
published: f2.published,
icon: f2.icon,
diff: f2.diff
})
await db.set('feeds.two', {
color: f3.color,
description: f3.description,
published: f3.published,
icon: f3.icon,
diff: f3.diff
})
await db.set('feeds.three', {
color: col,
description: description,
published: Date.now(),
icon: icon,
diff: diff
})
}
}
}
}
}