private static void PushClipboardToCurrent(MainPage_Model vm) { if ((vm.ClipboardImportingItem?.AvialableShareItems?.Count <= 0)) { return; } vm.FocusingViewIndex = 0; if (vm.ReceivedShareItem == null) { vm.ReceivedShareItem = vm.ClipboardImportingItem; } else { var newItem = vm.ClipboardImportingItem.AvialableShareItems[0]; var targetItemPair = vm.ReceivedShareItem.AvialableShareItems .Select((o, i) => new { o, i }) .Where(p => p.o?.GetType() == newItem.GetType()).FirstOrDefault(); if (targetItemPair != null) { switch (newItem.GetType().Name) { case nameof(TextShareItem): var newText = newItem as TextShareItem; var oldText = vm.ReceivedShareItem.AvialableShareItems[targetItemPair.i] as TextShareItem; var newTextString = newText.Text; ReceivedShareItem.MergeNewText(oldText, newTextString, true, false); break; case nameof(FilesShareItem): var newFile = newItem as FilesShareItem; var oldFile = vm.ReceivedShareItem.AvialableShareItems[targetItemPair.i] as FilesShareItem; oldFile.StorageFiles = new ObservableCollection <FileItem>(oldFile.StorageFiles.Concat(newFile.StorageFiles)); break; default: vm.ReceivedShareItem.AvialableShareItems[targetItemPair.i] = newItem; break; } } else { vm.ReceivedShareItem.AvialableShareItems.Add(newItem); } //var index = targetItemPair == null ? 0 : targetItemPair.i; vm.CurrentViewingItem = newItem; } vm.ClipboardImportingItem = null; }
protected override Task OnBindedViewLoad(IView view) { //New file activation; //View switching: suggests Different command var obv = this.ListenChanged( x => x.FocusingViewIndex, x => x.ReceivedShareItem, x => x.ClipboardImportingItem); obv.Where(_ => this.FocusingViewIndex == 0) .Where(_ => this.ReceivedShareItem == null) .Subscribe(_ => SugguestingCommand = nameof(CommandLoadFromUserFile)) .DisposeWhenUnload(this); obv.Where(_ => this.FocusingViewIndex == 0) .Where(_ => this.ReceivedShareItem != null) .Subscribe(_ => SugguestingCommand = nameof(CommandReshare)) .DisposeWhenUnload(this); obv.Where(_ => this.FocusingViewIndex == 1) .Where(_ => this.ClipboardImportingItem != null) .Where(_ => this.ClipboardImportingItem.AvialableShareItems != null) .Where(_ => this.ClipboardImportingItem.AvialableShareItems.Count > 0) .Subscribe(_ => SugguestingCommand = nameof(CommandPushClipToCurrentItem)) .DisposeWhenUnload(this); obv.Where(_ => this.FocusingViewIndex == 1) .Where( _ => this.ClipboardImportingItem == null || this.ClipboardImportingItem.AvialableShareItems == null || this.ClipboardImportingItem.AvialableShareItems.Count == 0) .Subscribe(_ => SugguestingCommand = nameof(CommandGetFromClipboard)) .DisposeWhenUnload(this); //Receive Global messages EventRouter.Instance.GetEventChannel <Tuple <EventMessage, Object> >() .Where(x => x.EventData.Item1 == EventMessage.AddTextComment) .Where(x => ReceivedShareItem != null) .Where(x => ReceivedShareItem.AvialableShareItems != null) .ObserveOnDispatcher() .Subscribe( tp => { var str = ResourceLoader.GetForViewIndependentUse().GetString("AddYourCommentsHere"); var target = ReceivedShareItem.AvialableShareItems.OfType <TextShareItem>().FirstOrDefault(); if (target == null) { target = new TextShareItem() { Text = str }; ReceivedShareItem.AvialableShareItems.Add(target); } else { ReceivedShareItem.MergeNewText(target, str, true, false); } CurrentViewingItem = target; } ).DisposeWhenUnload(this); EventRouter.Instance.GetEventChannel <Tuple <EventMessage, Object> >() .Where(x => x.EventData.Item1 == EventMessage.ConvertToWebUri && x.EventData.Item2 != null) .Where(x => ReceivedShareItem != null) .Where(x => ReceivedShareItem.AvialableShareItems != null) .ObserveOnDispatcher() .Subscribe( tp => { if (!Uri.IsWellFormedUriString(tp.EventData.Item2 as string, UriKind.Absolute)) { return; } var uri = new Uri(tp.EventData.Item2.ToString()); var target = ReceivedShareItem.AvialableShareItems.OfType <WebLinkShareItem>().FirstOrDefault(); if (target == null) { target = new WebLinkShareItem() { WebLink = uri }; ReceivedShareItem.AvialableShareItems.Add(target); } else { target.WebLink = uri; //ReceivedShareItem.MergeNewText(target, tp.EventData.Item2.ToString(), true, false); } CurrentViewingItem = target; } ) .DisposeWhenUnload(this); EventRouter.Instance.GetEventChannel <Tuple <EventMessage, Object> >() .Where(x => x.EventData.Item1 == EventMessage.ConvertToText && x.EventData.Item2 != null) .Where(x => ReceivedShareItem != null) .Where(x => ReceivedShareItem.AvialableShareItems != null) .ObserveOnDispatcher() .DoExecuteUIBusyTask( this, async tp => { var str = tp.EventData.Item2.ToString(); var target = ReceivedShareItem.AvialableShareItems.OfType <TextShareItem>().FirstOrDefault(); if (target == null) { target = new TextShareItem() { Text = str }; ReceivedShareItem.AvialableShareItems.Add(target); } else { target.Text = str; //ReceivedShareItem.MergeNewText(target, tp.EventData.Item2.ToString(), true, false); } CurrentViewingItem = target; await Task.Yield(); } ) .Subscribe() .DisposeWhenUnload(this); EventRouter.Instance.GetEventChannel <Tuple <EventMessage, Object> >() .Where(x => x.EventData.Item1 == EventMessage.ImageInkComment && x.EventData.Item2 != null) .Where(x => ReceivedShareItem != null) .Where(x => ReceivedShareItem.AvialableShareItems != null) .ObserveOnDispatcher() .DoExecuteUIBusyTask( this, async e => { var vm = new ImageEditor_Model { CurrentImage = e.EventData.Item2 as Models.MemoryStreamBase64Item }; await StageManager.DefaultStage.Show(vm); }) .Subscribe() .DisposeWhenUnload(this); EventRouter.Instance.GetEventChannel <Tuple <EventMessage, Object> >() .Where(x => x.EventData.Item1 == EventMessage.FileInkComment && x.EventData.Item2 != null) .Where(x => ReceivedShareItem != null) .Where(x => ReceivedShareItem.AvialableShareItems != null) .ObserveOnDispatcher() .DoExecuteUIBusyTask( this, async tp => { var fileitem = tp.EventData.Item2 as FileItem; var file = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(fileitem.AccessToken); if (file == null) { return; } var target = ReceivedShareItem.AvialableShareItems.OfType <DelayRenderedImageShareItem>().FirstOrDefault(); byte[] buf = null; using (var stm = await file.OpenReadAsync()) { var ms = new MemoryStream(); await stm.AsStreamForRead().CopyToAsync(ms); buf = ms.ToArray(); } if (target == null) { target = new DelayRenderedImageShareItem() { SelectedImage = new Models.MemoryStreamBase64Item(buf) }; ReceivedShareItem.AvialableShareItems.Add(target); } else { target.SelectedImage = new Models.MemoryStreamBase64Item(buf); //ReceivedShareItem.MergeNewText(target, tp.EventData.Item2.ToString(), true, false); } CurrentViewingItem = target; var vm = new ImageEditor_Model { CurrentImage = target.SelectedImage }; await StageManager.DefaultStage.Show(vm); }) .Subscribe() .DisposeWhenUnload(this); return(base.OnBindedViewLoad(view)); }