public LinkStreamEditorContext(StatusControlContext statusContext, LinkStream linkContent,
                                       bool extractDataOnLoad = false)
        {
            StatusContext = statusContext ?? new StatusControlContext();

            SaveUpdateDatabaseCommand = new Command(() =>
                                                    StatusContext.RunBlockingTask(() => SaveToDbWithValidation(StatusContext?.ProgressTracker())));
            SaveUpdateDatabaseAndCloseCommand = new Command(() =>
                                                            StatusContext.RunBlockingTask(() => SaveToDbWithValidationAndClose(StatusContext?.ProgressTracker())));
            ExtractDataCommand = new Command(() =>
                                             StatusContext.RunBlockingTask(() => ExtractDataFromLink(StatusContext?.ProgressTracker())));
            OpenUrlInBrowserCommand = new Command(() =>
            {
                try
                {
                    var ps = new ProcessStartInfo(LinkUrl)
                    {
                        UseShellExecute = true, Verb = "open"
                    };
                    Process.Start(ps);
                }
                catch (Exception e)
                {
                    StatusContext.ToastWarning($"Trouble opening link - {e.Message}");
                }
            });

            StatusContext.RunFireAndForgetTaskWithUiToastErrorReturn(async() =>
                                                                     await LoadData(linkContent, extractDataOnLoad));
        }
예제 #2
0
        public LinkStreamEditorWindow(LinkStream toLoad, bool extractDataFromLink = false)
        {
            InitializeComponent();
            StatusContext = new StatusControlContext();
            EditorContent = new LinkStreamEditorContext(StatusContext, toLoad, extractDataFromLink);

            EditorContent.RequestLinkStreamEditorWindowClose += (sender, args) => { Dispatcher?.Invoke(Close); };

            DataContext            = this;
            AccidentalCloserHelper = new WindowAccidentalClosureHelper(this, StatusContext, EditorContent);
        }
예제 #3
0
 private static string TypeToFilterTag(object content)
 {
     return(content switch
     {
         NoteContent _ => "post",
         PostContent _ => "post",
         ImageContent _ => "image",
         PhotoContent _ => "image",
         FileContent _ => "file",
         LinkStream _ => "link",
         _ => "other"
     });
예제 #4
0
        [Test] public void LinkStream()
        {
            const string src = "This is a longest message to test blocking and asynchronous communication using the link stream";
            string       msg = string.Empty;

            var wait     = new EventWaitHandle(false, EventResetMode.ManualReset);
            var write_ex = (Exception?)null;
            var read_ex  = (Exception?)null;

            var link = new LinkStream {
                BlockBufferSize = 4, MaxCapacity = 8
            };

            ThreadPool.QueueUserWorkItem(x =>
            {
                try
                {
                    using (var sw = new StreamWriter(link.OStream))
                        sw.Write(src);
                }
                catch (Exception ex) { write_ex = ex; wait.Set(); }
            });
            ThreadPool.QueueUserWorkItem(x =>
            {
                try
                {
                    using (var sr = new StreamReader(link.IStream))
                        msg = sr.ReadToEnd();

                    wait.Set();
                }
                catch (Exception ex) { read_ex = ex; wait.Set(); }
            });

            wait.WaitOne();
            Assert.Null(write_ex);
            Assert.Null(read_ex);
            Assert.Equal(src, msg);
        }
예제 #5
0
        public static HtmlTag FromLinkStream(LinkStream content)
        {
            if (content == null)
            {
                return(HtmlTag.Empty());
            }

            var compactContentContainerDiv = new DivTag().AddClass("content-compact-container");

            var compactContentMainTextContentDiv = new DivTag().AddClass("link-compact-text-content-container");

            var compactContentMainTextTitleTextDiv =
                new DivTag().AddClass("content-compact-text-content-title-container");
            var compactContentMainTextTitleLink =
                new LinkTag(string.IsNullOrWhiteSpace(content.Title) ? content.Url : content.Title, content.Url)
                .AddClass("content-compact-text-content-title-link");

            compactContentMainTextTitleTextDiv.Children.Add(compactContentMainTextTitleLink);

            var compactContentSummaryTextDiv = new DivTag().AddClass("link-compact-text-content-summary");

            var itemsPartOne = new List <string>();

            if (!string.IsNullOrWhiteSpace(content.Author))
            {
                itemsPartOne.Add(content.Author);
            }
            if (content.LinkDate != null)
            {
                itemsPartOne.Add(content.LinkDate.Value.ToString("M/d/yyyy"));
            }
            if (content.LinkDate == null)
            {
                itemsPartOne.Add($"Saved {content.CreatedOn:M/d/yyyy}");
            }

            if (itemsPartOne.Any())
            {
                var textPartOneDiv = new DivTag().AddClass("content-compact-text-content-link-summary")
                                     .Text(string.Join(" - ", itemsPartOne));
                compactContentSummaryTextDiv.Children.Add(textPartOneDiv);
            }

            if (!string.IsNullOrWhiteSpace(content.Description))
            {
                var textPartThreeDiv = new DivTag().AddClass("content-compact-text-content-link-summary")
                                       .Text(content.Description);
                compactContentSummaryTextDiv.Children.Add(textPartThreeDiv);
            }

            if (!string.IsNullOrWhiteSpace(content.Comments))
            {
                var textPartTwoDiv = new DivTag().AddClass("content-compact-text-content-link-summary")
                                     .Text(content.Comments);
                compactContentSummaryTextDiv.Children.Add(textPartTwoDiv);
            }

            compactContentMainTextContentDiv.Children.Add(compactContentMainTextTitleTextDiv);
            compactContentMainTextContentDiv.Children.Add(compactContentSummaryTextDiv);

            compactContentContainerDiv.Children.Add(compactContentMainTextContentDiv);

            return(compactContentContainerDiv);
        }