Made the sharing also work via a file, which is accepted by more apps.

This commit is contained in:
Robin 2016-09-30 22:59:20 +02:00
parent a27a55ae79
commit 243a3e1418

View file

@ -20,12 +20,15 @@
*/ */
using System; using System;
using System.IO;
using Windows.Storage.Streams; using Windows.Storage.Streams;
using Greenshot.Plugin; using Greenshot.Plugin;
using GreenshotPlugin.Core; using GreenshotPlugin.Core;
using GreenshotWin10Plugin.Native; using GreenshotWin10Plugin.Native;
using System.Threading.Tasks; using System.Threading.Tasks;
using Windows.Storage;
using Color = Windows.UI.Color; using Color = Windows.UI.Color;
using System.Collections.Generic;
namespace GreenshotWin10Plugin namespace GreenshotWin10Plugin
{ {
@ -95,6 +98,28 @@ namespace GreenshotWin10Plugin
Log.DebugFormat("Trying to share with {0}", args.ApplicationName); Log.DebugFormat("Trying to share with {0}", args.ApplicationName);
applicationName = args.ApplicationName; applicationName = args.ApplicationName;
}; };
var filename = FilenameHelper.GetFilename(OutputFormat.png, captureDetails);
var storageFile = await StorageFile.CreateStreamedFileAsync(filename, async streamedFileDataRequest =>
{
Log.DebugFormat("Creating deferred file {0}", filename);
try
{
using (var deferredStream = streamedFileDataRequest.AsStreamForWrite())
{
await imageStream.CopyToAsync(deferredStream);
await imageStream.FlushAsync();
}
// Signal that the stream is ready
streamedFileDataRequest.Dispose();
}
catch (Exception)
{
streamedFileDataRequest.FailAndClose(StreamedFileFailureMode.Incomplete);
}
// Signal transfer ready
taskCompletionSource.TrySetResult(applicationName);
}, imageRandomAccessStreamReference);
dataTransferManagerHelper.DataTransferManager.DataRequested += (sender, args) => dataTransferManagerHelper.DataTransferManager.DataRequested += (sender, args) =>
{ {
var deferral = args.Request.GetDeferral(); var deferral = args.Request.GetDeferral();
@ -110,11 +135,11 @@ namespace GreenshotWin10Plugin
dataPackage.Properties.Thumbnail = thumbnailRandomAccessStreamReference; dataPackage.Properties.Thumbnail = thumbnailRandomAccessStreamReference;
dataPackage.Properties.Square30x30Logo = logoRandomAccessStreamReference; dataPackage.Properties.Square30x30Logo = logoRandomAccessStreamReference;
dataPackage.Properties.LogoBackgroundColor = Color.FromArgb(0xff, 0x3d, 0x3d, 0x3d); dataPackage.Properties.LogoBackgroundColor = Color.FromArgb(0xff, 0x3d, 0x3d, 0x3d);
dataPackage.SetBitmap(imageRandomAccessStreamReference); dataPackage.SetStorageItems(new List<IStorageItem> { storageFile });
//dataPackage.SetBitmap(imageRandomAccessStreamReference);
dataPackage.Destroyed += (dp, o) => dataPackage.Destroyed += (dp, o) =>
{ {
Log.Debug("Destroyed."); Log.Debug("Destroyed.");
taskCompletionSource.TrySetCanceled();
}; };
deferral.Complete(); deferral.Complete();
}; };