Compare commits
40 commits
Author | SHA1 | Date | |
---|---|---|---|
e199c426f5 | |||
77ef325085 | |||
c1be81924b | |||
dd3f5782a3 | |||
83c85f932e | |||
9585ab95aa | |||
d698312381 | |||
d9981c025d | |||
3e2ed4b627 | |||
e69218c791 | |||
cd9d8fe20a | |||
a0ae016646 | |||
77250ee7c1 | |||
6846729432 | |||
97f3d31eab | |||
7d937fd89f | |||
025347faf6 | |||
12fbc227a5 | |||
16b21bf005 | |||
e57fef6b57 | |||
5c6b5dff76 | |||
4d937f14eb | |||
c85baa5172 | |||
d05f8db247 | |||
1faad86a8e | |||
09a7ee6dea | |||
![]() |
a0e607d1e3 | ||
f98cdf9b63 | |||
a118f4fe8b | |||
9e8b3b89f8 | |||
6e60333fdf | |||
b832aafa7c | |||
111c511ac9 | |||
55c753dead | |||
5cb3c52ba7 | |||
0d26606d5b | |||
cbe7bfc2be | |||
bff0928b7c | |||
f65057350d | |||
9f96ae1493 |
33 changed files with 715 additions and 103 deletions
140
.forgejo/workflows/dotnet.yaml
Normal file
140
.forgejo/workflows/dotnet.yaml
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
name: Dotnet Build
|
||||||
|
|
||||||
|
on: [push]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: win11
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
|
||||||
|
- name: MSBuild version
|
||||||
|
run: |
|
||||||
|
msbuild -version
|
||||||
|
|
||||||
|
- name: Extract project version
|
||||||
|
run: |
|
||||||
|
$version = Select-String -Path "WeeXnes/WeeXnes.csproj" -Pattern "<Version>(.+?)</Version>" | ForEach-Object {
|
||||||
|
($_ -match "<Version>(.+?)</Version>") | Out-Null
|
||||||
|
$matches[1]
|
||||||
|
}
|
||||||
|
Write-Output "Version extracted: $version"
|
||||||
|
"PROJECT_VERSION=$version" | Out-File -FilePath $Env:GITHUB_ENV -Encoding ASCII -Append
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- name: Test exported version variable
|
||||||
|
run: |
|
||||||
|
Write-Output "The extracted project version is: $env:PROJECT_VERSION"
|
||||||
|
if (-not $env:PROJECT_VERSION) {
|
||||||
|
Write-Error "PROJECT_VERSION variable is not set!"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
- name: Restore Packages
|
||||||
|
run: nuget restore WeeXnes.sln
|
||||||
|
|
||||||
|
- name: Build Solution
|
||||||
|
run: |
|
||||||
|
msbuild WeeXnes.sln /p:DeleteExistingFiles=True /p:platform="Any CPU" /p:configuration="Release"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Packing Zip
|
||||||
|
run: |
|
||||||
|
$zipName = "currentRelease_$env:PROJECT_VERSION.zip"
|
||||||
|
Compress-Archive -Path `
|
||||||
|
WeeXnes\bin\Release\WeeXnes.exe, `
|
||||||
|
WeeXnes\bin\Release\System.Drawing.Common.dll, `
|
||||||
|
WeeXnes\bin\Release\Wpf.Ui.dll, `
|
||||||
|
WeeXnes_UAC\bin\Release\WeeXnes_UAC.exe, `
|
||||||
|
WeeXnes\bin\Release\DiscordRPC.dll, `
|
||||||
|
WeeXnes\bin\Release\Newtonsoft.Json.dll, `
|
||||||
|
Autostart\bin\Release\Autostart.exe, `
|
||||||
|
WXPlugin\bin\Release\WXPlugin.dll, `
|
||||||
|
Update\bin\Release\Update.exe `
|
||||||
|
-CompressionLevel Optimal `
|
||||||
|
-DestinationPath $zipName
|
||||||
|
Write-Output "Created zip: $zipName"
|
||||||
|
|
||||||
|
- name: Prepare release directory
|
||||||
|
run: |
|
||||||
|
mkdir release
|
||||||
|
move currentRelease_$env:PROJECT_VERSION.zip release\
|
||||||
|
|
||||||
|
|
||||||
|
- name: Create Git tag
|
||||||
|
run: |
|
||||||
|
git config user.name "WeeXnes"
|
||||||
|
git config user.email "weexnes@weexnes.dev"
|
||||||
|
git tag $env:PROJECT_VERSION
|
||||||
|
git push origin $env:PROJECT_VERSION
|
||||||
|
|
||||||
|
- name: Upload Release Asset to Forgejo
|
||||||
|
env:
|
||||||
|
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
||||||
|
PROJECT_VERSION: ${{ env.PROJECT_VERSION }}
|
||||||
|
run: |
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
|
||||||
|
$owner = "WeeXnes"
|
||||||
|
$repo = "WeeXnesSuite"
|
||||||
|
$tag = "$env:PROJECT_VERSION"
|
||||||
|
$token = $env:RELEASE_TOKEN
|
||||||
|
$fileName = "currentRelease_$tag.zip"
|
||||||
|
$filePath = "release/$fileName"
|
||||||
|
|
||||||
|
$releaseUrl = "https://git.weexnes.dev/api/v1/repos/$owner/$repo/releases/tags/$tag"
|
||||||
|
try {
|
||||||
|
$release = Invoke-RestMethod -Uri $releaseUrl -Headers @{ Authorization = "token $token" }
|
||||||
|
Write-Host "Found existing release for tag $tag"
|
||||||
|
} catch {
|
||||||
|
Write-Host "Release for tag $tag not found, creating..."
|
||||||
|
$createReleaseUrl = "https://git.weexnes.dev/api/v1/repos/$owner/$repo/releases"
|
||||||
|
$body = @{
|
||||||
|
tag_name = $tag
|
||||||
|
name = $tag
|
||||||
|
draft = $false
|
||||||
|
prerelease = $false
|
||||||
|
} | ConvertTo-Json -Depth 3
|
||||||
|
$release = Invoke-RestMethod -Uri $createReleaseUrl -Headers @{ Authorization = "token $token"; "Content-Type" = "application/json" } -Method Post -Body $body
|
||||||
|
}
|
||||||
|
|
||||||
|
$releaseId = $release.id
|
||||||
|
Write-Host "Release ID: $releaseId"
|
||||||
|
|
||||||
|
$uploadUrl = "https://git.weexnes.dev/api/v1/repos/$owner/$repo/releases/$releaseId/assets?name=$fileName"
|
||||||
|
Write-Host "Uploading asset to $uploadUrl"
|
||||||
|
|
||||||
|
Add-Type -AssemblyName "System.Net.Http"
|
||||||
|
|
||||||
|
$fileBytes = [System.IO.File]::ReadAllBytes($filePath)
|
||||||
|
|
||||||
|
# Use static method to correctly instantiate ByteArrayContent
|
||||||
|
$byteContent = [System.Net.Http.ByteArrayContent]::new($fileBytes)
|
||||||
|
$byteContent.Headers.ContentType = [System.Net.Http.Headers.MediaTypeHeaderValue]::new("application/zip")
|
||||||
|
|
||||||
|
$form = [System.Net.Http.MultipartFormDataContent]::new()
|
||||||
|
$form.Add($byteContent, "attachment", $fileName)
|
||||||
|
|
||||||
|
$client = [System.Net.Http.HttpClient]::new()
|
||||||
|
$client.DefaultRequestHeaders.Authorization = [System.Net.Http.Headers.AuthenticationHeaderValue]::new("token", $token)
|
||||||
|
|
||||||
|
$response = $client.PostAsync($uploadUrl, $form).Result
|
||||||
|
$responseContent = $response.Content.ReadAsStringAsync().Result
|
||||||
|
|
||||||
|
if ($response.IsSuccessStatusCode) {
|
||||||
|
Write-Host "✅ Upload succeeded"
|
||||||
|
} else {
|
||||||
|
Write-Host "❌ Upload failed with status $($response.StatusCode)"
|
||||||
|
Write-Host "Response: $responseContent"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
81
.github/workflows/dotnet-framework.yml
vendored
81
.github/workflows/dotnet-framework.yml
vendored
|
@ -1,81 +0,0 @@
|
||||||
name: .NET Framework
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ "master" ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ "master" ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: windows-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Setup MSBuild
|
|
||||||
uses: microsoft/setup-msbuild@v1
|
|
||||||
|
|
||||||
- name: Setup NuGet
|
|
||||||
uses: NuGet/setup-nuget@v1.1.1
|
|
||||||
|
|
||||||
- name: Navigate to Workspace
|
|
||||||
run: cd $GITHUB_WORKSPACE
|
|
||||||
|
|
||||||
- name: Restore Packages
|
|
||||||
run: nuget restore WeeXnes.sln
|
|
||||||
|
|
||||||
- name: Build Solution
|
|
||||||
run: |
|
|
||||||
msbuild.exe WeeXnes.sln /p:DeleteExistingFiles=True /p:platform="Any CPU" /p:configuration="Release"
|
|
||||||
|
|
||||||
|
|
||||||
- name: Format Xaml to XML
|
|
||||||
run: (gc Weexnes\WeeXnes.csproj) -replace ' ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"', '' | Out-File -encoding ASCII formatted.csproj
|
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
- uses: bbonkr/get-version-action@v1.0.4
|
|
||||||
id: get_version
|
|
||||||
with:
|
|
||||||
project: "formatted.csproj"
|
|
||||||
- name: logging
|
|
||||||
run: |
|
|
||||||
echo "Version=${{ steps.get_version.outputs.version }}"
|
|
||||||
|
|
||||||
- name: Packing Zip
|
|
||||||
run: Compress-Archive
|
|
||||||
D:\a\WeeXnesSuite\WeeXnesSuite\WeeXnes\bin\Release\WeeXnes.exe,
|
|
||||||
D:\a\WeeXnesSuite\WeeXnesSuite\WeeXnes\bin\Release\System.Drawing.Common.dll,
|
|
||||||
D:\a\WeeXnesSuite\WeeXnesSuite\WeeXnes\bin\Release\Wpf.Ui.dll,
|
|
||||||
D:\a\WeeXnesSuite\WeeXnesSuite\WeeXnes_UAC\bin\Release\WeeXnes_UAC.exe,
|
|
||||||
D:\a\WeeXnesSuite\WeeXnesSuite\WeeXnes\bin\Release\DiscordRPC.dll,
|
|
||||||
D:\a\WeeXnesSuite\WeeXnesSuite\WeeXnes\bin\Release\Newtonsoft.Json.dll,
|
|
||||||
D:\a\WeeXnesSuite\WeeXnesSuite\Autostart\bin\Release\Autostart.exe,
|
|
||||||
Update\bin\Release\Update.exe
|
|
||||||
-CompressionLevel Optimal -DestinationPath packed.zip
|
|
||||||
shell: pwsh
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- name: Create Release
|
|
||||||
uses: actions/create-release@v1
|
|
||||||
id: create_release
|
|
||||||
with:
|
|
||||||
draft: false
|
|
||||||
prerelease: false
|
|
||||||
release_name: v${{ steps.get_version.outputs.version }}
|
|
||||||
tag_name: ${{ steps.get_version.outputs.version }}
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
- name: Upload windows artifact
|
|
||||||
uses: actions/upload-release-asset@v1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
with:
|
|
||||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
||||||
asset_path: D:\a\WeeXnesSuite\WeeXnesSuite\packed.zip
|
|
||||||
asset_name: currentRelease_${{ steps.get_version.outputs.version }}.zip
|
|
||||||
asset_content_type: application/zip
|
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
<ApplicationIcon>wicns.ico</ApplicationIcon>
|
<ApplicationIcon>wicns.ico</ApplicationIcon>
|
||||||
|
<LangVersion>12</LangVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
|
33
ExamplePlugin/ExamplePlugin.cs
Normal file
33
ExamplePlugin/ExamplePlugin.cs
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
using System;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using Wpf.Ui.Common;
|
||||||
|
using Wpf.Ui.Controls;
|
||||||
|
using WXPlugin.PluginCore;
|
||||||
|
|
||||||
|
namespace ExamplePlugin
|
||||||
|
{
|
||||||
|
public class ExamplePlugin : IPluginBase
|
||||||
|
{
|
||||||
|
public String Name { get; set; } = "Example Plugin";
|
||||||
|
public String Description { get; set; } = "This is an example plugin.";
|
||||||
|
|
||||||
|
public Page UiPage { get; set; } = new ExampleUi();
|
||||||
|
public NavigationItem NavIcon { get; set; } = new NavigationItem
|
||||||
|
{
|
||||||
|
Content = "Plugin",
|
||||||
|
Icon = SymbolRegular.Syringe20,
|
||||||
|
PageTag = "examplePlugin",
|
||||||
|
PageType = typeof(ExampleUi),
|
||||||
|
};
|
||||||
|
|
||||||
|
public void Execute()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Initialize()
|
||||||
|
{
|
||||||
|
//throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
77
ExamplePlugin/ExamplePlugin.csproj
Normal file
77
ExamplePlugin/ExamplePlugin.csproj
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props"
|
||||||
|
Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')"/>
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{910F0FC8-B73D-449F-ADD7-C6CA147D9F05}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>ExamplePlugin</RootNamespace>
|
||||||
|
<AssemblyName>ExamplePlugin</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="PresentationCore" />
|
||||||
|
<Reference Include="PresentationFramework" />
|
||||||
|
<Reference Include="System"/>
|
||||||
|
<Reference Include="System.Core"/>
|
||||||
|
<Reference Include="System.Data"/>
|
||||||
|
<Reference Include="System.Drawing.Common, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Drawing.Common.6.0.0\lib\net461\System.Drawing.Common.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Xaml" />
|
||||||
|
<Reference Include="System.Xml"/>
|
||||||
|
<Reference Include="WindowsBase" />
|
||||||
|
<Reference Include="Wpf.Ui, Version=2.0.3.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\WPF-UI.2.0.3\lib\net48\Wpf.Ui.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="ExamplePlugin.cs" />
|
||||||
|
<Compile Include="ExampleUi.xaml.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\WXPlugin\WXPlugin.csproj">
|
||||||
|
<Project>{56bfe4e0-0d30-474a-b57b-cf08515ff66e}</Project>
|
||||||
|
<Name>WXPlugin</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Page Include="ExampleUi.xaml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets"/>
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
|
||||||
|
</Project>
|
17
ExamplePlugin/ExampleUi.xaml
Normal file
17
ExamplePlugin/ExampleUi.xaml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<Page x:Class="ExampleUi"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:ExamplePlugin"
|
||||||
|
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="AddRPCView" Height="Auto" Width="Auto"
|
||||||
|
Loaded="ExampleUi_OnLoaded">
|
||||||
|
<Grid>
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock Foreground="White">This is a Test Ui for the Example Plugin</TextBlock>
|
||||||
|
<TextBlock Name="TestLabel" Foreground="White" Text="{Binding LabelContent}"/>
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
</Page>
|
18
ExamplePlugin/ExampleUi.xaml.cs
Normal file
18
ExamplePlugin/ExampleUi.xaml.cs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
using System;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
|
||||||
|
public partial class ExampleUi : Page
|
||||||
|
{
|
||||||
|
private int counter = 0;
|
||||||
|
public ExampleUi()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExampleUi_OnLoaded(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
counter++;
|
||||||
|
TestLabel.Text = counter.ToString();
|
||||||
|
}
|
||||||
|
}
|
35
ExamplePlugin/Properties/AssemblyInfo.cs
Normal file
35
ExamplePlugin/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("ExamplePlugin")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("ExamplePlugin")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2025")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("910F0FC8-B73D-449F-ADD7-C6CA147D9F05")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
5
ExamplePlugin/packages.config
Normal file
5
ExamplePlugin/packages.config
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="System.Drawing.Common" version="6.0.0" targetFramework="net48" />
|
||||||
|
<package id="WPF-UI" version="2.0.3" targetFramework="net48" />
|
||||||
|
</packages>
|
BIN
Images/home.png
Normal file
BIN
Images/home.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 80 KiB |
BIN
Images/password_gen.png
Normal file
BIN
Images/password_gen.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 63 KiB |
BIN
Images/password_manager.png
Normal file
BIN
Images/password_manager.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
BIN
Images/rpc.png
Normal file
BIN
Images/rpc.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 62 KiB |
BIN
Images/settings.png
Normal file
BIN
Images/settings.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 88 KiB |
14
README.md
14
README.md
|
@ -1,5 +1,5 @@
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img width="100" height="100" src="https://cdn.discordapp.com/attachments/741123537582162020/965619554426437732/wicon.png">
|
<img width="100" height="100" src="https://raw.githubusercontent.com/WeeXnes/WeeXnesSuite/master/WeeXnes/Images/wicon.png">
|
||||||
<br>
|
<br>
|
||||||
<img alt="GitHub release (latest by date)" src="https://img.shields.io/github/v/release/WeeXnes/WeeXnesSuite?color=%23702e94">
|
<img alt="GitHub release (latest by date)" src="https://img.shields.io/github/v/release/WeeXnes/WeeXnesSuite?color=%23702e94">
|
||||||
|
|
||||||
|
@ -21,14 +21,14 @@ Uses:
|
||||||
|
|
||||||
<h3 align="center">Encrypted Key Manager and Custom Discord Rich Presence that you can configure for every Process you want</h3>
|
<h3 align="center">Encrypted Key Manager and Custom Discord Rich Presence that you can configure for every Process you want</h3>
|
||||||
<h2>Overview:</h2>
|
<h2>Overview:</h2>
|
||||||
<image src="https://cdn.discordapp.com/attachments/741123537582162020/1117161497269907486/home.png" height="400">
|
<image src="https://raw.githubusercontent.com/WeeXnes/WeeXnesSuite/master/Images/home.png" height="400">
|
||||||
<h2></h2>
|
<h2></h2>
|
||||||
|
|
||||||
|
|
||||||
<h3>Discord Rich Presence</h3>
|
<h3>Discord Rich Presence</h3>
|
||||||
Configurable DiscordRPC for every process you want. It detects if a process is started and starts the Rich Presence you configured for the Process (also has import/export functionality)
|
Configurable DiscordRPC for every process you want. It detects if a process is started and starts the Rich Presence you configured for the Process (also has import/export functionality)
|
||||||
<br>
|
<br>
|
||||||
<image src="https://cdn.discordapp.com/attachments/741123537582162020/1117161498477871225/rpc.png" height="400">
|
<image src="https://raw.githubusercontent.com/WeeXnes/WeeXnesSuite/master/Images/rpc.png" height="400">
|
||||||
<h2></h2>
|
<h2></h2>
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,25 +36,23 @@ Uses:
|
||||||
<h3>Key Manager</h3>
|
<h3>Key Manager</h3>
|
||||||
encrypted key manager with import/export functionality
|
encrypted key manager with import/export functionality
|
||||||
<br>
|
<br>
|
||||||
<image src="https://cdn.discordapp.com/attachments/741123537582162020/1117161497475432650/keys.png" height="400">
|
<image src="https://raw.githubusercontent.com/WeeXnes/WeeXnesSuite/master/Images/password_manager.png" height="400">
|
||||||
<h2></h2>
|
<h2></h2>
|
||||||
|
|
||||||
|
|
||||||
<h3>Password Generator</h3>
|
<h3>Password Generator</h3>
|
||||||
Password Generator. Generated passwords can be quickly saved to the Key Manager
|
Password Generator. Generated passwords can be quickly saved to the Key Manager
|
||||||
<br>
|
<br>
|
||||||
<image src="https://cdn.discordapp.com/attachments/741123537582162020/1117161497714491503/passwordgen.png" height="400">
|
<image src="https://raw.githubusercontent.com/WeeXnes/WeeXnesSuite/master/Images/password_gen.png" height="400">
|
||||||
<h2></h2>
|
<h2></h2>
|
||||||
|
|
||||||
|
|
||||||
<h3>Settings</h3>
|
<h3>Settings</h3>
|
||||||
Settings Showcase
|
Settings Showcase
|
||||||
<br>
|
<br>
|
||||||
<image src="https://cdn.discordapp.com/attachments/741123537582162020/1117161498771468439/settings.png" height="400">
|
<image src="https://raw.githubusercontent.com/WeeXnes/WeeXnesSuite/master/Images/settings.png" height="600">
|
||||||
|
|
||||||
|
|
||||||
coming soon:
|
|
||||||
- Modular Plugin Loader so anyone can extend the functionality of the programm easily
|
|
||||||
|
|
||||||
|
|
||||||
<h2>Supported by: <a href="https://www.jetbrains.com">JetBrains</a></h2>
|
<h2>Supported by: <a href="https://www.jetbrains.com">JetBrains</a></h2>
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
<ApplicationIcon>wicns.ico</ApplicationIcon>
|
<ApplicationIcon>wicns.ico</ApplicationIcon>
|
||||||
|
<LangVersion>12</LangVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
|
16
WXPlugin/PluginCore/IPluginBase.cs
Normal file
16
WXPlugin/PluginCore/IPluginBase.cs
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
using System;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using Wpf.Ui.Controls;
|
||||||
|
|
||||||
|
namespace WXPlugin.PluginCore
|
||||||
|
{
|
||||||
|
public interface IPluginBase
|
||||||
|
{
|
||||||
|
public String Name { get; set; }
|
||||||
|
public String Description { get; set; }
|
||||||
|
public Page UiPage { get; set; }
|
||||||
|
public NavigationItem NavIcon { get; set; }
|
||||||
|
public void Initialize();
|
||||||
|
public void Execute();
|
||||||
|
}
|
||||||
|
}
|
35
WXPlugin/Properties/AssemblyInfo.cs
Normal file
35
WXPlugin/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("WXPlugin")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("WXPlugin")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2025")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("56BFE4E0-0D30-474A-B57B-CF08515FF66E")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
67
WXPlugin/WXPlugin.csproj
Normal file
67
WXPlugin/WXPlugin.csproj
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props"
|
||||||
|
Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')"/>
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{56BFE4E0-0D30-474A-B57B-CF08515FF66E}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>WXPlugin</RootNamespace>
|
||||||
|
<AssemblyName>WXPlugin</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<LangVersion>12</LangVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="PresentationCore" />
|
||||||
|
<Reference Include="PresentationFramework" />
|
||||||
|
<Reference Include="System"/>
|
||||||
|
<Reference Include="System.Core"/>
|
||||||
|
<Reference Include="System.Data"/>
|
||||||
|
<Reference Include="System.Drawing.Common, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Drawing.Common.6.0.0\lib\net461\System.Drawing.Common.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Xml"/>
|
||||||
|
<Reference Include="WindowsBase" />
|
||||||
|
<Reference Include="Wpf.Ui, Version=2.0.3.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\WPF-UI.2.0.3\lib\net48\Wpf.Ui.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="PluginCore\IPluginBase.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets"/>
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
|
||||||
|
</Project>
|
5
WXPlugin/packages.config
Normal file
5
WXPlugin/packages.config
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="System.Drawing.Common" version="6.0.0" targetFramework="net48" />
|
||||||
|
<package id="WPF-UI" version="2.0.3" targetFramework="net48" />
|
||||||
|
</packages>
|
12
WeeXnes.sln
12
WeeXnes.sln
|
@ -8,6 +8,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WeeXnes_UAC", "WeeXnes_UAC\
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Update", "Update\Update.csproj", "{133FF515-D605-4856-BA2E-5841BF47EC2F}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Update", "Update\Update.csproj", "{133FF515-D605-4856-BA2E-5841BF47EC2F}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WXPlugin", "WXPlugin\WXPlugin.csproj", "{56BFE4E0-0D30-474A-B57B-CF08515FF66E}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExamplePlugin", "ExamplePlugin\ExamplePlugin.csproj", "{910F0FC8-B73D-449F-ADD7-C6CA147D9F05}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -30,5 +34,13 @@ Global
|
||||||
{133FF515-D605-4856-BA2E-5841BF47EC2F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{133FF515-D605-4856-BA2E-5841BF47EC2F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{133FF515-D605-4856-BA2E-5841BF47EC2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{133FF515-D605-4856-BA2E-5841BF47EC2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{133FF515-D605-4856-BA2E-5841BF47EC2F}.Release|Any CPU.Build.0 = Release|Any CPU
|
{133FF515-D605-4856-BA2E-5841BF47EC2F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{56BFE4E0-0D30-474A-B57B-CF08515FF66E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{56BFE4E0-0D30-474A-B57B-CF08515FF66E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{56BFE4E0-0D30-474A-B57B-CF08515FF66E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{56BFE4E0-0D30-474A-B57B-CF08515FF66E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{910F0FC8-B73D-449F-ADD7-C6CA147D9F05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{910F0FC8-B73D-449F-ADD7-C6CA147D9F05}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{910F0FC8-B73D-449F-ADD7-C6CA147D9F05}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{910F0FC8-B73D-449F-ADD7-C6CA147D9F05}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
|
@ -3,6 +3,7 @@ using System.ComponentModel;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using Nocksoft.IO.ConfigFiles;
|
using Nocksoft.IO.ConfigFiles;
|
||||||
|
@ -51,6 +52,20 @@ namespace WeeXnes
|
||||||
LoadSettings();
|
LoadSettings();
|
||||||
SaveSettingsHandler.SetupSaveEvents();
|
SaveSettingsHandler.SetupSaveEvents();
|
||||||
LoadFiles();
|
LoadFiles();
|
||||||
|
LoadPluginManager();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadPluginManager()
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(Global.Defaults.DefaultPathPlugins))
|
||||||
|
Directory.CreateDirectory(Global.Defaults.DefaultPathPlugins);
|
||||||
|
|
||||||
|
Global.pluginManager.LoadPlugins();
|
||||||
|
foreach (var plugin in Global.pluginManager.CurrentPlugins)
|
||||||
|
{
|
||||||
|
plugin.Initialize();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CheckUpdatedFiles()
|
private void CheckUpdatedFiles()
|
||||||
|
|
|
@ -8,13 +8,14 @@ namespace WeeXnes.Core
|
||||||
{
|
{
|
||||||
public class Information
|
public class Information
|
||||||
{
|
{
|
||||||
public const string Version = "4.5.1.6";
|
public const string Version = "4.7";
|
||||||
public const string EncryptionHash = "8zf5#RdyQ]$4x4_";
|
public const string EncryptionHash = "8zf5#RdyQ]$4x4_";
|
||||||
public const string ApiUrl = "https://api.github.com/repos/weexnes/weexnessuite/releases/latest";
|
public const string ApiUrl = "https://api.github.com/repos/weexnes/weexnessuite/releases/latest";
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Global
|
public class Global
|
||||||
{
|
{
|
||||||
|
public static PluginManager pluginManager = new PluginManager(Path.Combine(Environment.CurrentDirectory, "plugins"));
|
||||||
public static string AppDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "WeeXnes");
|
public static string AppDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "WeeXnes");
|
||||||
public static UpdateVar<string> AppDataPathRPC = new UpdateVar<string>();
|
public static UpdateVar<string> AppDataPathRPC = new UpdateVar<string>();
|
||||||
public static UpdateVar<string> AppDataPathKEY = new UpdateVar<string>();
|
public static UpdateVar<string> AppDataPathKEY = new UpdateVar<string>();
|
||||||
|
@ -24,6 +25,7 @@ namespace WeeXnes.Core
|
||||||
{
|
{
|
||||||
public static string DefaultPathRPC = Path.Combine(AppDataPath, "RPC");
|
public static string DefaultPathRPC = Path.Combine(AppDataPath, "RPC");
|
||||||
public static string DefaultPathKEY = Path.Combine(AppDataPath, "Keys");
|
public static string DefaultPathKEY = Path.Combine(AppDataPath, "Keys");
|
||||||
|
public static string DefaultPathPlugins = Path.Combine(Environment.CurrentDirectory, "plugins");
|
||||||
}
|
}
|
||||||
public static void ForceClose()
|
public static void ForceClose()
|
||||||
{
|
{
|
||||||
|
|
51
WeeXnes/Core/PluginManager.cs
Normal file
51
WeeXnes/Core/PluginManager.cs
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using WXPlugin.PluginCore;
|
||||||
|
|
||||||
|
namespace WeeXnes.Core;
|
||||||
|
|
||||||
|
public class PluginManager
|
||||||
|
{
|
||||||
|
private HashSet<String> Directories = new HashSet<String>();
|
||||||
|
public HashSet<IPluginBase> CurrentPlugins { get; set; } = new HashSet<IPluginBase>();
|
||||||
|
public PluginManager(String pluginPath)
|
||||||
|
{
|
||||||
|
|
||||||
|
Console.WriteLine("Plugin Manager Initialized");
|
||||||
|
Directories.Add(pluginPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadPlugins()
|
||||||
|
{
|
||||||
|
|
||||||
|
Console.WriteLine("Plugin Manager Loading Plugins");
|
||||||
|
CurrentPlugins = new HashSet<IPluginBase>();
|
||||||
|
foreach (var dir in Directories)
|
||||||
|
{
|
||||||
|
DirectoryInfo dirInfo = new DirectoryInfo(dir);
|
||||||
|
foreach (var file in dirInfo.GetFiles("*.dll"))
|
||||||
|
{
|
||||||
|
Assembly asm = Assembly.LoadFrom(file.FullName);
|
||||||
|
foreach (Type type in asm.GetTypes())
|
||||||
|
{
|
||||||
|
if (type.IsSubclassOf(typeof(IPluginBase)) || type.GetInterfaces().Contains(typeof(IPluginBase)) && type.IsAbstract == false)
|
||||||
|
{
|
||||||
|
IPluginBase newPlugin = type.InvokeMember(
|
||||||
|
null,
|
||||||
|
BindingFlags.CreateInstance,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null)
|
||||||
|
as IPluginBase;
|
||||||
|
Console.WriteLine("Loaded: " + newPlugin.Name);
|
||||||
|
Console.WriteLine(newPlugin.UiPage.Content.ToString());
|
||||||
|
CurrentPlugins.Add(newPlugin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,13 +12,14 @@
|
||||||
xmlns:profile="clr-namespace:WeeXnes.Views.ProfileView"
|
xmlns:profile="clr-namespace:WeeXnes.Views.ProfileView"
|
||||||
xmlns:EncryptedTextEditor="clr-namespace:WeeXnes.Views.EncryptedTextEditor"
|
xmlns:EncryptedTextEditor="clr-namespace:WeeXnes.Views.EncryptedTextEditor"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Height="400"
|
Height="540"
|
||||||
Width="500"
|
Width="500"
|
||||||
Title="WeeXnes"
|
Title="WeeXnes"
|
||||||
Background="{DynamicResource ApplicationBackgroundBrush}"
|
Background="{DynamicResource ApplicationBackgroundBrush}"
|
||||||
ExtendsContentIntoTitleBar="True"
|
ExtendsContentIntoTitleBar="True"
|
||||||
WindowBackdropType="Mica"
|
WindowBackdropType="Mica"
|
||||||
WindowStartupLocation="CenterScreen">
|
WindowStartupLocation="CenterScreen"
|
||||||
|
Loaded="MainWindow_OnLoaded">
|
||||||
<Grid>
|
<Grid>
|
||||||
|
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
@ -64,6 +65,7 @@
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<ui:NavigationStore
|
<ui:NavigationStore
|
||||||
|
Name="NavBar"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Frame="{Binding ElementName=MainFrame}"
|
Frame="{Binding ElementName=MainFrame}"
|
||||||
SelectedPageIndex="0">
|
SelectedPageIndex="0">
|
||||||
|
@ -92,8 +94,7 @@
|
||||||
Name="ButtonPwGen"
|
Name="ButtonPwGen"
|
||||||
PageTag="Gen"
|
PageTag="Gen"
|
||||||
PageType="{x:Type passwordGenerator:PasswordGenView}"/>
|
PageType="{x:Type passwordGenerator:PasswordGenView}"/>
|
||||||
<ui:NavigationItem
|
<ui:NavigationItem
|
||||||
Visibility="Collapsed"
|
|
||||||
Content="Editor"
|
Content="Editor"
|
||||||
Icon="DocumentOnePage24"
|
Icon="DocumentOnePage24"
|
||||||
Name="ButtonEncryptedFileEditor"
|
Name="ButtonEncryptedFileEditor"
|
||||||
|
@ -104,7 +105,8 @@
|
||||||
Icon="InprivateAccount24"
|
Icon="InprivateAccount24"
|
||||||
Name="ButtonProfile"
|
Name="ButtonProfile"
|
||||||
PageTag="Profile"
|
PageTag="Profile"
|
||||||
PageType="{x:Type profile:LoginView}"/>
|
PageType="{x:Type profile:LoginView}"
|
||||||
|
Visibility="Collapsed"/>
|
||||||
</ui:NavigationStore.Items>
|
</ui:NavigationStore.Items>
|
||||||
<ui:NavigationStore.Footer>
|
<ui:NavigationStore.Footer>
|
||||||
<ui:NavigationItem
|
<ui:NavigationItem
|
||||||
|
|
|
@ -23,7 +23,7 @@ namespace WeeXnes
|
||||||
{
|
{
|
||||||
if(!App.DebugMode)
|
if(!App.DebugMode)
|
||||||
return;
|
return;
|
||||||
ButtonEncryptedFileEditor.Visibility = Visibility.Visible;
|
//Code to be enabled in Debug mode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,7 +60,14 @@ namespace WeeXnes
|
||||||
{
|
{
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
foreach (var plugin in Global.pluginManager.CurrentPlugins)
|
||||||
|
{
|
||||||
|
NavBar.Items.Add(plugin.NavIcon);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,31 @@
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:local="clr-namespace:WeeXnes.Views.EncryptedTextEditor"
|
xmlns:local="clr-namespace:WeeXnes.Views.EncryptedTextEditor"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="TextEditorView" Height="450" Width="800">
|
Title="TextEditorView" Height="Auto" Width="Auto">
|
||||||
<Grid>
|
<Grid>
|
||||||
<TextBlock>Under construction</TextBlock>
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="40px"/>
|
||||||
|
<RowDefinition/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid Grid.Row="0">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<Button Name="btn_openFile" Click="Btn_openFile_OnClick" Grid.Column="0" Content="Open File" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5"/>
|
||||||
|
<Button Name="btn_saveFile" Click="Btn_saveFile_OnClick" Grid.Column="1" Content="Save" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5"/>
|
||||||
|
<Button Name="btn_saveFileAs" Click="Btn_saveFileAs_OnClick" Grid.Column="2" Content="Save As" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5"/>
|
||||||
|
</Grid>
|
||||||
|
<RichTextBox Name="rtb_FileEditor" Grid.Row="1">
|
||||||
|
<RichTextBox.Resources>
|
||||||
|
<Style TargetType="{x:Type Paragraph}">
|
||||||
|
<Setter Property="Margin" Value="0"/>
|
||||||
|
</Style>
|
||||||
|
</RichTextBox.Resources>
|
||||||
|
</RichTextBox>
|
||||||
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Page>
|
</Page>
|
||||||
|
|
|
@ -1,11 +1,97 @@
|
||||||
using System.Windows.Controls;
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using EncryptionLib;
|
||||||
|
using WeeXnes.Core;
|
||||||
|
|
||||||
namespace WeeXnes.Views.EncryptedTextEditor;
|
namespace WeeXnes.Views.EncryptedTextEditor;
|
||||||
|
|
||||||
public partial class TextEditorView : Page
|
public partial class TextEditorView : Page
|
||||||
{
|
{
|
||||||
|
public string currentFilePath { get; set; } = null;
|
||||||
public TextEditorView()
|
public TextEditorView()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
private void RaiseClickEvent(System.Windows.Controls.Button button)
|
||||||
|
{
|
||||||
|
var clickEventArgs = new RoutedEventArgs(System.Windows.Controls.Button.ClickEvent);
|
||||||
|
button.RaiseEvent(clickEventArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Btn_openFile_OnClick(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var fileContent = string.Empty;
|
||||||
|
var filePath = string.Empty;
|
||||||
|
|
||||||
|
Console.WriteLine("Calling OpenFileDialog");
|
||||||
|
using (OpenFileDialog openFileDialog = new OpenFileDialog())
|
||||||
|
{
|
||||||
|
//openFileDialog.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;
|
||||||
|
openFileDialog.Filter = "WXN Text Files (*.wtf)|*.wtf";
|
||||||
|
openFileDialog.RestoreDirectory = true;
|
||||||
|
|
||||||
|
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Opening file " + openFileDialog.FileName);
|
||||||
|
this.currentFilePath = openFileDialog.FileName;
|
||||||
|
string[] FileContent = File.ReadAllLines(openFileDialog.FileName);
|
||||||
|
string[] decryptedContent = EncryptorLibary.decryptArray(Information.EncryptionHash, FileContent);
|
||||||
|
rtb_FileEditor.Document.Blocks.Clear();
|
||||||
|
foreach (string line in decryptedContent)
|
||||||
|
{
|
||||||
|
rtb_FileEditor.Document.Blocks.Add(new Paragraph(new Run(line)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void Btn_saveFile_OnClick(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (this.currentFilePath == null)
|
||||||
|
{
|
||||||
|
RaiseClickEvent(btn_saveFileAs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Saving file " + currentFilePath);
|
||||||
|
TextRange textRange = new TextRange(rtb_FileEditor.Document.ContentStart, rtb_FileEditor.Document.ContentEnd);
|
||||||
|
string plainText = textRange.Text;
|
||||||
|
string[] lines = plainText.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
|
||||||
|
string[] encryptedContent =
|
||||||
|
EncryptionLib.EncryptorLibary.encryptArray(Information.EncryptionHash, lines);
|
||||||
|
File.WriteAllLines(this.currentFilePath, encryptedContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Btn_saveFileAs_OnClick(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Calling SaveFileDialog");
|
||||||
|
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
|
||||||
|
{
|
||||||
|
//saveFileDialog.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;
|
||||||
|
saveFileDialog.Filter = "WXN Text Files (*.wtf)|*.wtf";
|
||||||
|
saveFileDialog.RestoreDirectory = true;
|
||||||
|
|
||||||
|
if(saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Saving file " + saveFileDialog.FileName);
|
||||||
|
this.currentFilePath = saveFileDialog.FileName;
|
||||||
|
TextRange textRange = new TextRange(rtb_FileEditor.Document.ContentStart, rtb_FileEditor.Document.ContentEnd);
|
||||||
|
string plainText = textRange.Text;
|
||||||
|
string[] lines = plainText.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
|
||||||
|
string[] encryptedContent =
|
||||||
|
EncryptionLib.EncryptorLibary.encryptArray(Information.EncryptionHash, lines);
|
||||||
|
File.WriteAllLines(saveFileDialog.FileName, encryptedContent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
21
WeeXnes/Views/PluginManager/PluginManagerView.xaml
Normal file
21
WeeXnes/Views/PluginManager/PluginManagerView.xaml
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<Page x:Class="WeeXnes.Views.PluginManager.PluginManagerView"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:WeeXnes.Views.PluginManager"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="PluginManagerView" Height="450" Width="800">
|
||||||
|
<Grid>
|
||||||
|
<ListView ItemsSource="{Binding Plugin}">
|
||||||
|
<ListView.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<StackPanel>
|
||||||
|
<TextBlock Text="{Binding Name}"/>
|
||||||
|
<TextBlock Text="{Binding Description}"/>
|
||||||
|
</StackPanel>
|
||||||
|
</DataTemplate>
|
||||||
|
</ListView.ItemTemplate>
|
||||||
|
</ListView>
|
||||||
|
</Grid>
|
||||||
|
</Page>
|
13
WeeXnes/Views/PluginManager/PluginManagerView.xaml.cs
Normal file
13
WeeXnes/Views/PluginManager/PluginManagerView.xaml.cs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
using System.Windows.Controls;
|
||||||
|
|
||||||
|
|
||||||
|
namespace WeeXnes.Views.PluginManager;
|
||||||
|
|
||||||
|
public partial class PluginManagerView : Page
|
||||||
|
{
|
||||||
|
public PluginManagerView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,7 +17,8 @@
|
||||||
<ui:CardAction Icon="Play28"
|
<ui:CardAction Icon="Play28"
|
||||||
Name="ButtonCheckForUpdates"
|
Name="ButtonCheckForUpdates"
|
||||||
Click="ButtonCheckForUpdates_OnClick"
|
Click="ButtonCheckForUpdates_OnClick"
|
||||||
Margin="0,10,0,0">
|
Margin="0,10,0,0"
|
||||||
|
Visibility="Collapsed">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Margin="0,0,0,4"
|
Margin="0,0,0,4"
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
<Version>4.5.1.6</Version>
|
<Version>4.7</Version>
|
||||||
<ProjectGuid>{4B33CEE7-C74D-43B9-B99A-8B273D5195BC}</ProjectGuid>
|
<ProjectGuid>{4B33CEE7-C74D-43B9-B99A-8B273D5195BC}</ProjectGuid>
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<RootNamespace>WeeXnes</RootNamespace>
|
<RootNamespace>WeeXnes</RootNamespace>
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
<ApplicationIcon>wicns.ico</ApplicationIcon>
|
<ApplicationIcon>wicns.ico</ApplicationIcon>
|
||||||
<LangVersion>10</LangVersion>
|
<LangVersion>12</LangVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
@ -75,6 +75,7 @@
|
||||||
<Compile Include="Core\EncryptorLibrary.cs" />
|
<Compile Include="Core\EncryptorLibrary.cs" />
|
||||||
<Compile Include="Core\HandleLaunchArguments.cs" />
|
<Compile Include="Core\HandleLaunchArguments.cs" />
|
||||||
<Compile Include="Core\LoginLib.cs" />
|
<Compile Include="Core\LoginLib.cs" />
|
||||||
|
<Compile Include="Core\PluginManager.cs" />
|
||||||
<Compile Include="Core\RpcLogEvents.cs" />
|
<Compile Include="Core\RpcLogEvents.cs" />
|
||||||
<Compile Include="Core\SaveSettingsHandler.cs" />
|
<Compile Include="Core\SaveSettingsHandler.cs" />
|
||||||
<Compile Include="Core\WXFile.cs" />
|
<Compile Include="Core\WXFile.cs" />
|
||||||
|
@ -110,6 +111,9 @@
|
||||||
<Compile Include="Views\PasswordGenerator\SaveToKeyManagerView.xaml.cs">
|
<Compile Include="Views\PasswordGenerator\SaveToKeyManagerView.xaml.cs">
|
||||||
<DependentUpon>SaveToKeyManagerView.xaml</DependentUpon>
|
<DependentUpon>SaveToKeyManagerView.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Views\PluginManager\PluginManagerView.xaml.cs">
|
||||||
|
<DependentUpon>PluginManagerView.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="Views\ProfileView\InboxView.xaml.cs">
|
<Compile Include="Views\ProfileView\InboxView.xaml.cs">
|
||||||
<DependentUpon>InboxView.xaml</DependentUpon>
|
<DependentUpon>InboxView.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -167,6 +171,7 @@
|
||||||
<Page Include="Views\PasswordGenerator\PasswordGenView.xaml" />
|
<Page Include="Views\PasswordGenerator\PasswordGenView.xaml" />
|
||||||
<Page Include="Views\PasswordGenerator\SavePasswordView.xaml" />
|
<Page Include="Views\PasswordGenerator\SavePasswordView.xaml" />
|
||||||
<Page Include="Views\PasswordGenerator\SaveToKeyManagerView.xaml" />
|
<Page Include="Views\PasswordGenerator\SaveToKeyManagerView.xaml" />
|
||||||
|
<Page Include="Views\PluginManager\PluginManagerView.xaml" />
|
||||||
<Page Include="Views\ProfileView\InboxView.xaml" />
|
<Page Include="Views\ProfileView\InboxView.xaml" />
|
||||||
<Page Include="Views\ProfileView\LicenseView.xaml" />
|
<Page Include="Views\ProfileView\LicenseView.xaml" />
|
||||||
<Page Include="Views\ProfileView\LoginError.xaml" />
|
<Page Include="Views\ProfileView\LoginError.xaml" />
|
||||||
|
@ -200,5 +205,11 @@
|
||||||
<Content Include="wicns.ico" />
|
<Content Include="wicns.ico" />
|
||||||
<Resource Include="Images\wicon.png" />
|
<Resource Include="Images\wicon.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\WXPlugin\WXPlugin.csproj">
|
||||||
|
<Project>{56bfe4e0-0d30-474a-b57b-cf08515ff66e}</Project>
|
||||||
|
<Name>WXPlugin</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
</Project>
|
</Project>
|
|
@ -13,6 +13,7 @@
|
||||||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
<LangVersion>12</LangVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
|
Loading…
Add table
Reference in a new issue