]> granicus.if.org Git - handbrake/commitdiff
WinGui: Make the app UWP aware. When in a UWP container, the update options will...
authorsr55 <sr55.hb@outlook.com>
Fri, 18 Aug 2017 20:50:54 +0000 (21:50 +0100)
committersr55 <sr55.hb@outlook.com>
Fri, 18 Aug 2017 20:50:54 +0000 (21:50 +0100)
win/CS/HandBrakeWPF/Converters/OptionTabConverter.cs [new file with mode: 0644]
win/CS/HandBrakeWPF/HandBrakeWPF.csproj
win/CS/HandBrakeWPF/Services/UpdateService.cs
win/CS/HandBrakeWPF/Utilities/UwpDetect.cs [new file with mode: 0644]
win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs
win/CS/HandBrakeWPF/Views/MainView.xaml
win/CS/HandBrakeWPF/Views/OptionsView.xaml

diff --git a/win/CS/HandBrakeWPF/Converters/OptionTabConverter.cs b/win/CS/HandBrakeWPF/Converters/OptionTabConverter.cs
new file mode 100644 (file)
index 0000000..9ad7111
--- /dev/null
@@ -0,0 +1,38 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="OptionTabConverter.cs" company="HandBrake Project (http://handbrake.fr)">
+//   This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+// </copyright>
+// <summary>
+//   Controls display of tab pages
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Converters
+{
+    using System;
+    using System.Globalization;
+    using System.Linq;
+    using System.Windows.Data;
+
+    using HandBrakeWPF.Model;
+    using HandBrakeWPF.Utilities;
+
+    public class OptionTabConverter : IValueConverter
+    {
+        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+        {
+            OptionsTab[] tabs = value as OptionsTab[];
+            if (tabs != null && UwpDetect.IsUWP())
+            {
+                return tabs.Where(s => s != OptionsTab.Updates).ToArray();
+            }
+
+            return value;
+        }
+
+        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
index 42c3882a6bc35f22c55a05a7a2219ac350ba1173..8ac0f2b2001bc9f1d4d8e71b32856b49b510b62a 100644 (file)
     <Compile Include="Converters\Filters\SharpenPresetConverter.cs" />\r
     <Compile Include="Converters\Options\FileSizeConverter.cs" />\r
     <Compile Include="Converters\Options\LogLevelConverter.cs" />\r
+    <Compile Include="Converters\OptionTabConverter.cs" />\r
     <Compile Include="Converters\PresetsMenuConverter.cs" />\r
     <Compile Include="Converters\Queue\PictureSettingsDescConveter.cs" />\r
     <Compile Include="Converters\Subtitles\SubtitleBurnInBehaviourConverter.cs" />\r
     <Compile Include="Utilities\Portable.cs" />\r
     <Compile Include="Utilities\DirectoryUtilities.cs" />\r
     <Compile Include="Utilities\SystemInfo.cs" />\r
+    <Compile Include="Utilities\UwpDetect.cs" />\r
     <Compile Include="Utilities\Win32.cs" />\r
     <Compile Include="Utilities\Win7.cs" />\r
     <Compile Include="ViewModels\Interfaces\IManagePresetViewModel.cs" />\r
index 3b3d0912532c5f9d034abb908a78a4632ef03522..0702b1909005fee6cc8abd9607e37ad3390af54d 100644 (file)
@@ -20,6 +20,8 @@ namespace HandBrakeWPF.Services
     using HandBrake.ApplicationServices.Utilities;\r
     using HandBrakeWPF.Model;\r
     using HandBrakeWPF.Services.Interfaces;\r
+    using HandBrakeWPF.Utilities;\r
+\r
     using AppcastReader = HandBrakeWPF.Utilities.AppcastReader;\r
 \r
     /// <summary>\r
@@ -61,6 +63,11 @@ namespace HandBrakeWPF.Services
         /// </param>\r
         public void PerformStartupUpdateCheck(Action<UpdateCheckInformation> callback)\r
         {\r
+            if (UwpDetect.IsUWP())\r
+            {\r
+                return; // Disable Update checker if we are in a UWP container.\r
+            }\r
+\r
             // Make sure it's running on the calling thread\r
             if (this.userSettingService.GetUserSetting<bool>(UserSettingConstants.UpdateStatus))\r
             {\r
diff --git a/win/CS/HandBrakeWPF/Utilities/UwpDetect.cs b/win/CS/HandBrakeWPF/Utilities/UwpDetect.cs
new file mode 100644 (file)
index 0000000..0681659
--- /dev/null
@@ -0,0 +1,40 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="UwpDetect.cs" company="HandBrake Project (http://handbrake.fr)">
+//   This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+// </copyright>
+// <summary>
+//  Helper class to detect if we are running in a UWP container.
+//  https://msdn.microsoft.com/en-us/library/windows/desktop/hh446599(v=vs.85).aspx
+// </summary>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrakeWPF.Utilities
+{
+    using System;
+    using System.Runtime.InteropServices;
+
+    public class UwpDetect
+    {
+        [DllImport("kernel32.dll")]
+        static extern int GetCurrentPackageFullName(ref int length, IntPtr fullName);
+
+        public static bool IsUWP()
+        {
+            if (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor <= 1)
+            {
+                return false;
+            }
+
+            int length = 0;
+            IntPtr name = IntPtr.Zero;
+            GetCurrentPackageFullName(ref length, name); // Only available in 6.2 or later.
+
+            if (length > 0)
+            {
+                return true;
+            }
+
+            return false;
+        }
+    }
+}
index 1502d4baa7c0a275365fd853e761d1645f6439bd..33e9acf25247f4c7252b1b392f219d29b26a5326 100644 (file)
@@ -1254,6 +1254,8 @@ namespace HandBrakeWPF.ViewModels
         /// </summary>\r
         public bool IsQueueShowingInLine { get; set; } = false;\r
 \r
+        public bool IsUWP { get; } = UwpDetect.IsUWP();\r
+\r
         #endregion\r
 \r
         #region Commands \r
index 5d936be0c69e93cf4f3920d13e42301fd76557a8..5f3241a12afaef6664dcebd9f06c0048e31b3693 100644 (file)
@@ -162,6 +162,14 @@ namespace HandBrakeWPF.ViewModels
 \r
         #region Properties\r
 \r
+        public bool IsUWP\r
+        {\r
+            get\r
+            {\r
+                return UwpDetect.IsUWP();\r
+            }\r
+        }\r
+\r
         #region General\r
 \r
         /// <summary>\r
index 641026e29053eb2f4f16217a6b896dc86bdbefe2..6577b2fd118aabb083186acd38666cea61dce20d 100644 (file)
                             <Image Width="16" Height="16"  Source="Images/information.png" />\r
                         </MenuItem.Icon>\r
                     </MenuItem>\r
-                    <Separator />\r
-                    <MenuItem Header="_Check for Updates" cal:Message.Attach="[Event Click] = [Action CheckForUpdates]" />\r
+                    <Separator Visibility="{Binding IsUWP, Converter={StaticResource boolToVisConverter}, ConverterParameter=true}" />\r
+                    <MenuItem Header="_Check for Updates" cal:Message.Attach="[Event Click] = [Action CheckForUpdates]" Visibility="{Binding IsUWP, Converter={StaticResource boolToVisConverter}, ConverterParameter=true}" />\r
                     <Separator />\r
                     <MenuItem Header="_About..." cal:Message.Attach="[Event Click] = [Action OpenAboutApplication]" />\r
                 </MenuItem>\r
index 4be816551fbab72554490c816fc85fe96a2ac5d9..65f2d78006c7517e04284a38b45fa799a053bb57 100644 (file)
@@ -37,6 +37,7 @@
         <Converters:EnumComboConverter x:Key="enumComboConverter" />\r
         <Options:LogLevelConverter x:Key="LogLevelConverter" />\r
         <Options:FileSizeConverter x:Key="fileSizeConverter" />\r
+        <Converters:OptionTabConverter x:Key="optionTabConverter" />\r
         \r
 \r
         <Converters:BooleanToVisibilityConverter x:Key="boolToVisConverter" />\r
@@ -72,7 +73,7 @@
         <Border BorderBrush="DarkGray"  Grid.Column="0" Grid.Row="1"  BorderThickness="0,0,1,0">\r
             <StackPanel Orientation="Vertical" Margin="11,5,-1,0">\r
 \r
-                <ListBox ItemsSource="{Binding Source={StaticResource OptionTabsList}}" SelectedItem="{Binding SelectedTab}"\r
+                <ListBox ItemsSource="{Binding Source={StaticResource OptionTabsList}, Converter={StaticResource optionTabConverter}}" SelectedItem="{Binding SelectedTab}"\r
                      BorderThickness="0" Background="Transparent">\r
                     <ListBox.ItemTemplate>\r
                         <DataTemplate>\r