]> granicus.if.org Git - handbrake/commitdiff
WinGui: Numerous bug fixes. Many around the automatic selection feature on the Audio...
authorsr55 <sr55.hb@outlook.com>
Sun, 13 Jan 2013 16:50:49 +0000 (16:50 +0000)
committersr55 <sr55.hb@outlook.com>
Sun, 13 Jan 2013 16:50:49 +0000 (16:50 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@5168 b64f7644-9d1e-0410-96f1-a4d463321fa5

win/CS/HandBrake.ApplicationServices/Model/Encoding/AudioTrack.cs
win/CS/HandBrakeWPF/ViewModels/AudioViewModel.cs
win/CS/HandBrakeWPF/ViewModels/MainViewModel.cs
win/CS/HandBrakeWPF/ViewModels/OptionsViewModel.cs
win/CS/HandBrakeWPF/ViewModels/SubtitlesViewModel.cs
win/CS/HandBrakeWPF/Views/OptionsView.xaml

index 051052e47f85379397fe8e69afd8ec4655e9ddb0..c8238927fc5e932d04eea241e90751e03db54f88 100644 (file)
@@ -260,7 +260,7 @@ namespace HandBrake.ApplicationServices.Model.Encoding
         }\r
 \r
         /// <summary>\r
-        ///  Gets the The UI display value for sample rate\r
+        ///  Gets or sets the The UI display value for sample rate\r
         /// </summary>\r
         public string SampleRateDisplayValue\r
         {\r
index 8f7cbbc01fe5cff4b202140a451fd60e5cb1de73..eeb3def77e7115e26693263ac87d00be1caa1b85 100644 (file)
@@ -259,7 +259,7 @@ namespace HandBrakeWPF.ViewModels
         {\r
             if (this.SourceTracks != null)\r
             {\r
-                Audio track = sourceTrack ?? this.SourceTracks.FirstOrDefault();\r
+                Audio track = sourceTrack ?? this.GetPreferredAudioTrack();\r
                 if (track != null)\r
                 {\r
                     this.Task.AudioTracks.Add(new AudioTrack { ScannedTrack = track });\r
@@ -272,11 +272,20 @@ namespace HandBrakeWPF.ViewModels
         /// </summary>\r
         private void AddAllRemainingTracks()\r
         {\r
+            // For all the source audio tracks\r
             foreach (Audio sourceTrack in this.SourceTracks)\r
             {\r
-                bool found = this.Task.AudioTracks.Any(audioTrack => audioTrack.ScannedTrack == sourceTrack);\r
+                // Step 1:  If "Add only One per language" is turned on, check to see if this language is already added.\r
+                if (this.CanSkipSourceTrack(sourceTrack))\r
+                {\r
+                    continue;\r
+                }\r
+\r
+                // Step 2: Check if the track list already contrains this track\r
+                bool found = this.Task.AudioTracks.Any(audioTrack => Equals(audioTrack.ScannedTrack, sourceTrack));\r
                 if (!found)\r
                 {\r
+                    // If it doesn't, add it.\r
                     this.Add(sourceTrack);\r
                 }\r
             }\r
@@ -287,24 +296,20 @@ namespace HandBrakeWPF.ViewModels
         /// </summary>\r
         public void AddAllRemainingForSelectedLanguages()\r
         {\r
-            // Figure out the source tracks we want to add\r
-            List<Audio> trackList = new List<Audio>();\r
-            foreach (\r
-                string language in\r
-                    this.UserSettingService.GetUserSetting<StringCollection>(\r
-                        UserSettingConstants.SelectedLanguages))\r
-            {\r
-                // TODO add support for "Add only 1 per language"\r
-                trackList.AddRange(this.SourceTracks.Where(source => source.Language.Trim() == language));\r
-            }\r
-\r
             // Add them if they are not already added.\r
-            foreach (Audio sourceTrack in trackList)\r
+            foreach (Audio sourceTrack in this.GetSelectedLanguagesTracks())\r
             {\r
-                bool found = this.Task.AudioTracks.Any(audioTrack => audioTrack.ScannedTrack == sourceTrack);\r
+                // Step 1:  If "Add only One per language" is turned on, check to see if this language is already added.\r
+                if (this.CanSkipSourceTrack(sourceTrack))\r
+                {\r
+                    continue;\r
+                }\r
 \r
+                // Step 2: Check if the track list already contrains this track\r
+                bool found = this.Task.AudioTracks.Any(audioTrack => Equals(audioTrack.ScannedTrack, sourceTrack));\r
                 if (!found)\r
                 {\r
+                    // If it doesn't, add it.\r
                     this.Add(sourceTrack);\r
                 }\r
             }\r
@@ -321,18 +326,10 @@ namespace HandBrakeWPF.ViewModels
             // Clear out the old tracks\r
             this.Task.AudioTracks.Clear();\r
 \r
-            // Get the preferred Language\r
-            IEnumerable<Audio> preferredAudioTracks =\r
-                this.SourceTracks.Where(\r
-                    item =>\r
-                    item.Language.Contains(\r
-                        this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguage)));\r
-            Audio preferred = preferredAudioTracks.FirstOrDefault() ?? this.SourceTracks.FirstOrDefault();\r
-\r
             // Add the preset audio tracks with the preferred language\r
             foreach (AudioTrack track in preset.Task.AudioTracks)\r
             {\r
-                this.Task.AudioTracks.Add(new AudioTrack(track) { ScannedTrack = preferred });\r
+                this.Task.AudioTracks.Add(new AudioTrack(track) { ScannedTrack = this.GetPreferredAudioTrack() });\r
             }\r
         }\r
 \r
@@ -341,44 +338,24 @@ namespace HandBrakeWPF.ViewModels
         /// </summary>\r
         private void AutomaticTrackSelection()\r
         {\r
-            List<Audio> trackList = new List<Audio>();\r
             if (!this.SourceTracks.Any())\r
             {\r
+                // Clear out the old tracks\r
+                this.Task.AudioTracks.Clear();\r
+\r
                 return;\r
             }\r
 \r
-            // Step 1: Fetch all the Preferred Language settings\r
-            if (this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguage) == "Any")\r
+            // Default all the language tracks to the preferred or first language of this source.\r
+            foreach (AudioTrack track in this.Task.AudioTracks)\r
             {\r
-                // If we have Any as the preferred Language, just set the first track to all audio tracks.\r
-                trackList.Add(this.SourceTracks.FirstOrDefault());\r
-            }\r
-            else\r
-            {\r
-                // Otherwise, fetch the preferred language.\r
-                foreach (\r
-                    Audio item in\r
-                        this.SourceTracks.Where(\r
-                            item =>\r
-                            item.Language.Contains(\r
-                                this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguage))))\r
-                {\r
-                    trackList.Add(item);\r
-                    break;\r
-                }\r
+                track.ScannedTrack = this.GetPreferredAudioTrack();\r
             }\r
 \r
-            // Step 2: Handle "All Remaining Tracks" and "All for Selected Languages" or use the default behaviour\r
+            // Handle the default selection behaviour.\r
             int mode = this.UserSettingService.GetUserSetting<int>(UserSettingConstants.DubModeAudio);\r
-\r
             switch (mode)\r
             {\r
-                default: // Default by setting all existing tracks to a preferred or first source track.\r
-                    foreach (AudioTrack track in this.Task.AudioTracks)\r
-                    {\r
-                        track.ScannedTrack = trackList.FirstOrDefault() ?? this.SourceTracks.FirstOrDefault();\r
-                    }\r
-                    break;\r
                 case 1: // Adding all remaining audio tracks\r
                     this.AddAllRemaining();\r
                     break;\r
@@ -389,35 +366,59 @@ namespace HandBrakeWPF.ViewModels
         }\r
 \r
         /// <summary>\r
-        /// The get language tracks.\r
+        /// The get preferred audio track, or the first if none available.\r
         /// </summary>\r
         /// <returns>\r
-        /// The Users desired audio tracks\r
+        /// The users preferred language, or the first if none available.\r
         /// </returns>\r
-        private List<Audio> GetLanguageTracks()\r
+        private Audio GetPreferredAudioTrack()\r
+        {\r
+            // Get the preferred Language\r
+            IEnumerable<Audio> preferredAudioTracks =\r
+                this.SourceTracks.Where(\r
+                    item =>\r
+                    item.Language.Contains(\r
+                        this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguage)));\r
+            return preferredAudioTracks.FirstOrDefault() ?? this.SourceTracks.FirstOrDefault();\r
+        }\r
+\r
+        /// <summary>\r
+        /// Gets a list of source tracks for the users selected languages.\r
+        /// </summary>\r
+        /// <returns>\r
+        /// A list of source audio tracks.\r
+        /// </returns>\r
+        private IEnumerable<Audio> GetSelectedLanguagesTracks()\r
         {\r
             List<Audio> trackList = new List<Audio>();\r
-            if (this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguage) == "Any")\r
+            foreach (string language in this.UserSettingService.GetUserSetting<StringCollection>(UserSettingConstants.SelectedLanguages))\r
             {\r
-                // If we have Any as the preferred Language, just set the first track to all audio tracks.\r
-                trackList.Add(this.SourceTracks.FirstOrDefault());\r
+                trackList.AddRange(this.SourceTracks.Where(source => source.Language.Trim() == language));\r
             }\r
-            else\r
+\r
+            return trackList;\r
+        }\r
+\r
+        /// <summary>\r
+        /// Checks to see if we can skip over the given source audio track.\r
+        /// True when the user has set "Add only one per language" feature AND the language is contained in the track list.\r
+        /// </summary>\r
+        /// <param name="sourceTrack">\r
+        /// The source track.\r
+        /// </param>\r
+        /// <returns>\r
+        /// True when the user has set "Add only one per language" feature AND the language is contained in the track list\r
+        /// </returns>\r
+        private bool CanSkipSourceTrack(Audio sourceTrack)\r
+        {\r
+            bool addOnlyOnePerLanguage = this.UserSettingService.GetUserSetting<bool>(UserSettingConstants.AddOnlyOneAudioPerLanguage);\r
+            bool sourceTrackLanguageFound = this.Task.AudioTracks.Any(audioTrack => audioTrack.ScannedTrack != null && sourceTrack.Language == audioTrack.ScannedTrack.Language);\r
+            if (addOnlyOnePerLanguage && sourceTrackLanguageFound)\r
             {\r
-                // Otherwise, fetch the preferred language.\r
-                foreach (\r
-                    Audio item in\r
-                        this.SourceTracks.Where(\r
-                            item =>\r
-                            item.Language.Contains(\r
-                                this.UserSettingService.GetUserSetting<string>(UserSettingConstants.NativeLanguage))))\r
-                {\r
-                    trackList.Add(item);\r
-                    break;\r
-                }\r
+                return true; // This track can be skipped.\r
             }\r
 \r
-            return trackList;\r
+            return false;\r
         }\r
 \r
         #endregion\r
index fee34fcb7aab1f8886c5bd016bf95d3b550adc83..7a9461b256d650808c0b1260e00fad4a7ec36eb8 100644 (file)
@@ -1673,7 +1673,6 @@ namespace HandBrakeWPF.ViewModels
                         this.NotifyOfPropertyChange(() => this.ScannedSource.Titles);\r
                         this.SelectedTitle = this.ScannedSource.Titles.FirstOrDefault(t => t.MainTitle)\r
                                              ?? this.ScannedSource.Titles.FirstOrDefault();\r
-                        this.SetupTabs();\r
                     }\r
 \r
                     this.ShowStatusWindow = false;\r
