internal : remove call object and call view model

Change-Id: Ie2449d1ea83e702cad1266241d9c0f254ef271aa
Tuleap: #1204
diff --git a/Account.cpp b/Account.cpp
index cdbd9e2..adbecb6 100644
--- a/Account.cpp
+++ b/Account.cpp
@@ -43,7 +43,7 @@
 {

     CoreApplicationView^ view = CoreApplication::MainView;

     view->CoreWindow->Dispatcher->RunAsync(

-        CoreDispatcherPriority::Normal,

+        CoreDispatcherPriority::High,

         ref new DispatchedHandler([this, propertyName]()

     {

         PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName));

diff --git a/Call.cpp b/Call.cpp
index 6cc2fe3..1854a8f 100644
--- a/Call.cpp
+++ b/Call.cpp
@@ -44,7 +44,7 @@
 {

     CoreApplicationView^ view = CoreApplication::MainView;

     view->CoreWindow->Dispatcher->RunAsync(

-        CoreDispatcherPriority::Normal,

+        CoreDispatcherPriority::High,

         ref new DispatchedHandler([this, propertyName]()

     {

         PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName));

@@ -52,17 +52,18 @@
     }));

 }

 

-void RingClientUWP::Call::refuse()

-{

-    RingD::instance->refuseIncommingCall(this);

-}

-

-void RingClientUWP::Call::accept()

-{

-    RingD::instance->acceptIncommingCall(this);

-}

-

-void RingClientUWP::Call::cancel()

-{

-    RingD::instance->cancelOutGoingCall(this);

-}

+//void RingClientUWP::Call::refuse()

+//{

+//    RingD::instance->refuseIncommingCall(this);

+//}

+//

+//void RingClientUWP::Call::accept()

+//{

+//    RingD::instance->acceptIncommingCall(this);

+//}

+//

+//void RingClientUWP::Call::cancel()

+//{

+//    MSG_("!2--->> cancel");

+//    RingD::instance->cancelOutGoingCall(this);

+//}

diff --git a/Call.h b/Call.h
index dfebe21..fc96d3a 100644
--- a/Call.h
+++ b/Call.h
@@ -56,9 +56,9 @@
     void NotifyPropertyChanged(String^ propertyName);

 

 internal:

-    void refuse();

-    void accept();

-    void cancel();

+    //void refuse();

+    //void accept();

+    //void cancel();

 

 private:

     CallStatus state_;

diff --git a/CallsViewModel.h b/CallsViewModel.h
index 24ddbb0..21c68ff 100644
--- a/CallsViewModel.h
+++ b/CallsViewModel.h
@@ -44,7 +44,7 @@
     /* functions */

     Call^ addNewCall(String^ accountId, String^ callId, String^ from);

     void clearCallsList();

-    void setState(String^ callId, String^ state, int code); // used ?

+    //void setState(String^ callId, String^ state, int code); // used ?

     Call^ findCall(String^ callId);

 

     /* properties */

diff --git a/Contact.cpp b/Contact.cpp
index 155a7ff..2d94ec1 100644
--- a/Contact.cpp
+++ b/Contact.cpp
@@ -52,7 +52,7 @@
 

     String^ fileContents = Utils::toPlatformString(Utils::getStringFromFile(Utils::toString(messagesFile)));

 

-    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,

