keppler
Version:
Real time code sharing for your lectures and presentations
128 lines (101 loc) • 3.05 kB
JavaScript
const Project = require('./project.js')
const chalk = require('chalk')
class Projects
{
constructor(_config)
{
this.config = _config
this.all = {}
this.setSocket()
}
setSocket()
{
// Save original socket and create a channel for projects
this.projectsSocket = this.config.socket.of('/projects')
// Connection event
this.projectsSocket.on('connection', (socket) =>
{
// // Send the config to the new socket
socket.emit('config', { domain: this.config.domain, server: this.config.server })
// Send the projects update to all users
this.projectsSocket.emit('update_projects', this.describe())
if(this.config.debug >= 1)
{
console.log(`${chalk.green.bold('projects > socket')} - ${chalk.cyan('connection')} - ${chalk.cyan(socket.id)}`)
}
})
}
createProject(_options)
{
// Create project
const project = new Project(this.config, _options)
let sameNameProject = this.all[project.slug]
// Try to found same name project
while(typeof sameNameProject !== 'undefined')
{
// Found new number
let lastNumber = sameNameProject.name.match(/\d+$/)
let newNumber = 2
if(lastNumber && lastNumber.length)
{
lastNumber = ~~lastNumber[0]
newNumber = lastNumber + 1
}
// Update project name
project.setName(_options.name + ' ' + newNumber)
// Try to found
sameNameProject = this.all[project.slug]
}
// Save
this.all[project.slug] = project
// Emit
this.projectsSocket.emit('update_projects', this.describe())
// Return
return project
}
deleteProject(_slug)
{
// Set up
const project = this.all[_slug]
// Project found
if(typeof project !== 'undefined')
{
// Delete
delete this.all[_slug]
project.destructor()
// Emit
this.projectsSocket.emit('update_projects', this.describe())
}
}
getProjectBySlug(_slug)
{
// Find project
const project = this.all[_slug]
// Found
if(project)
{
return project
}
// Not found
return false
}
describe()
{
const result = {}
result.domain = this.config.domain
result.all = {}
for(const _slug in this.all)
{
const _project = this.all[_slug]
result.all[_slug] = {
slug: _project.slug,
name: _project.name,
filesCount: _project.files.count,
date: _project.date,
lastUpdateDate: _project.files.last_version_date
}
}
return result
}
}
module.exports = Projects