示例#1
0
        public Index()
        {
            InitFields();

            DisplayName = "Сбис";
            CurrentItem
            .Select(x => {
                if (x == null)
                {
                    return(Observable.Return <string>(null));
                }
                return(Observable.StartAsync(async() => {
                    var dir = FileHelper.MakeRooted("sbis");
                    Directory.CreateDirectory(dir);
                    var filename = Directory.GetFiles(dir, $"{x.Attachment.Идентификатор}.*").FirstOrDefault();
                    if (!String.IsNullOrEmpty(filename))
                    {
                        return filename;
                    }

                    var result = await client.JsonRpc("СБИС.ПрочитатьДокумент", new {
                        Документ = new {
                            Идентификатор = x.Message.Идентификатор,
                        }
                    });
                    var attachments = result["result"]["Вложение"].ToObject <Attach[]>();
                    var attachment = attachments.FirstOrDefault(y => y.Идентификатор == x.Attachment.Идентификатор);
                    if (attachment == null)
                    {
                        throw new Exception($"Не удалось найти вложение с идентификатором {x.Attachment.Идентификатор}");
                    }

                    x.Attachment = attachment;
                    filename = Path.Combine(dir, x.Attachment.Идентификатор + Path.GetExtension(x.FileName));
                    await LoadToFile(filename, attachment.Файл.Ссылка);
                    return filename;
                }).Catch <string, Exception>(y => {
                    Log.Error("Не удалось загрузить документ", y);
                    return Observable.Return <string>(null);
                }));
            })
            .Switch()
            .ObserveOn(UiScheduler)
            .CatchSubscribe(x => {
                if (CurrentItem.Value != null)
                {
                    CurrentItem.Value.LocalFilename = x;
                }
                Filename.Value = x;
            });
            Filename.Select(x => {
                if (x == null)
                {
                    return(Observable.Return <string>(null));
                }

                var attachment = CurrentItem.Value;
                if (fileformats.Contains(Path.GetExtension(x) ?? "", StringComparer.CurrentCultureIgnoreCase))
                {
                    return(Observable.Return(x));
                }

                return(Observable
                       .StartAsync(async() => await LoadPrintPdf(attachment))
                       .Catch <string, Exception>(y => {
                    Log.Error("Не удалось загрузить pdf");
                    return Observable.Return <string>(null);
                }));
            })
            .Switch()
            .ObserveOn(UiScheduler)
            .Subscribe(PreviewFilename);

            CurrentItem.Select(x => (x?.CanSign()).GetValueOrDefault())
            .Subscribe(CanSign);
            CurrentItem.Select(x => (x?.CanSign()).GetValueOrDefault())
            .Subscribe(CanReject);

            Filename.Select(x => x != null)
            .Subscribe(CanOpen);
            Filename.Select(x => x != null)
            .Subscribe(CanSave);
            CurrentItem.Select(x => x != null)
            .Subscribe(CanDelete);
            CurrentItem.Select(x => x != null)
            .Subscribe(CanDeleteItem);
            CurrentItem.Select(x => x != null)
            .Subscribe(CanPrintItem);

            SearchTerm
            .Throttle(Consts.TextInputLoadTimeout, Scheduler)
            .Select(x => String.IsNullOrEmpty(x)
                                        ? items.ToObservableCollection()
                                        : items.Where(y => y.FileName.IndexOf(x, StringComparison.CurrentCultureIgnoreCase) >= 0)
                    .ToObservableCollection())
            .Subscribe(Items);
            //CurrentItem.Select(x => AttachmentHistory.Collect(x))
            //	.Subscribe(History);
            IsLoading.Select(x => !x).Subscribe(IsLoaded);
            IsLoading.Select(x => !x).Subscribe(CanPrev);
            IsLoading.Select(x => !x).Subscribe(CanNext);
            IsLoading.Select(x => !x).Subscribe(CanReload);
        }
