version 1.5, taskbar notificaitons
This commit is contained in:
		
							parent
							
								
									53734e0f8d
								
							
						
					
					
						commit
						f18fcd2a14
					
				
					 7 changed files with 81 additions and 22 deletions
				
			
		| 
						 | 
					@ -14,3 +14,12 @@ Useful when working with big solutions or when build/test run/hitting a breakpoi
 | 
				
			||||||
This is an open source project, join!
 | 
					This is an open source project, join!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Twitter: @GanzhaVitalii
 | 
					Twitter: @GanzhaVitalii
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Version 1.5:
 | 
				
			||||||
 | 
					* Added Task bar notifications. (https://github.com/thecoderok/vsdingextension/issues/1)
 | 
				
			||||||
 | 
						It can be disabled in Tools->Options->Ding->Show tray notifications
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Version 1.4:
 | 
				
			||||||
 | 
					* Added options dialog (Tools->Options->Ding). Now it is possible to enable/disable what sounds to play. Thanks to https://github.com/dannoh
 | 
				
			||||||
 | 
					* Added option to play sounds only if Visual Studio in background. Thanks to https://github.com/dannoh
 | 
				
			||||||
 | 
					* Support for Visual studio 2015
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@ MinimumVisualStudioVersion = 10.0.40219.1
 | 
				
			||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5BD9D4DB-8683-4698-8D24-01EE7306F73A}"
 | 
					Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5BD9D4DB-8683-4698-8D24-01EE7306F73A}"
 | 
				
			||||||
	ProjectSection(SolutionItems) = preProject
 | 
						ProjectSection(SolutionItems) = preProject
 | 
				
			||||||
		IntegrationTests.testsettings = IntegrationTests.testsettings
 | 
							IntegrationTests.testsettings = IntegrationTests.testsettings
 | 
				
			||||||
 | 
							README.md = README.md
 | 
				
			||||||
		UnitTests.testsettings = UnitTests.testsettings
 | 
							UnitTests.testsettings = UnitTests.testsettings
 | 
				
			||||||
	EndProjectSection
 | 
						EndProjectSection
 | 
				
			||||||
EndProject
 | 
					EndProject
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
 | 
					<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
 | 
				
			||||||
  <Metadata>
 | 
					  <Metadata>
 | 
				
			||||||
    <Identity Id="ab75aa82-c4e8-42a7-b4ec-b5bae2fa4925" Version="1.4" Language="en-US" Publisher="Vitalii Ganzha" />
 | 
					    <Identity Id="ab75aa82-c4e8-42a7-b4ec-b5bae2fa4925" Version="1.5" Language="en-US" Publisher="Vitalii Ganzha" />
 | 
				
			||||||
    <DisplayName>Visual Studio Ding extension for VS 2012</DisplayName>
 | 
					    <DisplayName>Visual Studio Ding extension for VS 2012</DisplayName>
 | 
				
			||||||
    <Description xml:space="preserve">This small extension will play notification sounds when following events occur:
 | 
					    <Description xml:space="preserve">This small extension will play notification sounds when following events occur:
 | 
				
			||||||
