diff --git a/FoxTube.Core/Controllers/StoreInterop.cs b/FoxTube.Core/Controllers/StoreInterop.cs index 5997617..7fd706d 100644 --- a/FoxTube.Core/Controllers/StoreInterop.cs +++ b/FoxTube.Core/Controllers/StoreInterop.cs @@ -1,24 +1,38 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading.Tasks; +using Windows.Services.Store; namespace FoxTube.Core.Controllers { public static class StoreInterop { - public static bool AdsDisabled => false; - public static string GetProPrice() + public static bool AdsDisabled { get; private set; } = true; + public static string Price { get; private set; } + + public static async Task UpdateStoreState() { - return "$4.99"; + StoreProductQueryResult requset = await StoreContext.GetDefault().GetAssociatedStoreProductsAsync(new[] { "Durable" }); + + if (requset.Products["9NP1QK556625"].IsInUserCollection) + return; + + Price = requset.Products["9NP1QK556625"].Price.FormattedPrice; + AdsDisabled = false; } - public static void PurchaseApp() + public static async Task PurchaseApp() { - if (!AdsDisabled) - // TODO: Add purchase validation - return; + StorePurchaseResult request = await StoreContext.GetDefault().RequestPurchaseAsync("9NP1QK556625"); + + switch (request.Status) + { + case StorePurchaseStatus.AlreadyPurchased: + case StorePurchaseStatus.Succeeded: + AdsDisabled = true; + return true; + default: + return false; + } } } } diff --git a/FoxTube.Core/FoxTube.Core.csproj b/FoxTube.Core/FoxTube.Core.csproj index 0a7fd8e..b6c2244 100644 --- a/FoxTube.Core/FoxTube.Core.csproj +++ b/FoxTube.Core/FoxTube.Core.csproj @@ -123,6 +123,7 @@ + @@ -130,6 +131,9 @@ 6.2.9 + + + 14.0 diff --git a/FoxTube.Core/Helpers.cs b/FoxTube.Core/Helpers.cs new file mode 100644 index 0000000..e152ef2 --- /dev/null +++ b/FoxTube.Core/Helpers.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FoxTube.Core +{ + public static class Helpers + { + public static Uri ToUri(this string str) => + string.IsNullOrWhiteSpace(str) ? null : new Uri(str); + } +} diff --git a/FoxTube/App.xaml.cs b/FoxTube/App.xaml.cs index 34722f4..060f634 100644 --- a/FoxTube/App.xaml.cs +++ b/FoxTube/App.xaml.cs @@ -1,4 +1,5 @@ -using Windows.ApplicationModel.Activation; +using FoxTube.Core.Controllers; +using Windows.ApplicationModel.Activation; using Windows.UI.Xaml; namespace FoxTube @@ -8,8 +9,10 @@ namespace FoxTube public App() => InitializeComponent(); - protected override void OnLaunched(LaunchActivatedEventArgs e) + protected override async void OnLaunched(LaunchActivatedEventArgs e) { + await StoreInterop.UpdateStoreState(); + if (!e.PrelaunchActivated && Window.Current.Content == null) Window.Current.Content = new MainPage(); Window.Current.Activate(); diff --git a/FoxTube/Controls/ItemsGrid.xaml.cs b/FoxTube/Controls/ItemsGrid.xaml.cs index 750ef16..7534877 100644 --- a/FoxTube/Controls/ItemsGrid.xaml.cs +++ b/FoxTube/Controls/ItemsGrid.xaml.cs @@ -1,4 +1,5 @@ using FoxTube.Controls.Cards; +using FoxTube.Core.Controllers; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; @@ -16,7 +17,7 @@ namespace FoxTube.Controls { empty.Opacity = 0; - if (ItemsCount % 5 == 0 && ItemsCount > 0) + if (!StoreInterop.AdsDisabled && ItemsCount % 5 == 0 && ItemsCount > 0) Items.Add(new AdvertCard()); Items.Add(item); } diff --git a/FoxTube/Helpers/Utils.cs b/FoxTube/Helpers/Utils.cs index f146322..cd6c1e5 100644 --- a/FoxTube/Helpers/Utils.cs +++ b/FoxTube/Helpers/Utils.cs @@ -1,5 +1,6 @@ using Microsoft.Services.Store.Engagement; using System; +using Windows.ApplicationModel.Core; namespace FoxTube.Helpers { @@ -12,5 +13,11 @@ namespace FoxTube.Helpers if(HasFeedbackHub) await StoreServicesFeedbackLauncher.GetDefault().LaunchAsync(); } + + public static void CloseApp() => + CoreApplication.Exit(); + + public static async void RestartApp(string args = "") => + await CoreApplication.RequestRestartAsync(args); } } diff --git a/FoxTube/MainPage.xaml.cs b/FoxTube/MainPage.xaml.cs index c25bacc..e4cfd45 100644 --- a/FoxTube/MainPage.xaml.cs +++ b/FoxTube/MainPage.xaml.cs @@ -5,6 +5,7 @@ using System; using Windows.ApplicationModel.Core; using Windows.Foundation.Metadata; using Windows.UI; +using Windows.UI.Popups; using Windows.UI.ViewManagement; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; @@ -41,7 +42,7 @@ namespace FoxTube LeaveFeedback.Visibility = Utils.HasFeedbackHub ? Visibility.Visible : Visibility.Collapsed; RemoveAds.Visibility = StoreInterop.AdsDisabled ? Visibility.Collapsed : Visibility.Visible; if (!StoreInterop.AdsDisabled) - RemoveAds.Content += $" ({StoreInterop.GetProPrice()})"; + RemoveAds.Content += $" ({StoreInterop.Price})"; } void NavigationView_DisplayModeChanged(Microsoft.UI.Xaml.Controls.NavigationView sender, Microsoft.UI.Xaml.Controls.NavigationViewDisplayModeChangedEventArgs args) @@ -88,8 +89,19 @@ namespace FoxTube void LeaveFeedback_Click(object sender, RoutedEventArgs e) => Utils.OpenFeedbackHub(); - void RemoveAds_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e) => - StoreInterop.PurchaseApp(); + async void RemoveAds_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e) + { + bool success = await StoreInterop.PurchaseApp(); + if (success) + { + MessageDialog dialog = new MessageDialog("Thanks for purchasing full version of the app (^∇^) In order to complete changes we need to reopen it. But you can do it later (some elements may be broken)", "Thank you for your purchase!"); + dialog.Commands.Add(new UICommand("Restart", (command) => Utils.RestartApp())); + dialog.Commands.Add(new UICommand("Later")); + dialog.CancelCommandIndex = 1; + dialog.DefaultCommandIndex = 0; + await dialog.ShowAsync(); + } + } public static void Navigate(Type pageType) {