livechat-specific Converse plugin: refactoring

This commit is contained in:
John Livingston
2024-07-25 18:03:46 +02:00
parent c6c365abf0
commit 81632fa467
8 changed files with 338 additions and 248 deletions

View File

@ -0,0 +1,55 @@
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/>
//
// SPDX-License-Identifier: AGPL-3.0-only
// FIXME: this function is copied from @converse. Should not do so.
export function getOpenPromise (): any {
const wrapper: any = {
isResolved: false,
isPending: true,
isRejected: false
}
const promise: any = new Promise((resolve, reject) => {
wrapper.resolve = resolve
wrapper.reject = reject
})
Object.assign(promise, wrapper)
promise.then(
function (v: any) {
promise.isResolved = true
promise.isPending = false
promise.isRejected = false
return v
},
function (e: any) {
promise.isResolved = false
promise.isPending = false
promise.isRejected = true
throw (e)
}
)
return promise
}
export async function destroyMUC (_converse: any, model: any): Promise<void> {
const __ = _converse.__
const messages = [__('Are you sure you want to destroy this groupchat?')]
// Note: challenge and newjid make no sens for peertube-plugin-livechat,
// we remove them comparing to the original function.
let fields = [
{
name: 'reason',
label: __('Optional reason for destroying this groupchat'),
placeholder: __('Reason'),
value: undefined
}
]
try {
fields = await _converse.api.confirm(__('Confirm'), messages, fields)
const reason = fields.filter(f => f.name === 'reason').pop()?.value
const newjid = undefined
return model.sendDestroyIQ(reason, newjid).then(() => model.close())
} catch (e) {
console.error(e)
}
}