This commit is contained in:
2026-05-13 19:58:16 +03:00
commit f5adeb292b
78 changed files with 12024 additions and 0 deletions

114
lib/modules/channels.js Normal file
View File

@@ -0,0 +1,114 @@
const _ = require('lodash')
const slug = require('slug')
const XML = require('xmldoc')
const Factory = require('../factory')
//
// Initialize the child logger for
// the module
//
const log = require('../log').child({
module: 'channels'
})
module.exports = function(context) {
//
// Select all of the rooms
//
return context.jabber.fetch(
'SELECT room_jid, subject, config FROM dbo.tc_rooms'
)
//
// The convert them to channels and
// write them to the datafile
//
.then(function(results) {
log.info(`${results.recordset.length} records found`)
//
// Define a map to hold the channels
// info for downstream modules
//
var channels = {}
//
// Iterate over the record set and
// create a channel for each room
//
results.recordset.forEach(function(room) {
log.debug(room)
//
// Define the channel and add
// it to the context
//
var channel = channels[room.room_jid] = {
team: context.values.team.name,
name: slug(toName(room.room_jid)),
display_name: toDisplayName(room.room_jid),
header: toDescription(room.subject),
purpose: toDescription(room.subject),
type: toType(room.config)
}
//
// Write the channel data to the
// output
//
log.info(`... writing ${channel.name}`)
context.output.write(
Factory.channel(channel)
)
})
//
// Add the channel map to the context
//
context.values.channels = channels
//
// Resolve the promise
//
return context
})
}
//
// Parses the name from a room jid
//
const toName = function (jid='') {
return jid.substr(0, jid.indexOf('@')).replace(/\\20/g, ' ')
}
//
// Formats the display name
//
const toDisplayName = function (jid='') {
return _.startCase(_.toLower(toName(jid)))
}
//
// Returns a description from the subject
//
const toDescription = function (subject='') {
return subject
}
//
// Parses the channel type from the
// config field
//
const toType = function (xml='<x/>') {
//
// Parse the config
//
var config = new XML.XmlDocument(xml)
//
// Extract the value. If it does not exist,
// we default to '1' - private
//
var value = _.get(
config.childWithAttribute('var', 'members-only'),
'firstChild.val',
'1'
)
//
// If members-only is '1', return private
// otherwise, return public
//
return value === '1' ? 'P' : 'O'
}