index 82c0daa3c025165ec969fbeadbc495db1f5c5a61..6dc2a44dc6863527e30a097a833296691e04f49c 100644 (file)
@@ -800,7 +800,7 @@ namespace HandBrakeWPF.ViewModels
             set\r
             {\r
                 this.selectedPreferredLangauge = value;\r
-                this.NotifyOfPropertyChange("SelectedPreferreedLangauge");\r
+                this.NotifyOfPropertyChange(() => SelectedPreferredLangauge);\r
             }\r
         }\r
 \r
@@ -817,7 +817,7 @@ namespace HandBrakeWPF.ViewModels
             set\r
             {\r
                 this.selectedPreferredSubtitleLangauge = value;\r
-                this.NotifyOfPropertyChange("SelectedPreferredSubtitleLangauge");\r
+                this.NotifyOfPropertyChange(() => SelectedPreferredSubtitleLangauge);\r
             }\r
         }\r
 \r
@@ -1731,7 +1731,7 @@ namespace HandBrakeWPF.ViewModels
         /// <summary>\r
         /// Audio List Move Left\r
         /// </summary>\r
-        public void LanguageMoveLeft()\r
+        public void LanguageMoveRight()\r
         {\r
             if (this.SelectedAvailableToMove.Count > 0)\r
             {\r
@@ -1749,7 +1749,7 @@ namespace HandBrakeWPF.ViewModels
         /// <summary>\r
         /// Audio List Move Right\r
         /// </summary>\r
-        public void LanguageMoveRight()\r
+        public void LanguageMoveLeft()\r
         {\r
             if (this.SelectedLangaugesToMove.Count > 0)\r
             {\r
index 446fab6cfe0fbfda15da91415689af31b16562bf..b52dd961a14c2b306ab45c2d2ab2c3c1b95177b9 100644 (file)
@@ -120,13 +120,10 @@ namespace HandBrakeWPF.ViewModels
         /// </summary>\r
         public void AddAllClosedCaptions()\r
         {\r
-            if (this.UserSettingService.GetUserSetting<bool>(UserSettingConstants.UseClosedCaption))\r
+\r
+            foreach (Subtitle subtitle in this.SourceTitlesSubset(null).Where(s => s.SubtitleType == SubtitleType.CC))\r
             {\r
-                foreach (\r
-                    Subtitle subtitle in this.SourceTitlesSubset(null).Where(s => s.SubtitleType == SubtitleType.CC))\r
-                {\r
-                    this.Add(subtitle);\r
-                }\r
+                this.Add(subtitle);\r
             }\r
         }\r
 \r
@@ -160,38 +157,6 @@ namespace HandBrakeWPF.ViewModels
             }\r
         }\r
 \r
-        /// <summary>\r
-        /// Automatic Subtitle Selection based on user preferences.\r
-        /// </summary>\r
-        public void AutomaticSubtitleSelection()\r
-        {\r
-            this.Task.SubtitleTracks.Clear();\r
-\r
-            // New DUB Settings\r
-            int mode = this.UserSettingService.GetUserSetting<int>(UserSettingConstants.DubModeSubtitle);\r
-            switch (mode)\r
-            {\r
-                case 1: // Adding all remaining subtitle tracks\r
-                    this.AddAllRemaining();\r
-                    break;\r
-                case 2: // Adding only the first or preferred first subtitle track.\r
-                    this.Add();\r
-                    break;\r
-                case 3: // Selected Languages Only\r
-                    this.AddAllRemainingForSelectedLanguages();\r
-                    break;\r
-                case 4: // Prefered Only\r
-                    this.AddForPreferredLanaguages(true);\r
-                    break;\r
-                case 5: // Prefered Only All\r
-                    this.AddForPreferredLanaguages(false);\r
-                    break;\r
-            }\r
-\r
-            // Add all closed captions if enabled.\r
-            this.AddAllClosedCaptions();\r
-        }\r
-\r
         /// <summary>\r
         /// Import an SRT File.\r
         /// </summary>\r
@@ -279,6 +244,41 @@ namespace HandBrakeWPF.ViewModels
             this.NotifyOfPropertyChange(() => this.Task);\r
         }\r
 \r
+        /// <summary>\r
+        /// Automatic Subtitle Selection based on user preferences.\r
+        /// </summary>\r
+        public void AutomaticSubtitleSelection()\r
+        {\r
+            this.Task.SubtitleTracks.Clear();\r
+\r
+            // New DUB Settings\r
+            int mode = this.UserSettingService.GetUserSetting<int>(UserSettingConstants.DubModeSubtitle);\r
+            switch (mode)\r
+            {\r
+                case 1: // Adding all remaining subtitle tracks\r
+                    this.AddAllRemaining();\r
+                    break;\r
+                case 2: // Adding only the first or preferred first subtitle track.\r
+                    this.Add();\r
+                    break;\r
+                case 3: // Selected Languages Only\r
+                    this.AddAllRemainingForSelectedLanguages();\r
+                    break;\r
+                case 4: // Prefered Only\r
+                    this.AddForPreferredLanaguages(true);\r
+                    break;\r
+                case 5: // Prefered Only All\r
+                    this.AddForPreferredLanaguages(false);\r
+                    break;\r
+            }\r
+\r
+            // Add all closed captions if enabled.\r
+            if (this.UserSettingService.GetUserSetting<bool>(UserSettingConstants.UseClosedCaption))\r
+            {\r
+                this.AddAllClosedCaptions();\r
+            }\r
+        }\r
+\r
         #endregion\r
 \r
         #region Implemented Interfaces\r
@@ -419,10 +419,8 @@ namespace HandBrakeWPF.ViewModels
         private IEnumerable<Subtitle> SourceTitlesSubset(IEnumerable<Subtitle> subtitles)\r
         {\r
             return subtitles != null\r
-                       ? subtitles.Where(\r
-                           subtitle => !this.Task.SubtitleTracks.Any(track => track.SourceTrack == subtitle)).ToList()\r
-                       : this.SourceTracks.Where(\r
-                           subtitle => !this.Task.SubtitleTracks.Any(track => track.SourceTrack == subtitle)).ToList();\r
+                       ? subtitles.Where(subtitle => !this.Task.SubtitleTracks.Any(track => Equals(track.SourceTrack, subtitle))).ToList()\r
+                       : this.SourceTracks.Where(subtitle => !this.Task.SubtitleTracks.Any(track => Equals(track.SourceTrack, subtitle))).ToList();\r
         }\r
 \r
         #endregion\r
index c5d5d3e6095bd9a62dcf0dbd7e358e03089cc38b..9c2080db5426a822bff81c5d07a63e20bfdb695c 100644 (file)
 \r
                                 <DockPanel Grid.Column="1" Margin="10,0,10,0">\r
                                     <StackPanel Orientation="Vertical" VerticalAlignment="Center">\r
-                                        <Button Content="Move Left"  VerticalAlignment="Center" Margin="0,0,0,5" cal:Message.Attach="[Event Click] = [Action LanguageMoveLeft]" Width="80" />\r
                                         <Button Content="Move Right"  VerticalAlignment="Center" Margin="0,0,0,5" cal:Message.Attach="[Event Click] = [Action LanguageMoveRight]" Width="80" />\r
+                                        <Button Content="Move Left"  VerticalAlignment="Center" Margin="0,0,0,5" cal:Message.Attach="[Event Click] = [Action LanguageMoveLeft]" Width="80" />    \r
                                         <Button Content="Clear" VerticalAlignment="Center" Margin="0,0,0,5" cal:Message.Attach="[Event Click] = [Action LanguageClearAll]" Width="80"/>\r
                                     </StackPanel>\r
                                 </DockPanel>\r