示例#1
0
 public static ClipboardInfoResponse GetResponse(List <Guid> knownStateGuids)
 {
     return(new ClipboardInfoResponse
     {
         States = (knownStateGuids != null
             ? AppState.Current.ClipboardStates.Where(x => !knownStateGuids.Contains(x.Id))
             : AppState.Current.ClipboardStates)
                  .Select(x =>
         {
             ClipboardItem item = ClipboardParser.GetPreferredItem(x.Items, serializable: true);
             if (item != null)
             {
                 return new ClipboardStateInfo
                 {
                     Id = x.Id,
                     Size = item.Size,
                     Format = ClipboardParser.GetAbstractFormat(item.Format),
                     DateTime = x.DateTime,
                 };
             }
             else
             {
                 return null;
             }
         })
                  .Where(x => x != null)
                  .ToList(),
     });
 }
示例#2
0
        private ClipboardViewModel CreateClipboardViewModel(ClipboardState state)
        {
            ClipboardItem item = ClipboardParser.GetPreferredItem(state.Items, serializable: false);

            if (item == null)
            {
                _logger.LogInfo(LogEvents.UnknClipbdFmt, state.Items.Select(x => new { x.Format, x.FormatName }));
                return(new UnknownViewModel(
                           state,
                           DateTime.Now,
                           onPaste: OnPasteStateClicked,
                           onDelete: OnDeleteStateClicked));
            }

            switch (ClipboardParser.GetAbstractFormat(item.Format))
            {
            case AbstractDataFormat.Image:
                return(new ImageViewModel(
                           state,
                           DateTime.Now,
                           onPaste: OnPasteStateClicked,
                           onDelete: OnDeleteStateClicked)
                {
                    Image = ClipboardParser.ParseImage(item),
                });

            case AbstractDataFormat.Text:
                var    text   = ClipboardParser.ParseText(item);
                string source = text.Trim();
                if (source.Length < 50 && ColorParser.TryParse(source, out Color color))
                {
                    Color textColor = (color.R + color.G + color.B) * (float)color.A / 255 / 3 >= 127
                            ? System.Windows.Media.Colors.Black
                            : System.Windows.Media.Colors.White;
                    return(new ColorViewModel(
                               state,
                               DateTime.Now,
                               onPaste: OnPasteStateClicked,
                               onDelete: OnDeleteStateClicked)
                    {
                        BackgroundColor = new SolidColorBrush(color),
                        TextColor = new SolidColorBrush(textColor),
                        Text = text.Trim(),
                    });
                }
                else
                {
                    string textContent = PostProcessText(ClipboardParser.ParseText(item));
                    return(new TextViewModel(
                               state,
                               DateTime.Now,
                               onPaste: OnPasteStateClicked,
                               onDelete: OnDeleteStateClicked)
                    {
                        Text = textContent,
                    });
                }

            case AbstractDataFormat.FileDrop:
                string[] items = ClipboardParser.ParseFileDrop(item)
                                 .Where(x => File.Exists(x) || Directory.Exists(x))
                                 .ToArray();
                return(new FileDropViewModel(
                           state,
                           DateTime.Now,
                           onPaste: OnPasteStateClicked,
                           onDelete: OnDeleteStateClicked)
                {
                    Items = items,
                });

            default:
                _logger.LogInfo(LogEvents.UnknClipbdFmt, state.Items.Select(x => new { x.Format, x.FormatName }));
                return(new UnknownViewModel(
                           state,
                           DateTime.Now,
                           onPaste: OnPasteStateClicked,
                           onDelete: OnDeleteStateClicked));
            }
        }