├── .gitattributes
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ ├── config.yml
│ └── feature_request.yml
├── PULL_REQUEST_TEMPLATE
│ └── localization_request.md
├── profile
│ └── README.md
└── workflows
│ ├── Badge.yml
│ └── SophiApp.yml
├── .gitignore
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── Download_SophiApp.ps1
├── LICENSE
├── Misc
└── Microsoft.HEVCVideoExtension_2.0.51121.0_x64__8wekyb3d8bbwe.Appx
├── README.md
├── README_it-it.md
├── README_ru-ru.md
├── README_uk-ua.md
├── ReleaseNotesTemplate.md
├── img
├── 0.gif
├── 1.png
├── 2.png
├── 3.png
├── 4.png
├── 5.png
├── Toasts.png
├── get-it-on-github.svg
├── heart.svg
├── reddit.svg
├── search.gif
├── sophiapp_big.svg
└── theme.gif
├── sophiapp_versions.json
└── src
├── .vsconfig
└── SophiApp
├── .editorconfig
├── App.manifest
├── App.xaml
├── App.xaml.cs
├── Assets
├── AppLogo.svg
├── AppLogoBig.svg
├── Discord.svg
├── Folder.svg
├── GitHub.svg
├── Info.svg
├── LinkedIn.svg
├── LockScreenLogo.scale-200.png
├── SophiApp.ico
├── SplashScreen.scale-200.png
├── Square150x150Logo.scale-200.png
├── Square44x44Logo.scale-200.png
├── Square44x44Logo.targetsize-24_altform-unplated.png
├── StoreLogo.png
├── Telegram.svg
├── Wide310x150Logo.scale-200.png
└── Windows.svg
├── Behaviors
├── NavigationViewHeaderBehavior.cs
└── NavigationViewHeaderMode.cs
├── Contracts
├── Services
│ ├── IAppNotificationService.cs
│ ├── IAppxPackagesService.cs
│ ├── ICommonDataService.cs
│ ├── ICursorsService.cs
│ ├── IDefenderService.cs
│ ├── IDiskService.cs
│ ├── IDisplayService.cs
│ ├── IFileService.cs
│ ├── IFirewallService.cs
│ ├── IGroupPolicyService.cs
│ ├── IHttpService.cs
│ ├── IInitializeService.cs
│ ├── IInstrumentationService.cs
│ ├── ILoggerService.cs
│ ├── IModelService.cs
│ ├── INavigationService.cs
│ ├── INavigationViewService.cs
│ ├── IOsService.cs
│ ├── IPageService.cs
│ ├── IPowerShellService.cs
│ ├── IProcessService.cs
│ ├── IRegistryService.cs
│ ├── IRequirementsService.cs
│ ├── IScheduledTaskService.cs
│ ├── ISettingsService.cs
│ ├── IThemesService.cs
│ ├── IUpdateService.cs
│ ├── IUriService.cs
│ └── IXmlService.cs
└── ViewModels
│ └── INavigationAware.cs
├── ControlTemplates
├── ContentBlock.xaml
├── ContentBlock.xaml.cs
├── ExpandingCheckBox.xaml
├── ExpandingCheckBox.xaml.cs
├── ExpandingRadioGroup.xaml
├── ExpandingRadioGroup.xaml.cs
├── IconHyperlink.xaml
├── IconHyperlink.xaml.cs
├── MadeForWindows.xaml
├── MadeForWindows.xaml.cs
├── SquareCheckBox.xaml
├── SquareCheckBox.xaml.cs
├── TeamMateLink.xaml
├── TeamMateLink.xaml.cs
├── TextCheckBox.xaml
├── TextCheckBox.xaml.cs
├── UwpAppCheckBox.xaml
└── UwpAppCheckBox.xaml.cs
├── Converters
└── StringToVisibility.cs
├── Customizations
├── Accessors.cs
└── Mutators.cs
├── Extensions
├── ConcurrentBagExtensions.cs
├── FrameExtensions.cs
├── IntExtensions.cs
├── JsonExtensions.cs
├── ProcessExtensions.cs
├── RegistryKeyExtensions.cs
├── ResourceExtensions.cs
├── ServiceControllerExtensions.cs
├── StringExtensions.cs
└── UserControlExtensions.cs
├── Helpers
├── AppVersionWrapper.cs
├── ContextMenuHelper.cs
├── ElementThemeWrapper.cs
├── EnvironmentHelper.cs
├── FontOptions.cs
├── NavigationHelper.cs
├── OsProperties.cs
├── RequirementsFailure.cs
├── RuntimeHelper.cs
├── TitleBarHelper.cs
├── UICategoryTags.cs
├── UIDataTemplateSelector.cs
└── UIModelType.cs
├── MainWindow.xaml
├── MainWindow.xaml.cs
├── Models
├── LocalSettingsOptions.cs
├── MsTerminalSettingsDto.cs
├── UICheckBoxModel.cs
├── UIExpandingCheckBoxModel.cs
├── UIExpandingRadioGroupModel.cs
├── UIModel.cs
├── UIModelDto.cs
├── UIRadioGroupItemModel.cs
├── UISquareCheckBoxModel.cs
└── UIUwpAppModel.cs
├── Package.appinstaller
├── Package.appxmanifest
├── Properties
├── Resources.Designer.cs
├── Resources.resx
└── launchsettings.json
├── Services
├── AppNotificationService.cs
├── AppxPackagesService.cs
├── CommonDataService.cs
├── CursorsService.cs
├── DefenderService.cs
├── DiskService.cs
├── DisplayService.cs
├── FileService.cs
├── FirewallService.cs
├── GroupPolicyService.cs
├── HttpService.cs
├── InitializeService.cs
├── InstrumentationService.cs
├── LoggerService.cs
├── ModelService.cs
├── NavigationService.cs
├── NavigationViewService.cs
├── OsService.cs
├── PageService.cs
├── PowerShellService.cs
├── ProcessService.cs
├── RegistryService.cs
├── RequirementsService.cs
├── ScheduledTaskService.cs
├── SettingsService.cs
├── ThemesService.cs
├── UpdateService.cs
├── UriService.cs
└── XmlService.cs
├── SophiApp.csproj
├── SophiApp.sln
├── Strings
└── en-us
│ └── Resources.resw
├── Styles
├── Border.xaml
├── Button.xaml
├── CheckBox.xaml
├── Expander.xaml
├── FontSizes.xaml
├── Image.xaml
├── ScrollView.xaml
├── TextBlock.xaml
├── Themes.xaml
├── Thickness.xaml
└── ToggleButton.xaml
├── UIMarkup
└── UIMarkup.json
├── Usings.cs
├── ViewModels
├── ContextMenuViewModel.cs
├── FatalErrorViewModel.cs
├── LogViewModel.cs
├── PersonalizationViewModel.cs
├── PrivacyViewModel.cs
├── ProVersionViewModel.cs
├── RequirementsFailureViewModel.cs
├── SearchViewModel.cs
├── SecurityViewModel.cs
├── SettingsViewModel.cs
├── ShellViewModel.cs
├── StartupViewModel.cs
├── SystemViewModel.cs
├── TaskSchedulerViewModel.cs
└── UwpViewModel.cs
├── Views
├── ContextMenuPage.xaml
├── ContextMenuPage.xaml.cs
├── FatalErrorPage.xaml
├── FatalErrorPage.xaml.cs
├── LogPage.xaml
├── LogPage.xaml.cs
├── PersonalizationPage.xaml
├── PersonalizationPage.xaml.cs
├── PrivacyPage.xaml
├── PrivacyPage.xaml.cs
├── ProVersionPage.xaml
├── ProVersionPage.xaml.cs
├── RequirementsFailurePage.xaml
├── RequirementsFailurePage.xaml.cs
├── SearchPage.xaml
├── SearchPage.xaml.cs
├── SecurityPage.xaml
├── SecurityPage.xaml.cs
├── SettingsPage.xaml
├── SettingsPage.xaml.cs
├── ShellPage.xaml
├── ShellPage.xaml.cs
├── StartupPage.xaml
├── StartupPage.xaml.cs
├── SystemPage.xaml
├── SystemPage.xaml.cs
├── TaskSchedulerPage.xaml
├── TaskSchedulerPage.xaml.cs
├── UwpPage.xaml
└── UwpPage.xaml.cs
└── stylecop.json
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Discord
4 | url: https://discord.gg/sSryhaEv79
5 | about: Sophia Community
6 |
7 | - name: Telegram
8 | url: https://t.me/sophia_chat
9 | about: Sophia Chat
10 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
1 | name: Feature Request ⭐
2 | description: An idea to make SophiApp better
3 | labels: enhancement
4 | body:
5 | - type: textarea
6 | attributes:
7 | label: Your Idea
8 | description: If you have an idea to improve SophiApp, describe it clearly.
9 | - type: input
10 | id: sophiapp-version
11 | attributes:
12 | label: SophiApp Version
13 | description: Which version of SophiApp are you using? The version number can be found in the Settings
14 | placeholder: e.g. 1.0.0.45
15 | - type: input
16 | attributes:
17 | label: Windows Version
18 | description: Which version of Windows are you using? Press Win + Pause/Break to open the page to copy from.
19 | placeholder: e.g. Windows 11 21H2 22000.527
20 | validations:
21 | required: true
22 | - type: textarea
23 | attributes:
24 | label: Comments
25 | description: Additional information or screenshots.
26 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE/localization_request.md:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/.github/profile/README.md:
--------------------------------------------------------------------------------
1 | # 📌 Socials
2 |
3 |
4 |
5 |
6 | # ♥️ SophiApp Contributors
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.github/workflows/Badge.yml:
--------------------------------------------------------------------------------
1 | name: Badge
2 |
3 | on:
4 | push:
5 | branches:
6 | - master
7 | # Trigger Action for a new release only
8 | # tags:
9 | # - '*.*.*'
10 |
11 | jobs:
12 | update-badges:
13 | name: Update Badges
14 | runs-on: windows-latest
15 | steps:
16 | - name: Checkout Repository
17 | uses: actions/checkout@main
18 | - name: Download cloc
19 | run: |
20 | $Token = "${{ secrets.GITHUB_TOKEN }}"
21 | $Headers = @{
22 | Accept = "application/json"
23 | Authorization = "Bearer $Token"
24 | }
25 | $Parameters = @{
26 | Uri = "https://api.github.com/repos/AlDanial/cloc/releases/latest"
27 | Headers = $Headers
28 | UseBasicParsing = $true
29 | Verbose = $true
30 | }
31 | $Tag = (Invoke-RestMethod @Parameters).tag_name.replace("v", "")
32 |
33 | $Parameters = @{
34 | Uri = "https://github.com/AlDanial/cloc/releases/download/v$Tag/cloc-$Tag.exe"
35 | OutFile = "$PSScriptRoot\cloc.exe"
36 | UseBasicParsing = $true
37 | Verbose = $true
38 | }
39 | Invoke-WebRequest @Parameters
40 |
41 | - name: Get the Numbers
42 | run: |
43 | $JSON = & "$PSScriptRoot\cloc.exe" "src/SophiApp" --exclude-list-file=".clocignore" --json | ConvertFrom-Json
44 | $blank = $JSON.SUM.blank
45 | $comment = $JSON.SUM.comment
46 | $code = $JSON.SUM.code
47 | # "$((($blank + $comment + $code)/1000).ToString("#.#").replace(",", "."))k"
48 | $Summary = ("{0:N1}k" -f (($blank + $comment + $code)/1000)).replace(",", ".")
49 |
50 | Write-Verbose -Message ($blank + $comment + $code) -Verbose
51 |
52 | echo "CODE_LINES=$Summary" >> $env:GITHUB_ENV
53 |
54 | - name: Writing to Gist
55 | uses: schneegans/dynamic-badges-action@master
56 | with:
57 | auth: ${{ secrets.GIST_SophiApp }}
58 | gistID: c9f6b02ff4037050dcaade30c574bac7
59 | filename: SophiApp.json
60 | label: Lines of Code
61 | message: ${{ env.CODE_LINES }}
62 | namedLogo: C Sharp
63 | color: brightgreen
64 |
--------------------------------------------------------------------------------
/Download_SophiApp.ps1:
--------------------------------------------------------------------------------
1 | <#
2 | .SYNOPSIS
3 | Download the latest SophiApp version
4 |
5 | .EXAMPLE Download the latest SophiApp version
6 | irm app.sophi.app | iex
7 | #>
8 | [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
9 |
10 | if ((Get-Location).Path -eq $env:USERPROFILE)
11 | {
12 | $DownloadsFolder = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{374DE290-123F-4565-9164-39C4925E467B}"
13 | }
14 | elseif ((Get-Location).Path -eq "$env:SystemRoot\System32")
15 | {
16 | $DownloadsFolder = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{374DE290-123F-4565-9164-39C4925E467B}"
17 | }
18 | else
19 | {
20 | $DownloadsFolder = (Get-Location).Path
21 | }
22 |
23 | $Parameters = @{
24 | Uri = "https://raw.githubusercontent.com/Sophia-Community/SophiApp/master/sophiapp_versions.json"
25 | UseBasicParsing = $true
26 | }
27 | $LatestRelease = (Invoke-RestMethod @Parameters).SophiApp_release
28 | $Parameters = @{
29 | Uri = "https://github.com/Sophia-Community/SophiApp/releases/download/$LatestRelease/SophiApp.zip"
30 | OutFile = "$DownloadsFolder\SophiApp.zip"
31 | UseBasicParsing = $true
32 | Verbose = $true
33 | }
34 | Invoke-WebRequest @Parameters
35 |
36 | $Parameters = @{
37 | Path = "$DownloadsFolder\SophiApp.zip"
38 | DestinationPath = "$DownloadsFolder"
39 | Force = $true
40 | }
41 | Expand-Archive @Parameters
42 |
43 | Remove-Item -Path "$DownloadsFolder\SophiApp.zip" -Force
44 | Start-Sleep -Second 1
45 | Invoke-Item -Path "$DownloadsFolder\SophiApp"
46 |
47 | $SetForegroundWindow = @{
48 | Namespace = "WinAPI"
49 | Name = "ForegroundWindow"
50 | Language = "CSharp"
51 | MemberDefinition = @"
52 | [DllImport("user32.dll")]
53 | public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
54 | [DllImport("user32.dll")]
55 | [return: MarshalAs(UnmanagedType.Bool)]
56 | public static extern bool SetForegroundWindow(IntPtr hWnd);
57 | "@
58 | }
59 | if (-not ("WinAPI.ForegroundWindow" -as [type]))
60 | {
61 | Add-Type @SetForegroundWindow
62 | }
63 |
64 | Start-Sleep -Seconds 1
65 |
66 | Get-Process -Name explorer | Where-Object -FilterScript {$_.MainWindowTitle -eq "SophiApp"} | ForEach-Object -Process {
67 | # Show window, if minimized
68 | [WinAPI.ForegroundWindow]::ShowWindowAsync($_.MainWindowHandle, 5)
69 |
70 | # Force move the console window to the foreground
71 | [WinAPI.ForegroundWindow]::SetForegroundWindow($_.MainWindowHandle)
72 | } | Out-Null
73 |
74 | Write-Information -MessageData "" -InformationAction Continue
75 | Write-Verbose -Message "Archive was expanded to `"$DownloadsFolder\SophiApp`"" -Verbose
76 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Sophia Community
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Misc/Microsoft.HEVCVideoExtension_2.0.51121.0_x64__8wekyb3d8bbwe.Appx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/Misc/Microsoft.HEVCVideoExtension_2.0.51121.0_x64__8wekyb3d8bbwe.Appx
--------------------------------------------------------------------------------
/ReleaseNotesTemplate.md:
--------------------------------------------------------------------------------
1 | [](https://t.me/SophiaNews) [](https://t.me/Sophia_Chat) [](https://discord.gg/sSryhaEv79)
2 |
3 | # [Donate](https://github.com/Sophia-Community/SophiApp#donations)
4 |
5 | ## NewVersion — CurrentDate
6 |
7 | Diff from vOldVersion
8 | [OldVersion...NewVersion](https://github.com/Sophia-Community/SophiApp/compare/OldVersion...NewVersion)
9 |
10 |
11 |
12 | SophiApp.zip SHA256 ([hash](html_url#step:10:23)): `SHA256_hash`
13 |
--------------------------------------------------------------------------------
/img/0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/img/0.gif
--------------------------------------------------------------------------------
/img/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/img/1.png
--------------------------------------------------------------------------------
/img/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/img/2.png
--------------------------------------------------------------------------------
/img/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/img/3.png
--------------------------------------------------------------------------------
/img/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/img/4.png
--------------------------------------------------------------------------------
/img/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/img/5.png
--------------------------------------------------------------------------------
/img/Toasts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/img/Toasts.png
--------------------------------------------------------------------------------
/img/heart.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/img/reddit.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/img/search.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/img/search.gif
--------------------------------------------------------------------------------
/img/theme.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/img/theme.gif
--------------------------------------------------------------------------------
/sophiapp_versions.json:
--------------------------------------------------------------------------------
1 | {
2 | "SophiApp_release": "1.0.94",
3 | "SophiApp_pre_release": "1.0.94"
4 | }
5 |
--------------------------------------------------------------------------------
/src/.vsconfig:
--------------------------------------------------------------------------------
1 | {
2 | "version": "1.0",
3 | "components": [
4 | "Microsoft.Component.MSBuild",
5 | "Microsoft.NetCore.Component.Runtime.7.0",
6 | "Microsoft.NetCore.Component.SDK",
7 | "Microsoft.VisualStudio.Component.ManagedDesktop.Core",
8 | "Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites",
9 | "Microsoft.VisualStudio.Component.NuGet",
10 | "Microsoft.VisualStudio.Component.Windows10SDK.19041",
11 | "Microsoft.VisualStudio.Component.Windows10SDK",
12 | "Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging",
13 | "Microsoft.VisualStudio.ComponentGroup.WindowsAppSDK.Cs",
14 | "Microsoft.VisualStudio.Workload.ManagedDesktop"
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/src/SophiApp/App.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | true/PM
12 | PerMonitorV2, PerMonitor
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/SophiApp/App.xaml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/SophiApp/Assets/AppLogo.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/SophiApp/Assets/Discord.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/SophiApp/Assets/Folder.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/SophiApp/Assets/GitHub.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/SophiApp/Assets/Info.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/SophiApp/Assets/LinkedIn.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/SophiApp/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/src/SophiApp/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/src/SophiApp/Assets/SophiApp.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/src/SophiApp/Assets/SophiApp.ico
--------------------------------------------------------------------------------
/src/SophiApp/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/src/SophiApp/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/src/SophiApp/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/src/SophiApp/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/src/SophiApp/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/src/SophiApp/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/src/SophiApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/src/SophiApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/src/SophiApp/Assets/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/src/SophiApp/Assets/StoreLogo.png
--------------------------------------------------------------------------------
/src/SophiApp/Assets/Telegram.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/SophiApp/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Sophia-Community/SophiApp/d464a789de813e7512c2aa101fe5c297f5712f21/src/SophiApp/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/src/SophiApp/Assets/Windows.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/SophiApp/Behaviors/NavigationViewHeaderMode.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Behaviors;
6 |
7 | ///
8 | /// Navigation View header mode.
9 | ///
10 | public enum NavigationViewHeaderMode
11 | {
12 | Always,
13 | Never,
14 | Minimal,
15 | }
16 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/IAppNotificationService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services;
6 |
7 | ///
8 | /// A service for working with toast notifications API.
9 | ///
10 | public interface IAppNotificationService
11 | {
12 | ///
13 | /// Get Windows Action Center and Windows Script Host status and enabling notifications.
14 | ///
15 | void EnableToastNotification();
16 |
17 | ///
18 | /// Register the app by as a toast sender.
19 | ///
20 | /// Name of the app to be registered.
21 | void RegisterAsToastSender(string name);
22 |
23 | ///
24 | /// Register Windows cleanup protocol to run via toast notification.
25 | ///
26 | void RegisterCleanupProtocolAsToastSender();
27 |
28 | ///
29 | /// Show the toast notification.
30 | ///
31 | /// Toast payload.
32 | void Show(string payload);
33 |
34 | ///
35 | /// Unregister Windows cleanup protocol to run via toast notification.
36 | ///
37 | void UnregisterCleanupProtocol();
38 | }
39 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/IAppxPackagesService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services
6 | {
7 | using SophiApp.Models;
8 | using Windows.ApplicationModel;
9 |
10 | ///
11 | /// A service for working with appx packages API.
12 | ///
13 | public interface IAppxPackagesService
14 | {
15 | ///
16 | /// Checks that the package is installed.
17 | ///
18 | /// The Id of the package being checked, not to be confused with the package Display name.
19 | /// Search in installed packages for all users or only for the current user.
20 | bool PackageExist(string packageIdName, bool forAllUser = false);
21 |
22 | ///
23 | /// Retrieves information about a appx packages.
24 | ///
25 | /// Get collection of UWP for all users, otherwise only for the current user.
26 | List GetPackages(bool forAllUsers = false);
27 |
28 | ///
29 | /// Removes appx package.
30 | ///
31 | /// The appx package identity name.
32 | /// Remove a package for all users or current user only.
33 | void RemovePackage(string packageName, bool forAllUsers);
34 |
35 | ///
36 | /// Installs the appx application using the file.
37 | ///
38 | /// Path to the appx installation file.
39 | Task InstallFromFileAsync(string appxPath);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/ICommonDataService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services
6 | {
7 | using SophiApp.Helpers;
8 |
9 | ///
10 | /// A service for transferring app data between DI layers.
11 | ///
12 | public interface ICommonDataService
13 | {
14 | ///
15 | /// Gets the url with the version of the app.
16 | ///
17 | string AppVersionUrl { get; }
18 |
19 | ///
20 | /// Gets the url to download the new release of the app.
21 | ///
22 | string AppReleaseUrl { get; }
23 |
24 | ///
25 | /// Gets a value indicating whether the OS is Windows 11.
26 | ///
27 | bool IsWindows11 { get; }
28 |
29 | ///
30 | /// Gets a values of OS properties.
31 | ///
32 | OsProperties OsProperties { get; }
33 |
34 | ///
35 | /// Gets or sets malware name detected by .
36 | ///
37 | string DetectedMalware { get; set; }
38 |
39 | ///
40 | /// Gets or sets a value indicating whether Microsoft Defender controlled folder access state.
41 | ///
42 | bool DefenderControlledFolderAccess { get; set; }
43 |
44 | ///
45 | /// Gets or sets Microsoft Defender missing files name.
46 | ///
47 | string DefenderFileMissing { get; set; }
48 |
49 | ///
50 | /// Gets or sets Microsoft Defender broken service name.
51 | ///
52 | string DefenderServiceBroken { get; set; }
53 |
54 | ///
55 | /// Gets or sets a value indicating whether Microsoft Defender preference state.
56 | ///
57 | bool DefenderMpPreferenceBroken { get; set; }
58 |
59 | ///
60 | /// Gets or sets a value indicating whether Microsoft Defender enabled state.
61 | ///
62 | bool DefenderEnabled { get; set; }
63 |
64 | ///
65 | /// Gets app version.
66 | ///
67 | Version AppVersion { get; }
68 |
69 | ///
70 | /// Initialize data.
71 | ///
72 | void Initialize();
73 |
74 | ///
75 | /// Gets app name and version.
76 | ///
77 | string GetFullName();
78 |
79 | ///
80 | /// Gets the code name of the application build.
81 | ///
82 | string GetBuildName();
83 |
84 | ///
85 | /// Gets app name and version delimiter.
86 | ///
87 | string GetDelimiter();
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/ICursorsService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services
6 | {
7 | ///
8 | /// A service for working with Windows cursors API.
9 | ///
10 | public interface ICursorsService
11 | {
12 | ///
13 | /// Reload cursors on-the-fly.
14 | ///
15 | void ReloadCursors();
16 |
17 | ///
18 | /// Set "Windows 11 Cursors Concept v2 from Jepri Creations" dark scheme.
19 | ///
20 | void SetJepriCreationsDarkCursors();
21 |
22 | ///
23 | /// Set "Windows 11 Cursors Concept v2 from Jepri Creations" light scheme.
24 | ///
25 | void SetJepriCreationsLightCursors();
26 |
27 | ///
28 | /// Set Windows cursors to default scheme.
29 | ///
30 | void SetDefaultCursors();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/IDefenderService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services
6 | {
7 | using CSharpFunctionalExtensions;
8 |
9 | ///
10 | /// A service for working with Microsoft Defender API.
11 | ///
12 | public interface IDefenderService
13 | {
14 | ///
15 | /// Get a Microsoft Defender state.
16 | ///
17 | public Result GetState();
18 |
19 | ///
20 | /// Turn on Microsoft Defender controlled folder.
21 | ///
22 | public void EnableControlledFolder();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/IDiskService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services
6 | {
7 | ///
8 | /// A service for working with disk API.
9 | ///
10 | public interface IDiskService
11 | {
12 | ///
13 | /// Gets volume labels of all disks.
14 | ///
15 | IEnumerable GetVolumeLabels();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/IDisplayService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services
6 | {
7 | using Microsoft.UI.Windowing;
8 |
9 | ///
10 | /// A service for working with display API.
11 | ///
12 | public interface IDisplayService
13 | {
14 | ///
15 | /// Get the that shows the app .
16 | ///
17 | Task GetDisplayAreaAsync();
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/IFileService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services;
6 |
7 | using System.Text;
8 |
9 | ///
10 | /// A service for working with file API.
11 | ///
12 | public interface IFileService
13 | {
14 | ///
15 | /// Reads and return deserialize objects from json file.
16 | ///
17 | /// The data type returned from the file.
18 | /// The path to the file to be read.
19 | /// File name.
20 | T? ReadFromJson(string folderPath, string fileName);
21 |
22 | ///
23 | /// Serialize and save the data to json file.
24 | ///
25 | /// The type of data saved to the file.
26 | /// Path to the file to be saved.
27 | /// File name.
28 | /// Data to save to a file.
29 | void SaveToJson(string folderPath, string fileName, T content);
30 |
31 | ///
32 | /// Create a path, if it does not exist, and save data to a file.
33 | ///
34 | /// The file to write to.
35 | /// The lines to write to the file.
36 | /// Represents a character encoding.
37 | void Save(string file, string content, Encoding encoding);
38 | }
39 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/IFirewallService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services
6 | {
7 | using NetFwTypeLib;
8 |
9 | ///
10 | /// A service for working with Windows firewall API.
11 | ///
12 | public interface IFirewallService
13 | {
14 | ///
15 | /// Gets firewall group rules using the group name.
16 | ///
17 | /// The name of group to search rules.
18 | IEnumerable GetGroupRules(string groupName);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/IHttpService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services
6 | {
7 | ///
8 | /// A service for working with HTTP API.
9 | ///
10 | public interface IHttpService
11 | {
12 | ///
13 | /// Downloads and saves file. If the file exists, it will be overwritten.
14 | ///
15 | /// File download link.
16 | /// File save path.
17 | void DownloadFile(string url, string saveTo);
18 |
19 | ///
20 | /// Downloads HEVC appx.
21 | ///
22 | /// Full path to save the file.
23 | Task DownloadHEVCAppxAsync(string fileName);
24 |
25 | ///
26 | /// Throws exception if url unavailable.
27 | ///
28 | /// Url to check availability.
29 | void ThrowIfOffline(string url = "https://google.com");
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/IInitializeService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services;
6 |
7 | ///
8 | /// A service for working with app services data.
9 | ///
10 | public interface IInitializeService
11 | {
12 | ///
13 | /// Initializes the app services data.
14 | ///
15 | /// App launch arguments.
16 | Task InitializeAsync(object args);
17 | }
18 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/IInstrumentationService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services
6 | {
7 | using System.Diagnostics;
8 | using System.Management;
9 | using SophiApp.Helpers;
10 |
11 | ///
12 | /// A service for working with WMI API.
13 | ///
14 | public interface IInstrumentationService
15 | {
16 | ///
17 | /// Indicates that the DAC used in the video adapter is external type.
18 | ///
19 | bool IsExternalDACType();
20 |
21 | ///
22 | /// Defines the use of the virtual machine.
23 | ///
24 | bool IsVirtualMachine();
25 |
26 | ///
27 | /// Get the properties of the Win32_OperatingSystem class.
28 | ///
29 | OsProperties GetOsPropertiesOrDefault();
30 |
31 | ///
32 | /// Get UWP apps management.
33 | ///
34 | ManagementObject? GetUwpAppsManagementOrDefault();
35 |
36 | ///
37 | /// Get the owner of the process.
38 | ///
39 | /// The process for which to find an owner.
40 | string GetProcessOwnerOrDefault(Process? process);
41 |
42 | ///
43 | /// Get data from the AntiVirusProduct class.
44 | ///
45 | List GetAntivirusProductsOrDefault();
46 |
47 | ///
48 | /// Get power plan names.
49 | ///
50 | List GetPowerPlanNames();
51 |
52 | ///
53 | /// Get user account SID.
54 | ///
55 | /// A user name.
56 | string GetUserSid(string name);
57 |
58 | ///
59 | /// Get Microsoft Defender antispyware enabled property value.
60 | ///
61 | bool GetAntiSpywareEnabled();
62 |
63 | ///
64 | /// Get the processor virtualization state.
65 | ///
66 | bool? CpuVirtualizationFirmwareIsEnabled();
67 |
68 | ///
69 | /// Get Windows Hyper-V present state.
70 | ///
71 | bool? HypervisorIsPresent();
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/IModelService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services
6 | {
7 | using System.Collections.Concurrent;
8 | using SophiApp.Models;
9 |
10 | ///
11 | /// A service for working with using MVVM pattern.
12 | ///
13 | public interface IModelService
14 | {
15 | ///
16 | /// Using the file "UIMarkup.json" creates a collection of types.
17 | ///
18 | Task> BuildJsonModelsAsync();
19 |
20 | ///
21 | /// Using the creates a UWP collection.
22 | ///
23 | /// Get collection of UWP for all users, otherwise only for the current user.
24 | Task> BuildUwpAppModelsAsync(bool forAllUsers);
25 |
26 | ///
27 | /// Returns models in which contain the specified text.
28 | ///
29 | /// A collection of to search.
30 | /// The text to seek.
31 | Task> GetModelsContainsAsync(ConcurrentBag models, string text);
32 |
33 | ///
34 | /// Using multiple threads to get the state.
35 | ///
36 | /// collection.
37 | Task GetStateAsync(ConcurrentBag models);
38 |
39 | ///
40 | /// Using multiple threads to get the models state.
41 | ///
42 | /// collection.
43 | /// Action to be performed after invoke get state of each model.
44 | Task GetStateAsync(IEnumerable enumerable, Action getStateCallback);
45 |
46 | ///
47 | /// Using multiple threads to set the models state.
48 | ///
49 | /// collection.
50 | /// Action to be performed after invoke set state of each model.
51 | /// Propagates notification that operations should be canceled.
52 | Task SetStateAsync(IEnumerable enumerable, Action setStateCallback, CancellationToken token);
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/INavigationService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services;
6 | using Microsoft.UI.Xaml.Controls;
7 | using Microsoft.UI.Xaml.Navigation;
8 |
9 | ///
10 | /// A service for working with app navigation.
11 | ///
12 | public interface INavigationService
13 | {
14 | ///
15 | /// Represents the method that will handle the Navigated event.
16 | ///
17 | event NavigatedEventHandler Navigated;
18 |
19 | ///
20 | /// Gets or sets instances.
21 | ///
22 | Frame? Frame
23 | {
24 | get; set;
25 | }
26 |
27 | ///
28 | /// Gets a value indicating whether there is at least one entry in back navigation history.
29 | ///
30 | bool CanGoBack
31 | {
32 | get;
33 | }
34 |
35 | ///
36 | /// Navigates to the most recent item in back navigation history.
37 | ///
38 | bool GoBack();
39 |
40 | ///
41 | /// Causes the to load content represented by the specified derived data type.
42 | ///
43 | /// Page to navigate.
44 | /// Parameter passed to the navigation page.
45 | /// Clears the navigation history.
46 | /// Allow to refresh active page.
47 | bool NavigateTo(string pageKey, object? parameter = null, bool clearNavigation = false, bool ignorePageType = false);
48 | }
49 |
--------------------------------------------------------------------------------
/src/SophiApp/Contracts/Services/INavigationViewService.cs:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Team Sophia. All rights reserved.
3 | //
4 |
5 | namespace SophiApp.Contracts.Services;
6 | using Microsoft.UI.Xaml.Controls;
7 |
8 | ///
9 | /// A service for working with app navigation.
10 | ///
11 | public interface INavigationViewService
12 | {
13 | ///
14 | /// Gets collection of menu items.
15 | ///
16 | IList