diff --git a/FoxTube/Classes/Methods.cs b/FoxTube/Classes/Methods.cs index bd39395..fef6a3f 100644 --- a/FoxTube/Classes/Methods.cs +++ b/FoxTube/Classes/Methods.cs @@ -7,6 +7,9 @@ using System.Linq; using System.Text.RegularExpressions; using System.Web; using Windows.ApplicationModel.Core; +using Windows.ApplicationModel.DataTransfer; +using Windows.Storage; +using Windows.Storage.Streams; using Windows.System; using Windows.UI; using Windows.UI.Xaml; @@ -234,5 +237,29 @@ namespace FoxTube await Launcher.LaunchUriAsync(new Uri(url)); } } + + public static async void Share(DataRequestedEventArgs args, string thumbnail, string title, string url, string type) + { + DataRequest request = args.Request; + request.Data.Properties.Title = title; + request.Data.Properties.Description = $"Sharing a {type}"; + + request.Data.SetText(title + "\n" + "#YouTube #FoxTube #SharedWithFoxTube"); + request.Data.SetWebLink(url.ToUri()); + + DataRequestDeferral deferral = request.GetDeferral(); + try + { + StorageFile thumbnailFile = await StorageFile.CreateStreamedFileFromUriAsync("tempThumb.jpg", thumbnail.ToUri(), null); + request.Data.Properties.Thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile); + StorageFile imageFile = thumbnailFile; + + request.Data.SetBitmap(RandomAccessStreamReference.CreateFromFile(imageFile)); + } + finally + { + deferral.Complete(); + } + } } } diff --git a/FoxTube/Pages/ChannelPage.xaml.cs b/FoxTube/Pages/ChannelPage.xaml.cs index 2f374cf..bc3ee8b 100644 --- a/FoxTube/Pages/ChannelPage.xaml.cs +++ b/FoxTube/Pages/ChannelPage.xaml.cs @@ -1,44 +1,25 @@ using System; -using System.Collections.Generic; -using System.IO; using System.Linq; -using System.Runtime.InteropServices.WindowsRuntime; using Windows.Foundation; -using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Controls.Primitives; -using Windows.UI.Xaml.Data; -using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; - -using Google.Apis.Services; using Google.Apis.YouTube.v3; using Google.Apis.YouTube.v3.Data; using Windows.UI.Xaml.Media.Imaging; -using Windows.UI.Text; -using Windows.Storage; using FoxTube.Controls; -using FoxTube.Pages; using Windows.ApplicationModel.DataTransfer; -using Windows.ApplicationModel; -using Windows.Storage.Streams; using Windows.System; using Windows.UI; -using System.Diagnostics; - -// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238 namespace FoxTube.Pages { /// - /// An empty page that can be used on its own or navigated to within a Frame. + /// Channel page /// public sealed partial class ChannelPage : Page { - ApplicationDataContainer settings = ApplicationData.Current.LocalSettings; - public string channelId; public Channel item; @@ -299,45 +280,13 @@ namespace FoxTube.Pages DataTransferManager.ShowShareUI(); } - private async void Share(DataTransferManager sender, DataRequestedEventArgs args) + private void Share(DataTransferManager sender, DataRequestedEventArgs args) { - DataRequest request = args.Request; - request.Data.Properties.Title = item.Snippet.Title; - request.Data.Properties.Description = "Sharing a channel"; - - // Handle errors - //request.FailWithDisplayText("Something unexpected could happen."); - - // Plain text - request.Data.SetText(item.Snippet.Title + "\n" + "#YouTube #FoxTube #SharedWithFoxTube"); - - // Uniform Resource Identifiers (URIs) - if(!string.IsNullOrWhiteSpace(item.Snippet.CustomUrl)) - request.Data.SetWebLink(new Uri($"https://www.youtube.com/user/{item.Snippet.CustomUrl}")); - else - request.Data.SetWebLink(new Uri($"https://www.youtube.com/channel/{item.Id}")); - - // HTML - //request.Data.SetHtmlFormat("Bold Text"); - - // Because we are making async calls in the DataRequested event handler, - // we need to get the deferral first. - DataRequestDeferral deferral = request.GetDeferral(); - - // Make sure we always call Complete on the deferral. - try - { - StorageFile thumbnailFile = await Package.Current.InstalledLocation.GetFileAsync(item.Snippet.Thumbnails.Medium.Url); - request.Data.Properties.Thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile); - StorageFile imageFile = await Package.Current.InstalledLocation.GetFileAsync(item.Snippet.Thumbnails.Medium.Url); - - // Bitmaps - request.Data.SetBitmap(RandomAccessStreamReference.CreateFromFile(imageFile)); - } - finally - { - deferral.Complete(); - } + Methods.Share(args, + item.Snippet.Thumbnails.Medium.Url, + item.Snippet.Title, + string.IsNullOrWhiteSpace(item.Snippet.CustomUrl) ? $"https://www.youtube.com/channel/{item.Id}" : $"https://www.youtube.com/user/{item.Snippet.CustomUrl}", + "channel"); } } } diff --git a/FoxTube/Pages/PlaylistPage.xaml.cs b/FoxTube/Pages/PlaylistPage.xaml.cs index 89dbd9e..a385327 100644 --- a/FoxTube/Pages/PlaylistPage.xaml.cs +++ b/FoxTube/Pages/PlaylistPage.xaml.cs @@ -2,32 +2,18 @@ using Google.Apis.YouTube.v3; using Google.Apis.YouTube.v3.Data; using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices.WindowsRuntime; -using Windows.ApplicationModel; using Windows.ApplicationModel.DataTransfer; using Windows.Foundation; -using Windows.Foundation.Collections; -using Windows.Storage; -using Windows.Storage.Streams; using Windows.System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Controls.Primitives; -using Windows.UI.Xaml.Data; -using Windows.UI.Xaml.Input; -using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Media.Imaging; using Windows.UI.Xaml.Navigation; -// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238 - namespace FoxTube.Pages { /// - /// An empty page that can be used on its own or navigated to within a Frame. + /// Playlist page /// public sealed partial class PlaylistPage : Page { @@ -39,7 +25,7 @@ namespace FoxTube.Pages public PlaylistPage() { - this.InitializeComponent(); + InitializeComponent(); loading = grid.Children[2] as LoadingPage; list = ((grid.Children[0] as ScrollViewer).Content as Grid).Children[1] as VideoGrid; loading.RefreshPage += refresh_Click; @@ -137,42 +123,13 @@ namespace FoxTube.Pages DataTransferManager.ShowShareUI(); } - private async void Share(DataTransferManager sender, DataRequestedEventArgs args) + private void Share(DataTransferManager sender, DataRequestedEventArgs args) { - DataRequest request = args.Request; - request.Data.Properties.Title = item.Snippet.Title; - request.Data.Properties.Description = "Sharing a playlist"; - - // Handle errors - //request.FailWithDisplayText("Something unexpected could happen."); - - // Plain text - request.Data.SetText(item.Snippet.Title + "\n" + "#YouTube #FoxTube #SharedWithFoxTube"); - - // Uniform Resource Identifiers (URIs) - request.Data.SetWebLink(new Uri($"https://www.youtube.com/playlist?list={item.Id}")); - - // HTML - //request.Data.SetHtmlFormat("Bold Text"); - - // Because we are making async calls in the DataRequested event handler, - // we need to get the deferral first. - DataRequestDeferral deferral = request.GetDeferral(); - - // Make sure we always call Complete on the deferral. - try - { - StorageFile thumbnailFile = await Package.Current.InstalledLocation.GetFileAsync(item.Snippet.Thumbnails.Medium.Url); - request.Data.Properties.Thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile); - StorageFile imageFile = await Package.Current.InstalledLocation.GetFileAsync(item.Snippet.Thumbnails.Medium.Url); - - // Bitmaps - request.Data.SetBitmap(RandomAccessStreamReference.CreateFromFile(imageFile)); - } - finally - { - deferral.Complete(); - } + Methods.Share(args, + item.Snippet.Thumbnails.Medium.Url, + item.Snippet.Title, + $"https://www.youtube.com/playlist?list={item.Id}", + "playlist"); } } } diff --git a/FoxTube/Pages/VideoPage.xaml.cs b/FoxTube/Pages/VideoPage.xaml.cs index 40aaff5..36f4765 100644 --- a/FoxTube/Pages/VideoPage.xaml.cs +++ b/FoxTube/Pages/VideoPage.xaml.cs @@ -13,8 +13,6 @@ using Windows.UI.Xaml.Media.Imaging; using System.Diagnostics; using Windows.ApplicationModel.DataTransfer; using Windows.Storage; -using Windows.ApplicationModel; -using Windows.Storage.Streams; using Windows.UI; using FoxTube.Controls; using YoutubeExplode.Models.MediaStreams; @@ -61,7 +59,7 @@ namespace FoxTube.Pages public VideoPage() { - this.InitializeComponent(); + InitializeComponent(); loading = grid.Children[3] as LoadingPage; loading.RefreshPage += refresh_Click; player = mainContent.Children[0] as VideoPlayer; @@ -367,43 +365,15 @@ namespace FoxTube.Pages } } - private async void Share(DataTransferManager sender, DataRequestedEventArgs args) + private void Share(DataTransferManager sender, DataRequestedEventArgs args) { player.Pause(); - DataRequest request = args.Request; - request.Data.Properties.Title = item.Snippet.Title; - request.Data.Properties.Description = "Sharing a video"; - // Handle errors - //request.FailWithDisplayText("Something unexpected could happen."); - - // Plain text - request.Data.SetText(item.Snippet.Title + "\n" + "#YouTube #FoxTube #SharedWithFoxTube"); - - // Uniform Resource Identifiers (URIs) - request.Data.SetWebLink(new Uri(string.Format("https://www.youtube.com/watch?v={0}", videoId))); - - // HTML - //request.Data.SetHtmlFormat("Bold Text"); - - // Because we are making async calls in the DataRequested event handler, - // we need to get the deferral first. - DataRequestDeferral deferral = request.GetDeferral(); - - // Make sure we always call Complete on the deferral. - try - { - StorageFile thumbnailFile = await Package.Current.InstalledLocation.GetFileAsync(item.Snippet.Thumbnails.Medium.Url); - request.Data.Properties.Thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile); - StorageFile imageFile = await Package.Current.InstalledLocation.GetFileAsync(item.Snippet.Thumbnails.Medium.Url); - - // Bitmaps - request.Data.SetBitmap(RandomAccessStreamReference.CreateFromFile(imageFile)); - } - finally - { - deferral.Complete(); - } + Methods.Share(args, + item.Snippet.Thumbnails.Medium.Url, + item.Snippet.Title, + $"https://www.youtube.com/watch?v={videoId}", + "video"); } private void share_Click(object sender, RoutedEventArgs e)