diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/SharedNotesModel.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/SharedNotesModel.scala index 157a59dbc5c31ddfa4a9bff17d264a84e3ed7c78..0ec9b9e57c8da4b538d4264a574a497b474736c3 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/SharedNotesModel.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/SharedNotesModel.scala @@ -52,11 +52,6 @@ class SharedNotesModel extends SystemConfiguration { redo } } - case "CLEAR" => { - undoPatches = List[(String, String)]() - redoPatches = List[(String, String)]() - patcher.custom_patch_make(document, "") - } } val patchObjects = patcher.patch_fromText(patchToApply) @@ -77,6 +72,13 @@ class SharedNotesModel extends SystemConfiguration { (patchCounter, patchToApply, !undoPatches.isEmpty, !redoPatches.isEmpty) } + def clearNote(noteId: String): Option[NoteReport] = { + val note = notes(noteId) + val patchCounter = note.patchCounter + 1 + notes(noteId) = new Note(note.name, "", patchCounter, List[(String, String)](), List[(String, String)]()) + getNoteReport(noteId) + } + def createNote(noteName: String = ""): (String, Boolean) = { var noteId = 0 if (removedNotes.isEmpty) { diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/sharednotes/ClearSharedNotePubMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/sharednotes/ClearSharedNotePubMsgHdlr.scala new file mode 100644 index 0000000000000000000000000000000000000000..b5272d6dc2dd90c3086db9323f64703a3254d017 --- /dev/null +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/sharednotes/ClearSharedNotePubMsgHdlr.scala @@ -0,0 +1,29 @@ +package org.bigbluebutton.core.apps.sharednotes + +import org.bigbluebutton.common2.msgs._ +import org.bigbluebutton.core.running.OutMsgRouter + +trait ClearSharedNotePubMsgHdlr { + this: SharedNotesApp2x => + + val outGW: OutMsgRouter + + def handleClearSharedNotePubMsg(msg: ClearSharedNotePubMsg): Unit = { + + def broadcastEvent(msg: ClearSharedNotePubMsg, noteReport: NoteReport): Unit = { + val routing = Routing.addMsgToClientRouting(MessageTypes.BROADCAST_TO_MEETING, liveMeeting.props.meetingProp.intId, msg.header.userId) + val envelope = BbbCoreEnvelope(SyncSharedNoteEvtMsg.NAME, routing) + val header = BbbClientMsgHeader(SyncSharedNoteEvtMsg.NAME, liveMeeting.props.meetingProp.intId, msg.header.userId) + + val body = SyncSharedNoteEvtMsgBody(msg.body.noteId, noteReport) + val event = SyncSharedNoteEvtMsg(header, body) + val msgEvent = BbbCommonEnvCoreMsg(envelope, event) + outGW.send(msgEvent) + } + + liveMeeting.notesModel.clearNote(msg.body.noteId) match { + case Some(noteReport) => broadcastEvent(msg, noteReport) + case None => log.warning("Could not find note " + msg.body.noteId) + } + } +} \ No newline at end of file diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/sharednotes/SharedNotesApp2x.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/sharednotes/SharedNotesApp2x.scala index 579b1e8e10d6c09d2d5109957da4ddac974e3404..329653c0ec19385829f87810b64c2a8c458d36d3 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/sharednotes/SharedNotesApp2x.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/sharednotes/SharedNotesApp2x.scala @@ -10,6 +10,7 @@ class SharedNotesApp2x( )(implicit val context: ActorContext) extends GetSharedNotesPubMsgHdlr with SyncSharedNotePubMsgHdlr + with ClearSharedNotePubMsgHdlr with UpdateSharedNoteReqMsgHdlr with CreateSharedNoteReqMsgHdlr with DestroySharedNoteReqMsgHdlr { diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/sharednotes/UpdateSharedNoteReqMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/sharednotes/UpdateSharedNoteReqMsgHdlr.scala index 0ba8e20ea632fdc59b8bf75124a5cf6e22ded6e3..505e7847fbc51514db8910884587ce70195e714e 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/sharednotes/UpdateSharedNoteReqMsgHdlr.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/sharednotes/UpdateSharedNoteReqMsgHdlr.scala @@ -25,7 +25,6 @@ trait UpdateSharedNoteReqMsgHdlr { case "PATCH" => msg.header.userId case "UNDO" => liveMeeting.notesModel.SYSTEM_ID case "REDO" => liveMeeting.notesModel.SYSTEM_ID - case "CLEAR" => liveMeeting.notesModel.SYSTEM_ID case _ => return } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/ReceivedJsonMsgHandlerActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/ReceivedJsonMsgHandlerActor.scala index b126640d452717f6a7154c7a0eee5b1bdf46777c..2034e71edbbb51854a0c2eddf5926c025a531f68 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/ReceivedJsonMsgHandlerActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/ReceivedJsonMsgHandlerActor.scala @@ -209,6 +209,8 @@ class ReceivedJsonMsgHandlerActor( routeGenericMsg[GetSharedNotesPubMsg](envelope, jsonNode) case SyncSharedNotePubMsg.NAME => routeGenericMsg[SyncSharedNotePubMsg](envelope, jsonNode) + case ClearSharedNotePubMsg.NAME => + routeGenericMsg[ClearSharedNotePubMsg](envelope, jsonNode) case UpdateSharedNoteReqMsg.NAME => routeGenericMsg[UpdateSharedNoteReqMsg](envelope, jsonNode) case CreateSharedNoteReqMsg.NAME => diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala index 97803287b221446fce497c87ebaa9cc45481e34d..a444195df9a790c4ee993cff68a1fbedc030f3f8 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala @@ -278,6 +278,7 @@ class MeetingActor( // SharedNotes case m: GetSharedNotesPubMsg => sharedNotesApp2x.handleGetSharedNotesPubMsg(m) case m: SyncSharedNotePubMsg => sharedNotesApp2x.handleSyncSharedNotePubMsg(m) + case m: ClearSharedNotePubMsg => sharedNotesApp2x.handleClearSharedNotePubMsg(m) case m: UpdateSharedNoteReqMsg => sharedNotesApp2x.handleUpdateSharedNoteReqMsg(m) case m: CreateSharedNoteReqMsg => sharedNotesApp2x.handleCreateSharedNoteReqMsg(m) case m: DestroySharedNoteReqMsg => sharedNotesApp2x.handleDestroySharedNoteReqMsg(m) diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/SharedNotesMsgs.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/SharedNotesMsgs.scala index 825065c09c066fc48b2079808e22d5baea4616fe..0d3057e072e756666807f0ec2aae2fc2eaabf738 100644 --- a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/SharedNotesMsgs.scala +++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/SharedNotesMsgs.scala @@ -29,6 +29,10 @@ object UpdateSharedNoteReqMsg {val NAME = "UpdateSharedNoteReqMsg"} case class UpdateSharedNoteReqMsg(header: BbbClientMsgHeader, body: UpdateSharedNoteReqMsgBody) extends StandardMsg case class UpdateSharedNoteReqMsgBody(noteId: String, patch: String, operation: String) +object ClearSharedNotePubMsg {val NAME = "ClearSharedNotePubMsg"} +case class ClearSharedNotePubMsg(header: BbbClientMsgHeader, body: ClearSharedNotePubMsgBody) extends StandardMsg +case class ClearSharedNotePubMsgBody(noteId: String) + object CreateSharedNoteReqMsg {val NAME = "CreateSharedNoteReqMsg"} case class CreateSharedNoteReqMsg(header: BbbClientMsgHeader, body: CreateSharedNoteReqMsgBody) extends StandardMsg case class CreateSharedNoteReqMsgBody(noteName: String) diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/SharedNotes.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/SharedNotes.as index 58bb28a04fc80aad78e77b82790bc17df900b16e..9b17d673cef5f29ac50e646566660ffa8fe096e7 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/model/SharedNotes.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/SharedNotes.as @@ -10,7 +10,9 @@ package org.bigbluebutton.core.model public var numAdditionalSharedNotes:Number = 0; [Bindable] public var mainNoteVisible:Boolean = false; - + [Bindable] + public var isMaxNumOfNotes:Boolean = true; + private var activeNotesIds:ArrayCollection = new ArrayCollection(); public function SharedNotes() { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/events/SharedNotesEvent.as b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/events/SharedNotesEvent.as index 4b30270b5883528f2c8992e55e6d1e51923c4411..6f180d1f17691da4a4e6c51e1083f05cdebbb209 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/events/SharedNotesEvent.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/events/SharedNotesEvent.as @@ -37,6 +37,7 @@ package org.bigbluebutton.modules.sharednotes.events public static const RECEIVE_PATCH_EVENT:String = 'SHARED_NOTES_RECEIVE_PATCH'; public static const SYNC_NOTE_REQUEST_EVENT:String = 'SYNC_NOTE_REQUEST_EVENT'; public static const SYNC_NOTE_REPLY_EVENT:String = 'SYNC_NOTE_REPLY_EVENT'; + public static const CLEAR_NOTE_REQUEST_EVENT:String = 'CLEAR_NOTE_REQUEST_EVENT'; public var noteName:String = ""; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/managers/SharedNotesManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/managers/SharedNotesManager.as index 2299f0a7cb69a40c0d65d2fbb1ee209709989d95..e158fa2b42e5785ddbeeebd39fc1586a30d18a71 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/managers/SharedNotesManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/managers/SharedNotesManager.as @@ -71,5 +71,10 @@ package org.bigbluebutton.modules.sharednotes.managers { var noteId:String = e.payload.noteId; sender.sharedNotesSyncNoteRequest(noteId); } + + public function sharedNotesClearNoteRequest(e:SharedNotesEvent):void { + var noteId:String = e.payload.noteId; + sender.sharedNotesClearNoteRequest(noteId); + } } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/maps/SharedNotesEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/maps/SharedNotesEventMap.mxml index e951d5d79f0c881068a277d844d57e663dfc3991..abca3e38acff65f901fad652f0357bd28634ca5d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/maps/SharedNotesEventMap.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/maps/SharedNotesEventMap.mxml @@ -95,6 +95,10 @@ <EventHandlers type="{SharedNotesEvent.SYNC_NOTE_REQUEST_EVENT}"> <MethodInvoker generator="{SharedNotesManager}" method="sharedNotesSyncNoteRequest" arguments="{event}"/> </EventHandlers> + + <EventHandlers type="{SharedNotesEvent.CLEAR_NOTE_REQUEST_EVENT}"> + <MethodInvoker generator="{SharedNotesManager}" method="sharedNotesClearNoteRequest" arguments="{event}"/> + </EventHandlers> <EventHandlers type="{BBBEvent.RECONNECT_DISCONNECTED_EVENT}"> <MethodInvoker generator="{SharedNotesEventMapDelegate}" method="destroyAllAdditionalNotes" arguments="{event}"/> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/services/MessageSender.as b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/services/MessageSender.as index f3af53e39b6f3ecf857481dab6fcdd00a8cc419f..d6d6e59a4d2d434883c6e01ce400722029fb8e48 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/services/MessageSender.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/services/MessageSender.as @@ -103,5 +103,19 @@ package org.bigbluebutton.modules.sharednotes.services { JSON.stringify(message) ); } + + public function sharedNotesClearNoteRequest(noteId: String):void { + var message:Object = { + header: {name: "ClearSharedNotePubMsg", meetingId: UsersUtil.getInternalMeetingID(), userId: UsersUtil.getMyUserID()}, + body: {noteId: noteId} + }; + + var _nc:ConnectionManager = BBB.initConnectionManager(); + _nc.sendMessage2x( + onSuccessDebugger, + onErrorDebugger, + JSON.stringify(message) + ); + } } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml index 61382de90a98547e1bd6f4b929da250a86025263..9477b116223737ea2e7acf144256e6b47b4fe76d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml @@ -86,7 +86,6 @@ private var lastAuthors:Object = new Object(); [Bindable] protected var options:SharedNotesOptions; - [Bindable] private var _isNotesLimit:Boolean = true; [Bindable] private var usersTyping:String = ""; private var sendUpdateTimer:Timer; @@ -215,13 +214,13 @@ return _noteId; } - public function addRemoteDocument(notes:Object, isNotesLimit:Boolean):void{ + public function addRemoteDocument(notes:Object, isMaxNumOfNotes:Boolean):void{ var note:Object = notes[noteId]; _document = note["document"]; _noteName = note["name"]; _lastPatch = note["patchCounter"]; richTextEditor.htmlText = _document; - _isNotesLimit = isNotesLimit; + LiveMeeting.inst().sharedNotes.isMaxNumOfNotes = isMaxNumOfNotes; if (!this.enabled) this.enabled = true; updateTitle(); updateUndoRedoButtons(note["undo"], note["redo"]); @@ -302,11 +301,11 @@ } private function handleNoteCreated(e:SharedNotesEvent):void { - _isNotesLimit = e.payload.isNotesLimit; + LiveMeeting.inst().sharedNotes.isMaxNumOfNotes = e.payload.isNotesLimit; } private function handleNoteDestroyed(e:SharedNotesEvent):void { - _isNotesLimit = e.payload.isNotesLimit; + LiveMeeting.inst().sharedNotes.isMaxNumOfNotes = e.payload.isNotesLimit; } private function updateUndoRedoButtons(undo:Boolean, redo:Boolean):void { @@ -418,10 +417,10 @@ protected function btnSettings_clickHandler(event:MouseEvent):void { var menuData:Array = []; menuData.push({ - label: _isNotesLimit ? + label: LiveMeeting.inst().sharedNotes.isMaxNumOfNotes ? ResourceUtil.getInstance().getString('bbb.sharedNotes.limit.label') : ResourceUtil.getInstance().getString('bbb.sharedNotes.new.label'), - enabled: !_isNotesLimit, + enabled: !LiveMeeting.inst().sharedNotes.isMaxNumOfNotes, handler: function():void { newNoteHandler(); } @@ -500,10 +499,9 @@ private function alertClear(event:CloseEvent):void { if (event.detail == Alert.YES) { - var sendPatchEvent:SendPatchEvent = new SendPatchEvent(); - sendPatchEvent.noteId = noteId; - sendPatchEvent.operation = "CLEAR"; - _dispatcher.dispatchEvent(sendPatchEvent); + var clearNoteEvent:SharedNotesEvent = new SharedNotesEvent(SharedNotesEvent.CLEAR_NOTE_REQUEST_EVENT); + clearNoteEvent.payload["noteId"] = noteId; + _dispatcher.dispatchEvent(clearNoteEvent); } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/components/SharedNotesRichTextEditor.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/components/SharedNotesRichTextEditor.mxml index c8111db4837def15d8a58fcbf219830ce50d7c49..b10042db3cfd47c35ce5e7a1743b0f8a83f33761 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/components/SharedNotesRichTextEditor.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/components/SharedNotesRichTextEditor.mxml @@ -1320,7 +1320,9 @@ <mx:ColorPicker id="colorPicker" dataProvider="{colorPickerColours}" swatchPanelStyleName="sharedNotesColorPickerStyle" - close="setTextStyles('color');"/> + close="setTextStyles('color');" + visible="false" + includeInLayout="false"/> <mx:VRule height="{alignButtons.height}"/> <mx:ToggleButtonBar id="alignButtons" buttonWidth="20"