예제 #1
0
파일: MainPage.xaml.cs 프로젝트: ermau/Aura
        private async void PromptConnect(string url, bool isConnect)
        {
            var newSource = new CancellationTokenSource(15000);
            var oldSource = Interlocked.Exchange(ref this.clipboardCampaignCancel, newSource);

            oldSource?.Cancel();

            var client = await App.Services.GetServiceAsync <ILiveCampaignClient> ();

            try {
                Task <RemoteCampaign> campaignTask = client.GetCampaignDetailsAsync(new Uri(url), newSource.Token);

                var campaigns = await App.Services.GetServiceAsync <CampaignManager> ();

                var campaign = await campaignTask;
                if (campaign == null || campaigns.Elements.Any(c => c.Id == campaign.id.ToString()))
                {
                    return;
                }

                if (!isConnect)
                {
                    FlyoutService.PushFlyout("CampaignConnectFlyout", new JoinCampaignRequestViewModel(campaign));
                }
            } catch (OperationCanceledException) {
            }
        }
예제 #2
0
 private void OnPairServiceResult(PairServiceResultMessage msg)
 {
     // TODO: Localize
     if (msg.Exception == null)
     {
         FlyoutService.ShowMessage($"{msg.Service.DisplayName} paired successfully.", "\xE73E");
     }
     else
     {
         FlyoutService.ShowMessage($"{msg.Service.DisplayName} failed to pair: {msg.Exception.Message}", "\xE783");
     }
 }
예제 #3
0
        private async void OnServiceDiscovered(ServiceDiscoveredMesage msg)
        {
            var playspaceManager = await this.serviceProvider.GetServiceAsync <PlaySpaceManager> ();

            bool isEnabled = await playspaceManager.TryRestoreServiceAsync(msg.Service);

            if (isEnabled)
            {
                return;
            }

            await this.rootFrame.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Low, () => {
                FlyoutService.PushFlyout("ServiceAvailableFlyout", new EnableServiceRequestViewModel(msg.Service));
            });
        }
예제 #4
0
파일: MainPage.xaml.cs 프로젝트: ermau/Aura
        public MainPage()
        {
            InitializeComponent();
            SetupDataContext(App.Services);

            SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
            Window.Current.CoreWindow.PointerPressed += OnPointerPressed;
            Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated += OnAcceleratorKeyActivated;

            Messenger.Default.Register <RequestJoinCampaignPromptMessage> (this, async rj => {
                var join = new JoinCampaignDialog();
                await join.ShowAsync();
            });

            Messenger.Default.Register <RequestCreateCampaignPromptMessage> (this, async rc => {
                var create = new CreateCampaignDialog();
                await create.ShowAsync();
            });

            Messenger.Default.Register <CampaignDisconnectedMessage> (this, cd => {
                FlyoutService.PushFlyout("LostConnectionFlyout", null);
            });

            Messenger.Default.Register <CampaignReconnectedMessage> (this, cr => {
                FlyoutService.SwapFlyout("LostConnectionFlyout", "ReconnectedFlyout", null);
            });

            Messenger.Default.Register <ConnectCampaignMessage> (this, cc => {
                // If the play page has already been created, this will swap to it, but it will have heard
                // this message and start connecting to it.
                if (!TryNavigateToPage(PlayPageName))
                {
                    return;
                }

                Messenger.Default.Send(cc);
            });

            Messenger.Default.Register <PromptMessage> (this, p => p.Result = OnPromptAsync(p));

            Messenger.Default.Register <NavigateToElementMessage> (this, OnNavigateToElement);

            FlyoutService.RegisterFlyoutTarget(this.contentFrame);
            Clipboard.ContentChanged += OnClipboardContentChanged;

            Loaded += MainPage_Loaded;
        }
예제 #5
0
파일: MainPage.xaml.cs 프로젝트: ermau/Aura
        private async void ShowConnect(string url, bool isConnect)
        {
            var client = await App.Services.GetServiceAsync <ILiveCampaignClient> ();

            try {
                var cancel  = new CancellationTokenSource(5000);
                var details = await client.GetCampaignDetailsAsync(url, cancel.Token);

                string message = (isConnect)
                                        ? $"Drop to connect to {details.Name}"
                                        : $"Drop to join {details.Name}";

                string glyph = (isConnect)
                                        ? "\xE768"
                                        : "\xE71B";

                FlyoutService.ShowMessage(message, glyph);
            } catch (OperationCanceledException) {
            }
        }
예제 #6
0
파일: MainPage.xaml.cs 프로젝트: ermau/Aura
        private async void OnDragEnter(object sender, DragEventArgs e)
        {
            if (AttemptShowConnect(e))
            {
                return;
            }

            if (e.DataView.AvailableFormats.Contains(StandardDataFormats.StorageItems))
            {
                e.AcceptedOperation = DataPackageOperation.Copy;
                e.DragUIOverride.IsCaptionVisible = false;

                var items = await e.DataView.GetStorageItemsAsync();

                bool many = (items.Count > 1 || items.OfType <IStorageFolder> ().Any());

                // TODO: localize
                string      message = $"Drop to import {((!many) ? items[0].Name : "files")}";
                string      glyph   = (many) ? "\xE8B6" : "\xE8B5";
                IDisposable old     = Interlocked.Exchange(ref this.dragFlyout, FlyoutService.ShowMessage(message, glyph));
                old?.Dispose();
            }
        }