+    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,

     ref new DispatchedHandler([=]() {

         if (fileContents != nullptr)

             DestringifyConversation(fileContents);

@@ -72,7 +72,7 @@
 {

     CoreApplicationView^ view = CoreApplication::MainView;

     view->CoreWindow->Dispatcher->RunAsync(

-        CoreDispatcherPriority::Normal,

+        CoreDispatcherPriority::High,

         ref new DispatchedHandler([this, propertyName]()

     {

         PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName));

diff --git a/ContactsViewModel.cpp b/ContactsViewModel.cpp
index cb98f58..067f295 100644
--- a/ContactsViewModel.cpp
+++ b/ContactsViewModel.cpp
@@ -118,7 +118,7 @@
 

     String^ fileContents = Utils::toPlatformString(Utils::getStringFromFile(Utils::toString(contactsFile)));

 

-    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,

+    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,

     ref new DispatchedHandler([=]() {

         if (fileContents != nullptr)

             Destringify(fileContents);

diff --git a/LoadingPage.xaml.cpp b/LoadingPage.xaml.cpp
index a8d24bc..ac0b6cf 100644
--- a/LoadingPage.xaml.cpp
+++ b/LoadingPage.xaml.cpp
@@ -53,13 +53,13 @@
     {

         if (config_exists) {

             RingD::instance->hasConfig = true;

-            this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, ref new Windows::UI::Core::DispatchedHandler([this] () {

+            this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::High, ref new Windows::UI::Core::DispatchedHandler([this] () {

                 this->Frame->Navigate(Windows::UI::Xaml::Interop::TypeName(MainPage::typeid));

             }));

         }

         else {

             RingD::instance->hasConfig = false;

-            this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, ref new Windows::UI::Core::DispatchedHandler([this] () {

+            this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::High, ref new Windows::UI::Core::DispatchedHandler([this] () {

                 this->Frame->Navigate(Windows::UI::Xaml::Interop::TypeName(Wizard::typeid));

             }));

         }

diff --git a/RingD.cpp b/RingD.cpp
index 38033d8..fba4158 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -126,6 +126,7 @@
 

 void RingClientUWP::RingD::placeCall(Contact^ contact)

 {

+    MSG_("!--->> placeCall");

     auto to = contact->ringID_;

     auto accountId = AccountsViewModel::instance->selectedAccount->accountID_;

 

@@ -134,6 +135,8 @@
 

     auto callId2 = DRing::placeCall(accountId2, to2);

 

+

+

     if (callId2 == "") {

         WNG_("call not created, the daemon didn't return a call Id");

         return;

@@ -141,6 +144,13 @@
 

     auto callId = Utils::toPlatformString(callId2);

 

+

+    //auto con = ContactsViewModel::instance->findContactByName(to);

+    auto item = SmartPanelItemsViewModel::instance->findItem(contact);

+    item->_callId = callId;

+    MSG_("$1 place call with id : " + Utils::toString(item->_callId));

+

+

     auto call = CallsViewModel::instance->addNewCall(accountId, callId, to);

     call->isOutGoing = true;

 

@@ -156,7 +166,15 @@
 void

 RingClientUWP::RingD::cancelOutGoingCall(Call^ call)

 {

-    tasksList_.push(ref new RingD::Task(Request::CancelOutGoingCall, call));

+    MSG_("1!--->> cancelOutGoingCall");

+    if (call)

+        tasksList_.push(ref new RingD::Task(Request::CancelOutGoingCall, call));

+}

+

+void RingClientUWP::RingD::cancelOutGoingCall2(String ^ callId)

+{

+    MSG_("$1 cancelOutGoingCall2 : " + Utils::toString(callId));

+    tasksList_.push(ref new RingD::Task(Request::HangUpCall, callId, 0));

 }

 

 void

@@ -165,6 +183,12 @@
     tasksList_.push(ref new RingD::Task(Request::HangUpCall, call));

 }

 

+void RingClientUWP::RingD::hangUpCall2(String ^ callId)

+{

+    MSG_("$1 hangUpCall2 : "+Utils::toString(callId));

+    tasksList_.push(ref new RingD::Task(Request::HangUpCall, callId, 0));

+}

+

 void

 RingClientUWP::RingD::startDaemon()

 {

@@ -199,10 +223,16 @@
                 from2 = Utils::TrimRingId(from2);

 

                 CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(

-                    CoreDispatcherPriority::Normal, ref new DispatchedHandler([=]()

+                    CoreDispatcherPriority::High, ref new DispatchedHandler([=]()

                 {

                     incomingCall(accountId2, callId2, from2);

                     stateChange(callId2, CallStatus::INCOMING_RINGING, 0);

+

+

+                    auto contact = ContactsViewModel::instance->findContactByName(from2);

+                    auto item = SmartPanelItemsViewModel::instance->findItem(contact);

+                    item->_callId = callId2;

+

                 }));

             }),

             DRing::exportable_callback<DRing::CallSignal::StateChange>([this](

@@ -222,7 +252,7 @@
 

 

                 CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(

-                    CoreDispatcherPriority::Low, ref new DispatchedHandler([=]()

+                    CoreDispatcherPriority::High, ref new DispatchedHandler([=]()

                 {

                     stateChange(callId2, state3, code);

                 }));

@@ -243,7 +273,7 @@
                     MSG_("payload = " + i.second);

                     auto payload = Utils::toPlatformString(i.second);

                     CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(

-                        CoreDispatcherPriority::Low, ref new DispatchedHandler([=]()

+                        CoreDispatcherPriority::High, ref new DispatchedHandler([=]()

                     {

                         incomingAccountMessage(accountId2, from2, payload);

                     }));

@@ -282,7 +312,7 @@
 

                     auto payload = Utils::toPlatformString(i.second);

                     CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(

-                        CoreDispatcherPriority::Low, ref new DispatchedHandler([=]()

+                        CoreDispatcherPriority::High, ref new DispatchedHandler([=]()

                     {

                         incomingAccountMessage(accountId2, from2, payload);

                     }));

@@ -294,7 +324,7 @@
             {

                 MSG_("<RegistrationStateChanged>: ID = " + account_id + "state = " + state);

                 if (state == DRing::Account::States::REGISTERED) {

-                    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,

+                    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,

                     ref new DispatchedHandler([=]() {

                         auto frame = dynamic_cast<Frame^>(Window::Current->Content);

                         dynamic_cast<RingClientUWP::MainPage^>(frame->Content)->showLoadingOverlay(false, false);

@@ -303,14 +333,14 @@
             }),

             DRing::exportable_callback<DRing::ConfigurationSignal::AccountsChanged>([this]()

             {

-                CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,

+                CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,

                 ref new DispatchedHandler([=]() {

                     reloadAccountList();

                 }));

             }),

             DRing::exportable_callback<DRing::Debug::MessageSend>([&](const std::string& toto)

             {

-                dispatcher->RunAsync(CoreDispatcherPriority::Normal,

+                dispatcher->RunAsync(CoreDispatcherPriority::High,

                 ref new DispatchedHandler([=]() {

                     RingDebug::instance->print(toto);

                 }));

@@ -359,9 +389,9 @@
         {

             DRing::exportable_callback<DRing::VideoSignal::GetCameraInfo>

             ([this](const std::string& device,

-                    std::vector<std::string> *formats,

-                    std::vector<unsigned> *sizes,

-                    std::vector<unsigned> *rates) {

+            std::vector<std::string> *formats,

+            std::vector<unsigned> *sizes,

+            std::vector<unsigned> *rates) {

                 MSG_("\n<GetCameraInfo>\n");

                 auto device_list = VideoManager::instance->captureManager()->deviceList;

 

@@ -384,7 +414,7 @@
                     std::string format,

                     const int width,

                     const int height,

-                    const int rate) {

+            const int rate) {

                 MSG_("\n<SetParameters>\n");

                 VideoManager::instance->captureManager()->activeDevice->SetDeviceProperties(

                     Utils::toPlatformString(format),width,height,rate);

@@ -392,7 +422,7 @@
             DRing::exportable_callback<DRing::VideoSignal::StartCapture>

             ([&](const std::string& device) {

                 MSG_("\n<StartCapture>\n");

-                dispatcher->RunAsync(CoreDispatcherPriority::Normal,

+                dispatcher->RunAsync(CoreDispatcherPriority::High,

                 ref new DispatchedHandler([=]() {

                     VideoManager::instance->captureManager()->InitializeCameraAsync();

                     VideoManager::instance->captureManager()->videoFrameCopyInvoker->Start();

@@ -401,7 +431,7 @@
             DRing::exportable_callback<DRing::VideoSignal::StopCapture>

             ([&]() {

                 MSG_("\n<StopCapture>\n");

-                dispatcher->RunAsync(CoreDispatcherPriority::Normal,

+                dispatcher->RunAsync(CoreDispatcherPriority::High,

                 ref new DispatchedHandler([=]() {

                     VideoManager::instance->captureManager()->StopPreviewAsync();

                     if (VideoManager::instance->captureManager()->captureTaskTokenSource)

@@ -425,7 +455,7 @@
                 tasksList_.push(ref new RingD::Task(Request::AddSIPAccount));

             }

             else {

-                CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,

+                CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,

                 ref new DispatchedHandler([=]() {

                     reloadAccountList();

                 }));

@@ -487,6 +517,12 @@
         case Request::CancelOutGoingCall:

         case Request::HangUpCall:

         {

+

+            MSG_("1!--->> Request::CancelOutGoingCall");

+            auto id = task->_callId;

+            DRing::hangUp(Utils::toString(id));

+            return;

+

             auto callId = task->_call->callId;

             auto callId2 = Utils::toString(callId);

             DRing::hangUp(callId2);

diff --git a/RingD.h b/RingD.h
index 06334a6..7a22790 100644
--- a/RingD.h
+++ b/RingD.h
@@ -52,6 +52,9 @@
         }

     }

 

+    void cancelOutGoingCall2(String^ callId); // marche

+

+

 internal:

     /* functions */

     void startDaemon();

@@ -63,7 +66,10 @@
     void acceptIncommingCall(Call^ call);

     void placeCall(Contact^ contact);

     void cancelOutGoingCall(Call^ call);

+    /*void cancelOutGoingCall2(String^ callId);*/ // marche pas

+

     void hangUpCall(Call^ call);

+    void hangUpCall2(String^ callId);

 

     /* TODO : move members */

     bool hasConfig;

@@ -96,9 +102,14 @@
             request = r;

             _call = c;

         }

+        Task(Request r, String^ c, int i) {

+            request = r;

+            _callId = c;

+        }

     public:

         property Request request;

         property Call^ _call;

+        property String^ _callId;

     };

 

     /* functions */

diff --git a/RingDebug.h b/RingDebug.h
index 2398085..c7cee0a 100644
--- a/RingDebug.h
+++ b/RingDebug.h
@@ -68,13 +68,13 @@
     OutputDebugString(wStringstream.str().c_str());

 }

 

-#define MSG_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Low, \

+#define MSG_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \

 ref new DispatchedHandler([=]() { RingDebug::instance->print(cstr); }))

 

-#define WNG_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Low, \

+#define WNG_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \

 ref new DispatchedHandler([=]() { RingDebug::instance->print(std::string(cstr), RingDebug::Type::WNG); }))

 

-#define ERR_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Low, \

+#define ERR_(cstr) CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High, \

 ref new DispatchedHandler([=]() { RingDebug::instance->print(std::string(cstr), RingDebug::Type::ERR); }))

 

 }

diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp
index e091474..d1d01f5 100644
--- a/SmartPanel.xaml.cpp
+++ b/SmartPanel.xaml.cpp
@@ -108,6 +108,7 @@
 

     RingD::instance->calling += ref new RingClientUWP::Calling([&](

     Call^ call) {

+        MSG_("!--->> Calling lambda from smartpanel");

         auto from = call->from;

         auto contact = ContactsViewModel::instance->findContactByName(from);

 

@@ -124,6 +125,7 @@
         }

 

         call->state = CallStatus::SEARCHING;

+        MSG_("!--->> should be Searching");

 

         item->_call = call;

     });

@@ -321,40 +323,63 @@
 void RingClientUWP::Views::SmartPanel::_rejectIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

 {

     auto button = dynamic_cast<Button^>(e->OriginalSource);

-    auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);

-    auto call = item->_call;

-

-    call->refuse();

+    if (button) {

+        auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);

+        if (item) {

+            auto call = item->_call;

+            if (call)

+                RingD::instance->refuseIncommingCall(call);

+            //call->refuse();

+        }

+    }

 }

 

 

 void RingClientUWP::Views::SmartPanel::_acceptIncomingCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

 {

     auto button = dynamic_cast<Button^>(e->OriginalSource);

-    auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);

-    auto call = item->_call;

-

-    call->accept();

+    if (button) {

+        auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);

+        if (item) {

+            auto call = item->_call;

+            if (call)

+                RingD::instance->acceptIncommingCall(call);

+            //call->accept();

+        }

+    }

 }

 

 void

 SmartPanel::_callContact__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

 {

+    MSG_("!--->> _callContact__Click");

     auto button = dynamic_cast<Button^>(e->OriginalSource);

-    auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);

-    auto contact = item->_contact;

-

-    RingD::instance->placeCall(contact);

+    if (button) {

+        auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);

+        if (item) {

+            auto contact = item->_contact;

+            if (contact)

+                RingD::instance->placeCall(contact);

+        }

+    }

 }

 

 

 void RingClientUWP::Views::SmartPanel::_cancelCallBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)

 {

     auto button = dynamic_cast<Button^>(e->OriginalSource);

-    auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);

-    auto call = item->_call;

+    if (button) {

+        auto item = dynamic_cast<SmartPanelItem^>(button->DataContext);

+        if (item) {

+            auto call = item->_call;

+            RingD::instance->cancelOutGoingCall2(item->_callId);

 

-    call->cancel();

+            return;

+            if (call)

+                RingD::instance->cancelOutGoingCall(call);

+            //call->cancel();

+        }

+    }

 }

 

 

diff --git a/SmartPanelItem.cpp b/SmartPanelItem.cpp
index d93b454..35c77de 100644
--- a/SmartPanelItem.cpp
+++ b/SmartPanelItem.cpp
@@ -33,6 +33,8 @@
 {

     /* create an empty call to avoid the call bar */

     _call = ref new Call("", "", "");

+    _callId = "";

+

 }

 

 void

@@ -40,7 +42,7 @@
 {

     CoreApplicationView^ view = CoreApplication::MainView;

     view->CoreWindow->Dispatcher->RunAsync(

-        CoreDispatcherPriority::Normal,

+        CoreDispatcherPriority::High,

         ref new DispatchedHandler([this, propertyName]()

     {

         PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName));

diff --git a/SmartPanelItem.h b/SmartPanelItem.h
index 0803fb1..45a7e39 100644
--- a/SmartPanelItem.h
+++ b/SmartPanelItem.h
@@ -57,6 +57,8 @@
         }

     }

 

+    property String^ _callId;

+

 protected:

     void NotifyPropertyChanged(String^ propertyName);

 

diff --git a/SmartPanelItemsViewModel.h b/SmartPanelItemsViewModel.h
index 7bcdfe7..029b165 100644
--- a/SmartPanelItemsViewModel.h
+++ b/SmartPanelItemsViewModel.h
@@ -73,6 +73,7 @@
     SmartPanelItem^ currentItem_;

     SmartPanelItem^ oldItem_;

 

+

 };

 }

 }

diff --git a/UserPreferences.cpp b/UserPreferences.cpp
index c9fd121..96d3afd 100644
--- a/UserPreferences.cpp
+++ b/UserPreferences.cpp
@@ -50,7 +50,7 @@
 

     String^ fileContents = Utils::toPlatformString(Utils::getStringFromFile(Utils::toString(preferencesFile)));

 

-    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,

+    CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,

     ref new DispatchedHandler([=]() {

         if (fileContents != nullptr) {

             Destringify(fileContents);

diff --git a/VideoPage.xaml.cpp b/VideoPage.xaml.cpp
index ee44f93..657d1c1 100644
--- a/VideoPage.xaml.cpp
+++ b/VideoPage.xaml.cpp
@@ -61,14 +61,14 @@
     VideoManager::instance->rendererManager()->writeVideoFrame +=

         ref new WriteVideoFrame([this](String^ id, uint8_t* buf, int width, int height)

     {

-        CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,

+        CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,

         ref new DispatchedHandler([=]() {

             try {

                 if (!VideoManager::instance->rendererManager()->renderers->Size)

                     return;

                 VideoManager::instance->rendererManager()->renderer(id)->isRendering = true;

                 create_task(WriteFrameAsSoftwareBitmapAsync(id, buf, width, height))

-                    .then([=](task<void> previousTask) {

+                .then([=](task<void> previousTask) {

                     try {

                         previousTask.get();

                     }

@@ -88,8 +88,8 @@
     {

         PreviewImage->Visibility = Windows::UI::Xaml::Visibility::Visible;

         PreviewImage->FlowDirection = VideoManager::instance->captureManager()->mirroringPreview ?

-            Windows::UI::Xaml::FlowDirection::RightToLeft :

-            Windows::UI::Xaml::FlowDirection::LeftToRight;

+                                      Windows::UI::Xaml::FlowDirection::RightToLeft :

+                                      Windows::UI::Xaml::FlowDirection::LeftToRight;

     });

 

     VideoManager::instance->captureManager()->stopPreviewing +=

@@ -205,8 +205,15 @@
     auto item = SmartPanelItemsViewModel::instance->_selectedItem;

     auto call = item->_call;

 

-    if (call)

-        RingD::instance->hangUpCall(call);

+    /*if (call)

+        RingD::instance->hangUpCall(call);*/

+

+    if (item->_callId != "") {

+        MSG_("$1 item->callid != vide ");

+        RingD::instance->hangUpCall2(item->_callId);

+        item->_callId = "";

+    }

+

     pressHangUpCall();

 }

 

@@ -325,7 +332,7 @@
 

     auto sbSource = ref new Media::Imaging::SoftwareBitmapSource();

     return create_task(sbSource->SetBitmapAsync(frame))

-        .then([this, sbSource]()

+           .then([this, sbSource]()

     {

         try {

             IncomingVideoImage->Source = sbSource;

diff --git a/Wizard.xaml.cpp b/Wizard.xaml.cpp
index b706b59..13c9556 100644
--- a/Wizard.xaml.cpp
+++ b/Wizard.xaml.cpp
@@ -38,7 +38,7 @@
     std::string str(wstr.begin(), wstr.end());

     RingD::instance->hasConfig = false;

     RingD::instance->accountName = std::string(wstr.begin(), wstr.end());

-    this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, ref new Windows::UI::Core::DispatchedHandler([this] () {

+    this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::High, ref new Windows::UI::Core::DispatchedHandler([this] () {

         this->Frame->Navigate(Windows::UI::Xaml::Interop::TypeName(RingClientUWP::MainPage::typeid));

     }));

 }

diff --git a/pch.h b/pch.h
index 7a002b4..20d873b 100644
--- a/pch.h
+++ b/pch.h
@@ -26,6 +26,7 @@
 #include <sstream>

 #include <string>

 

+

 /* required by generated headers. */

 #include "App.xaml.h"

 #include "Account.h"