stuff
This commit is contained in:
parent
668d6d6c82
commit
c88d662332
|
@ -14,12 +14,12 @@ module.exports = (_ => {
|
|||
"info": {
|
||||
"name": "ChatAliases",
|
||||
"author": "DevilBro",
|
||||
"version": "2.1.9",
|
||||
"version": "2.2.0",
|
||||
"description": "Allow the user to configure their own chat-aliases which will automatically be replaced before the message is being sent"
|
||||
},
|
||||
"changeLog": {
|
||||
"fixed": {
|
||||
"Autocomplete Menu": "Works again"
|
||||
"New Settings Menu": "Fixed for new settings menu"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -207,146 +207,156 @@ module.exports = (_ => {
|
|||
}
|
||||
|
||||
getSettingsPanel (collapseStates = {}) {
|
||||
let settingsPanel, settingsItems = [];
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Settings",
|
||||
let settingsPanel;
|
||||
return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, {
|
||||
collapseStates: collapseStates,
|
||||
children: Object.keys(settings).map(key => !this.defaults.settings[key].inner && BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "Switch",
|
||||
plugin: this,
|
||||
keys: ["settings", key],
|
||||
label: this.defaults.settings[key].description,
|
||||
value: settings[key]
|
||||
})).concat(Object.keys(amounts).map(key => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "TextInput",
|
||||
childProps: {
|
||||
type: "number"
|
||||
},
|
||||
plugin: this,
|
||||
keys: ["amounts", key],
|
||||
label: this.defaults.amounts[key].description,
|
||||
basis: "20%",
|
||||
min: this.defaults.amounts[key].min,
|
||||
max: this.defaults.amounts[key].max,
|
||||
value: amounts[key]
|
||||
}))).concat(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsPanelInner, {
|
||||
title: "Automatically replace aliases in:",
|
||||
last: true,
|
||||
children: Object.keys(settings).map(key => this.defaults.settings[key].inner && BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "Switch",
|
||||
plugin: this,
|
||||
keys: ["settings", key],
|
||||
label: this.defaults.settings[key].description,
|
||||
value: settings[key]
|
||||
}))
|
||||
}))
|
||||
}));
|
||||
let values = {wordvalue: "", replacevalue: ""};
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Add new alias",
|
||||
collapseStates: collapseStates,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
|
||||
type: "Button",
|
||||
label: "Pick a wordvalue and replacevalue:",
|
||||
key: "ADDBUTTON",
|
||||
disabled: !Object.keys(values).every(valuename => values[valuename]),
|
||||
children: BDFDB.LanguageUtils.LanguageStrings.ADD,
|
||||
onClick: _ => {
|
||||
this.saveWord(values.wordvalue, values.replacevalue, settingsPanel.querySelector(".input-replacevalue input[type='file']"));
|
||||
BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
|
||||
}
|
||||
}),
|
||||
this.createInputs(values)
|
||||
].flat(10).filter(n => n)
|
||||
}));
|
||||
if (!BDFDB.ObjectUtils.isEmpty(aliases)) settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Added aliases",
|
||||
collapseStates: collapseStates,
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsList, {
|
||||
settings: Object.keys(this.defaults.configs),
|
||||
data: Object.keys(aliases).map((wordvalue, i) => Object.assign({}, aliases[wordvalue], {
|
||||
key: wordvalue,
|
||||
label: wordvalue
|
||||
})),
|
||||
renderLabel: data => BDFDB.ReactUtils.createElement("div", {
|
||||
style: {width: "100%"},
|
||||
children: _ => {
|
||||
let settingsItems = [];
|
||||
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Settings",
|
||||
collapseStates: collapseStates,
|
||||
children: Object.keys(settings).map(key => !this.defaults.settings[key].inner && BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "Switch",
|
||||
plugin: this,
|
||||
keys: ["settings", key],
|
||||
label: this.defaults.settings[key].description,
|
||||
value: settings[key]
|
||||
})).concat(Object.keys(amounts).map(key => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "TextInput",
|
||||
childProps: {
|
||||
type: "number"
|
||||
},
|
||||
plugin: this,
|
||||
keys: ["amounts", key],
|
||||
label: this.defaults.amounts[key].description,
|
||||
basis: "20%",
|
||||
min: this.defaults.amounts[key].min,
|
||||
max: this.defaults.amounts[key].max,
|
||||
value: amounts[key]
|
||||
}))).concat(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsPanelInner, {
|
||||
title: "Automatically replace aliases in:",
|
||||
last: true,
|
||||
children: Object.keys(settings).map(key => this.defaults.settings[key].inner && BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "Switch",
|
||||
plugin: this,
|
||||
keys: ["settings", key],
|
||||
label: this.defaults.settings[key].description,
|
||||
value: settings[key]
|
||||
}))
|
||||
}))
|
||||
}));
|
||||
|
||||
let values = {wordvalue: "", replacevalue: ""};
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Add new alias",
|
||||
collapseStates: collapseStates,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
value: data.label,
|
||||
placeholder: data.label,
|
||||
size: BDFDB.LibraryComponents.TextInput.Sizes.MINI,
|
||||
maxLength: 100000000000000000000,
|
||||
onChange: value => {
|
||||
aliases[value] = aliases[data.label];
|
||||
delete aliases[data.label];
|
||||
data.label = value;
|
||||
BDFDB.DataUtils.save(aliases, this, "words");
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
|
||||
type: "Button",
|
||||
label: "Pick a wordvalue and replacevalue:",
|
||||
key: "ADDBUTTON",
|
||||
disabled: !Object.keys(values).every(valuename => values[valuename]),
|
||||
children: BDFDB.LanguageUtils.LanguageStrings.ADD,
|
||||
onClick: _ => {
|
||||
this.saveWord(values.wordvalue, values.replacevalue, settingsPanel.props._node.querySelector(".input-replacevalue input[type='file']"));
|
||||
BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
|
||||
}
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
value: data.replace,
|
||||
placeholder: data.replace,
|
||||
size: BDFDB.LibraryComponents.TextInput.Sizes.MINI,
|
||||
maxLength: 100000000000000000000,
|
||||
onChange: value => {
|
||||
aliases[data.label].replace = value;
|
||||
BDFDB.DataUtils.save(aliases, this, "words");
|
||||
}
|
||||
})
|
||||
]
|
||||
}),
|
||||
onCheckboxChange: (value, instance) => {
|
||||
aliases[instance.props.cardId][instance.props.settingId] = value;
|
||||
BDFDB.DataUtils.save(aliases, this, "words");
|
||||
},
|
||||
onRemove: (e, instance) => {
|
||||
delete aliases[instance.props.cardId];
|
||||
BDFDB.DataUtils.save(aliases, this, "words");
|
||||
BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
|
||||
}
|
||||
})
|
||||
}));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Remove All",
|
||||
collapseStates: collapseStates,
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
|
||||
type: "Button",
|
||||
className: BDFDB.disCN.marginbottom8,
|
||||
color: BDFDB.LibraryComponents.Button.Colors.RED,
|
||||
label: "Remove all added aliases",
|
||||
onClick: _ => {
|
||||
BDFDB.ModalUtils.confirm(this, "Are you sure you want to remove all added aliases?", _ => {
|
||||
aliases = {};
|
||||
commandAliases = {};
|
||||
BDFDB.DataUtils.remove(this, "words");
|
||||
BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
|
||||
});
|
||||
},
|
||||
children: BDFDB.LanguageUtils.LanguageStrings.REMOVE
|
||||
})
|
||||
}));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Config Guide",
|
||||
collapseStates: collapseStates,
|
||||
children: [
|
||||
"Case: Will replace words while comparing lowercase/uppercase. apple => apple, not APPLE or AppLe",
|
||||
"Not Case: Will replace words while ignoring lowercase/uppercase. apple => apple, APPLE and AppLe",
|
||||
"Exact: Will replace words that are exactly the replaceword. apple to pear => applepie stays applepie",
|
||||
"Not Exact: Will replace words anywhere they appear. apple to pear => applepieapple to pearpiepear",
|
||||
"Autoc: Will appear in the Autocomplete Menu (if enabled).",
|
||||
[
|
||||
"Regex: Will treat the entered wordvalue as a regular expression. ",
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Anchor, {href: "https://regexr.com/", children: BDFDB.LanguageUtils.LanguageStrings.HELP + "?"})
|
||||
],
|
||||
"File: If the replacevalue is a filepath it will try to upload the file located at the filepath."
|
||||
].map(string => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormText, {
|
||||
type: BDFDB.LibraryComponents.FormComponents.FormTextTypes.DESCRIPTION,
|
||||
children: string
|
||||
}))
|
||||
}));
|
||||
|
||||
return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, settingsItems);
|
||||
this.createInputs(values)
|
||||
].flat(10).filter(n => n)
|
||||
}));
|
||||
|
||||
if (!BDFDB.ObjectUtils.isEmpty(aliases)) settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Added aliases",
|
||||
collapseStates: collapseStates,
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsList, {
|
||||
settings: Object.keys(this.defaults.configs),
|
||||
data: Object.keys(aliases).map((wordvalue, i) => Object.assign({}, aliases[wordvalue], {
|
||||
key: wordvalue,
|
||||
label: wordvalue
|
||||
})),
|
||||
renderLabel: data => BDFDB.ReactUtils.createElement("div", {
|
||||
style: {width: "100%"},
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
value: data.label,
|
||||
placeholder: data.label,
|
||||
size: BDFDB.LibraryComponents.TextInput.Sizes.MINI,
|
||||
maxLength: 100000000000000000000,
|
||||
onChange: value => {
|
||||
aliases[value] = aliases[data.label];
|
||||
delete aliases[data.label];
|
||||
data.label = value;
|
||||
BDFDB.DataUtils.save(aliases, this, "words");
|
||||
}
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
value: data.replace,
|
||||
placeholder: data.replace,
|
||||
size: BDFDB.LibraryComponents.TextInput.Sizes.MINI,
|
||||
maxLength: 100000000000000000000,
|
||||
onChange: value => {
|
||||
aliases[data.label].replace = value;
|
||||
BDFDB.DataUtils.save(aliases, this, "words");
|
||||
}
|
||||
})
|
||||
]
|
||||
}),
|
||||
onCheckboxChange: (value, instance) => {
|
||||
aliases[instance.props.cardId][instance.props.settingId] = value;
|
||||
BDFDB.DataUtils.save(aliases, this, "words");
|
||||
},
|
||||
onRemove: (e, instance) => {
|
||||
delete aliases[instance.props.cardId];
|
||||
BDFDB.DataUtils.save(aliases, this, "words");
|
||||
BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
|
||||
}
|
||||
})
|
||||
}));
|
||||
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Remove All",
|
||||
collapseStates: collapseStates,
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
|
||||
type: "Button",
|
||||
color: BDFDB.LibraryComponents.Button.Colors.RED,
|
||||
label: "Remove all added aliases",
|
||||
onClick: _ => {
|
||||
BDFDB.ModalUtils.confirm(this, "Are you sure you want to remove all added aliases?", _ => {
|
||||
aliases = {};
|
||||
commandAliases = {};
|
||||
BDFDB.DataUtils.remove(this, "words");
|
||||
BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
|
||||
});
|
||||
},
|
||||
children: BDFDB.LanguageUtils.LanguageStrings.REMOVE
|
||||
})
|
||||
}));
|
||||
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Config Guide",
|
||||
collapseStates: collapseStates,
|
||||
children: [
|
||||
"Case: Will replace words while comparing lowercase/uppercase. apple => apple, not APPLE or AppLe",
|
||||
"Not Case: Will replace words while ignoring lowercase/uppercase. apple => apple, APPLE and AppLe",
|
||||
"Exact: Will replace words that are exactly the replaceword. apple to pear => applepie stays applepie",
|
||||
"Not Exact: Will replace words anywhere they appear. apple to pear => applepieapple to pearpiepear",
|
||||
"Autoc: Will appear in the Autocomplete Menu (if enabled)",
|
||||
[
|
||||
"Regex: Will treat the entered wordvalue as a regular expression - ",
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Anchor, {href: "https://regexr.com/", children: BDFDB.LanguageUtils.LanguageStrings.HELP + "?"})
|
||||
],
|
||||
"File: If the replacevalue is a filepath it will try to upload the file located at the filepath"
|
||||
].map(string => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormText, {
|
||||
type: BDFDB.LibraryComponents.FormComponents.FormTextTypes.DESCRIPTION,
|
||||
children: string
|
||||
}))
|
||||
}));
|
||||
|
||||
return settingsItems;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onSettingsClosed () {
|
||||
|
|
|
@ -14,12 +14,12 @@ module.exports = (_ => {
|
|||
"info": {
|
||||
"name": "FriendNotifications",
|
||||
"author": "DevilBro",
|
||||
"version": "1.5.3",
|
||||
"version": "1.5.4",
|
||||
"description": "Get a notification when a Friend or a User you choose to observe changes their online status, can be configured individually in the settings"
|
||||
},
|
||||
"changeLog": {
|
||||
"fixed": {
|
||||
"Works again": "Can discord stop messing with the server list, jeez"
|
||||
"New Settings Menu": "Fixed for new settings menu"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -153,11 +153,11 @@ module.exports = (_ => {
|
|||
BDFDB.PatchUtils.forceAllUpdates(this);
|
||||
}
|
||||
|
||||
getSettingsPanel (collapseStates = {}) {
|
||||
let changeNotificationType = (type, userId, desktopon, disableon) => {
|
||||
getSettingsPanel (collapseStates = {}) {
|
||||
let changeNotificationType = (type, userId, desktopOn, disableOn) => {
|
||||
let data = BDFDB.DataUtils.load(this, type, userId) || this.createDefaultConfig();
|
||||
data.desktop = desktopon;
|
||||
data.disabled = disableon;
|
||||
data.desktop = desktopOn;
|
||||
data.disabled = disableOn;
|
||||
BDFDB.DataUtils.save(data, this, type, userId);
|
||||
this.SettingsUpdated = true;
|
||||
BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
|
||||
|
@ -263,219 +263,225 @@ module.exports = (_ => {
|
|||
});
|
||||
};
|
||||
|
||||
let settings = BDFDB.DataUtils.get(this, "settings");
|
||||
let amounts = BDFDB.DataUtils.get(this, "amounts");
|
||||
let notificationStrings = BDFDB.DataUtils.get(this, "notificationstrings");
|
||||
let notificationSounds = BDFDB.DataUtils.get(this, "notificationsounds");
|
||||
let settingsPanel;
|
||||
return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, {
|
||||
collapseStates: collapseStates,
|
||||
children: _ => {
|
||||
let settings = BDFDB.DataUtils.get(this, "settings");
|
||||
let amounts = BDFDB.DataUtils.get(this, "amounts");
|
||||
let notificationStrings = BDFDB.DataUtils.get(this, "notificationstrings");
|
||||
let notificationSounds = BDFDB.DataUtils.get(this, "notificationsounds");
|
||||
|
||||
let friendIds = BDFDB.LibraryModules.FriendUtils.getFriendIDs();
|
||||
let friendsData = BDFDB.DataUtils.load(this, "friends"), nonFriendsData = BDFDB.DataUtils.load(this, "nonfriends");
|
||||
let friends = [], nonFriends = [];
|
||||
|
||||
let settingsPanel, settingsItems = [], innerItems = [];
|
||||
|
||||
for (let id of friendIds) {
|
||||
let user = BDFDB.LibraryModules.UserStore.getUser(id);
|
||||
if (user) {
|
||||
friendsData[id] = Object.assign({}, friendsData[id] || nonFriendsData[id] || this.createDefaultConfig());
|
||||
delete nonFriendsData[id];
|
||||
}
|
||||
}
|
||||
for (let id in friendsData) {
|
||||
let user = BDFDB.LibraryModules.UserStore.getUser(id);
|
||||
if (user) {
|
||||
if (!friendIds.includes(id)) {
|
||||
nonFriendsData[id] = Object.assign({}, friendsData[id]);
|
||||
delete friendsData[id];
|
||||
let friendIds = BDFDB.LibraryModules.FriendUtils.getFriendIDs();
|
||||
let friendsData = BDFDB.DataUtils.load(this, "friends"), nonFriendsData = BDFDB.DataUtils.load(this, "nonfriends");
|
||||
let friends = [], nonFriends = [];
|
||||
|
||||
let settingsItems = [], innerItems = [];
|
||||
|
||||
for (let id of friendIds) {
|
||||
let user = BDFDB.LibraryModules.UserStore.getUser(id);
|
||||
if (user) {
|
||||
friendsData[id] = Object.assign({}, friendsData[id] || nonFriendsData[id] || this.createDefaultConfig());
|
||||
delete nonFriendsData[id];
|
||||
}
|
||||
}
|
||||
for (let id in friendsData) {
|
||||
let user = BDFDB.LibraryModules.UserStore.getUser(id);
|
||||
if (user) {
|
||||
if (!friendIds.includes(id)) {
|
||||
nonFriendsData[id] = Object.assign({}, friendsData[id]);
|
||||
delete friendsData[id];
|
||||
}
|
||||
else if (id != BDFDB.UserUtils.me.id) friends.push(Object.assign({}, user, friendsData[id], {key: id, className: friendsData[id].disabled ? "" : (friendsData[id].desktop ? BDFDB.disCN.cardsuccessoutline : BDFDB.disCN.cardbrandoutline)}));
|
||||
}
|
||||
}
|
||||
for (let id in nonFriendsData) {
|
||||
let user = BDFDB.LibraryModules.UserStore.getUser(id);
|
||||
if (user && id != BDFDB.UserUtils.me.id) nonFriends.push(Object.assign({}, user, nonFriendsData[id], {key: id, className: nonFriendsData[id].disabled ? "" : (nonFriendsData[id].desktop ? BDFDB.disCN.cardsuccessoutline : BDFDB.disCN.cardbrandoutline)}));
|
||||
}
|
||||
else if (id != BDFDB.UserUtils.me.id) friends.push(Object.assign({}, user, friendsData[id], {key: id, className: friendsData[id].disabled ? "" : (friendsData[id].desktop ? BDFDB.disCN.cardsuccessoutline : BDFDB.disCN.cardbrandoutline)}));
|
||||
}
|
||||
}
|
||||
for (let id in nonFriendsData) {
|
||||
let user = BDFDB.LibraryModules.UserStore.getUser(id);
|
||||
if (user && id != BDFDB.UserUtils.me.id) nonFriends.push(Object.assign({}, user, nonFriendsData[id], {key: id, className: nonFriendsData[id].disabled ? "" : (nonFriendsData[id].desktop ? BDFDB.disCN.cardsuccessoutline : BDFDB.disCN.cardbrandoutline)}));
|
||||
}
|
||||
|
||||
BDFDB.DataUtils.save(friendsData, this, "friends");
|
||||
BDFDB.DataUtils.save(nonFriendsData, this, "nonfriends");
|
||||
|
||||
for (let key in settings) innerItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "Switch",
|
||||
plugin: this,
|
||||
keys: ["settings", key],
|
||||
label: this.defaults.settings[key].description,
|
||||
value: settings[key]
|
||||
}));
|
||||
for (let key in amounts) if (key.indexOf("desktop") == -1 || "Notification" in window) innerItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "TextInput",
|
||||
childProps: {
|
||||
type: "number"
|
||||
},
|
||||
plugin: this,
|
||||
keys: ["amounts", key],
|
||||
label: this.defaults.amounts[key].description,
|
||||
basis: "20%",
|
||||
min: this.defaults.amounts[key].min,
|
||||
max: this.defaults.amounts[key].max,
|
||||
value: amounts[key]
|
||||
}));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Settings",
|
||||
collapseStates: collapseStates,
|
||||
children: innerItems
|
||||
}));
|
||||
|
||||
if (friends.length) settingsItems.push(createUserList(friends, "friends", "Friend-List"));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Add new Stranger",
|
||||
collapseStates: collapseStates,
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.margintop8,
|
||||
align: BDFDB.LibraryComponents.Flex.Align.CENTER,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
className: `input-newstranger`,
|
||||
placeholder: "user (id or name#discriminator)",
|
||||
value: ""
|
||||
})
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Button, {
|
||||
onClick: _ => {
|
||||
let userId = settingsPanel.querySelector(`.input-newstranger ` + BDFDB.dotCN.input).value.trim();
|
||||
if (userId == BDFDB.UserUtils.me.id) BDFDB.NotificationUtils.toast("Are you seriously trying to stalk yourself?", {type: "error"});
|
||||
else if (friendIds.includes(userId)) BDFDB.NotificationUtils.toast("User is already a friend of yours, please use the 'Friend-List' area to configure them", {type: "error"});
|
||||
else if (Object.keys(nonFriends).includes(userId)) BDFDB.NotificationUtils.toast("User is already being observed as a 'Stranger'", {type: "error"});
|
||||
else {
|
||||
let user = /.+#[0-9]{4}/.test(userId) ? BDFDB.LibraryModules.UserStore.findByTag(userId.split("#").slice(0, -1).join("#"), userId.split("#").pop()) : BDFDB.LibraryModules.UserStore.getUser(userId);
|
||||
if (user) {
|
||||
BDFDB.DataUtils.save(this.createDefaultConfig(), this, "nonfriends", userId);
|
||||
BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
|
||||
this.SettingsUpdated = true;
|
||||
}
|
||||
else BDFDB.NotificationUtils.toast("Please enter a valid UserID of a user that has been loaded in your client", {type: "error"});
|
||||
}
|
||||
},
|
||||
children: BDFDB.LanguageUtils.LanguageStrings.ADD
|
||||
})
|
||||
]
|
||||
})
|
||||
}));
|
||||
if (nonFriends.length) settingsItems.push(createUserList(nonFriends, "nonfriends", "Stranger-List"));
|
||||
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "LogIn/-Out Timelog",
|
||||
collapseStates: collapseStates,
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
|
||||
type: "Button",
|
||||
label: "Overview of LogIns/-Outs of current Session",
|
||||
onClick: _ => {this.showTimeLog()},
|
||||
children: "Timelog"
|
||||
})
|
||||
}));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Notification Messages",
|
||||
collapseStates: collapseStates,
|
||||
children: [BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.marginbottom8,
|
||||
children: BDFDB.ReactUtils.createElement("div", {
|
||||
className: BDFDB.disCNS.settingsrowtitledefault + BDFDB.disCN.cursordefault,
|
||||
children: [
|
||||
"Allows you to configure your own message strings for the different statuses. ",
|
||||
BDFDB.ReactUtils.createElement("strong", {children: "$user"}),
|
||||
" is the placeholder for the username, ",
|
||||
BDFDB.ReactUtils.createElement("strong", {children: "$status"}),
|
||||
" for the statusName, ",
|
||||
BDFDB.ReactUtils.createElement("strong", {children: "$game"}),
|
||||
" for the gamename, ",
|
||||
BDFDB.ReactUtils.createElement("strong", {children: "$song"}),
|
||||
" for the songname and ",
|
||||
BDFDB.ReactUtils.createElement("strong", {children: "$artist"}),
|
||||
" for the songartist."
|
||||
]
|
||||
})
|
||||
})].concat(Object.keys(notificationStrings).map(key => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "TextInput",
|
||||
plugin: this,
|
||||
keys: ["notificationstrings", key],
|
||||
placeholder: this.defaults.notificationstrings[key].value,
|
||||
label: `${BDFDB.LibraryModules.StringUtils.upperCaseFirstChar(key)} Message: `,
|
||||
basis: "70%",
|
||||
value: notificationStrings[key]
|
||||
})))
|
||||
}));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Notification Sounds",
|
||||
collapseStates: collapseStates,
|
||||
children: Object.keys(notificationSounds).map((key, i) => (key.indexOf("desktop") == -1 || "Notification" in window) && [
|
||||
i != 0 && key.indexOf("toast") == 0 && BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormDivider, {
|
||||
className: BDFDB.disCN.marginbottom8
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.marginbottom8,
|
||||
align: BDFDB.LibraryComponents.Flex.Align.CENTER,
|
||||
direction: BDFDB.LibraryComponents.Flex.Direction.HORIZONTAL,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsLabel, {
|
||||
label: `${key.split(/(desktop)|(toast)/).filter(n => n).map(n => BDFDB.LibraryModules.StringUtils.upperCaseFirstChar(n)).join("-")} Notification Sound: `,
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
|
||||
type: "Switch",
|
||||
mini: true,
|
||||
grow: 0,
|
||||
label: "Mute:",
|
||||
value: notificationSounds[key].mute,
|
||||
onChange: value => {
|
||||
notificationSounds[key].mute = value;
|
||||
BDFDB.DataUtils.save(notificationSounds, this, "notificationsounds");
|
||||
}
|
||||
})
|
||||
].filter(n => n)
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.marginbottom8,
|
||||
align: BDFDB.LibraryComponents.Flex.Align.CENTER,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
className: `input-${key}src`,
|
||||
type: "file",
|
||||
filter: ["audio", "video"],
|
||||
useFilePath: true,
|
||||
placeholder: "Url or Filepath",
|
||||
value: notificationSounds[key].url
|
||||
})
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Button, {
|
||||
onClick: _ => {
|
||||
let source = settingsPanel.querySelector(`.input-${key}src ` + BDFDB.dotCN.input).value.trim();
|
||||
if (!source.length) {
|
||||
BDFDB.NotificationUtils.toast(`Sound file was removed.`, {type: "warn"});
|
||||
successSavedAudio(key, source, source);
|
||||
}
|
||||
else if (source.indexOf("http") == 0) BDFDB.LibraryRequires.request(source, (error, response, result) => {
|
||||
if (response) {
|
||||
let type = response.headers["content-type"];
|
||||
if (type && (type.indexOf("octet-stream") > -1 || type.indexOf("audio") > -1 || type.indexOf("video") > -1)) {
|
||||
successSavedAudio(key, source, source);
|
||||
return;
|
||||
BDFDB.DataUtils.save(friendsData, this, "friends");
|
||||
BDFDB.DataUtils.save(nonFriendsData, this, "nonfriends");
|
||||
|
||||
for (let key in settings) innerItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "Switch",
|
||||
plugin: this,
|
||||
keys: ["settings", key],
|
||||
label: this.defaults.settings[key].description,
|
||||
value: settings[key]
|
||||
}));
|
||||
for (let key in amounts) if (key.indexOf("desktop") == -1 || "Notification" in window) innerItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "TextInput",
|
||||
childProps: {
|
||||
type: "number"
|
||||
},
|
||||
plugin: this,
|
||||
keys: ["amounts", key],
|
||||
label: this.defaults.amounts[key].description,
|
||||
basis: "20%",
|
||||
min: this.defaults.amounts[key].min,
|
||||
max: this.defaults.amounts[key].max,
|
||||
value: amounts[key]
|
||||
}));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Settings",
|
||||
collapseStates: collapseStates,
|
||||
children: innerItems
|
||||
}));
|
||||
|
||||
if (friends.length) settingsItems.push(createUserList(friends, "friends", "Friend-List"));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Add new Stranger",
|
||||
collapseStates: collapseStates,
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.margintop8,
|
||||
align: BDFDB.LibraryComponents.Flex.Align.CENTER,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
className: `input-newstranger`,
|
||||
placeholder: "user (id or name#discriminator)",
|
||||
value: ""
|
||||
})
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Button, {
|
||||
onClick: _ => {
|
||||
let userId = settingsPanel.props._node.querySelector(`.input-newstranger ` + BDFDB.dotCN.input).value.trim();
|
||||
if (userId == BDFDB.UserUtils.me.id) BDFDB.NotificationUtils.toast("Are you seriously trying to stalk yourself?", {type: "error"});
|
||||
else if (friendIds.includes(userId)) BDFDB.NotificationUtils.toast("User is already a friend of yours, please use the 'Friend-List' area to configure them", {type: "error"});
|
||||
else if (Object.keys(nonFriends).includes(userId)) BDFDB.NotificationUtils.toast("User is already being observed as a 'Stranger'", {type: "error"});
|
||||
else {
|
||||
let user = /.+#[0-9]{4}/.test(userId) ? BDFDB.LibraryModules.UserStore.findByTag(userId.split("#").slice(0, -1).join("#"), userId.split("#").pop()) : BDFDB.LibraryModules.UserStore.getUser(userId);
|
||||
if (user) {
|
||||
BDFDB.DataUtils.save(this.createDefaultConfig(), this, "nonfriends", userId);
|
||||
BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
|
||||
this.SettingsUpdated = true;
|
||||
}
|
||||
else BDFDB.NotificationUtils.toast("Please enter a valid UserID of a user that has been loaded in your client", {type: "error"});
|
||||
}
|
||||
BDFDB.NotificationUtils.toast("Use a valid direct link to a video or audio source, they usually end on something like .mp3, .mp4 or .wav", {type: "danger"});
|
||||
});
|
||||
else BDFDB.LibraryRequires.fs.readFile(source, (error, response) => {
|
||||
if (error) BDFDB.NotificationUtils.toast("Could not fetch file, please make sure the file exists", {type: "danger"});
|
||||
else successSavedAudio(key, source, `data:audio/mpeg;base64,${response.toString("base64")}`);
|
||||
});
|
||||
},
|
||||
children: BDFDB.LanguageUtils.LanguageStrings.SAVE
|
||||
},
|
||||
children: BDFDB.LanguageUtils.LanguageStrings.ADD
|
||||
})
|
||||
]
|
||||
})
|
||||
}));
|
||||
if (nonFriends.length) settingsItems.push(createUserList(nonFriends, "nonfriends", "Stranger-List"));
|
||||
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "LogIn/-Out Timelog",
|
||||
collapseStates: collapseStates,
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
|
||||
type: "Button",
|
||||
label: "Overview of LogIns/-Outs of current Session",
|
||||
onClick: _ => {this.showTimeLog()},
|
||||
children: "Timelog"
|
||||
})
|
||||
}));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Notification Messages",
|
||||
collapseStates: collapseStates,
|
||||
children: [BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.marginbottom8,
|
||||
children: BDFDB.ReactUtils.createElement("div", {
|
||||
className: BDFDB.disCNS.settingsrowtitledefault + BDFDB.disCN.cursordefault,
|
||||
children: [
|
||||
"Allows you to configure your own message strings for the different statuses. ",
|
||||
BDFDB.ReactUtils.createElement("strong", {children: "$user"}),
|
||||
" is the placeholder for the username, ",
|
||||
BDFDB.ReactUtils.createElement("strong", {children: "$status"}),
|
||||
" for the statusName, ",
|
||||
BDFDB.ReactUtils.createElement("strong", {children: "$game"}),
|
||||
" for the gamename, ",
|
||||
BDFDB.ReactUtils.createElement("strong", {children: "$song"}),
|
||||
" for the songname and ",
|
||||
BDFDB.ReactUtils.createElement("strong", {children: "$artist"}),
|
||||
" for the songartist."
|
||||
]
|
||||
})
|
||||
]
|
||||
})
|
||||
]).flat(10).filter(n => n)
|
||||
}));
|
||||
|
||||
return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, settingsItems);
|
||||
})].concat(Object.keys(notificationStrings).map(key => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "TextInput",
|
||||
plugin: this,
|
||||
keys: ["notificationstrings", key],
|
||||
placeholder: this.defaults.notificationstrings[key].value,
|
||||
label: `${BDFDB.LibraryModules.StringUtils.upperCaseFirstChar(key)} Message: `,
|
||||
basis: "70%",
|
||||
value: notificationStrings[key]
|
||||
})))
|
||||
}));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Notification Sounds",
|
||||
collapseStates: collapseStates,
|
||||
children: Object.keys(notificationSounds).map((key, i) => (key.indexOf("desktop") == -1 || "Notification" in window) && [
|
||||
i != 0 && key.indexOf("toast") == 0 && BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormDivider, {
|
||||
className: BDFDB.disCN.marginbottom8
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.marginbottom8,
|
||||
align: BDFDB.LibraryComponents.Flex.Align.CENTER,
|
||||
direction: BDFDB.LibraryComponents.Flex.Direction.HORIZONTAL,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsLabel, {
|
||||
label: `${key.split(/(desktop)|(toast)/).filter(n => n).map(n => BDFDB.LibraryModules.StringUtils.upperCaseFirstChar(n)).join("-")} Notification Sound: `,
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsItem, {
|
||||
type: "Switch",
|
||||
mini: true,
|
||||
grow: 0,
|
||||
label: "Mute:",
|
||||
value: notificationSounds[key].mute,
|
||||
onChange: value => {
|
||||
notificationSounds[key].mute = value;
|
||||
BDFDB.DataUtils.save(notificationSounds, this, "notificationsounds");
|
||||
}
|
||||
})
|
||||
].filter(n => n)
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.marginbottom8,
|
||||
align: BDFDB.LibraryComponents.Flex.Align.CENTER,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
className: `input-${key}src`,
|
||||
type: "file",
|
||||
filter: ["audio", "video"],
|
||||
useFilePath: true,
|
||||
placeholder: "Url or Filepath",
|
||||
value: notificationSounds[key].url
|
||||
})
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Button, {
|
||||
onClick: _ => {
|
||||
let source = settingsPanel.props._node.querySelector(`.input-${key}src ` + BDFDB.dotCN.input).value.trim();
|
||||
if (!source.length) {
|
||||
BDFDB.NotificationUtils.toast(`Sound file was removed.`, {type: "warn"});
|
||||
successSavedAudio(key, source, source);
|
||||
}
|
||||
else if (source.indexOf("http") == 0) BDFDB.LibraryRequires.request(source, (error, response, result) => {
|
||||
if (response) {
|
||||
let type = response.headers["content-type"];
|
||||
if (type && (type.indexOf("octet-stream") > -1 || type.indexOf("audio") > -1 || type.indexOf("video") > -1)) {
|
||||
successSavedAudio(key, source, source);
|
||||
return;
|
||||
}
|
||||
}
|
||||
BDFDB.NotificationUtils.toast("Use a valid direct link to a video or audio source, they usually end on something like .mp3, .mp4 or .wav", {type: "danger"});
|
||||
});
|
||||
else BDFDB.LibraryRequires.fs.readFile(source, (error, response) => {
|
||||
if (error) BDFDB.NotificationUtils.toast("Could not fetch file, please make sure the file exists", {type: "danger"});
|
||||
else successSavedAudio(key, source, `data:audio/mpeg;base64,${response.toString("base64")}`);
|
||||
});
|
||||
},
|
||||
children: BDFDB.LanguageUtils.LanguageStrings.SAVE
|
||||
})
|
||||
]
|
||||
})
|
||||
]).flat(10).filter(n => n)
|
||||
}));
|
||||
|
||||
return settingsItems;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onSettingsClosed () {
|
||||
|
|
|
@ -14,12 +14,12 @@ module.exports = (_ => {
|
|||
"info": {
|
||||
"name": "NotificationSounds",
|
||||
"author": "DevilBro",
|
||||
"version": "3.5.6",
|
||||
"version": "3.5.7",
|
||||
"description": "Allow you to replace the native sounds of Discord with your own"
|
||||
},
|
||||
"changeLog": {
|
||||
"fixed": {
|
||||
"Local Sounds not playing": "Fixed issue with newly added local sounds not playing"
|
||||
"New Settings Menu": "Fixed for new settings menu"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -425,191 +425,199 @@ module.exports = (_ => {
|
|||
|
||||
};
|
||||
|
||||
let settingsPanel, settingsItems = [];
|
||||
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Settings",
|
||||
let settingsPanel;
|
||||
return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, {
|
||||
collapseStates: collapseStates,
|
||||
children: Object.keys(volumes).map(key => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "Slider",
|
||||
plugin: this,
|
||||
keys: ["volumes", key],
|
||||
basis: "50%",
|
||||
label: this.defaults.volumes[key].description,
|
||||
value: volumes[key]
|
||||
}))
|
||||
}));
|
||||
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Add new Sound",
|
||||
collapseStates: collapseStates,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.margintop4,
|
||||
children: _ => {
|
||||
let settingsItems = [];
|
||||
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Settings",
|
||||
collapseStates: collapseStates,
|
||||
children: Object.keys(volumes).map(key => BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.SettingsSaveItem, {
|
||||
type: "Slider",
|
||||
plugin: this,
|
||||
keys: ["volumes", key],
|
||||
basis: "50%",
|
||||
label: this.defaults.volumes[key].description,
|
||||
value: volumes[key]
|
||||
}))
|
||||
}));
|
||||
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Add new Sound",
|
||||
collapseStates: collapseStates,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
|
||||
title: "Categoryname",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
className: "input-newsound input-category",
|
||||
value: "",
|
||||
placeholder: "Categoryname"
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.margintop4,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
|
||||
title: "Categoryname",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
className: "input-newsound input-category",
|
||||
value: "",
|
||||
placeholder: "Categoryname"
|
||||
})
|
||||
})
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
|
||||
title: "Soundname",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
className: "input-newsound input-sound",
|
||||
value: "",
|
||||
placeholder: "Soundname"
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
]
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
|
||||
title: "Soundname",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
className: "input-newsound input-sound",
|
||||
value: "",
|
||||
placeholder: "Soundname"
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.margintop4,
|
||||
align: BDFDB.LibraryComponents.Flex.Align.END,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
|
||||
title: "Source",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
className: "input-newsound input-source",
|
||||
type: "file",
|
||||
filter: ["audio", "video"],
|
||||
useFilePath: true,
|
||||
value: "",
|
||||
placeholder: "Source"
|
||||
})
|
||||
})
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Button, {
|
||||
style: {marginBottom: 1},
|
||||
onClick: _ => {
|
||||
for (let input of settingsPanel.props._node.querySelectorAll(".input-newsound " + BDFDB.dotCN.input)) if (!input.value || input.value.length == 0 || input.value.trim().length == 0) return BDFDB.NotificationUtils.toast("Fill out all fields to add a new sound", {type: "danger"});
|
||||
let category = settingsPanel.props._node.querySelector(".input-category " + BDFDB.dotCN.input).value.trim();
|
||||
let sound = settingsPanel.props._node.querySelector(".input-sound " + BDFDB.dotCN.input).value.trim();
|
||||
let source = settingsPanel.props._node.querySelector(".input-source " + BDFDB.dotCN.input).value.trim();
|
||||
if (source.indexOf("http") == 0) BDFDB.LibraryRequires.request(source, (error, response, result) => {
|
||||
if (response) {
|
||||
let type = response.headers["content-type"];
|
||||
if (type && (type.indexOf("octet-stream") > -1 || type.indexOf("audio") > -1 || type.indexOf("video") > -1)) return successSavedAudio({category, sound, source});
|
||||
}
|
||||
BDFDB.NotificationUtils.toast("Use a valid direct link to a video or audio source, they usually end on something like .mp3, .mp4 or .wav", {type: "danger"});
|
||||
});
|
||||
else BDFDB.LibraryRequires.fs.readFile(source, (error, response) => {
|
||||
if (error) BDFDB.NotificationUtils.toast("Could not fetch file. Please make sure the file exists", {type: "danger"});
|
||||
else return successSavedAudio({category, sound, source: `data:audio/mpeg;base64,${response.toString("base64")}`});
|
||||
});
|
||||
},
|
||||
children: BDFDB.LanguageUtils.LanguageStrings.SAVE
|
||||
})
|
||||
})
|
||||
]
|
||||
})
|
||||
]
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.margintop4,
|
||||
align: BDFDB.LibraryComponents.Flex.Align.END,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
|
||||
title: "Source",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextInput, {
|
||||
className: "input-newsound input-source",
|
||||
type: "file",
|
||||
filter: ["audio", "video"],
|
||||
useFilePath: true,
|
||||
value: "",
|
||||
placeholder: "Source"
|
||||
})
|
||||
})
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Button, {
|
||||
style: {marginBottom: 1},
|
||||
onClick: _ => {
|
||||
for (let input of settingsPanel.querySelectorAll(".input-newsound " + BDFDB.dotCN.input)) if (!input.value || input.value.length == 0 || input.value.trim().length == 0) return BDFDB.NotificationUtils.toast("Fill out all fields to add a new sound", {type: "danger"});
|
||||
let category = settingsPanel.querySelector(".input-category " + BDFDB.dotCN.input).value.trim();
|
||||
let sound = settingsPanel.querySelector(".input-sound " + BDFDB.dotCN.input).value.trim();
|
||||
let source = settingsPanel.querySelector(".input-source " + BDFDB.dotCN.input).value.trim();
|
||||
if (source.indexOf("http") == 0) BDFDB.LibraryRequires.request(source, (error, response, result) => {
|
||||
if (response) {
|
||||
let type = response.headers["content-type"];
|
||||
if (type && (type.indexOf("octet-stream") > -1 || type.indexOf("audio") > -1 || type.indexOf("video") > -1)) return successSavedAudio({category, sound, source});
|
||||
}
|
||||
BDFDB.NotificationUtils.toast("Use a valid direct link to a video or audio source, they usually end on something like .mp3, .mp4 or .wav", {type: "danger"});
|
||||
});
|
||||
else BDFDB.LibraryRequires.fs.readFile(source, (error, response) => {
|
||||
if (error) BDFDB.NotificationUtils.toast("Could not fetch file. Please make sure the file exists", {type: "danger"});
|
||||
else return successSavedAudio({category, sound, source: `data:audio/mpeg;base64,${response.toString("base64")}`});
|
||||
});
|
||||
},
|
||||
children: BDFDB.LanguageUtils.LanguageStrings.SAVE
|
||||
})
|
||||
]
|
||||
})
|
||||
]
|
||||
}));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Implemented Sounds",
|
||||
collapseStates: collapseStates,
|
||||
children: Object.keys(BDFDB.ObjectUtils.filter(types, typedata => typedata.implemented)).map(type => createSoundCard(type)).flat(10).filter(n => n)
|
||||
}));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Unimplemented Sounds",
|
||||
collapseStates: collapseStates,
|
||||
children: Object.keys(BDFDB.ObjectUtils.filter(types, typedata => !typedata.implemented)).map(type => createSoundCard(type)).flat(10).filter(n => n)
|
||||
}));
|
||||
|
||||
let removeableCategories = [{value: removeAllKey, label: BDFDB.LanguageUtils.LanguageStrings.FORM_LABEL_ALL}].concat(Object.keys(audios).filter(category => !(defaultAudios[category] && !Object.keys(audios[category] || {}).filter(sound => defaultAudios[category][sound] === undefined).length)).map(name => ({value: name, label: name})));
|
||||
let removeableSounds = {};
|
||||
for (let category of removeableCategories) removeableSounds[category.value] = [{value: removeAllKey, label: BDFDB.LanguageUtils.LanguageStrings.FORM_LABEL_ALL}].concat(Object.keys(audios[category.value] || {}).filter(sound => !(defaultAudios[category.value] && defaultAudios[category.value][sound] !== undefined)).map(name => ({value: name, label: name})));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Remove Sounds",
|
||||
collapseStates: collapseStates,
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.margintop4,
|
||||
align: BDFDB.LibraryComponents.Flex.Align.END,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
grow: 0,
|
||||
shrink: 0,
|
||||
basis: "35%",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
|
||||
title: "Category",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Select, {
|
||||
key: "REMOVE_CATEGORY",
|
||||
value: removeAllKey,
|
||||
options: removeableCategories,
|
||||
searchable: true,
|
||||
onChange: (category, instance) => {
|
||||
let soundSelectIns = BDFDB.ReactUtils.findOwner(BDFDB.ReactUtils.findOwner(instance, {name: ["BDFDB_Modal", "BDFDB_SettingsPanel"], up: true}), {key: "REMOVE_SOUND"});
|
||||
if (soundSelectIns && removeableSounds[category.value]) {
|
||||
soundSelectIns.props.options = removeableSounds[category.value];
|
||||
soundSelectIns.props.value = removeAllKey;
|
||||
BDFDB.ReactUtils.forceUpdate(soundSelectIns);
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
grow: 0,
|
||||
shrink: 0,
|
||||
basis: "35%",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
|
||||
title: "Sound",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Select, {
|
||||
key: "REMOVE_SOUND",
|
||||
value: removeAllKey,
|
||||
options: removeableSounds[removeAllKey],
|
||||
searchable: true
|
||||
})
|
||||
})
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
grow: 0,
|
||||
shrink: 1,
|
||||
basis: "25%",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Button, {
|
||||
style: {marginBottom: 1},
|
||||
color: BDFDB.LibraryComponents.Button.Colors.RED,
|
||||
onClick: (event, instance) => {
|
||||
let wrapperIns = BDFDB.ReactUtils.findOwner(instance, {name: ["BDFDB_Modal", "BDFDB_SettingsPanel"], up: true});
|
||||
let categorySelectIns = BDFDB.ReactUtils.findOwner(wrapperIns, {key: "REMOVE_CATEGORY"});
|
||||
let soundSelectIns = BDFDB.ReactUtils.findOwner(wrapperIns, {key: "REMOVE_SOUND"});
|
||||
if (categorySelectIns && soundSelectIns) {
|
||||
let soundAmount = 0;
|
||||
let catAll = categorySelectIns.props.value == removeAllKey;
|
||||
let soundAll = soundSelectIns.props.value == removeAllKey;
|
||||
if (catAll) soundAmount = BDFDB.ArrayUtils.sum(Object.keys(audios).map(category => Object.keys(audios[category] || {}).filter(sound => !(defaultAudios[category] && defaultAudios[category][sound] !== undefined)).length));
|
||||
else if (soundAll) soundAmount = Object.keys(audios[categorySelectIns.props.value] || {}).filter(sound => !(defaultAudios[categorySelectIns.props.value] && defaultAudios[categorySelectIns.props.value][sound] !== undefined)).length;
|
||||
else if (audios[categorySelectIns.props.value][soundSelectIns.props.value]) soundAmount = 1;
|
||||
|
||||
if (soundAmount) BDFDB.ModalUtils.confirm(this, `Are you sure you want to delete ${soundAmount} added sound${soundAmount == 1 ? "" : "s"}?`, _ => {
|
||||
if (catAll) BDFDB.DataUtils.remove(this, "audios");
|
||||
else if (soundAll) BDFDB.DataUtils.remove(this, "audios", categorySelectIns.props.value);
|
||||
else {
|
||||
delete audios[categorySelectIns.props.value][soundSelectIns.props.value];
|
||||
if (BDFDB.ObjectUtils.isEmpty(audios[categorySelectIns.props.value])) delete audios[categorySelectIns.props.value];
|
||||
BDFDB.DataUtils.save(audios, this, "audios");
|
||||
}));
|
||||
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Implemented Sounds",
|
||||
collapseStates: collapseStates,
|
||||
children: Object.keys(BDFDB.ObjectUtils.filter(types, typedata => typedata.implemented)).map(type => createSoundCard(type)).flat(10).filter(n => n)
|
||||
}));
|
||||
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Unimplemented Sounds",
|
||||
collapseStates: collapseStates,
|
||||
children: Object.keys(BDFDB.ObjectUtils.filter(types, typedata => !typedata.implemented)).map(type => createSoundCard(type)).flat(10).filter(n => n)
|
||||
}));
|
||||
|
||||
let removeableCategories = [{value: removeAllKey, label: BDFDB.LanguageUtils.LanguageStrings.FORM_LABEL_ALL}].concat(Object.keys(audios).filter(category => !(defaultAudios[category] && !Object.keys(audios[category] || {}).filter(sound => defaultAudios[category][sound] === undefined).length)).map(name => ({value: name, label: name})));
|
||||
let removeableSounds = {};
|
||||
for (let category of removeableCategories) removeableSounds[category.value] = [{value: removeAllKey, label: BDFDB.LanguageUtils.LanguageStrings.FORM_LABEL_ALL}].concat(Object.keys(audios[category.value] || {}).filter(sound => !(defaultAudios[category.value] && defaultAudios[category.value][sound] !== undefined)).map(name => ({value: name, label: name})));
|
||||
settingsItems.push(BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.CollapseContainer, {
|
||||
title: "Remove Sounds",
|
||||
collapseStates: collapseStates,
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex, {
|
||||
className: BDFDB.disCN.margintop4,
|
||||
align: BDFDB.LibraryComponents.Flex.Align.END,
|
||||
children: [
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
grow: 0,
|
||||
shrink: 0,
|
||||
basis: "35%",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
|
||||
title: "Category",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Select, {
|
||||
key: "REMOVE_CATEGORY",
|
||||
value: removeAllKey,
|
||||
options: removeableCategories,
|
||||
searchable: true,
|
||||
onChange: (category, instance) => {
|
||||
let soundSelectIns = BDFDB.ReactUtils.findOwner(BDFDB.ReactUtils.findOwner(instance, {name: ["BDFDB_Modal", "BDFDB_SettingsPanel"], up: true}), {key: "REMOVE_SOUND"});
|
||||
if (soundSelectIns && removeableSounds[category.value]) {
|
||||
soundSelectIns.props.options = removeableSounds[category.value];
|
||||
soundSelectIns.props.value = removeAllKey;
|
||||
BDFDB.ReactUtils.forceUpdate(soundSelectIns);
|
||||
}
|
||||
}
|
||||
this.loadAudios();
|
||||
this.loadChoices();
|
||||
BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
|
||||
});
|
||||
else BDFDB.NotificationUtils.toast("No sounds to delete", {type: "danger"});
|
||||
}
|
||||
},
|
||||
children: BDFDB.LanguageUtils.LanguageStrings.DELETE
|
||||
})
|
||||
})
|
||||
})
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
grow: 0,
|
||||
shrink: 0,
|
||||
basis: "35%",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.FormComponents.FormItem, {
|
||||
title: "Sound",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Select, {
|
||||
key: "REMOVE_SOUND",
|
||||
value: removeAllKey,
|
||||
options: removeableSounds[removeAllKey],
|
||||
searchable: true
|
||||
})
|
||||
})
|
||||
}),
|
||||
BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Flex.Child, {
|
||||
grow: 0,
|
||||
shrink: 1,
|
||||
basis: "25%",
|
||||
children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Button, {
|
||||
style: {marginBottom: 1},
|
||||
color: BDFDB.LibraryComponents.Button.Colors.RED,
|
||||
onClick: (event, instance) => {
|
||||
let wrapperIns = BDFDB.ReactUtils.findOwner(instance, {name: ["BDFDB_Modal", "BDFDB_SettingsPanel"], up: true});
|
||||
let categorySelectIns = BDFDB.ReactUtils.findOwner(wrapperIns, {key: "REMOVE_CATEGORY"});
|
||||
let soundSelectIns = BDFDB.ReactUtils.findOwner(wrapperIns, {key: "REMOVE_SOUND"});
|
||||
if (categorySelectIns && soundSelectIns) {
|
||||
let soundAmount = 0;
|
||||
let catAll = categorySelectIns.props.value == removeAllKey;
|
||||
let soundAll = soundSelectIns.props.value == removeAllKey;
|
||||
if (catAll) soundAmount = BDFDB.ArrayUtils.sum(Object.keys(audios).map(category => Object.keys(audios[category] || {}).filter(sound => !(defaultAudios[category] && defaultAudios[category][sound] !== undefined)).length));
|
||||
else if (soundAll) soundAmount = Object.keys(audios[categorySelectIns.props.value] || {}).filter(sound => !(defaultAudios[categorySelectIns.props.value] && defaultAudios[categorySelectIns.props.value][sound] !== undefined)).length;
|
||||
else if (audios[categorySelectIns.props.value][soundSelectIns.props.value]) soundAmount = 1;
|
||||
|
||||
if (soundAmount) BDFDB.ModalUtils.confirm(this, `Are you sure you want to delete ${soundAmount} added sound${soundAmount == 1 ? "" : "s"}?`, _ => {
|
||||
if (catAll) BDFDB.DataUtils.remove(this, "audios");
|
||||
else if (soundAll) BDFDB.DataUtils.remove(this, "audios", categorySelectIns.props.value);
|
||||
else {
|
||||
delete audios[categorySelectIns.props.value][soundSelectIns.props.value];
|
||||
if (BDFDB.ObjectUtils.isEmpty(audios[categorySelectIns.props.value])) delete audios[categorySelectIns.props.value];
|
||||
BDFDB.DataUtils.save(audios, this, "audios");
|
||||
}
|
||||
this.loadAudios();
|
||||
this.loadChoices();
|
||||
BDFDB.PluginUtils.refreshSettingsPanel(this, settingsPanel, collapseStates);
|
||||
});
|
||||
else BDFDB.NotificationUtils.toast("No sounds to delete", {type: "danger"});
|
||||
}
|
||||
},
|
||||
children: BDFDB.LanguageUtils.LanguageStrings.DELETE
|
||||
})
|
||||
})
|
||||
]
|
||||
})
|
||||
]
|
||||
})
|
||||
}));
|
||||
|
||||
return settingsPanel = BDFDB.PluginUtils.createSettingsPanel(this, settingsItems);
|
||||
}));
|
||||
|
||||
return settingsItems;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onSettingsClosed () {
|
||||
|
|
Loading…
Reference in New Issue