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); }
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); }