From b76d2f84996654820403282ddcd5deeb72bb5fe5 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 3 Apr 2018 21:59:39 +0200 Subject: [PATCH] [lib.content-controller] added channel deletion + fixed VOICE rooms that kept adding over and over --- webpack/lib/channel-controller.js | 6 +- webpack/lib/content-controller.js | 97 +++++++++++++++++++++++++------ 2 files changed, 82 insertions(+), 21 deletions(-) diff --git a/webpack/lib/channel-controller.js b/webpack/lib/channel-controller.js index 020f801..b783b31 100644 --- a/webpack/lib/channel-controller.js +++ b/webpack/lib/channel-controller.js @@ -71,11 +71,12 @@ export default class ChannelController{ /* (3) Dump/Update channel data * * @channels Channels data + * @append Whether to keep old data and only push new * * @return udpated Whether channels have been updated * ---------------------------------------------------------*/ - dump(channels){ + dump(channels, append=false){ // console.log(`channel.dump([${channels instanceof Array?channels.length:0}])`); /* (1) Check @channels type */ @@ -83,7 +84,8 @@ export default class ChannelController{ return false; /* (2) Clear list () */ - this.list.splice(0); + if( append !== true ) + this.list.splice(0); /* (3) Apply new channels */ for(let c of channels){ diff --git a/webpack/lib/content-controller.js b/webpack/lib/content-controller.js index 42c343d..372d9ac 100644 --- a/webpack/lib/content-controller.js +++ b/webpack/lib/content-controller.js @@ -147,25 +147,30 @@ export default class ContentController{ ---------------------------------------------------------*/ manage_update(_dat){ - /* (1) Manage rooms + /* (1) Manage rooms DELETE ---------------------------------------------------------*/ /* (1) Extract ids */ let room_ids = Object.keys(_dat.room).map( (v) => parseInt(v) ); - let current_list = gs.get.room.text.list; + let current_list = gs.get.room; /* (2) Manage DELETED rooms */ - for( let ri in current_list ){ + for( let t in current_list ){ - // if existing room is not in received keys -> has been deleted - let to_remove = room_ids.indexOf(current_list[ri].id) < 0; + for( let ri in current_list[t].list ){ - // delete room from interface - ( to_remove ) && current_list.splice(ri,1); + // if existing room is not in received keys -> has been deleted + let to_remove = room_ids.indexOf(current_list[t].list[ri].id) < 0; + + // delete room from interface + ( to_remove ) && current_list[t].list.splice(ri,1); + + } } - /* (3) Manage UPDATE + CREATE rooms */ + /* (2) Manage rooms CREATE + UPDATE + ---------------------------------------------------------*/ for( let ri of room_ids ){ // 1. Extract room data @@ -175,35 +180,55 @@ export default class ContentController{ if( room === null ) continue; - // 3. Check whether room already exists in interface + // 3. Manage room 'type' + room.type = (room.type === 0) ? 'text' : 'voice'; + + // 4. Check whether room already exists in interface let existing_index = -1; - for( let r in current_list ) - if( current_list[r].id === ri ){ existing_index = r; break; } + + for( let t in current_list ){ + + for( let r in current_list[t].list ){ + + if( current_list[t].list[r].id === ri ){ + existing_index = r; + break; + } + + } + + } - // 4. Create room - if( existing_index < 0 ){ + // 5. Create room + if( existing_index < 0 ){ + console.log(`create room#${ri} of type ${room.type}`); gs.get.room.dump([{ rid: ri, name: room.name, messages: room.messages, members: room.members, - type: 'text' + type: room.type }], true); continue; } // 5. Update room - current_list[existing_index].name = room.name; - current_list[existing_index].members = room.members; + current_list[room.type].list[existing_index].name = room.name; + current_list[room.type].list[existing_index].members = room.members; - // 6. Push new messages + // 6. We are done if VOICE room + if( room.type === 'voice' ) + continue; + + + // 7. Push new messages for( let m of room.messages ){ - current_list[existing_index].messages.push({ + current_list[room.type].list[existing_index].messages.push({ uid: m.uid, mid: m.mid, msg: m.content, @@ -212,7 +237,7 @@ export default class ContentController{ } - /* (7) Notification API -> if not current channel */ + // 8. Notification API -> if not current channel if( room.messages.length > 0 && ri !== gs.get.content.rid ){ let title = `Room #${room.name}`; @@ -223,9 +248,43 @@ export default class ContentController{ } + + + /* (3) Manage channels DELETE + ---------------------------------------------------------*/ + for( let c of _dat.channels.rem ){ + + console.log(c); + + // gs.get.channel.dump({ + // id: parseInt(c.id), + // label: c.name, + // link: c.link + // }, true); + + } + + + + /* (4) Manage channels CREATE + ---------------------------------------------------------*/ + for( let c of _dat.channels.add ){ + + gs.get.channel.dump({ + id: parseInt(c.id), + label: c.name, + link: c.link + }, true); + + } + } + + + + } \ No newline at end of file