diff --git a/MainPage.xaml.cpp b/MainPage.xaml.cpp index 191002ef097f196db35c8aec900afae3292b2ce7..c971a68028874c3802dd348ea98a68ec4d2a7977 100644 --- a/MainPage.xaml.cpp +++ b/MainPage.xaml.cpp @@ -25,8 +25,6 @@ #include "PreviewPage.xaml.h" #include "WelcomePage.xaml.h" -#include "gnutls\gnutls.h" - #include "MainPage.xaml.h" using namespace RingClientUWP; @@ -133,10 +131,7 @@ RingClientUWP::MainPage::showFrame(Windows::UI::Xaml::Controls::Frame^ frame) void RingClientUWP::MainPage::OnNavigatedTo(NavigationEventArgs ^ e) { - gnutls_global_init(); - RingD::instance->registerCallbacks(); - RingD::instance->initDaemon( DRing::DRING_FLAG_CONSOLE_LOG | DRing::DRING_FLAG_DEBUG ); - Video::VideoManager::instance->captureManager()->EnumerateWebcamsAsync(); + RingD::instance->init(); showLoadingOverlay(true, false); } @@ -334,13 +329,18 @@ MainPage::Application_VisibilityChanged(Object^ sender, VisibilityChangedEventAr } else if (vcm->isSettingsPreviewing) { vcm->CleanupCameraAsync() - .then([=](task<void> cleanupTask){ - cleanupTask.get(); - CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync( - CoreDispatcherPriority::High, ref new DispatchedHandler([=]() - { - vcm->InitializeCameraAsync(true); - })); + .then([=](task<void> cleanupCameraTask) { + try { + cleanupCameraTask.get(); + CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync( + CoreDispatcherPriority::High, ref new DispatchedHandler([=]() + { + vcm->InitializeCameraAsync(true); + })); + } + catch (Exception^ e) { + WriteException(e); + } }); } } @@ -416,8 +416,7 @@ MainPage::BeginExtendedExecution() RingDebug::instance->WriteLine("Clean up camera..."); Video::VideoManager::instance->captureManager()->CleanupCameraAsync(); RingDebug::instance->WriteLine("Hang up calls..."); - DRing::fini(); - gnutls_global_init(); + RingD::instance->deinit(); break; default: diff --git a/RingD.cpp b/RingD.cpp index c0fec34b95e9fd303f6de8f890ea8a0da40cad22..851ef946093c805e34f74aba9ce5c67237a93725 100644 --- a/RingD.cpp +++ b/RingD.cpp @@ -252,8 +252,6 @@ void RingClientUWP::RingD::placeCall(Contact^ contact) auto callId2 = DRing::placeCall(accountId2, to2); - - if (callId2.empty()) { WNG_("call not created, the daemon didn't return a call Id"); return; @@ -673,6 +671,32 @@ RingD::registerCallbacks() registerConfHandlers(nameRegistrationHandlers); } +void +RingD::init() +{ + if (daemonInitialized_) { + CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal, + ref new DispatchedHandler([=]() { + finishCaptureDeviceEnumeration(); + })); + return; + } + + gnutls_global_init(); + RingD::instance->registerCallbacks(); + RingD::instance->initDaemon( DRing::DRING_FLAG_CONSOLE_LOG | DRing::DRING_FLAG_DEBUG ); + Video::VideoManager::instance->captureManager()->EnumerateWebcamsAsync(); + + daemonInitialized_ = true; +} + +void +RingD::deinit() +{ + DRing::fini(); + gnutls_global_deinit(); +} + void RingD::initDaemon(int flags) { @@ -1099,7 +1123,5 @@ Vector<String^>^ RingClientUWP::RingD::translateKnownRingDevices(const std::map< devicesList->Append(deviceName); } - - return devicesList; } diff --git a/RingD.h b/RingD.h index 520139ec8fb358202492e0789c4e6358990da249..3a405fffa85d7270b3e9fb939860e5e709504eca 100644 --- a/RingD.h +++ b/RingD.h @@ -59,6 +59,14 @@ public: } } + property bool daemonInitialized + { + bool get() + { + return daemonInitialized_; + } + } + property bool daemonRunning { bool get() @@ -66,6 +74,7 @@ public: return daemonRunning_; } } + property StartingStatus _startingStatus; void cancelOutGoingCall2(String^ callId); // marche @@ -85,6 +94,8 @@ internal: void registerCallbacks(); void initDaemon(int flags); void startDaemon(); + void init(); + void deinit(); void reloadAccountList(); void sendAccountTextMessage(String^ message); void sendSIPTextMessage(String^ message); @@ -209,6 +220,7 @@ private: Windows::UI::Core::CoreDispatcher^ dispatcher; std::string localFolder_; + bool daemonInitialized_ = false; bool daemonRunning_ = false; std::queue<Task^> tasksList_; StartingStatus startingStatus_ = StartingStatus::NORMAL; diff --git a/SmartPanel.xaml b/SmartPanel.xaml index ea5421c87f0d74171a3a059d7ce8fa9de2719c36..c0095cbc04072d02e6e3050899b41abeafd80629 100644 --- a/SmartPanel.xaml +++ b/SmartPanel.xaml @@ -441,12 +441,12 @@ Style="{StaticResource ToggleButtonStyle1}"/> </StackPanel> </StackPanel> - <ToggleButton x:Name="_settingsTBtn_" + <ToggleButton x:Name="_settingsMenuButton_" Grid.Column="2" VerticalAlignment="Bottom" Content="" - Checked="_settings__Checked" - Unchecked="_settings__Unchecked" + Checked="_settingsMenu__Checked" + Unchecked="_settingsMenu__Unchecked" Style="{StaticResource ToggleButtonStyle1}"/> </Grid> @@ -1068,33 +1068,35 @@ ItemTemplate="{StaticResource SmartPanelItemsTemplate}"/> </Grid> <!-- settings. --> - <Grid x:Name="_settings_" + <Grid x:Name="_settingsMenu_" Grid.Row="0" Visibility="Collapsed"> <Grid.RowDefinitions> <RowDefinition Height="*"/> </Grid.RowDefinitions> - <Grid x:Name="_videoSettings_" + <ScrollViewer> + <Grid x:Name="_videoSettings_" Grid.Row="0"> - <StackPanel Margin="10"> - <TextBlock Text="Video Device" + <StackPanel Margin="10"> + <TextBlock Text="Video Device" Margin="10"/> - <ComboBox x:Name="_videoDeviceComboBox_" + <ComboBox x:Name="_videoDeviceComboBox_" Margin="10" SelectionChanged="_videoDeviceComboBox__SelectionChanged"> - </ComboBox> - <TextBlock Text="Video Resolution" Margin="10"/> - <ComboBox x:Name="_videoResolutionComboBox_" + </ComboBox> + <TextBlock Text="Video Resolution" Margin="10"/> + <ComboBox x:Name="_videoResolutionComboBox_" Margin="10" SelectionChanged="_videoResolutionComboBox__SelectionChanged"> - </ComboBox> - <TextBlock Text="Video Rate" Margin="10"/> - <ComboBox x:Name="_videoRateComboBox_" + </ComboBox> + <TextBlock Text="Video Rate" Margin="10"/> + <ComboBox x:Name="_videoRateComboBox_" Margin="10" SelectionChanged="_videoRateComboBox__SelectionChanged"> - </ComboBox> - </StackPanel> - </Grid> + </ComboBox> + </StackPanel> + </Grid> + </ScrollViewer> </Grid> </Grid> </Grid> diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp index 811415a0ec76823041ceba6d75382c0c4b86ce69..bbc88fbd118bdf4440fd9fafcfe0a85857d0afdb 100644 --- a/SmartPanel.xaml.cpp +++ b/SmartPanel.xaml.cpp @@ -193,6 +193,8 @@ void RingClientUWP::Views::SmartPanel::unselectContact() void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Checked(Object^ sender, RoutedEventArgs^ e) { + _settingsMenu__Unchecked(nullptr,nullptr); + _settingsMenuButton_->IsChecked = false; _shareMenuButton_->IsChecked = false; _devicesMenuButton_->IsChecked = false; _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; @@ -208,10 +210,16 @@ void RingClientUWP::Views::SmartPanel::_accountsMenuButton__Unchecked(Object^ se _accountEditionGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; } -void RingClientUWP::Views::SmartPanel::_settings__Checked(Object^ sender, RoutedEventArgs^ e) +void RingClientUWP::Views::SmartPanel::_settingsMenu__Checked(Object^ sender, RoutedEventArgs^ e) { + _accountsMenuButton__Unchecked(nullptr,nullptr); + _accountsMenuButton_->IsChecked = false; + _shareMenuButton__Unchecked(nullptr,nullptr); + _shareMenuButton_->IsChecked = false; + _devicesMenuButton__Unchecked(nullptr,nullptr); + _devicesMenuButton_->IsChecked = false; _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; - _settings_->Visibility = Windows::UI::Xaml::Visibility::Visible; + _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Visible; auto vcm = Video::VideoManager::instance->captureManager(); if (!vcm->isInitialized) vcm->InitializeCameraAsync(true); @@ -220,9 +228,9 @@ void RingClientUWP::Views::SmartPanel::_settings__Checked(Object^ sender, Routed summonPreviewPage(); } -void RingClientUWP::Views::SmartPanel::_settings__Unchecked(Object^ sender, RoutedEventArgs^ e) +void RingClientUWP::Views::SmartPanel::_settingsMenu__Unchecked(Object^ sender, RoutedEventArgs^ e) { - _settings_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; + _settingsMenu_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _smartGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; Video::VideoManager::instance->captureManager()->StopPreviewAsync() .then([](task<void> stopPreviewTask) @@ -257,13 +265,16 @@ void RingClientUWP::Views::SmartPanel::setMode(RingClientUWP::Views::SmartPanel: _selectedAccountAvatarContainer_->Width = _selectedAccountAvatarContainer_->Height; _shaderPhotoboothIcon_->Width = _shaderPhotoboothIcon_->Height; - _settingsTBtn_->IsChecked = false; + _settingsMenuButton_->IsChecked = false; _accountsMenuButton_->IsChecked = false; _shareMenuButton_->IsChecked = false; + _devicesMenuButton_->IsChecked = false; } void RingClientUWP::Views::SmartPanel::_shareMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { + _settingsMenu__Unchecked(nullptr,nullptr); + _settingsMenuButton_->IsChecked = false; _shareMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Visible; _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; @@ -329,8 +340,6 @@ void RingClientUWP::Views::SmartPanel::_createAccountYes__Click(Platform::Object _accountCreationMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _accountsMenuGrid_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; _accountsMenuButton__Checked(nullptr, nullptr); - - } @@ -547,8 +556,8 @@ void RingClientUWP::Views::SmartPanel::generateQRcode() for (int u = 0 ; u < widthBitmap ; u++) { for (int v = 0; v < widthBitmap; v++) { - int x = (float)u / (float)widthBitmap * (float)widthQrCode; - int y = (float)v / (float)widthBitmap * (float)widthQrCode; + int x = static_cast<int>((float)u / (float)widthBitmap * (float)widthQrCode); + int y = static_cast<int>((float)v / (float)widthBitmap * (float)widthQrCode); auto currPixelRow = desc.StartIndex + desc.Stride * u + BYTES_PER_PIXEL * v; row = (p + (y * widthQrCode)); @@ -774,6 +783,9 @@ void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Unchecked(Platform::O void RingClientUWP::Views::SmartPanel::_devicesMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { + _settingsMenu__Unchecked(nullptr,nullptr); + _settingsMenuButton_->IsChecked = false; + _waitingDevicesList_->Visibility = Windows::UI::Xaml::Visibility::Visible; _devicesIdList_->Visibility = Windows::UI::Xaml::Visibility::Collapsed; @@ -1345,7 +1357,11 @@ SmartPanel::_videoRateComboBox__SelectionChanged(Platform::Object^ sender, Windo .then([=](task<void> cleanupCameraTask) { try { cleanupCameraTask.get(); - vcm->InitializeCameraAsync(true); + CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync( + CoreDispatcherPriority::High, ref new DispatchedHandler([=]() + { + vcm->InitializeCameraAsync(true); + })); } catch (Exception^ e) { WriteException(e); diff --git a/SmartPanel.xaml.h b/SmartPanel.xaml.h index 4eb40cb108bf19ada03bec61b4663679880e6729..20f81afa2444f5805c779093dcc78893ad305f36 100644 --- a/SmartPanel.xaml.h +++ b/SmartPanel.xaml.h @@ -101,8 +101,8 @@ private: /* functions */ void _accountsMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void _accountsMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); - void _settings__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); - void _settings__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _settingsMenu__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void _settingsMenu__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void _shareMenuButton__Checked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void _shareMenuButton__Unchecked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void _addAccountBtn__Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); diff --git a/Wizard.xaml.cpp b/Wizard.xaml.cpp index e87e2b6574c87260065c06a692b938b4a06ffda8..75821e9a2ac68a315c07ce7258e1057985570d8a 100644 --- a/Wizard.xaml.cpp +++ b/Wizard.xaml.cpp @@ -4,8 +4,6 @@ #include "MainPage.xaml.h" -#include "gnutls\gnutls.h" - using namespace RingClientUWP::Views; using namespace Concurrency; @@ -34,10 +32,7 @@ Wizard::Wizard() void RingClientUWP::Views::Wizard::OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs ^ e) { - gnutls_global_init(); - RingD::instance->registerCallbacks(); - RingD::instance->initDaemon( DRing::DRING_FLAG_CONSOLE_LOG | DRing::DRING_FLAG_DEBUG ); - Video::VideoManager::instance->captureManager()->EnumerateWebcamsAsync(); + RingD::instance->init(); } void