discord-client/webpack/lib/content-controller.js

181 lines
3.4 KiB
JavaScript

export default class ContentController{
/* (1) Construct default attributes
*
---------------------------------------------------------*/
constructor(){}
/* (2) Channel bindings
*
---------------------------------------------------------*/
get cid(){ return gs.get.channel.current; }
get cbuf(){ return gs.get.channel._buffer; }
/* (3) Room ID binding
*
---------------------------------------------------------*/
get rid(){ return gs.get.room.text.current; }
get rbuf(){ return gs.get.room._buffer.text; }
get messages(){ return this.rbuf.messages; }
get members(){ return this.rbuf.members; }
// current user data
get uid(){ return gs.get.auth.user.uid; }
get ubuf(){ return gs.get.auth.user; }
/* (5) User getter
*
* @user_id<int> User id
*
* @return user<array> User data
*
---------------------------------------------------------*/
user(user_id=null){
/* (1) Error: if invalid user_id */
if( isNaN(user_id) )
return {};
/* (2) Error: unknown user */
if( this.cbuf.users == null || this.cbuf.users.length < 1 )
return {};
/* (3) return user data */
for( let u of this.cbuf.users )
if( u.uid === user_id )
return u;
/* (4) Error */
return {};
}
/* (6) Change username
*
* @username<String> New username
---------------------------------------------------------*/
change_username(username=null){
/* (1) Error: if invalid user_id */
if( typeof username !== 'string' )
return false;
/* (2) Error: unknown user */
if( this.uid == null )
return false;
/* (3) Call api UPDATE */
api.call(`PUT /user/${this.uid}`, { username: username }, function(rs){
gs.get.popup.hide();
// manage error
if( rs.error !== 0 )
return;
// update global username
let tmp_user = auth.user;
tmp_user.username = username;
auth.user = tmp_user;
// update username in channel
for( let u in this.cbuf.users )
if( this.cbuf.users[u].uid == this.uid )
this.cbuf.users[u].username = username;
}.bind(this), auth.token);
/* (4) Error */
return true;
}
/* (7) Change password
*
* @password<String> New password
*
---------------------------------------------------------*/
change_password(password=null){
/* (1) Error: if invalid user_id */
if( typeof password !== 'string' )
return false;
/* (2) Error: unknown user */
if( this.uid == null )
return false;
/* (3) Call api UPDATE */
api.call(`PUT /user/${this.uid}`, { password: password }, () => gs.get.popup.hide(), auth.token);
/* (4) Error */
return true;
}
/* (8) Send message
*
---------------------------------------------------------*/
send_message(_msg=null){
/* (1) Manage invalid _msg */
if( typeof _msg !== 'string' || _msg.length <= 0 )
return true;
/* (2) Send message */
window.csock.send({ buffer: {
rid: this.rid,
mid: null,
message: _msg
}});
return true;
}
/* (9) MAIN UPDATER
*
---------------------------------------------------------*/
manage_update(_dat){
for( let r in _dat.room ){
if( _dat.room[r] === null )
continue;
// create new room
for( let r2 in gs.get.room.text.list ){
if( gs.get.room.text.list[r2].id === r )
return console.log('CREATE ROOM');
for( let m of _dat.room[r].messages )
gs.get.room.text.list[r2].messages.push({
uid: m.uid,
mid: m.mid,
msg: m.content,
ts: m.ts
})
}
}
}
}