2018-03-22 13:57:03 +00:00
|
|
|
export class RoomController{
|
|
|
|
|
|
|
|
|
|
|
|
/* (1) Construct default attributes
|
|
|
|
*
|
|
|
|
---------------------------------------------------------*/
|
|
|
|
constructor(){
|
|
|
|
|
|
|
|
/* (1) Init available @room sets */
|
|
|
|
this.text = { list: [], current: 0, visible: true };
|
|
|
|
this.voice = { list: [], current: null, visible: true };
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* (2) room navigation
|
|
|
|
*
|
|
|
|
* @type<int> room type
|
|
|
|
* @id<int> room ID (NULL uses get())
|
|
|
|
*
|
|
|
|
* @return status<boolean> Whether the navigation has been successful
|
|
|
|
*
|
|
|
|
---------------------------------------------------------*/
|
|
|
|
nav(type=null, id=null){
|
|
|
|
console.log(`room.nav(${type}, ${id})`);
|
|
|
|
|
|
|
|
/* (1) Try to get current room from id */
|
|
|
|
let room = this.get(type, id);
|
|
|
|
|
|
|
|
/* (2) Manage invalid room */
|
2018-03-23 07:41:17 +00:00
|
|
|
if( Object.keys(room).length == 0 )
|
2018-03-22 13:57:03 +00:00
|
|
|
return false;
|
|
|
|
|
|
|
|
/* (3) Close last room */
|
|
|
|
|
|
|
|
/* (4) Open new room */
|
|
|
|
|
|
|
|
/* (5) Update @active room */
|
|
|
|
this[type].current = room.id;
|
|
|
|
|
|
|
|
console.log(`[room.${type}.opened] ${room.name} (${room.id})`, room.id);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* (3) Dump/Update room data (raw format -> tree structure)
|
|
|
|
*
|
|
|
|
* @rooms<array> rooms data (raw format)
|
|
|
|
*
|
|
|
|
* {raw_format}
|
|
|
|
* [
|
|
|
|
* { rid: <int>, type: 'text', name: <string> }
|
|
|
|
* { rid: <int>, type: 'voice', name: <string> }
|
|
|
|
* { rid: <int>, type: 'video', name: <string> }
|
|
|
|
* ]
|
|
|
|
*
|
|
|
|
* @return udpated<boolean> Whether rooms have been updated
|
|
|
|
*
|
|
|
|
---------------------------------------------------------*/
|
|
|
|
dump(rooms){
|
|
|
|
|
|
|
|
console.log(`room.dump([${rooms instanceof Array?rooms.length:0}])`);
|
|
|
|
|
|
|
|
/* (1) Check @rooms type */
|
|
|
|
if( !(rooms instanceof Array) )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
/* (2) Clear data */
|
|
|
|
for( let type in this ){
|
|
|
|
this[type].list = [];
|
|
|
|
this[type].current = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* (3) Browse each room */
|
|
|
|
for(let r of rooms){
|
|
|
|
|
|
|
|
// {1} Ignore: if not object //
|
|
|
|
if( typeof r !== 'object' )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
// {2} Ignore: if missing field //
|
|
|
|
if( isNaN(r.rid) || typeof r.type !== 'string' || typeof r.name !== 'string' )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
// {3} Ignore: not available type //
|
|
|
|
if( this[r.type] == null )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
|
|
this[r.type].list.push({ id: r.rid, name: r.name, type: r.type });
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* (4) Get room data
|
|
|
|
*
|
|
|
|
* @type<int> room type
|
|
|
|
* @id<int> room ID
|
|
|
|
* NULL: current room || from URL (and set current)
|
|
|
|
*
|
|
|
|
* @return room<array> room data
|
|
|
|
*
|
|
|
|
---------------------------------------------------------*/
|
|
|
|
get(type=null, id=null){
|
|
|
|
console.log(`room.get(${type}, ${id})`);
|
|
|
|
|
|
|
|
/* (1) Manage invalid @type */
|
|
|
|
if( typeof type !== 'string' || this[type] == null )
|
2018-03-23 07:41:17 +00:00
|
|
|
return {};
|
2018-03-22 13:57:03 +00:00
|
|
|
|
|
|
|
/* (1) Get @current room: if id is null
|
|
|
|
---------------------------------------------------------*/
|
|
|
|
if( id === null ){
|
|
|
|
|
|
|
|
/* (1) If @current is set */
|
|
|
|
if( !isNaN(this[type].current) ){
|
|
|
|
|
|
|
|
/* (2) Return matching id in list */
|
|
|
|
for( let r of this[type].list ){
|
|
|
|
|
|
|
|
if( r.id === this[type].current )
|
|
|
|
return r; // exit point
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* (2) Get room data
|
|
|
|
---------------------------------------------------------*/
|
|
|
|
/* (1) Return room matching id */
|
|
|
|
for( let r of this[type].list )
|
|
|
|
if( r.id === id )
|
|
|
|
return r; // exit point
|
|
|
|
|
|
|
|
/* (2) Return default: if ID not found */
|
|
|
|
this[type].current = null;
|
2018-03-23 07:41:17 +00:00
|
|
|
return {};
|
2018-03-22 13:57:03 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-03-22 18:13:52 +00:00
|
|
|
/* (5) Create a new room
|
|
|
|
*
|
|
|
|
* @type<int> room type
|
|
|
|
* @name<String> room name
|
|
|
|
*
|
|
|
|
* @return created<bool> Whether the room has been created
|
|
|
|
*
|
|
|
|
---------------------------------------------------------*/
|
|
|
|
create(type=null, name=null){
|
|
|
|
|
|
|
|
/* (1) Manage invalid @type */
|
|
|
|
if( typeof type !== 'string' || this[type] == null )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
/* (2) Manage invalid @name */
|
|
|
|
if( typeof name !== 'string' )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
/* (3) Try to create room in API */
|
|
|
|
console.log(`POST /channel/${gs.get.content.cid}/room/${type}`);
|
|
|
|
|
|
|
|
/* (4) Add room -> update VueJS */
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-03-22 14:28:34 +00:00
|
|
|
|
2018-03-22 13:57:03 +00:00
|
|
|
}
|