Skip to content
This repository has been archived by the owner on Dec 20, 2023. It is now read-only.

Commit

Permalink
给哔哩空间添加开机启动 (#1676)
Browse files Browse the repository at this point in the history
* 添加开机启动

* Update references
  • Loading branch information
Richasy committed Apr 11, 2023
1 parent aa95074 commit 0f677fd
Show file tree
Hide file tree
Showing 16 changed files with 152 additions and 9 deletions.
4 changes: 2 additions & 2 deletions src/Lib/DI.Container/DI.Container.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Autofac" Version="6.5.0" />
<PackageReference Include="Autofac" Version="7.0.0" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0" />
<PackageReference Include="NLog" Version="5.1.1" />
<PackageReference Include="NLog" Version="5.1.3" />
</ItemGroup>

</Project>
2 changes: 1 addition & 1 deletion src/Lib/DI.Workspace/DI.Workspace.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.3.230202101-experimental1" />
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.755" />
<PackageReference Include="NLog" Version="5.1.2" />
<PackageReference Include="NLog" Version="5.1.3" />
</ItemGroup>

<ItemGroup>
Expand Down
1 change: 1 addition & 0 deletions src/Models/Models.App/Constants/AppConstants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public static class AppConstants
public const string ThemeDark = "Dark";

public const string StartupTaskId = "Richasy.Bili";
public const string WorkspaceStartupTaskId = "Richasy.Bili.Workspace";

public const int AppMinWidth = 500;
public const int AppMinHeight = 500;
Expand Down
2 changes: 1 addition & 1 deletion src/Models/Models.App/Models.App.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion src/Models/Models.BiliBili/Models.BiliBili.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,10 @@ public interface ISettingsViewModel : INotifyPropertyChanged
/// 启动类型.
/// </summary>
LaunchType LaunchType { get; set; }

/// <summary>
/// 是否开机自启动.
/// </summary>
bool IsStartup { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Collections.ObjectModel;
using Bili.Models.Enums.Workspace;
using Bili.Toolkit.Interfaces;
using Bili.ViewModels.Interfaces.Core;
using CommunityToolkit.Mvvm.ComponentModel;

namespace Bili.ViewModels.Workspace.Core
Expand All @@ -13,7 +14,9 @@ namespace Bili.ViewModels.Workspace.Core
public sealed partial class SettingsViewModel
{
private readonly ISettingsToolkit _settingsToolkit;
private readonly IResourceToolkit _resourceToolkit;
private readonly IAppToolkit _appToolkit;
private readonly ICallerViewModel _callerViewModel;

[ObservableProperty]
private StartupPosition _startupPosition;
Expand All @@ -24,6 +27,9 @@ public sealed partial class SettingsViewModel
[ObservableProperty]
private string _version;

[ObservableProperty]
private bool _isStartup;

/// <inheritdoc/>
public ObservableCollection<StartupPosition> StartupPositions { get; }

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
// Copyright (c) Richasy. All rights reserved.

using System;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using Bili.Models.App.Constants;
using Bili.Models.Enums;
using Bili.Models.Enums.Workspace;
using Bili.Toolkit.Interfaces;
using Bili.ViewModels.Interfaces.Core;
using Bili.ViewModels.Interfaces.Workspace;
using Windows.ApplicationModel;

namespace Bili.ViewModels.Workspace.Core
{
Expand All @@ -18,10 +23,14 @@ public sealed partial class SettingsViewModel : ViewModelBase, ISettingsViewMode
/// </summary>
public SettingsViewModel(
ISettingsToolkit settingsToolkit,
IAppToolkit appToolkit)
IResourceToolkit resourceToolkit,
IAppToolkit appToolkit,
ICallerViewModel callerViewModel)
{
_settingsToolkit = settingsToolkit;
_resourceToolkit = resourceToolkit;
_appToolkit = appToolkit;
_callerViewModel = callerViewModel;
StartupPositions = new ObservableCollection<StartupPosition>
{
StartupPosition.TopLeft,
Expand All @@ -46,12 +55,64 @@ private void InitializeSettings()
Version = _appToolkit.GetPackageVersion();
StartupPosition = _settingsToolkit.ReadLocalSetting(SettingNames.StartupPosition, StartupPosition.BottomCenter);
LaunchType = _settingsToolkit.ReadLocalSetting(SettingNames.LaunchType, LaunchType.Web);
StartupInitAsync();
}

private async void StartupInitAsync()
{
var task = await StartupTask.GetAsync(AppConstants.WorkspaceStartupTaskId);
IsStartup = task.State.ToString().Contains("enable", StringComparison.OrdinalIgnoreCase);
}

/// <summary>
/// 尝试设置应用自启动.
/// </summary>
/// <returns><see cref="Task"/>.</returns>
private async Task TrySetStartupAsync()
{
var task = await StartupTask.GetAsync(AppConstants.WorkspaceStartupTaskId);
if (IsStartup)
{
var startupWarningText = string.Empty;
if (!task.State.ToString().Contains("enable", StringComparison.OrdinalIgnoreCase))
{
var result = await task.RequestEnableAsync();
if (result != StartupTaskState.Enabled)
{
switch (result)
{
case StartupTaskState.DisabledByUser:
startupWarningText = _resourceToolkit.GetLocaleString(LanguageNames.StartupDisabledByUser);
break;
case StartupTaskState.DisabledByPolicy:
startupWarningText = _resourceToolkit.GetLocaleString(LanguageNames.StartupDisabledByPolicy);
break;
default:
break;
}

IsStartup = false;
}
}

if (!string.IsNullOrEmpty(startupWarningText))
{
_callerViewModel.ShowTip(startupWarningText);
}
}
else
{
task.Disable();
}
}

partial void OnStartupPositionChanged(StartupPosition value)
=> _settingsToolkit.WriteLocalSetting(SettingNames.StartupPosition, value);

partial void OnLaunchTypeChanged(LaunchType value)
=> _settingsToolkit.WriteLocalSetting(SettingNames.LaunchType, value);

async partial void OnIsStartupChanged(bool value)
=> await TrySetStartupAsync();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0" />
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.3.230202101-experimental1" />
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.755" />
<PackageReference Include="NLog" Version="5.1.2" />
<PackageReference Include="NLog" Version="5.1.3" />
</ItemGroup>

<ItemGroup>
Expand Down
1 change: 1 addition & 0 deletions src/Workspace/App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
using Microsoft.UI.Windowing;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Input;
using Microsoft.Windows.AppLifecycle;
using WinRT.Interop;

namespace Bili.Workspace
Expand Down
20 changes: 20 additions & 0 deletions src/Workspace/Controls/Settings/StartupSettingSection.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8" ?>
<local:SettingSectionBase
x:Class="Bili.Workspace.Controls.Settings.StartupSettingSection"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:Bili.Workspace.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ext="using:Bili.Workspace.Resources.Extension"
xmlns:labs="using:CommunityToolkit.Labs.WinUI"
xmlns:local="using:Bili.Workspace.Controls.Settings"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<labs:SettingsCard Description="{ext:Locale Name=StartupDescription}" Header="{ext:Locale Name=Startup}">
<labs:SettingsCard.HeaderIcon>
<controls:FluentIcon Symbol="AirplaneTakeOff" />
</labs:SettingsCard.HeaderIcon>
<ToggleSwitch IsOn="{x:Bind ViewModel.IsStartup, Mode=TwoWay}" />
</labs:SettingsCard>
</local:SettingSectionBase>
18 changes: 18 additions & 0 deletions src/Workspace/Controls/Settings/StartupSettingSection.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Copyright (c) Richasy. All rights reserved.

namespace Bili.Workspace.Controls.Settings
{
/// <summary>
/// 开机启动设置区块.
/// </summary>
public sealed partial class StartupSettingSection : SettingSectionBase
{
/// <summary>
/// Initializes a new instance of the <see cref="StartupSettingSection"/> class.
/// </summary>
public StartupSettingSection()
{
InitializeComponent();
}
}
}
14 changes: 13 additions & 1 deletion src/Workspace/Package.appxmanifest
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap rescap">
xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
IgnorableNamespaces="uap rescap uap5">

<Identity
Name="5f47f20f-9418-4cc2-b693-73a8529bb017"
Expand Down Expand Up @@ -43,6 +44,17 @@
</uap:DefaultTile >
<uap:SplashScreen Image="Assets\Logo\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<uap5:Extension
Category="windows.startupTask"
Executable="$targetnametoken$.exe"
EntryPoint="Windows.FullTrustApplication">
<uap5:StartupTask
TaskId="Richasy.Bili.Workspace"
Enabled="false"
DisplayName="ms-resource:AppName" />
</uap5:Extension>
</Extensions>
</Application>
</Applications>

Expand Down
1 change: 1 addition & 0 deletions src/Workspace/Pages/SettingsPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
<TextBlock Style="{StaticResource SettingsSubHeadingText}" Text="{ext:Locale Name=Generic}" />
<settings:StartupPositionSettingSection />
<settings:LaunchTypeSettingSection />
<settings:StartupSettingSection />
<TextBlock
Style="{StaticResource SettingsSubHeadingText}"
Margin="1,29,0,5"
Expand Down
12 changes: 12 additions & 0 deletions src/Workspace/Resources/Strings/zh-Hans/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,18 @@
<data name="SpecialColumn" xml:space="preserve">
<value>专栏</value>
</data>
<data name="Startup" xml:space="preserve">
<value>自启动</value>
</data>
<data name="StartupDescription" xml:space="preserve">
<value>将应用添加到开机启动项,应用将在系统启动后最小化在托盘</value>
</data>
<data name="StartupDisabledByPolicy" xml:space="preserve">
<value>启动项由您的组织或组策略管理,应用启动项已被禁用</value>
</data>
<data name="StartupDisabledByUser" xml:space="preserve">
<value>启动项由用户手动禁用,您需要手动启用才能生效</value>
</data>
<data name="StartupPosition" xml:space="preserve">
<value>启动位置</value>
</data>
Expand Down
8 changes: 7 additions & 1 deletion src/Workspace/Workspace.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
<None Remove="Controls\Settings\AboutSettingSection.xaml" />
<None Remove="Controls\Settings\LaunchTypeSettingSection.xaml" />
<None Remove="Controls\Settings\StartupPositionSettingSection.xaml" />
<None Remove="Controls\Settings\StartupSettingSection.xaml" />
<None Remove="Pages\DynamicPage.xaml" />
<None Remove="Pages\HistoryPage.xaml" />
<None Remove="Pages\HomePage.xaml" />
Expand All @@ -80,7 +81,7 @@
<PackageReference Include="CommunityToolkit.Labs.WinUI.SettingsControls" Version="0.0.17" />
<PackageReference Include="CommunityToolkit.WinUI.UI.Animations" Version="7.1.2" />
<PackageReference Include="CommunityToolkit.WinUI.UI.Controls" Version="7.1.2" />
<PackageReference Include="H.NotifyIcon.WinUI" Version="2.0.97" />
<PackageReference Include="H.NotifyIcon.WinUI" Version="2.0.108" />
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.3.230202101-experimental1" />
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.755" />
<PackageReference Include="PInvoke.User32" Version="0.7.124" />
Expand Down Expand Up @@ -210,6 +211,11 @@
<ItemGroup>
<Folder Include="Properties\" />
</ItemGroup>
<ItemGroup>
<Page Update="Controls\Settings\StartupSettingSection.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<Page Update="Pages\RecommendPage.xaml">
<Generator>MSBuild:Compile</Generator>
Expand Down

0 comments on commit 0f677fd

Please sign in to comment.