Пример #1
0
        private async Task SetContentAsync(DataPackage content)
        {
            var data          = content?.GetView();
            var targetList    = new TargetList();
            var targetStrings = new List <string>();

            bool CheckFormat(string format, out uint id)
            {
                if (data?.Contains(format) ?? false)
                {
                    id = (uint)targetStrings.Count;
                    targetStrings.Add(format);
                    return(true);
                }
                id = 0;
                return(false);
            }

            async void SetDataNative(Clipboard clipboard, SelectionData nativeData, uint info)
            {
                var format = targetStrings[(int)info];

                var uris = new List <string>();

                // Cannot use switch here, these strings are not constants!!!
                if (format == StandardDataFormats.Text)
                {
                    nativeData.Text = await data.GetTextAsync();
                }
                else if (format == StandardDataFormats.Bitmap)
                {
                    var streamRef = await data.GetBitmapAsync();

                    var uwpStream = await streamRef.OpenReadAsync();

                    var stream = uwpStream.AsStreamForRead();
                    nativeData.SetPixbuf(new Pixbuf(stream));
                }
                else if (format == StandardDataFormats.Html)
                {
                    var htmlString = await data.GetHtmlFormatAsync();

                    nativeData.Set(HtmlContent, 8, Encoding.UTF8.GetBytes(htmlString));
                }
                else if (format == StandardDataFormats.Rtf)
                {
                    var rtfString = await data.GetRtfAsync();

                    nativeData.Set(RtfContent, 8, Encoding.UTF8.GetBytes(rtfString));
                }
                else if (format == StandardDataFormats.StorageItems)
                {
                    var items = await data.GetStorageItemsAsync();

                    var builder = new StringBuilder();

                    builder.AppendLine("copy");
                    foreach (var item in items)
                    {
                        var path = item.Path;
                        builder.AppendLine(FileUriHelper.UrlEncode(path));
                    }

                    nativeData.Set(GnomeCopiedFilesContent, 8, Encoding.UTF8.GetBytes(builder.ToString().Trim()));
                }
                else if (format == StandardDataFormats.ApplicationLink)
                {
                    uris.Add((await data.GetApplicationLinkAsync()).ToString());
                }
                else if (format == StandardDataFormats.WebLink)
                {
                    uris.Add((await data.GetWebLinkAsync()).ToString());
                }
                else if (format == StandardDataFormats.Uri)
                {
                    uris.Add((await data.GetUriAsync()).ToString());
                }

                if (uris.Count != 0)
                {
                    nativeData.SetUris(uris.ToArray());
                }
            }

            uint id;

            if (CheckFormat(StandardDataFormats.Text, out id))
            {
                targetList.AddTextTargets(id);
            }
            if (CheckFormat(StandardDataFormats.Bitmap, out id))
            {
                targetList.AddImageTargets(id, true);
            }
            if (CheckFormat(StandardDataFormats.Html, out id))
            {
                targetList.Add(HtmlContent, 0, id);
            }
            if (CheckFormat(StandardDataFormats.Rtf, out id))
            {
                targetList.Add(RtfContent, 0, id);
            }
            if (CheckFormat(StandardDataFormats.StorageItems, out id))
            {
                targetList.Add(GnomeCopiedFilesContent, 0, id);
            }
            if (CheckFormat(StandardDataFormats.ApplicationLink, out id))
            {
                targetList.AddUriTargets(id);
            }
            if (CheckFormat(StandardDataFormats.WebLink, out id))
            {
                targetList.AddUriTargets(id);
            }
            if (CheckFormat(StandardDataFormats.Uri, out id))
            {
                targetList.AddUriTargets(id);
            }

            _clipboard.SetWithData((TargetEntry [])targetList, SetDataNative, (clipboard) => { });
        }
Пример #2
0
        public void When_Encode_Linux_File_Path(string input, string expectedOutput)
        {
            var sut = FileUriHelper.UrlEncode(input);

            sut.Should().Be(expectedOutput);
        }