예제 #1
0
        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;
        }
예제 #2
0
        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));
        }