Initial kinda working implementation.

This commit is contained in:
Charles Milette 2017-10-04 09:28:32 -04:00
parent f8ea055e4b
commit 07f48747eb
No known key found for this signature in database
GPG key ID: 9BC74CC51CB137CE
8 changed files with 116 additions and 82 deletions

View file

@ -25,6 +25,7 @@ You should have received a copy of the GNU General Public License
using ShareX.HelpersLib; using ShareX.HelpersLib;
using ShareX.Properties; using ShareX.Properties;
using ShareX.StartupManagers;
using ShareX.UploadersLib; using ShareX.UploadersLib;
using System; using System;
using System.Drawing; using System.Drawing;
@ -40,6 +41,8 @@ public partial class ApplicationSettingsForm : Form
private bool ready; private bool ready;
private string lastPersonalPath; private string lastPersonalPath;
private IStartupManager startupManager = StartupManagerFactory.GetStartupManager();
public ApplicationSettingsForm() public ApplicationSettingsForm()
{ {
InitializeControls(); InitializeControls();
@ -70,12 +73,10 @@ private void SettingsForm_FormClosed(object sender, FormClosedEventArgs e)
private void tttvMain_TabChanged(TabPage tabPage) private void tttvMain_TabChanged(TabPage tabPage)
{ {
#if WindowsStore
if (tabPage == tpIntegration) if (tabPage == tpIntegration)
{ {
CheckWindowsStoreStartup(); UpdateStartWithWindows();
} }
#endif
} }
private void InitializeControls() private void InitializeControls()
@ -131,13 +132,11 @@ private void UpdateControls()
// Integration // Integration
#if WindowsStore #if WindowsStore
cbStartWithWindows.Enabled = false;
cbShellContextMenu.Visible = false; cbShellContextMenu.Visible = false;
cbSendToMenu.Visible = false; cbSendToMenu.Visible = false;
gbChrome.Visible = false; gbChrome.Visible = false;
gbFirefox.Visible = false; gbFirefox.Visible = false;
#else #else
cbStartWithWindows.Checked = IntegrationHelpers.CheckStartupShortcut();
cbShellContextMenu.Checked = IntegrationHelpers.CheckShellContextMenuButton(); cbShellContextMenu.Checked = IntegrationHelpers.CheckShellContextMenuButton();
cbSendToMenu.Checked = IntegrationHelpers.CheckSendToMenuButton(); cbSendToMenu.Checked = IntegrationHelpers.CheckSendToMenuButton();
cbChromeExtensionSupport.Checked = IntegrationHelpers.CheckChromeExtensionSupport(); cbChromeExtensionSupport.Checked = IntegrationHelpers.CheckChromeExtensionSupport();
@ -146,6 +145,8 @@ private void UpdateControls()
btnFirefoxOpenAddonPage.Enabled = cbFirefoxAddonSupport.Checked; btnFirefoxOpenAddonPage.Enabled = cbFirefoxAddonSupport.Checked;
#endif #endif
UpdateStartWithWindows();
#if STEAM #if STEAM
cbSteamShowInApp.Checked = IntegrationHelpers.CheckSteamShowInApp(); cbSteamShowInApp.Checked = IntegrationHelpers.CheckSteamShowInApp();
#else #else
@ -251,6 +252,17 @@ private void ChangeLanguage(SupportedLanguage language)
} }
} }
private void UpdateStartWithWindows()
{
StartupTaskState state = startupManager.State;
cbStartWithWindows.Checked = state == StartupTaskState.Enabled;
if (state == StartupTaskState.DisabledByUser)
{
cbStartWithWindows.Enabled = false;
lblWindowsStoreStartupStatus.Text = Resources.ApplicationSettingsForm_lblWindowsStoreStartupStatus_DisabledByUser;
}
}
private void UpdateProxyControls() private void UpdateProxyControls()
{ {
switch (Program.Settings.ProxySettings.ProxyMethod) switch (Program.Settings.ProxySettings.ProxyMethod)
@ -301,78 +313,6 @@ private void UpdateExportButton()
btnExport.Enabled = Program.Settings.ExportSettings || Program.Settings.ExportHistory || Program.Settings.ExportLogs; btnExport.Enabled = Program.Settings.ExportSettings || Program.Settings.ExportHistory || Program.Settings.ExportLogs;
} }
private void CheckWindowsStoreStartup()
{
if (cbStartWithWindows.Enabled) return;
lblWindowsStoreStartupStatus.Text = "Checking startup state...";
lblWindowsStoreStartupStatus.Visible = true;
StartupTaskState state = StartupTaskState.Error;
TaskEx.Run(() =>
{
state = IntegrationHelpers.CheckStartupWindowsStore();
},
() =>
{
if (!IsDisposed)
{
if (state == StartupTaskState.Error)
{
lblWindowsStoreStartupStatus.Text = "Startup state check failed. Check debug log for more info.";
}
else if (state == StartupTaskState.DisabledByUser)
{
lblWindowsStoreStartupStatus.Text = "The startup has been disabled by the user.";
}
else
{
lblWindowsStoreStartupStatus.Visible = false;
cbStartWithWindows.Checked = state == StartupTaskState.Enabled;
cbStartWithWindows.Enabled = true;
}
}
});
}
private void ConfigureWindowsStoreStartup()
{
if (cbStartWithWindows.Enabled)
{
cbStartWithWindows.Enabled = false;
lblWindowsStoreStartupStatus.Text = "Configuring startup...";
lblWindowsStoreStartupStatus.Visible = true;
bool enable = cbStartWithWindows.Checked;
StartupTaskState state = StartupTaskState.Error;
TaskEx.Run(() =>
{
state = IntegrationHelpers.ConfigureStartupWindowsStore(enable);
},
() =>
{
if (!IsDisposed)
{
if (state == StartupTaskState.Error)
{
lblWindowsStoreStartupStatus.Text = "Startup configuration failed. Check debug log for more info.";
}
else if (state == StartupTaskState.DisabledByUser)
{
lblWindowsStoreStartupStatus.Text = "The startup has been disabled by the user.";
}
else
{
lblWindowsStoreStartupStatus.Visible = false;
cbStartWithWindows.Enabled = true;
}
}
});
}
}
#region General #region General
private void cbShowTray_CheckedChanged(object sender, EventArgs e) private void cbShowTray_CheckedChanged(object sender, EventArgs e)
@ -450,11 +390,7 @@ private void cbStartWithWindows_CheckedChanged(object sender, EventArgs e)
{ {
if (ready) if (ready)
{ {
#if WindowsStore startupManager.State = cbStartWithWindows.Checked ? StartupTaskState.Enabled : StartupTaskState.Disabled;
ConfigureWindowsStoreStartup();
#else
IntegrationHelpers.CreateStartupShortcut(cbStartWithWindows.Checked);
#endif
} }
} }