示例#2
0
        public Index()
        {
            DisplayName = "Диадок";
            InitFields();

            CurrentItem.Subscribe(LoadFiles);
            CurrentItem
            .Select(x => {
                if (x == null)
                {
                    return(Observable.Return <string>(null));
                }
                return(Observable.Start(() => {
                    var dir = FileHelper.MakeRooted("diadok");
                    Directory.CreateDirectory(dir);
                    var filename = Directory.GetFiles(dir, $"{x.Entity.EntityId}.*").FirstOrDefault();
                    if (!String.IsNullOrEmpty(filename))
                    {
                        return filename;
                    }

                    var bytes = x.Entity.Content.Data
                                ?? api.GetEntityContent(token, box.BoxId, x.Entity.DocumentInfo.MessageId, x.Entity.EntityId);
                    filename = Path.Combine(dir, x.Entity.EntityId + Path.GetExtension(x.Entity.FileName));
                    File.WriteAllBytes(filename, bytes);
                    return filename;
                }, Scheduler).DefaultIfFail());
            })
            .Switch()
            .ObserveOn(UiScheduler)
            .CatchSubscribe(x => {
                if (CurrentItem.Value != null)
                {
                    CurrentItem.Value.LocalFilename = x;
                }
                Filename.Value = x;
            });
            Filename.Select(x => {
                if (x == null)
                {
                    return(Observable.Return <string>(null));
                }

                var attachment = CurrentItem.Value;
                if (fileformats.Contains(Path.GetExtension(x) ?? "", StringComparer.CurrentCultureIgnoreCase))
                {
                    return(Observable.Return(x));
                }

                return(Observable.Start(() => LoadPrintPdf(attachment), Scheduler).DefaultIfFail());
            })
            .Switch()
            .ObserveOn(UiScheduler)
            .Subscribe(PreviewFilename);

            CurrentItem.Select(x => (x?.CanSign()).GetValueOrDefault())
            .Subscribe(CanSign);
            CurrentItem.Select(x => (x?.CanSign()).GetValueOrDefault())
            .Subscribe(CanReject);
            CurrentItem.Select(x => (x?.CanSign()).GetValueOrDefault())
            .Subscribe(CanRequestSign);
            CurrentItem.Select(x => x != null &&
                               !(x.Entity.DocumentInfo.NonformalizedDocumentMetadata?.DocumentStatus == NonformalizedDocumentStatus.InboundRecipientSignatureRequestRejected ||
                                 x.Entity.DocumentInfo.RevocationStatus != RevocationStatus.RevocationStatusNone))
            .Subscribe(CanRevoke);

            Filename.Select(x => x != null)
            .Subscribe(CanOpen);
            Filename.Select(x => x != null)
            .Subscribe(CanSave);
            CurrentItem.Select(x => x != null)
            .Subscribe(CanDelete);
            CurrentItem.Select(x => x != null)
            .Subscribe(CanDeleteItem);
            CurrentItem.Select(x => x != null)
            .Subscribe(CanRequestResolution);
            CurrentItem.Select(x => x != null)
            .Subscribe(CanApprove);
            CurrentItem.Select(x => x != null)
            .Subscribe(CanDisapprove);
            CurrentItem.Select(x => x != null)
            .Subscribe(CanPrintItem);

            SearchTerm
            .Throttle(Consts.TextInputLoadTimeout, Scheduler)
            .Select(x => String.IsNullOrEmpty(x)
                                        ? items.ToObservableCollection()
                                        : items.Where(y => y.FileName.IndexOf(x, StringComparison.CurrentCultureIgnoreCase) >= 0)
                    .ToObservableCollection())
            .Subscribe(Items);
            CurrentItem.Select(x => AttachmentHistory.Collect(x))
            .Subscribe(History);
            IsLoading.Select(x => !x).Subscribe(IsLoaded);
            IsLoading.Select(x => !x).Subscribe(CanPrev);
            IsLoading.Select(x => !x).Subscribe(CanNext);
            IsLoading.Select(x => !x).Subscribe(CanReload);
        }