#2164 Disable-able data bank attachments
This commit is contained in:
parent
a7d3130f9a
commit
993284f9c1
|
@ -685,6 +685,30 @@ async function downloadAttachment(attachment) {
|
|||
URL.revokeObjectURL(url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes an attachment from the disabled list.
|
||||
* @param {FileAttachment} attachment Attachment to enable
|
||||
* @param {function} callback Success callback
|
||||
*/
|
||||
function enableAttachment(attachment, callback) {
|
||||
ensureAttachmentsExist();
|
||||
extension_settings.disabled_attachments = extension_settings.disabled_attachments.filter(url => url !== attachment.url);
|
||||
saveSettingsDebounced();
|
||||
callback();
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an attachment to the disabled list.
|
||||
* @param {FileAttachment} attachment Attachment to disable
|
||||
* @param {function} callback Success callback
|
||||
*/
|
||||
function disableAttachment(attachment, callback) {
|
||||
ensureAttachmentsExist();
|
||||
extension_settings.disabled_attachments.push(attachment.url);
|
||||
saveSettingsDebounced();
|
||||
callback();
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves a file attachment to a different source.
|
||||
* @param {FileAttachment} attachment Attachment to moves
|
||||
|
@ -752,11 +776,25 @@ async function deleteAttachment(attachment, source, callback, confirm = true) {
|
|||
break;
|
||||
}
|
||||
|
||||
if (Array.isArray(extension_settings.disabled_attachments) && extension_settings.disabled_attachments.includes(attachment.url)) {
|
||||
extension_settings.disabled_attachments = extension_settings.disabled_attachments.filter(url => url !== attachment.url);
|
||||
saveSettingsDebounced();
|
||||
}
|
||||
|
||||
const silent = confirm === false;
|
||||
await deleteFileFromServer(attachment.url, silent);
|
||||
callback();
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the attachment is disabled.
|
||||
* @param {FileAttachment} attachment Attachment to check
|
||||
* @returns {boolean} True if attachment is disabled, false otherwise.
|
||||
*/
|
||||
function isAttachmentDisabled(attachment) {
|
||||
return extension_settings.disabled_attachments.some(url => url === attachment?.url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens the attachment manager.
|
||||
*/
|
||||
|
@ -806,7 +844,9 @@ async function openAttachmentManager() {
|
|||
const sortedAttachmentList = attachments.slice().filter(filterFn).sort(sortFn);
|
||||
|
||||
for (const attachment of sortedAttachmentList) {
|
||||
const isDisabled = isAttachmentDisabled(attachment);
|
||||
const attachmentTemplate = template.find('.attachmentListItemTemplate .attachmentListItem').clone();
|
||||
attachmentTemplate.toggleClass('disabled', isDisabled);
|
||||
attachmentTemplate.find('.attachmentFileIcon').attr('title', attachment.url);
|
||||
attachmentTemplate.find('.attachmentListItemName').text(attachment.name);
|
||||
attachmentTemplate.find('.attachmentListItemSize').text(humanFileSize(attachment.size));
|
||||
|
@ -816,6 +856,8 @@ async function openAttachmentManager() {
|
|||
attachmentTemplate.find('.deleteAttachmentButton').on('click', () => deleteAttachment(attachment, source, renderAttachments));
|
||||
attachmentTemplate.find('.downloadAttachmentButton').on('click', () => downloadAttachment(attachment));
|
||||
attachmentTemplate.find('.moveAttachmentButton').on('click', () => moveAttachment(attachment, source, renderAttachments));
|
||||
attachmentTemplate.find('.enableAttachmentButton').toggle(isDisabled).on('click', () => enableAttachment(attachment, renderAttachments));
|
||||
attachmentTemplate.find('.disableAttachmentButton').toggle(!isDisabled).on('click', () => disableAttachment(attachment, renderAttachments));
|
||||
template.find(sources[source]).append(attachmentTemplate);
|
||||
}
|
||||
}
|
||||
|
@ -1117,6 +1159,10 @@ export async function uploadFileAttachmentToServer(file, target) {
|
|||
}
|
||||
|
||||
function ensureAttachmentsExist() {
|
||||
if (!Array.isArray(extension_settings.disabled_attachments)) {
|
||||
extension_settings.disabled_attachments = [];
|
||||
}
|
||||
|
||||
if (!Array.isArray(extension_settings.attachments)) {
|
||||
extension_settings.attachments = [];
|
||||
}
|
||||
|
@ -1137,7 +1183,7 @@ function ensureAttachmentsExist() {
|
|||
}
|
||||
|
||||
/**
|
||||
* Gets all currently available attachments.
|
||||
* Gets all currently available attachments. Ignores disabled attachments.
|
||||
* @returns {FileAttachment[]} List of attachments
|
||||
*/
|
||||
export function getDataBankAttachments() {
|
||||
|
@ -1146,11 +1192,11 @@ export function getDataBankAttachments() {
|
|||
const chatAttachments = chat_metadata.attachments ?? [];
|
||||
const characterAttachments = extension_settings.character_attachments?.[characters[this_chid]?.avatar] ?? [];
|
||||
|
||||
return [...globalAttachments, ...chatAttachments, ...characterAttachments];
|
||||
return [...globalAttachments, ...chatAttachments, ...characterAttachments].filter(x => !isAttachmentDisabled(x));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all attachments for a specific source.
|
||||
* Gets all attachments for a specific source. Includes disabled attachments.
|
||||
* @param {string} source Attachment source
|
||||
* @returns {FileAttachment[]} List of attachments
|
||||
*/
|
||||
|
@ -1165,6 +1211,8 @@ export function getDataBankAttachmentsForSource(source) {
|
|||
case ATTACHMENT_SOURCE.CHARACTER:
|
||||
return extension_settings.character_attachments?.[characters[this_chid]?.avatar] ?? [];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -145,8 +145,18 @@ const extension_settings = {
|
|||
variables: {
|
||||
global: {},
|
||||
},
|
||||
/**
|
||||
* @type {import('./chats.js').FileAttachment[]}
|
||||
*/
|
||||
attachments: [],
|
||||
/**
|
||||
* @type {Record<string, import('./chats.js').FileAttachment[]>}
|
||||
*/
|
||||
character_attachments: {},
|
||||
/**
|
||||
* @type {string[]}
|
||||
*/
|
||||
disabled_attachments: [],
|
||||
};
|
||||
|
||||
let modules = [];
|
||||
|
|
|
@ -106,11 +106,13 @@
|
|||
<div class="attachmentListItemName flex1"></div>
|
||||
<small class="attachmentListItemCreated"></small>
|
||||
<small class="attachmentListItemSize"></small>
|
||||
<div class="viewAttachmentButton right_menu_button fa-solid fa-magnifying-glass" title="View attachment content"></div>
|
||||
<div class="moveAttachmentButton right_menu_button fa-solid fa-arrows-alt" title="Move attachment"></div>
|
||||
<div class="editAttachmentButton right_menu_button fa-solid fa-pencil" title="Edit attachment"></div>
|
||||
<div class="downloadAttachmentButton right_menu_button fa-solid fa-download" title="Download attachment"></div>
|
||||
<div class="deleteAttachmentButton right_menu_button fa-solid fa-trash" title="Delete attachment"></div>
|
||||
<div class="viewAttachmentButton right_menu_button fa-fw fa-solid fa-magnifying-glass" title="View attachment content"></div>
|
||||
<div class="disableAttachmentButton right_menu_button fa-fw fa-solid fa-comment" title="Disable attachment"></div>
|
||||
<div class="enableAttachmentButton right_menu_button fa-fw fa-solid fa-comment-slash" title="Enable attachment"></div>
|
||||
<div class="moveAttachmentButton right_menu_button fa-fw fa-solid fa-arrows-alt" title="Move attachment"></div>
|
||||
<div class="editAttachmentButton right_menu_button fa-fw fa-solid fa-pencil" title="Edit attachment"></div>
|
||||
<div class="downloadAttachmentButton right_menu_button fa-fw fa-solid fa-download" title="Download attachment"></div>
|
||||
<div class="deleteAttachmentButton right_menu_button fa-fw fa-solid fa-trash" title="Delete attachment"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -19,6 +19,16 @@
|
|||
padding: 10px;
|
||||
}
|
||||
|
||||
.attachmentListItem.disabled .attachmentListItemName {
|
||||
text-decoration: line-through;
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
.attachmentListItem.disabled .attachmentFileIcon {
|
||||
opacity: 0.75;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.attachmentListItemSize {
|
||||
min-width: 4em;
|
||||
text-align: right;
|
||||
|
|
Loading…
Reference in New Issue