View file

@ -474,6 +474,15 @@ public static string ApplicationSettingsForm_cbSteamShowInApp_CheckedChanged_For
} }
} }
/// <summary>
/// Looks up a localized string similar to Startup has been disabled in Task Manager..
/// </summary>
public static string ApplicationSettingsForm_lblWindowsStoreStartupStatus_DisabledByUser {
get {
return ResourceManager.GetString("ApplicationSettingsForm_lblWindowsStoreStartupStatus_DisabledByUser", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap. /// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary> /// </summary>

View file

@ -960,4 +960,7 @@ Middle click to close</value>
<data name="QRCodeForm_InputTextToEncode" xml:space="preserve"> <data name="QRCodeForm_InputTextToEncode" xml:space="preserve">
<value>Input text to encode</value> <value>Input text to encode</value>
</data> </data>
<data name="ApplicationSettingsForm_lblWindowsStoreStartupStatus_DisabledByUser" xml:space="preserve">
<value>Startup has been disabled in Task Manager.</value>
</data>
</root> </root>

View file

@ -309,6 +309,10 @@
</Compile> </Compile>
<Compile Include="LanguageHelper.cs" /> <Compile Include="LanguageHelper.cs" />
<Compile Include="RecentTaskManager.cs" /> <Compile Include="RecentTaskManager.cs" />
<Compile Include="StartupManagers\CentennialStartupManager.cs" />
<Compile Include="StartupManagers\DesktopStartupManager.cs" />
<Compile Include="StartupManagers\IStartupManager.cs" />
<Compile Include="StartupManagers\StartupManagerFactory.cs" />
<Compile Include="TaskHelpers.cs" /> <Compile Include="TaskHelpers.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />

View file

@ -0,0 +1,30 @@
using ShareX.HelpersLib;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ShareX.StartupManagers
{
class CentennialStartupManager : IStartupManager
{
public StartupTaskState State
{
get => IntegrationHelpers.CheckStartupWindowsStore();
set
{
bool enable;
if (value == StartupTaskState.Enabled)
{
enable = true;
}
else
{
enable = false;
}
IntegrationHelpers.ConfigureStartupWindowsStore(enable);
}
}
}
}

View file

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ShareX.StartupManagers
{
class DesktopStartupManager : IStartupManager
{
public StartupTaskState State
{
get => IntegrationHelpers.CheckStartupShortcut() ? StartupTaskState.Enabled : StartupTaskState.Disabled;
set
{
if (value == StartupTaskState.Disabled)
IntegrationHelpers.CreateStartupShortcut(false);
else if (value == StartupTaskState.Enabled)
IntegrationHelpers.CreateStartupShortcut(true);
}
}
}
}

View file

@ -0,0 +1,11 @@
namespace ShareX.StartupManagers
{
interface IStartupManager
{
StartupTaskState State
{
get;
set;
}
}
}

View file

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ShareX.StartupManagers
{
class StartupManagerFactory
{
static public IStartupManager GetStartupManager()
{
#if WindowsStore
return new CentennialStartupManager();
#else
return new DesktopStartupManager();
#endif
}
}
}