- Build Complete
 | 
					- Build Complete
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,28 +12,33 @@ namespace VitaliiGanzha.VsDingExtension
 | 
				
			||||||
        [Category("Beeps")]
 | 
					        [Category("Beeps")]
 | 
				
			||||||
        [DisplayName("Breakpoint")]
 | 
					        [DisplayName("Breakpoint")]
 | 
				
			||||||
        [Description("Beep when a breakpoint is hit")]
 | 
					        [Description("Beep when a breakpoint is hit")]
 | 
				
			||||||
        public bool BreakpointBeep { get; set; }
 | 
					        public bool IsBeepOnBreakpointHit { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Category("Beeps")]
 | 
					        [Category("Beeps")]
 | 
				
			||||||
        [DisplayName("Build")]
 | 
					        [DisplayName("Build")]
 | 
				
			||||||
        [Description("Beep when a build is completed")]
 | 
					        [Description("Beep when a build is completed")]
 | 
				
			||||||
        public bool BuildBeep { get; set; }
 | 
					        public bool IsBeepOnBuildComplete { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Category("Beeps")]
 | 
					        [Category("Beeps")]
 | 
				
			||||||
        [DisplayName("Tests")]
 | 
					        [DisplayName("Tests")]
 | 
				
			||||||
        [Description("Beep when a test run is completed")]
 | 
					        [Description("Beep when a test run is completed")]
 | 
				
			||||||
        public bool TestBeep { get; set; }
 | 
					        public bool IsBuildOnTestComplete { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [DisplayName("Only when in background")]
 | 
					        [DisplayName("Only when in background")]
 | 
				
			||||||
        [Description("Beep only when Visual Studio does not have focus")]
 | 
					        [Description("Beep only when Visual Studio does not have focus")]
 | 
				
			||||||
        public bool BeepOnUnfocus { get; set; }
 | 
					        public bool IsBeepOnlyWhenVisualStudioIsInBackground { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [DisplayName("Show tray notifications")]
 | 
				
			||||||
 | 
					        [Description("Show tray notifications for enabled events")]
 | 
				
			||||||
 | 
					        public bool ShowTrayNotifications { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public OptionsDialog()
 | 
					        public OptionsDialog()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            BreakpointBeep = true;
 | 
					            IsBeepOnBreakpointHit = true;
 | 
				
			||||||
            BuildBeep = true;
 | 
					            IsBeepOnBuildComplete = true;
 | 
				
			||||||
            TestBeep = true;
 | 
					            IsBuildOnTestComplete = true;
 | 
				
			||||||
            BeepOnUnfocus = false;
 | 
					            ShowTrayNotifications = true;
 | 
				
			||||||
 | 
					            IsBeepOnlyWhenVisualStudioIsInBackground = false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,8 @@
 | 
				
			||||||
Version 1.4:
 | 
					Version 1.5:
 | 
				
			||||||
 | 
					* Added Task bar notifications. (https://github.com/thecoderok/vsdingextension/issues/1)
 | 
				
			||||||
 | 
						It can be disabled in Tools->Options->Ding->Show tray notifications
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Version 1.4:
 | 
				
			||||||
* Added options dialog (Tools->Options->Ding). Now it is possible to enable/disable what sounds to play. Thanks to https://github.com/dannoh
 | 
					* Added options dialog (Tools->Options->Ding). Now it is possible to enable/disable what sounds to play. Thanks to https://github.com/dannoh
 | 
				
			||||||
* Added option to play sounds only if Visual Studio in background. Thanks to https://github.com/dannoh
 | 
					* Added option to play sounds only if Visual Studio in background. Thanks to https://github.com/dannoh
 | 
				
			||||||
* Support for Visual studio 2015
 | 
					* Support for Visual studio 2015
 | 
				
			||||||
| 
						 | 
					@ -2,9 +2,11 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    using System;
 | 
					    using System;
 | 
				
			||||||
    using System.Diagnostics;
 | 
					    using System.Diagnostics;
 | 
				
			||||||
 | 
					    using System.Drawing;
 | 
				
			||||||
    using System.Globalization;
 | 
					    using System.Globalization;
 | 
				
			||||||
    using System.Media;
 | 
					    using System.Media;
 | 
				
			||||||
    using System.Runtime.InteropServices;
 | 
					    using System.Runtime.InteropServices;
 | 
				
			||||||
 | 
					    using System.Windows.Forms;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    using EnvDTE;
 | 
					    using EnvDTE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -59,14 +61,17 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            buildEvents.OnBuildDone += (scope, action) =>
 | 
					            buildEvents.OnBuildDone += (scope, action) =>
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (Options.BuildBeep)
 | 
					                if (Options.IsBeepOnBuildComplete)
 | 
				
			||||||
                    PlaySafe(buildCompleteSoundPlayer);
 | 
					                {
 | 
				
			||||||
 | 
					                    HandleEventSafe(buildCompleteSoundPlayer, "Build has been completed.");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            debugEvents.OnEnterBreakMode += delegate(dbgEventReason reason, ref dbgExecutionAction action)
 | 
					            debugEvents.OnEnterBreakMode += delegate(dbgEventReason reason, ref dbgExecutionAction action)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (reason != dbgEventReason.dbgEventReasonStep && Options.BreakpointBeep)
 | 
					                if (reason != dbgEventReason.dbgEventReasonStep && Options.IsBeepOnBreakpointHit)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    PlaySafe(debugSoundPlayer);
 | 
					                    HandleEventSafe(debugSoundPlayer, "Breakpoint was hit.");
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -95,7 +100,42 @@
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void PlaySafe(SoundPlayer soundPlayer)
 | 
					        private void HandleEventSafe(SoundPlayer soundPlayer, string messageText)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            PlaySoundSafe(soundPlayer);
 | 
				
			||||||
 | 
					            ShowNotifyMessage(messageText);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void ShowNotifyMessage(string messageText)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (!_options.ShowTrayNotifications)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            string autoAppendMessage = System.Environment.NewLine + "You can disable this notification in:" + System.Environment.NewLine + "Tools->Options->Ding->Show tray notifications";
 | 
				
			||||||
 | 
					            messageText = string.Format("{0}{1}", messageText, autoAppendMessage);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            System.Threading.Tasks.Task.Run(async () =>
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    var tray = new NotifyIcon
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        Icon = SystemIcons.Application,
 | 
				
			||||||
 | 
					                        BalloonTipIcon = ToolTipIcon.Info,
 | 
				
			||||||
 | 
					                        BalloonTipText = messageText,
 | 
				
			||||||
 | 
					                        BalloonTipTitle = "Visual Studio Ding extension",
 | 
				
			||||||
 | 
					                        Visible = true
 | 
				
			||||||
 | 
					                    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    tray.ShowBalloonTip(5000);
 | 
				
			||||||
 | 
					                    await System.Threading.Tasks.Task.Delay(5000);
 | 
				
			||||||
 | 
					                    tray.Icon = (Icon)null;
 | 
				
			||||||
 | 
					                    tray.Visible = false;
 | 
				
			||||||
 | 
					                    tray.Dispose();
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void PlaySoundSafe(SoundPlayer soundPlayer)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (ShouldPlaySound())
 | 
					            if (ShouldPlaySound())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
| 
						 | 
					@ -112,23 +152,23 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private bool ShouldPlaySound()
 | 
					        private bool ShouldPlaySound()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (!Options.BeepOnUnfocus)
 | 
					            if (!Options.IsBeepOnlyWhenVisualStudioIsInBackground)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return true;
 | 
					                return true;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            return Options.BeepOnUnfocus && !ApplicationIsActivated();
 | 
					            return Options.IsBeepOnlyWhenVisualStudioIsInBackground && !ApplicationIsActivated();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void OperationStateOnStateChanged(object sender, OperationStateChangedEventArgs operationStateChangedEventArgs)
 | 
					        private void OperationStateOnStateChanged(object sender, OperationStateChangedEventArgs operationStateChangedEventArgs)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (Options.TestBeep && operationStateChangedEventArgs.State.HasFlag(TestOperationStates.TestExecutionFinished))
 | 
					            if (Options.IsBuildOnTestComplete && operationStateChangedEventArgs.State.HasFlag(TestOperationStates.TestExecutionFinished))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                PlaySafe(testCompleteSoundPlayer);
 | 
					                HandleEventSafe(testCompleteSoundPlayer, "Test execution has been completed.");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public bool ApplicationIsActivated()
 | 
					        private bool ApplicationIsActivated()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var activatedHandle = GetForegroundWindow();
 | 
					            var activatedHandle = GetForegroundWindow();
 | 
				
			||||||
            if (activatedHandle == IntPtr.Zero)
 | 
					            if (activatedHandle == IntPtr.Zero)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
 | 
					<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
 | 
				
			||||||
  <Metadata>
 | 
					  <Metadata>
 | 
				
			||||||
    <Identity Id="26ba08d0-0d25-4479-8684-3054dd122876" Version="1.4" Language="en-US" Publisher="Vitalii Ganzha" />
 | 
					    <Identity Id="26ba08d0-0d25-4479-8684-3054dd122876" Version="1.5" Language="en-US" Publisher="Vitalii Ganzha" />
 | 
				
			||||||
    <DisplayName>Visual Studio Ding extension</DisplayName>
 | 
					    <DisplayName>Visual Studio Ding extension</DisplayName>
 | 
				
			||||||
    <Description xml:space="preserve">This small extension will play notification sounds when following events occur:
 | 
					    <Description xml:space="preserve">This small extension will play notification sounds when following events occur:
 | 
				
			||||||
- Build Complete
 | 
					- Build Complete
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue