Compare commits
32 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 |
25 changed files with 594 additions and 88 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>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<ApplicationIcon>wicns.ico</ApplicationIcon>
|
||||
<LangVersion>12</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<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>
|
|
@ -14,6 +14,7 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<ApplicationIcon>wicns.ico</ApplicationIcon>
|
||||
<LangVersion>12</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<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
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Update", "Update\Update.csproj", "{133FF515-D605-4856-BA2E-5841BF47EC2F}"
|
||||
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
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
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}.Release|Any CPU.ActiveCfg = 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
|
||||
EndGlobal
|
||||
|
|
|
@ -3,6 +3,7 @@ using System.ComponentModel;
|
|||
using System.Windows;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Windows.Media;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Nocksoft.IO.ConfigFiles;
|
||||
|
@ -51,6 +52,20 @@ namespace WeeXnes
|
|||
LoadSettings();
|
||||
SaveSettingsHandler.SetupSaveEvents();
|
||||
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()
|
||||
|
|
|
@ -8,13 +8,14 @@ namespace WeeXnes.Core
|
|||
{
|
||||
public class Information
|
||||
{
|
||||
public const string Version = "4.5.2.1";
|
||||
public const string Version = "4.7";
|
||||
public const string EncryptionHash = "8zf5#RdyQ]$4x4_";
|
||||
public const string ApiUrl = "https://api.github.com/repos/weexnes/weexnessuite/releases/latest";
|
||||
}
|
||||
|
||||
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 UpdateVar<string> AppDataPathRPC = 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 DefaultPathKEY = Path.Combine(AppDataPath, "Keys");
|
||||
public static string DefaultPathPlugins = Path.Combine(Environment.CurrentDirectory, "plugins");
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -18,7 +18,8 @@
|
|||
Background="{DynamicResource ApplicationBackgroundBrush}"
|
||||
ExtendsContentIntoTitleBar="True"
|
||||
WindowBackdropType="Mica"
|
||||
WindowStartupLocation="CenterScreen">
|
||||
WindowStartupLocation="CenterScreen"
|
||||
Loaded="MainWindow_OnLoaded">
|
||||
<Grid>
|
||||
|
||||
<Grid.RowDefinitions>
|
||||
|
@ -64,6 +65,7 @@
|
|||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<ui:NavigationStore
|
||||
Name="NavBar"
|
||||
Grid.Column="0"
|
||||
Frame="{Binding ElementName=MainFrame}"
|
||||
SelectedPageIndex="0">
|
||||
|
@ -103,7 +105,8 @@
|
|||
Icon="InprivateAccount24"
|
||||
Name="ButtonProfile"
|
||||
PageTag="Profile"
|
||||
PageType="{x:Type profile:LoginView}"/>
|
||||
PageType="{x:Type profile:LoginView}"
|
||||
Visibility="Collapsed"/>
|
||||
</ui:NavigationStore.Items>
|
||||
<ui:NavigationStore.Footer>
|
||||
<ui:NavigationItem
|
||||
|
|
|
@ -60,7 +60,14 @@ namespace WeeXnes
|
|||
{
|
||||
Environment.Exit(0);
|
||||
}
|
||||
|
||||
|
||||
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
foreach (var plugin in Global.pluginManager.CurrentPlugins)
|
||||
{
|
||||
NavBar.Items.Add(plugin.NavIcon);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
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"
|
||||
Name="ButtonCheckForUpdates"
|
||||
Click="ButtonCheckForUpdates_OnClick"
|
||||
Margin="0,10,0,0">
|
||||
Margin="0,10,0,0"
|
||||
Visibility="Collapsed">
|
||||
<StackPanel>
|
||||
<TextBlock
|
||||
Margin="0,0,0,4"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<Version>4.5.2.1</Version>
|
||||
<Version>4.7</Version>
|
||||
<ProjectGuid>{4B33CEE7-C74D-43B9-B99A-8B273D5195BC}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>WeeXnes</RootNamespace>
|
||||
|
@ -15,7 +15,7 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<ApplicationIcon>wicns.ico</ApplicationIcon>
|
||||
<LangVersion>10</LangVersion>
|
||||
<LangVersion>12</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
|
@ -75,6 +75,7 @@
|
|||
<Compile Include="Core\EncryptorLibrary.cs" />
|
||||
<Compile Include="Core\HandleLaunchArguments.cs" />
|
||||
<Compile Include="Core\LoginLib.cs" />
|
||||
<Compile Include="Core\PluginManager.cs" />
|
||||
<Compile Include="Core\RpcLogEvents.cs" />
|
||||
<Compile Include="Core\SaveSettingsHandler.cs" />
|
||||
<Compile Include="Core\WXFile.cs" />
|
||||
|
@ -110,6 +111,9 @@
|
|||
<Compile Include="Views\PasswordGenerator\SaveToKeyManagerView.xaml.cs">
|
||||
<DependentUpon>SaveToKeyManagerView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\PluginManager\PluginManagerView.xaml.cs">
|
||||
<DependentUpon>PluginManagerView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\ProfileView\InboxView.xaml.cs">
|
||||
<DependentUpon>InboxView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
|
@ -167,6 +171,7 @@
|
|||
<Page Include="Views\PasswordGenerator\PasswordGenView.xaml" />
|
||||
<Page Include="Views\PasswordGenerator\SavePasswordView.xaml" />
|
||||
<Page Include="Views\PasswordGenerator\SaveToKeyManagerView.xaml" />
|
||||
<Page Include="Views\PluginManager\PluginManagerView.xaml" />
|
||||
<Page Include="Views\ProfileView\InboxView.xaml" />
|
||||
<Page Include="Views\ProfileView\LicenseView.xaml" />
|
||||
<Page Include="Views\ProfileView\LoginError.xaml" />
|
||||
|
@ -200,5 +205,11 @@
|
|||
<Content Include="wicns.ico" />
|
||||
<Resource Include="Images\wicon.png" />
|
||||
</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" />
|
||||
</Project>
|
|
@ -13,6 +13,7 @@
|
|||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<LangVersion>12</LangVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
|
|
Loading…
Add table
Reference in a new issue