Code

add basic support for preserving processing instructions in the AST
[inkscape.git] / src / jabber_whiteboard / session-manager.cpp
index 7ca4902121fc08fe3d8cd3ac0710d3dd8856a09c..a04ab05f00e39fa1f424141140e37e0e72260670 100644 (file)
@@ -85,62 +85,6 @@ SessionManager::~SessionManager()
     getClient().disconnect();
 }
 
-void
-SessionManager::processXmppEvent(const Pedro::XmppEvent &event)
-{
-    int type = event.getType();
-
-    switch (type) {
-        case Pedro::XmppEvent::EVENT_STATUS:
-            {
-            break;
-            }
-        case Pedro::XmppEvent::EVENT_ERROR:
-            {
-            break;
-            }
-        case Pedro::XmppEvent::EVENT_CONNECTED:
-            {
-            break;
-            }
-        case Pedro::XmppEvent::EVENT_DISCONNECTED:
-            {
-            break;
-            }
-        case Pedro::XmppEvent::EVENT_MUC_MESSAGE:
-        case Pedro::XmppEvent::EVENT_MESSAGE:
-            {
-            g_warning("## SM message:%s\n", event.getFrom().c_str());
-            Pedro::Element *root = event.getDOM();
-
-            if (root && root->getTagAttribute("wb", "xmlns") == Vars::INKBOARD_XMLNS)
-                processWhiteboardEvent(event);
-
-            break;
-            }
-        case Pedro::XmppEvent::EVENT_PRESENCE:
-            {
-            break;
-            }
-        case Pedro::XmppEvent::EVENT_MUC_JOIN:
-            {
-            break;
-            }
-        case Pedro::XmppEvent::EVENT_MUC_LEAVE:
-            {
-            break;
-            }
-        case Pedro::XmppEvent::EVENT_MUC_PRESENCE:
-            {
-            break;
-            }
-        default:
-            {
-            break;
-            }
-    }
-}
-
 /**
  * Initiates a shared session with a user or conference room.
  * 
@@ -177,6 +121,7 @@ SessionManager::initialiseSession(Glib::ustring const& to, State::SessionType ty
 
     inkdoc->setSessionId(sessionId);
 
+    makeInkboardDesktop(doc);
     addSession(WhiteboardRecord(sessionId, inkdoc));
 
     inkdoc->startSessionNegotiation();
@@ -217,6 +162,60 @@ SessionManager::getInkboardSession(Glib::ustring const& sessionId)
     return NULL;
 }
 
+void
+SessionManager::processXmppEvent(const Pedro::XmppEvent &event)
+{
+    int type = event.getType();
+
+    switch (type) {
+        case Pedro::XmppEvent::EVENT_STATUS:
+            {
+            break;
+            }
+        case Pedro::XmppEvent::EVENT_ERROR:
+            {
+            break;
+            }
+        case Pedro::XmppEvent::EVENT_CONNECTED:
+            {
+            break;
+            }
+        case Pedro::XmppEvent::EVENT_DISCONNECTED:
+            {
+            break;
+            }
+        case Pedro::XmppEvent::EVENT_MUC_MESSAGE:
+        case Pedro::XmppEvent::EVENT_MESSAGE:
+            {
+            Pedro::Element *root = event.getDOM();
+
+            if (root && root->getTagAttribute("wb", "xmlns") == Vars::INKBOARD_XMLNS)
+                processWhiteboardEvent(event);
+
+            break;
+            }
+        case Pedro::XmppEvent::EVENT_PRESENCE:
+            {
+            break;
+            }
+        case Pedro::XmppEvent::EVENT_MUC_JOIN:
+            {
+            break;
+            }
+        case Pedro::XmppEvent::EVENT_MUC_LEAVE:
+            {
+            break;
+            }
+        case Pedro::XmppEvent::EVENT_MUC_PRESENCE:
+            {
+            break;
+            }
+        default:
+            {
+            break;
+            }
+    }
+}
 
 /**
  * Handles all incoming messages from pedro within a valid namespace, CONNECT_REQUEST messages
@@ -235,6 +234,7 @@ SessionManager::processWhiteboardEvent(Pedro::XmppEvent const& event)
     }
 
     Pedro::DOMString session = root->getTagAttribute("wb", "session");
+    Pedro::DOMString type = root->getTagAttribute("message", "type");
     Pedro::DOMString domwrapper = root->getFirstChild()->getFirstChild()->getFirstChild()->getName();
 
     if (session.empty()) {
@@ -242,14 +242,17 @@ SessionManager::processWhiteboardEvent(Pedro::XmppEvent const& event)
         return;
     }
 
-    if(root->exists(Message::CONNECT_REQUEST))
+    if(root->exists(Message::CONNECT_REQUEST) && type == State::WHITEBOARD_PEER)
+    {
         handleIncomingInvitation(Invitation(event.getFrom(),session));
 
-    else
+    }else
     { 
-        Message::Wrapper wrapper = domwrapper.c_str();
+        Message::Wrapper wrapper = static_cast< Message::Wrapper >(domwrapper);
         InkboardDocument* doc = getInkboardSession(session);
-        doc->processInkboardEvent(wrapper, event.getData());
+
+        if(doc != NULL)
+            doc->recieve(wrapper, root->getFirstChild());
     }
 }
 
@@ -326,12 +329,12 @@ SessionManager::checkInvitationQueue()
         switch (reply) {
 
             case Dialog::ACCEPT_INVITATION:{
-                inkdoc->sendProtocol(from, Message::PROTOCOL,Message::ACCEPT_INVITATION);
+                inkdoc->send(from, Message::PROTOCOL,Message::ACCEPT_INVITATION);
                 makeInkboardDesktop(doc);
                 break; }
 
             case Dialog::DECLINE_INVITATION: default: {
-                inkdoc->sendProtocol(from, Message::PROTOCOL,Message::DECLINE_INVITATION);
+                inkdoc->send(from, Message::PROTOCOL,Message::DECLINE_INVITATION);
                 terminateSession(sessionId);
                 break; }
         }
@@ -355,11 +358,11 @@ makeInkboardDocument(int code, gchar const* rootname, State::SessionType type, G
     InkboardDocument* rdoc = new InkboardDocument(g_quark_from_static_string("xml"), type, to);
     rdoc->setAttribute("version", "1.0");
     rdoc->setAttribute("standalone", "no");
-    XML::Node *comment = sp_repr_new_comment(" Created with Inkscape (http://www.inkscape.org/) ");
+    XML::Node *comment = rdoc->createComment(" Created with Inkscape (http://www.inkscape.org/) ");
     rdoc->appendChild(comment);
     GC::release(comment);
 
-    XML::Node* root = sp_repr_new(rootname);
+    XML::Node* root = rdoc->createElement(rootname);
     rdoc->appendChild(root);
     GC::release(root);
 
@@ -395,6 +398,7 @@ makeInkboardDesktop(SPDocument* doc)
         sp_create_window(dtw, TRUE);
         dt = static_cast<SPDesktop*>(dtw->view);
         sp_namedview_window_from_document(dt);
+        sp_namedview_update_layers_from_document(dt);
     }
 
     return dt;